From f5fd8fb18064d6a4e17a673b61e0f0f42d1115f0 Mon Sep 17 00:00:00 2001 From: sqwk Date: Thu, 18 Aug 2016 11:48:34 +0200 Subject: [PATCH 001/111] Add Paper.js Type Definitions --- paper/paper.d.ts | 4008 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 4008 insertions(+) create mode 100644 paper/paper.d.ts diff --git a/paper/paper.d.ts b/paper/paper.d.ts new file mode 100644 index 0000000000..9fc0c154a1 --- /dev/null +++ b/paper/paper.d.ts @@ -0,0 +1,4008 @@ +// Type definitions for Paper.js v0.9.22 +// Project: http://paperjs.org/ +// Definitions by: Clark Stevenson +// forked from https://github.com/clark-stevenson/paper.d.ts + +declare module 'paper' { + + /** + * The version of Paper.js, as a string. + */ + export var version: string; + + /** + * Gives access to paper's configurable settings. + */ + export var settings: { + + applyMatrix: boolean; + handleSize: number; + hitTolerance: number; + + }; + + /** + * The currently active project. + */ + export var project: Project; + + /** + * The list of all open projects within the current Paper.js context. + */ + export var projects: Project[]; + + /** + * The reference to the active project's view. + * Read Only. + */ + export var view: View; + + /** + * The reference to the active tool. + */ + export var tool: Tool; + + /** + * The list of available tools. + */ + export var tools: Tool[]; + + /** + * Injects the paper scope into any other given scope. Can be used for examle to inject the currently active PaperScope into the window's global scope, to emulate PaperScript-style globally accessible Paper classes and objects + * Please note: Using this method may override native constructors (e.g. Path, RGBColor). This may cause problems when using Paper.js in conjunction with other libraries that rely on these constructors. Keep the library scoped if you encounter issues caused by this. + * @param scope - + */ + export function install(scope: any): void; + + /** + * Sets up an empty project for us. If a canvas is provided, it also creates a View for it, both linked to this scope. + * @param element - the HTML canvas element this scope should be associated with, or an ID string by which to find the element. + */ + export function setup(canvas: HTMLCanvasElement | string): void; + + /** + * Activates this PaperScope, so all newly created items will be placed in its active project. + */ + export function activate(): void; + + /** + * An affine transform performs a linear mapping from 2D coordinates to other 2D coordinates that preserves the "straightness" and "parallelness" of lines. + * Such a coordinate transformation can be represented by a 3 row by 3 column matrix with an implied last row of [ 0 0 1 ]. This matrix transforms source coordinates (x,y) into destination coordinates (x',y') by considering them to be a column vector and multiplying the coordinate vector by the matrix according to the following process: + * This class is optimized for speed and minimizes calculations based on its knowledge of the underlying matrix (as opposed to say simply performing matrix multiplication). + */ + export class Matrix { + + /** + * Creates a 2D affine transform. + * @param a - the a property of the transform + * @param c - the c property of the transform + * @param b - the b property of the transform + * @param d - the d property of the transform + * @param tx - the tx property of the transform + * @param ty - the ty property of the transform + */ + constructor(a: number, c: number, b: number, d: number, tx: number, ty: number); + + /** + * The value that affects the transformation along the x axis when scaling or rotating, positioned at (0, 0) in the transformation matrix. + */ + a: number; + + /** + * The value that affects the transformation along the y axis when rotating or skewing, positioned at (1, 0) in the transformation matrix. + */ + c: number; + + /** + * The value that affects the transformation along the x axis when rotating or skewing, positioned at (0, 1) in the transformation matrix. + */ + b: number; + + /** + * The value that affects the transformation along the y axis when scaling or rotating, positioned at (1, 1) in the transformation matrix. + */ + d: number; + + /** + * The distance by which to translate along the x axis, positioned at (2, 0) in the transformation matrix. + */ + tx: number; + + /** + * The distance by which to translate along the y axis, positioned at (2, 1) in the transformation matrix. + */ + ty: number; + + /** + * The transform values as an array, in the same sequence as they are passed to initialize(a, c,b,d,tx,ty). + * Read only. + */ + values: number; + + /** + * The translation of the matrix as a vector. + * Read only. + */ + translation: Point; + + /** + * The scaling values of the matrix, if it can be decomposed. + * Read only. + */ + scaling: Point; + + /** + * The rotation angle of the matrix, if it can be decomposed. + * Read only. + */ + rotation: number; + + /** + * Sets this transform to the matrix specified by the 6 values. + * @param a - the a property of the transform + * @param c - the c property of the transform + * @param b - the b property of the transform + * @param d - the d property of the transform + * @param tx - the tx property of the transform + * @param ty - the ty property of the transform + */ + set(a: number, c: number, b: number, d: number, tx: number, ty: number): Matrix; + + /** + * Returns a copy of this transform + */ + clone(): Matrix; + + /** + * Checks whether the two matrices describe the same transformation. + * @param matrix - the matrix to compare this matrix to + */ + equals(matrix: Matrix): boolean; + + /** + * returns a string representation of this transform + */ + toString(): string; + + /** + * Resets the matrix by setting its values to the ones of the identity matrix that results in no transformation. + */ + reset(): void; + + /** + * Attempts to apply the matrix to the content of item that it belongs to, meaning its transformation is baked into the item's content or children. + * @param recursively - controls whether to apply transformations recursively on children + */ + apply(): boolean; + + /** + * Concatenates this transform with a translate transformation. + * @param point - the vector to translate by + */ + translate(point: Point): Matrix; + + /** + * Concatenates this transform with a translate transformation. + * @param dx - the distance to translate in the x direction + * @param dy - the distance to translate in the y direction + */ + translate(dx: number, dy: number): Matrix; + + /** + * Concatenates this transform with a scaling transformation. + * @param scale - the scaling factor + * @param center [optional] - the center for the scaling transformation + */ + scale(scale: number, center?: Point): Matrix; + + /** + * Concatenates this transform with a scaling transformation. + * @param hor - the horizontal scaling factor + * @param ver - the vertical scaling factor + * @param center [optional] - the center for the scaling transformation + */ + scale(hor: number, ver: number, center?: Point): Matrix; + + /** + * Concatenates this transform with a rotation transformation around an anchor point. + * @param angle - the angle of rotation measured in degrees + * @param center - the anchor point to rotate around + */ + rotate(angle: number, center: Point): Matrix; + + /** + * Concatenates this transform with a rotation transformation around an anchor point. + * @param angle - the angle of rotation measured in degrees + * @param x - the x coordinate of the anchor point + * @param y - the y coordinate of the anchor point + */ + rotate(angle: number, x: number, y: number): Matrix; + + /** + * Concatenates this transform with a shear transformation. + * @param shear - the shear factor in x and y direction + * @param center [optional] - the center for the shear transformation + */ + shear(shear: Point, center?: Point): Matrix; + + /** + * Concatenates this transform with a shear transformation. + * @param hor - the horizontal shear factor + * @param ver - the vertical shear factor + * @param center [optional] - the center for the shear transformation + */ + shear(hor: number, ver: number, center?: Point): Matrix; + + /** + * Concatenates this transform with a skew transformation. + * @param skew - the skew angles in x and y direction in degrees + * @param center [optional] - the center for the skew transformation + */ + skew(skew: Point, center?: Point): Matrix; + + /** + * Concatenates this transform with a skew transformation. + * @param hor - the horizontal skew angle in degrees + * @param ver - the vertical skew angle in degrees + * @param center [optional] - the center for the skew transformation + */ + skew(hor: number, ver: number, center?: Point): Matrix; + + /** + * Concatenates the given affine transform to this transform. + * @param mx - the transform to concatenate + */ + concatenate(mx: Matrix): Matrix; + + /** + * Pre-concatenates the given affine transform to this transform. + * @param mx - the transform to preconcatenate + */ + preConcatenate(mx: Matrix): Matrix; + + /** + * Returns a new instance of the result of the concatenation of the given affine transform with this transform. + * @param mx - the transform to concatenate + */ + chain(mx: Matrix): Matrix; + + /** + * Returns whether this transform is the identity transform + */ + isIdentity(): boolean; + + /** + * Returns whether the transform is invertible. A transform is not invertible if the determinant is 0 or any value is non-finite or NaN. + */ + isInvertible(): boolean; + + /** + * Checks whether the matrix is singular or not. Singular matrices cannot be inverted. + */ + isSingular(): boolean; + + /** + * Transforms a point and returns the result. + * @param point - the point to be transformed + */ + transform(point: Point): Matrix; + + /** + * Transforms an array of coordinates by this matrix and stores the results into the destination array, which is also returned. + * @param src - the array containing the source points as x, y value pairs + * @param dst - the array into which to store the transformed point pairs + * @param count - the number of points to transform + */ + transform(src: number[], dst: number[], count: number): number[]; + + /** + * Inverse transforms a point and returns the result. + * @param point - the point to be transformed + */ + inverseTransform(point: Point): Matrix; + + /** + * Attempts to decompose the affine transformation described by this matrix into scaling, rotation and shearing, and returns an object with these properties if it succeeded, null otherwise. + */ + decompose(): any; + + /** + * Creates the inversion of the transformation of the matrix and returns it as a new insteance. If the matrix is not invertible (in which case isSingular() returns true), null is returned. + */ + inverted(): Matrix; + + /** + * Applies this matrix to the specified Canvas Context. + * @param ctx - + */ + applyToContext(ctx: CanvasRenderingContext2D): void; + + } + /** + * The Point object represents a point in the two dimensional space of the Paper.js project. It is also used to represent two dimensional vector objects. + */ + export class Point { + + /** + * Returns a new point object with the smallest x and y of the supplied points. + * @param point1 - + * @param point2 - + */ + static min(point1: Point, point2: Point): Point; + + /** + * Returns a new point object with the largest x and y of the supplied points. + * @param point1 - + * @param point2 - + */ + static max(point1: Point, point2: Point): Point; + + /** + * Returns a point object with random x and y values between 0 and 1. + */ + static random(): Point; + + /** + * Creates a Point object with the given x and y coordinates. + * @param x - the x coordinate + * @param y - the y coordinate + */ + constructor(x: number, y: number); + + /** + * Creates a Point object using the numbers in the given array as coordinates. + * @param array - an array of numbers to use as coordinates + */ + constructor(values: number[]); + + /** + * Creates a Point object using the properties in the given object. + * @param object - the object describing the point's properties + */ + constructor(object: any); + + /** + * Creates a Point object using the width and height values of the given Size object. + * @param size - the size width and height to use + */ + constructor(size: Size); + + /** + * Creates a Point object using the coordinates of the given Point object. + * @param point - the point to copy + */ + constructor(point: Point); + + /** + * The x coordinate of the point + */ + x: number; + + /** + * The y coordinate of the point + */ + y: number; + + /** + * The length of the vector that is represented by this point's coordinates. + * Each point can be interpreted as a vector that points from the origin (x = 0, y = 0) to the point's location. + * Setting the length changes the location but keeps the vector's angle. + */ + length: number; + + /** + * The vector's angle in degrees, measured from the x-axis to the vector. + */ + angle: number; + + /** + * The vector's angle in radians, measured from the x-axis to the vector. + */ + angleInRadians: number; + + /** + * The quadrant of the angle of the point. + * Angles between 0 and 90 degrees are in quadrant 1. Angles between 90 and 180 degrees are in quadrant 2, angles between 180 and 270 degrees are in quadrant 3 and angles between 270 and 360 degrees are in quadrant 4. + * Read only. + */ + quadrant: number; + + /** + * This property is only present if the point is an anchor or control point of a Segment or a Curve. In this case, it returns true it is selected, false otherwise + */ + selected: boolean; + + /** + * Checks whether the coordinates of the point are equal to that of the supplied point. + * @param point - the point to check against + */ + equals(point: Point): boolean; + + /** + * Returns a copy of the point. + */ + clone(): Point; + + /** + * a string representation of the point + */ + toString(): string; + + /** + * Returns the smaller angle between two vectors. The angle is unsigned, no information about rotational direction is given. + * @param point - + */ + getAngle(Point: Point): number; + + /** + * Returns the smaller angle between two vectors in radians. The angle is unsigned, no information about rotational direction is given. + * @param point: Point + */ + getAngleInRadians(point: Point): number; + + /** + * Returns the angle between two vectors. The angle is directional and signed, giving information about the rotational direction. + * Read more about angle units and orientation in the description of the angle property. + * @param point - + */ + getDirectedAngle(point: Point): number; + + /** + * Returns the distance between the point and another point. + * @param point - + * @param squared [optional] - Controls whether the distance should remain squared, or its square root should be calculated. default: false + */ + getDistance(point: Point, squared?: boolean): number; + + /** + * Normalize modifies the length of the vector to 1 without changing its angle and returns it as a new point. The optional length parameter defines the length to normalize to. + * The object itself is not modified! + * @param length [optional] - The length of the normalized vector, default: 1 + */ + normalize(length?: number): Point; + + /** + * Rotates the point by the given angle around an optional center point. + * The object itself is not modified. + * Read more about angle units and orientation in the description of the angle property. + * @param angle - the rotation angle + * @param center - the center point of the rotation + */ + rotate(angle: number, center: Point): Point; + + /** + * Transforms the point by the matrix as a new point. The object itself is not modified! + * @param matrix - + */ + transform(matrix: Matrix): Point; + + /** + * Checks whether the point is inside the boundaries of the rectangle. + * @param rect - the rectangle to check against + */ + isInside(rect: Rectangle): boolean; + + /** + * Checks if the point is within a given distance of another point. + * @param point - the point to check against + * @param tolerance - the maximum distance allowed + */ + isClose(point: Point, tolerance: number): boolean; + + /** + * Checks if the vector represented by this point is colinear (parallel) to another vector. + * @param point - the vector to check against + */ + isColinear(point: Point): boolean; + + /** + * Checks if the vector represented by this point is orthogonal (perpendicular) to another vector. + * @param point - the vector to check against + */ + isOrthogonal(point: Point): boolean; + + /** + * Checks if this point has both the x and y coordinate set to 0. + */ + isZero(): boolean; + + /** + * Checks if this point has an undefined value for at least one of its coordinates. + */ + isNan(): boolean; + + /** + * Returns the dot product of the point and another point. + * @param point - + */ + dot(point: Point): number; + + /** + * Returns the cross product of the point and another point. + * @param point - + */ + cross(point: Point): number; + + /** + * Returns the projection of the point on another point. + * Both points are interpreted as vectors. + * @param point - + */ + project(point: Point): Point; + + /** + * Returns a new point with rounded x and y values. The object itself is not modified! + */ + round(): Point; + + /** + * Returns a new point with the nearest greater non-fractional values to the specified x and y values. The object itself is not modified! + */ + ceil(): Point; + + /** + * Returns a new point with the nearest smaller non-fractional values to the specified x and y values. The object itself is not modified! + */ + floor(): Point; + + /** + * Returns a new point with the absolute values of the specified x and y values. The object itself is not modified! + */ + abs(): Point; + + } + /** + * A Rectangle specifies an area that is enclosed by it's top-left point (x, y), its width, and its height. It should not be confused with a rectangular path, it is not an item. + */ + export class Rectangle { + + /** + * Creates a Rectangle object. + * @param point - the top-left point of the rectangle + * @param size - the size of the rectangle + */ + constructor(point: Point, size: Size); + + /** + * Creates a rectangle object. + * @param x - the left coordinate + * @param y - the top coordinate + * @param width - the width + * @param height - the height + */ + constructor(x: number, y: number, width: number, height: number); + + /** + * Creates a Rectangle object. + * @param object - an object containing properties to be set on the rectangle. + */ + constructor(object: any); + + /** + * Creates a rectangle object from the passed points. These do not necessarily need to be the top left and bottom right corners, the constructor figures out how to fit a rectangle between them. + * @param from - The first point defining the rectangle + * @param to - The second point defining the rectangle + */ + constructor(from: Point, to: Point); + + /** + * Creates a new rectangle object from the passed rectangle object. + * @param rt - the rectangle to copy from + */ + constructor(rt: Rectangle); + + /** + * The x position of the rectangle. + */ + x: number; + + /** + * The y position of the rectangle. + */ + y: number; + + /** + * The width of the rectangle. + */ + width: number; + + /** + * The height of the rectangle. + */ + height: number; + + /** + * The top-left point of the rectangle + */ + point: Point; + + /** + * The size of the rectangle + */ + size: Size; + + /** + * The position of the left hand side of the rectangle. Note that this doesn't move the whole rectangle; the right hand side stays where it was. + */ + left: number; + + /** + * The top coordinate of the rectangle. Note that this doesn't move the whole rectangle: the bottom won't move. + */ + top: number; + + /** + * The position of the right hand side of the rectangle. Note that this doesn't move the whole rectangle; the left hand side stays where it was. + */ + right: number; + + /** + * The bottom coordinate of the rectangle. Note that this doesn't move the whole rectangle: the top won't move. + */ + bottom: number; + + /** + * The center point of the rectangle. + */ + center: Point; + + /** + * The top-left point of the rectangle. + */ + topLeft: Point; + + /** + * The top-right point of the rectangle. + */ + topRight: Point; + + /** + * The bottom-left point of the rectangle. + */ + bottomLeft: Point; + + /** + * The bottom-right point of the rectangle. + */ + bottomRight: Point; + + /** + * The left-center point of the rectangle. + */ + leftCenter: Point; + + /** + * The top-center point of the rectangle. + */ + topCenter: Point; + + /** + * The right-center point of the rectangle. + */ + rightCenter: Point; + + /** + * The bottom-center point of the rectangle. + */ + bottomCenter: Point; + + /** + * The area of the rectangle in square points. + * Read only. + */ + area: number; + + /** + * Specifies whether an item's bounds are selected and will also mark the item as selected. + * Paper.js draws the visual bounds of selected items on top of your project. This can be useful for debugging. + */ + selected: boolean; + + /** + * Returns a copy of the rectangle. + */ + clone(): Rectangle; + + /** + * Checks whether the coordinates and size of the rectangle are equal to that of the supplied rectangle. + * @param rect - the rectangle to check against + */ + equals(rect: Rectangle): boolean; + + /** + * a string representation of this rectangle + */ + toString(): string; + + /** + * Returns true if the rectangle is empty, false otherwise + */ + isEmpty(): boolean; + + /** + * Tests if the specified point is inside the boundary of the rectangle. + * @param point - the specified point + */ + contains(point: Point): boolean; + + /** + * Tests if the interior of the rectangle entirely contains the specified rectangle. + * @param rect - The specified rectangle + */ + contains(rect: Rectangle): boolean; + + /** + * Tests if the interior of this rectangle intersects the interior of another rectangle. Rectangles just touching each other are considered as non-intersecting. + * @param rect - the specified rectangle + */ + intersects(rect: Rectangle): boolean; + + /** + * Returns a new rectangle representing the intersection of this rectangle with the specified rectangle. + * @param rect - The rectangle to be intersected with this rectangle + */ + intersect(rect: Rectangle): Rectangle; + + /** + * Returns a new rectangle representing the union of this rectangle with the specified rectangle. + * @param rect - the rectangle to be combined with this rectangle + */ + unite(rect: Rectangle): Rectangle; + + /** + * Adds a point to this rectangle. The resulting rectangle is the smallest rectangle that contains both the original rectangle and the specified point. + * After adding a point, a call to contains(point) with the added point as an argument does not necessarily return true. + * The rectangle.contains(point) method does not return true for points on the right or bottom edges of a rectangle. Therefore, if the added point falls on the left or bottom edge of the enlarged rectangle, rectangle.contains(point) returns false for that point. + * @param point - the point to add to the rectangle + */ + include(point: Point): Point; + + /** + * Expands the rectangle by the specified amount in horizontal and vertical directions. + * @param amount - the amount to expand the rectangle in both directions + */ + expand(amount: number | Size | Point): void; + + /** + * Expands the rectangle by the specified amounts in horizontal and vertical directions. + * @param hor - the amount to expand the rectangle in horizontal direction + * @param ver - the amount to expand the rectangle in vertical direction + */ + expand(hor: number, ver: number): void; + + /** + * Scales the rectangle by the specified amount from its center. + * @param amount - the amount to scale by + */ + scale(amount: number): void; + + /** + * Scales the rectangle in horizontal direction by the specified hor amount and in vertical direction by the specified ver amount from its center. + * @param hor - the amount to scale the rectangle in horizontal direction + * @param ver - the amount to scale the rectangle in vertical direction + */ + scale(hor: number, ver: number): void; + + } + /** + * The Size object is used to describe the size or dimensions of something, through its width and height properties. + */ + export class Size { + + /** + * Returns a new size object with the smallest width and height of the supplied sizes. + * @param size1 - the first size + * @param size2 - the second size + */ + static min(size1: Size, size2: Size): Size; + + /** + * Returns a new size object with the largest width and height of the supplied sizes. + * @param size1 - the first size + * @param size2 - the second size + */ + static max(size1: Size, size2: Size): Size; + + /** + * Returns a size object with random width and height values between 0 and 1. + */ + static random(): Size; + + /** + * Creates a Size object with the given width and height values. + * @param width - the width + * @param height - the height + */ + constructor(width: number, height: number); + + /** + * Creates a Size object using the numbers in the given array as dimensions. + * @param array - an array of numbers + */ + constructor(array: number[]); + + /** + * Creates a Size object using the properties in the given object. + * @param object - the object literal containing properies (width:10, height:10 etc) + */ + constructor(object: any); + + /** + * Creates a Size object using the coordinates of the given Size object. + * @param size - the size to duplicate from + */ + constructor(size: Size); + + /** + * Creates a Size object using the point.x and point.y values of the given Point object. + * @param point - the point from which to create a size + */ + constructor(point: Point); + + /** + * The width of the size + */ + width: number; + + /** + * The height of the size + */ + height: number; + + /** + * WARNING - This seems undocumented/incorrect + */ + equals(): boolean; + + /** + * Returns a copy of the size. + */ + clone(): Size; + + /** + * a string representation of the size + */ + toString(): string; + + /** + * Checks if this size has both the width and height set to 0. + */ + isZero(): boolean; + + /** + * Checks if the width or the height of the size are NaN. + */ + isNan(): boolean; + + /** + * Returns a new size with rounded width and height values. The object itself is not modified! + */ + round(): Size; + + /** + * Returns a new size with the nearest greater non-fractional values to the specified width and height values. The object itself is not modified! + */ + ceil(): Size; + + /** + * Returns a new size with the nearest smaller non-fractional values to the specified width and height values. The object itself is not modified! + */ + floor(): Size; + + /** + * Returns a new size with the absolute values of the specified width and height values. The object itself is not modified! + */ + abs(): Size; + + } + export interface IFrameEvent { + + /** + * the number of times the frame event was fired. + */ + count: number; + + /** + * the total amount of time passed since the first + */ + time: number; + + /** + * + */ + delta: number; + + } + /** + * The PaperScope class represents the scope associated with a Paper context. When working with PaperScript, these scopes are automatically created for us, and through clever scoping the properties and methods of the active scope seem to become part of the global scope. + * When working with normal JavaScript code, PaperScope objects need to be manually created and handled. + * Paper classes can only be accessed through PaperScope objects. Thus in PaperScript they are global, while in JavaScript, they are available on the global paper object. For JavaScript you can use paperScope.install(scope) to install the Paper classes and objects on the global scope. Note that when working with more than one scope, this still works for classes, but not for objects like paperScope.project, since they are not updated in the injected scope if scopes are switched. + * The global paper object is simply a reference to the currently active PaperScope. + */ + export class PaperScope { + + /** + * The version of Paper.js, as a string. + */ + version: string; + + /** + * Gives access to paper's configurable settings. + */ + settings: { + + applyMatrix: boolean; + handleSize: number; + hitTolerance: number; + + }; + + /** + * The currently active project. + */ + project: Project; + + /** + * The list of all open projects within the current Paper.js context. + */ + projects: Project[]; + + /** + * The reference to the active project's view. + * Read Only. + */ + view: View; + + /** + * The reference to the active tool. + */ + tool: Tool; + + /** + * The list of available tools. + */ + tools: Tool[]; + + /** + * Injects the paper scope into any other given scope. Can be used for examle to inject the currently active PaperScope into the window's global scope, to emulate PaperScript-style globally accessible Paper classes and objects + * Please note: Using this method may override native constructors (e.g. Path, RGBColor). This may cause problems when using Paper.js in conjunction with other libraries that rely on these constructors. Keep the library scoped if you encounter issues caused by this. + * @param scope - + */ + install(scope: any): void; + + /** + * Sets up an empty project for us. If a canvas is provided, it also creates a View for it, both linked to this scope. + * @param element - the HTML canvas element this scope should be associated with, or an ID string by which to find the element. + */ + setup(canvas: HTMLCanvasElement | string): void; + + /** + * Activates this PaperScope, so all newly created items will be placed in its active project. + */ + activate(): void; + + /** + * Retrieves a PaperScope object with the given scope id. + * @param id - + */ + static get(id: string): PaperScope; + + } + /** + * The Item type allows you to access and modify the items in Paper.js projects. Its functionality is inherited by different project item types such as Path, CompoundPath, Group, Layer and Raster. They each add a layer of functionality that is unique to their type, but share the underlying properties and functions that they inherit from Item. + */ + export class Item { + + /** + * The tangential vector to the #curve at the given location. + */ + tangent: Point; + + /** + * The normal vector to the #curve at the given location. + */ + normal: Point; + + /** + * The curvature of the #curve at the given location. + */ + curvature: number; + + /** + * The unique id of the item. + * Read Only. + */ + id: number; + + /** + * The class name of the item as a string. + * String('Group', 'Layer', 'Path', 'CompoundPath', 'Shape', 'Raster', 'PlacedSymbol', 'PointText') + */ + className: string; + + /** + * The name of the item. If the item has a name, it can be accessed by name through its parent's children list. + */ + name: string; + + /** + * The path style of the item. + */ + style: Style; + + /** + * Specifies whether the item is visible. When set to false, the item won't be drawn. + */ + visible: boolean; + + /** + * The blend mode with which the item is composited onto the canvas. Both the standard canvas compositing modes, as well as the new CSS blend modes are supported. If blend-modes cannot be rendered natively, they are emulated. Be aware that emulation can have an impact on performance. + * String('normal', 'multiply', 'screen', 'overlay', 'soft-light', 'hard-light', 'color-dodge', 'color-burn', 'darken', 'lighten', 'difference', 'exclusion', 'hue', 'saturation', 'luminosity', 'color', 'add', 'subtract', 'average', 'pin-light', 'negation', 'source-over', 'source-in', 'source-out', 'source-atop', 'destination-over', 'destination-in', 'destination-out', 'destination-atop', 'lighter', 'darker', 'copy', 'xor') + */ + blendMode: string; + + /** + * The opacity of the item as a value between 0 and 1. + */ + opacity: number; + + /** + * Specifies whether the item is selected. This will also return true for Group items if they are partially selected, e.g. groups containing selected or partially selected paths. + * Paper.js draws the visual outlines of selected items on top of your project. This can be useful for debugging, as it allows you to see the construction of paths, position of path curves, individual segment points and bounding boxes of symbol and raster items. + */ + selected: boolean; + + /** + * Specifies whether the item defines a clip mask. This can only be set on paths, compound paths, and text frame objects, and only if the item is already contained within a clipping group. + */ + clipMask: boolean; + + /** + * A plain javascript object which can be used to store arbitrary data on the item. + */ + data: any; + + /** + * The item's position within the parent item's coordinate system. By default, this is the rectangle.center of the item's bounds rectangle. + */ + position: Point; + + /** + * The item's pivot point specified in the item coordinate system, defining the point around which all transformations are hinging. This is also the reference point for position. By default, it is set to null, meaning the rectangle.center of the item's bounds rectangle is used as pivot. + */ + pivot: Point; + + /** + * The bounding rectangle of the item excluding stroke width. + */ + bounds: Rectangle; + + /** + * The bounding rectangle of the item including stroke width. + */ + strokeBounds: Rectangle; + + /** + * The bounding rectangle of the item including handles. + */ + handleBounds: Rectangle; + + /** + * The current rotation angle of the item, as described by its matrix. + */ + rotation: number; + + /** + * The current scale factor of the item, as described by its matrix. + */ + scaling: Point; + + /** + * The item's transformation matrix, defining position and dimensions in relation to its parent item in which it is contained. + */ + matrix: Matrix; + + /** + * The item's global transformation matrix in relation to the global project coordinate space. Note that the view's transformations resulting from zooming and panning are not factored in. + * Read Only. + */ + globalMatrix: Matrix; + + /** + * Controls whether the transformations applied to the item (e.g. through transform(matrix), rotate(angle), scale(scale), etc.) are stored in its matrix property, or whether they are directly applied to its contents or children (passed on to the segments in Path items, the children of Group items, etc.). + */ + applyMatrix: boolean; + + /** + * The project that this item belongs to. + * Read only. + */ + project: Project; + + /** + * The view that this item belongs to. + * Read Only. + */ + view: View; + + /** + * The layer that this item is contained within. + * Read Only. + */ + layer: Layer; + + /** + * The item that this item is contained within. + */ + parent: Item; + + /** + * The children items contained within this item. Items that define a name can also be accessed by name. + * Please note: The children array should not be modified directly using array functions. To remove single items from the children list, use item.remove(), to remove all items from the children list, use item.removeChildren(). To add items to the children list, use item.addChild(item) or item.insertChild(index, item). + */ + children: Item[]; + + /** + * The first item contained within this item. This is a shortcut for accessing item.children[0]. + */ + firstChild: Item; + + /** + * The last item contained within this item.This is a shortcut for accessing item.children[item.children.length - 1]. + */ + lastChild: Item; + + /** + * The next item on the same level as this item. + * Read Only. + */ + nextSibling: Item; + + /** + * The previous item on the same level as this item. + * Read Only. + */ + previousSibling: Item; + + /** + * The index of this item within the list of its parent's children. + * Read only. + */ + index: number; + + /** + * The color of the stroke. + */ + strokeColor: Color | string; + + /** + * The width of the stroke. + */ + strokeWidth: number; + + /** + * The shape to be used at the beginning and end of open Path items, when they have a stroke. + * String('round', 'square', 'butt') + */ + strokeCap: string; + + /** + * The shape to be used at the segments and corners of Path items when they have a stroke. + * String('miter', 'round', 'bevel') + */ + strokeJoin: string; + + /** + * The dash offset of the stroke. + */ + dashOffset: number; + + /** + * Specifies whether the stroke is to be drawn taking the current affine transformation into account (the default behavior), or whether it should appear as a non-scaling stroke. + */ + strokeScaling: boolean; + + /** + * Specifies an array containing the dash and gap lengths of the stroke. + */ + dashArray: number[]; + + /** + * When two line segments meet at a sharp angle and miter joins have been specified for item.strokeJoin, it is possible for the miter to extend far beyond the item.strokeWidth of the path. The miterLimit imposes a limit on the ratio of the miter length to the item.strokeWidth. + */ + miterLimit: number; + + /** + * The winding-rule with which the shape gets filled. Please note that only modern browsers support winding-rules other than 'nonzero'. + * String('nonzero', 'evenodd') + */ + windingRule: string; + + /** + * The fill color of the item. + */ + fillColor: Color | string; + + /** + * The color the item is highlighted with when selected. If the item does not specify its own color, the color defined by its layer is used instead. + */ + selectedColor: Color | string; + + /** + * Item level handler function to be called on each frame of an animation. + * The function receives an event object which contains information about the frame event: + */ + onFrame: (event: IFrameEvent) => void; + + /** + * The function to be called when the mouse button is pushed down on the item. The function receives a MouseEvent object which contains information about the mouse event. + */ + onMouseDown: (event: MouseEvent) => void; + + /** + * The function to be called when the mouse button is released over the item. + * The function receives a MouseEvent object which contains information about the mouse event. + */ + onMouseUp: (event: MouseEvent) => void; + + /** + * The function to be called when the mouse clicks on the item. The function receives a MouseEvent object which contains information about the mouse event. + */ + onClick: (event: MouseEvent) => void; + + /** + * The function to be called when the mouse double clicks on the item. The function receives a MouseEvent object which contains information about the mouse event. + */ + onDoubleClick: (event: MouseEvent) => void; + + /** + * The function to be called repeatedly when the mouse moves on top of the item. The function receives a MouseEvent object which contains information about the mouse event. + */ + onMouseMove: (event: MouseEvent) => void; + + /** + * The function to be called when the mouse moves over the item. This function will only be called again, once the mouse moved outside of the item first. The function receives a MouseEvent object which contains information about the mouse event. + */ + onMouseEnter: (event: MouseEvent) => void; + + /** + * The function to be called when the mouse moves out of the item. + * The function receives a MouseEvent object which contains information about the mouse event. + */ + onMouseLeave: (event: MouseEvent) => void; + + /** + * Sets those properties of the passed object literal on this item to the values defined in the object literal, if the item has property of the given name (or a setter defined for it). + */ + set(props: any): Item; + + /** + * Clones the item within the same project and places the copy above the item. + * @param insert [optional] - specifies whether the copy should be inserted into the DOM. When set to true, it is inserted above the original. default: true + */ + clone(insert?: boolean): Item; + + /** + * When passed a project, copies the item to the project, or duplicates it within the same project. When passed an item, copies the item into the specified item. + * @param item - the item or project to copy the item to + */ + copyTo(item: Item): Item; + + /** + * Rasterizes the item into a newly created Raster object. The item itself is not removed after rasterization. + * @param resolution [optional] - the resolution of the raster in pixels per inch (DPI). If not specified, the value of view.resolution is used. default: view.resolution + */ + rasterize(resolution: number): Raster; + + /** + * Checks whether the item's geometry contains the given point. + * @param point - The point to check for. + */ + contains(point: Point): boolean; + + /** + * + * @param rect - the rectangle to check against + */ + isInside(rect: Rectangle): boolean; + + /** + * + * @param item - the item to check against + */ + intersects(item: Item): boolean; + + /** + * Perform a hit-test on the items contained within the project at the location of the specified point. + * The options object allows you to control the specifics of the hit-test and may contain a combination of the following values: + * @param point - the point where the hit-test should be performed + * @param options.tolerance -the tolerance of the hit-test in points. Can also be controlled through paperScope.settings.hitTolerance + * @param options.class - only hit-test again a certain item class and its sub-classes: Group, Layer, Path, CompoundPath, Shape, Raster, PlacedSymbol, PointText, etc. + * @param options.fill - hit-test the fill of items. + * @param options.stroke - hit-test the stroke of path items, taking into account the setting of stroke color and width. + * @param options.segments - hit-test for segment.point of Path items. + * @param options.curves - hit-test the curves of path items, without taking the stroke color or width into account. + * @param options.handles - hit-test for the handles. (segment.handleIn / segment.handleOut) of path segments. + * @param options.ends - only hit-test for the first or last segment points of open path items. + * @param options.bounds - hit-test the corners and side-centers of the bounding rectangle of items (item.bounds). + * @param options.center - hit-test the rectangle.center of the bounding rectangle of items (item.bounds). + * @param options.guides - hit-test items that have Item#guide set to true. + * @param options.selected - only hit selected items. + */ + hitTest(point: Point, options?: { tolerance?: number; class?: string; fill?: boolean; stroke?: boolean; segments?: boolean; curves?: boolean; handles?: boolean; ends?: boolean; bounds?: boolean; center?: boolean; guides?: boolean; selected?: boolean; }): HitResult; + + /** + * Checks whether the item matches the criteria described by the given object, by iterating over all of its properties and matching against their values through matches(name, compare). + * See project.getItems(match) for a selection of illustrated examples. + * @param match - the criteria to match against. + */ + matches(match: any): boolean; + + /** + * Checks whether the item matches the given criteria. Extended matching is possible by providing a compare function or a regular expression. + * Matching points, colors only work as a comparison of the full object, not partial matching (e.g. only providing the x-coordinate to match all points with that x-value). Partial matching does work for item.data. + * @param name - the name of the state to match against. + * @param compare - the value, function or regular expression to compare against. + */ + matches(name: string, compare: any): boolean; + + /** + * Fetch the descendants (children or children of children) of this item that match the properties in the specified object. + * Extended matching is possible by providing a compare function or regular expression. Matching points, colors only work as a comparison of the full object, not partial matching (e.g. only providing the x- coordinate to match all points with that x-value). Partial matching does work for item.data. + * Matching items against a rectangular area is also possible, by setting either match.inside or match.overlapping to a rectangle describing the area in which the items either have to be fully or partly contained. + * @param match.inside - the rectangle in which the items need to be fully contained. + * @param match.overlapping - the rectangle with which the items need to at least partly overlap. + */ + getItems(match: any): Item[]; + + /** + * Fetch the first descendant (child or child of child) of this item that matches the properties in the specified object. + * Extended matching is possible by providing a compare function or regular expression. Matching points, colors only work as a comparison of the full object, not partial matching (e.g. only providing the x- coordinate to match all points with that x-value). Partial matching does work for item.data. + * @param match - the criteria to match against + */ + getItem(match: any): Item; + + /** + * Exports (serializes) the project with all its layers and child items to a JSON data string. + * @param options [optional] - default {asString: true, precision: 5} + * @param options.asString - whether the JSON is returned as a Object or a String. + * @param options.precision - the amount of fractional digits in numbers used in JSON data. + */ + exportJSON(options?: { asString?: boolean; precision?: number }): string; + + /** + * Imports (deserializes) the stored JSON data into the project. + * Note that the project is not cleared first. You can call project.clear() to do so. + */ + importJSON(json: string): void; + + /** + * Exports the project with all its layers and child items as an SVG DOM, all contained in one top level SVG group node. + * @param options [optional] the export options, default: { asString: false, precision: 5, matchShapes: false } + * @param options.asString - whether a SVG node or a String is to be returned. + * @param options.precision - the amount of fractional digits in numbers used in SVG data. + * @param options.matchShapes - whether path items should tried to be converted to shape items, if their geometries can be made to match + */ + exportSVG(options?: { asString?: boolean; precision?: number; matchShapes?: boolean }): SVGElement; + + /** + * Converts the provided SVG content into Paper.js items and adds them to the active layer of this project. + * Note that the project is not cleared first. You can call project.clear() to do so. + * @param svg - the SVG content to import + * @param options [optional] - the import options, default: { expandShapes: false } + * @param options.expandShapes - whether imported shape items should be expanded to path items. + */ + importSVG(svg: SVGElement | string, options?: any): Item; + + /** + * Adds the specified item as a child of this item at the end of the its children list. You can use this function for groups, compound paths and layers. + * @param item - the item to add as a child + */ + addChild(item: Item): Item; + + /** + * Inserts the specified item as a child of this item at the specified index in its children list. You can use this function for groups, compound paths and layers. + * @param index - the index + * @param item - the item to be inserted as a child + */ + insertChild(index: number, item: Item): Item; + + /** + * Adds the specified items as children of this item at the end of the its children list. You can use this function for groups, compound paths and layers. + * @param items - The items to be added as children + */ + addChildren(items: Item[]): Item[]; + + /** + * Inserts the specified items as children of this item at the specified index in its children list. You can use this function for groups, compound paths and layers. + * @param index - + * @param items - The items to be appended as children + */ + insertChildren(index: number, items: Item[]): Item[]; + + /** + * Inserts this item above the specified item. + * @param item - the item above which it should be inserted + */ + insertAbove(item: Item): Item; + + /** + * Inserts this item below the specified item. + * @param item - the item below which it should be inserted + */ + insertBelow(item: Item): Item; + + /** + * Sends this item to the back of all other items within the same parent. + */ + sendToBack(): void; + + /** + * Brings this item to the front of all other items within the same parent. + */ + bringToFront(): void; + + /** + * If this is a group, layer or compound-path with only one child-item, the child-item is moved outside and the parent is erased. Otherwise, the item itself is returned unmodified. + */ + reduce(): Item; + + /** + * Removes the item and all its children from the project. The item is not destroyed and can be inserted again after removal. + */ + remove(): boolean; + + /** + * Replaces this item with the provided new item which will takes its place in the project hierarchy instead. + * @param item - the item to replace this one with + */ + replaceWith(item: Item): boolean; + + /** + * Removes all of the item's children (if any). + */ + removeChildren(): Item[]; + + /** + * Removes the children from the specified from index to the to index from the parent's children array. + * @param from - the beginning index, inclusive + * @param to [optional] - the ending index, exclusive, default: children.length + */ + removeChildren(from: number, to?: number): Item[]; + + /** + * Reverses the order of the item's children + */ + reverseChildren(): void; + + /** + * Specifies whether the item has any content or not. The meaning of what content is differs from type to type. For example, a Group with no children, a TextItem with no text content and a Path with no segments all are considered empty. + */ + isEmpty(): boolean; + + /** + * Checks whether the item has a fill. + */ + hasFill(): boolean; + + /** + * Checks whether the item has a stroke. + */ + hasStroke(): boolean; + + /** + * Checks whether the item has a shadow. + */ + hasShadow(): boolean; + + /** + * Checks if the item contains any children items. + */ + hasChildren(): boolean; + + /** + * Checks whether the item and all its parents are inserted into the DOM or not. + */ + isInserted(): boolean; + + /** + * Checks if this item is above the specified item in the stacking order of the project. + * @param item - The item to check against + */ + isAbove(item: Item): boolean; + + /** + * Checks if the item is below the specified item in the stacking order of the project. + * @param item - The item to check against + */ + isBelow(item: Item): boolean; + + /** + * Checks whether the specified item is the parent of the item. + * @param item - The item to check against + */ + isParent(item: Item): boolean; + + /** + * Checks whether the specified item is a child of the item. + * @param item - The item to check against + */ + isChild(item: Item): boolean; + + /** + * Checks if the item is contained within the specified item. + * @param item - The item to check against + */ + isDescendant(item: Item): boolean; + + /** + * Checks if the item is an ancestor of the specified item. + * @param item - the item to check against + */ + isAncestor(item: Item): boolean; + + /** + * Checks whether the item is grouped with the specified item. + * @param item - + */ + isGroupedWith(item: Item): boolean; + + /** + * Translates (moves) the item by the given offset point. + * @param delta - the offset to translate the item by + */ + translate(delta: number): Point; + + /** + * Rotates the item by a given angle around the given point. + * Angles are oriented clockwise and measured in degrees. + * @param angle - the rotation angle + * @param center [optional] - default: item.position + */ + rotate(angle: number, center?: Point): void; + + /** + * Scales the item by the given value from its center point, or optionally from a supplied point. + * @param scale - the scale factor + * @param center [optional] - default: item.position + */ + scale(scale: number, center?: Point): void; + + /** + * Scales the item by the given values from its center point, or optionally from a supplied point. + * @param hor - the horizontal scale factor + * @param ver - the vertical scale factor + * @param center [optional] - default: item.position + */ + scale(hor: number, ver: number, center?: Point): void; + + /** + * Shears the item by the given value from its center point, or optionally by a supplied point. + * @param shear - the horziontal and vertical shear factors as a point + * @param center [optional] - default: item.position + */ + shear(shear: number, center?: Point): void; + + /** + * Shears the item by the given values from its center point, or optionally by a supplied point. + * @param hor - the horizontal shear factor + * @param ver - the vertical shear factor + * @param center [optional] - default: item.position + */ + shear(hor: number, ver: number, center?: Point): void; + + /** + * Skews the item by the given angles from its center point, or optionally by a supplied point. + * @param skew - the horziontal and vertical skew angles in degrees + * @param center [optional] - default: item.position + */ + skew(skew: Point, center?: Point): void; + + /** + * Skews the item by the given angles from its center point, or optionally by a supplied point. + * @param hor - the horizontal skew angle in degrees + * @param ver - the vertical sskew angle in degrees + * @param center [optional] - default: item.position + */ + skew(hor: number, ver: number, center?: Point): void; + + /** + * Transform the item. + * @param matrix - the matrix by which the item shall be transformed. + */ + transform(matrix: Matrix): void; + + /** + * Converts the specified point from global project coordinate space to the item's own local coordinate space. + * @param point - the point to be transformed + */ + globalToLocal(point: Point): Point; + + /** + * Converts the specified point from the item's own local coordinate space to the global project coordinate space. + * @param point - the point to be transformed + */ + localToGlobal(point: Point): Point; + + /** + * Converts the specified point from the parent's coordinate space to item's own local coordinate space. + * @param point - the point to be transformed + */ + parentToLocal(point: Point): Point; + + /** + * Converts the specified point from the item's own local coordinate space to the parent's coordinate space. + * @param point - the point to be transformed + */ + localToParent(point: Point): Point; + + /** + * Transform the item so that its bounds fit within the specified rectangle, without changing its aspect ratio. + * @param rectangle - + * @param fill [optiona;] - default = false + */ + fitBounds(rectangle: Rectangle, fill?: boolean): void; + + //I cannot use function: Function as it is a reserved keyword + + /** + * Attach an event handler to the tool. + * @param type - String('mousedown'|'mouseup'|'mousedrag'|'mousemove'|'keydown'|'keyup') the event type + * @param function - The function to be called when the event occurs + */ + on(type: string, callback: (event: ToolEvent) => void): Tool; + + /** + * Attach one or more event handlers to the tool. + * @param param - an object literal containing one or more of the following properties: mousedown, mouseup, mousedrag, mousemove, keydown, keyup + */ + on(param: any): Tool; + + /** + * Detach an event handler from the tool. + * @param type - String('mousedown'|'mouseup'|'mousedrag'|'mousemove'|'keydown'|'keyup') the event type + * @param function - The function to be detached + */ + off(type: string, callback: (event: ToolEvent) => void): Tool; + + /** + * Detach one or more event handlers from the tool. + * @param param - an object literal containing one or more of the following properties: mousedown, mouseup, mousedrag, mousemove, keydown, keyup + */ + off(param: any): Tool; + + /** + * Emit an event on the tool. + * @param type - String('mousedown'|'mouseup'|'mousedrag'|'mousemove'|'keydown'|'keyup') the event type + * @param event - an object literal containing properties describing the event. + */ + emit(type: string, event: any): boolean; + + /** + * Check if the tool has one or more event handlers of the specified type. + * @param type - String('mousedown'|'mouseup'|'mousedrag'|'mousemove'|'keydown'|'keyup') the event type + */ + responds(type: string): boolean;//I cannot use function: Function as it is a reserved keyword + + /** + * Attaches an event handler to the item. + * @param type - String('mousedown'|'mouseup'|'mousedrag'|'mousemove'|'keydown'|'keyup') the event type + * @param function - The function to be called when the event occurs + */ + on(type: string, callback: () => void): Item; + + /** + * Attaches one or more event handlers to the item. + * @param param - an object literal containing one or more of the following properties: mousedown, mouseup, mousedrag, mousemove, keydown, keyup + */ + on(param: any): Item; + + /** + * Detach an event handler from the item. + * @param type - String('mousedown'|'mouseup'|'mousedrag'|'mousemove'|'keydown'|'keyup') the event type + * @param function - The function to be detached + */ + off(type: string, callback: (event: ToolEvent) => void): Item; + + /** + * Detach one or more event handlers to the item. + * @param param - an object literal containing one or more of the following properties: mousedown, mouseup, mousedrag, mousemove, keydown, keyup + */ + off(param: any): Item; + + /** + * Emit an event on the item. + * @param type - String('mousedown'|'mouseup'|'mousedrag'|'mousemove'|'keydown'|'keyup') the event type + * @param event - an object literal containing properties describing the event. + */ + emit(type: string, event: any): boolean; + + /** + * Check if the item has one or more event handlers of the specified type.. + * @param type - String('mousedown'|'mouseup'|'mousedrag'|'mousemove'|'keydown'|'keyup') the event type + */ + responds(type: string): boolean; + + /** + * Removes the item when the events specified in the passed object literal occur. + * @param object - The object literal can contain the following values + * @param object.move - Remove the item when the next tool.onMouseMove event is fired + * @param object.drag - Remove the item when the next tool.onMouseDrag event is fired + * @param object.down - Remove the item when the next tool.onMouseDown event is fired + * @param object.up - Remove the item when the next tool.onMouseUp event is fired + */ + removeOn(object: { move?: boolean; drag?: boolean; down?: boolean; up?: boolean; }): void; + + /** + * Removes the item when the next tool.onMouseMove event is fired. + */ + removeOnMove(): void; + + /** + * Removes the item when the next tool.onMouseDown event is fired. + */ + removeOnDown(): void; + + /** + * Removes the item when the next tool.onMouseDrag event is fired. + */ + removeOnDrag(): void; + + /** + * Removes the item when the next tool.onMouseUp event is fired. + */ + removeOnUp(): void; + + } + /** + * A Group is a collection of items. When you transform a Group, its children are treated as a single unit without changing their relative positions. + */ + export class Group extends Item { + + /** + * Creates a new Group item and places it at the top of the active layer. + * @param children [optional] - An array of Item Objects children that will be added to the newly created group. + */ + constructor(children?: Item[]); + + /** + * Creates a new Group item and places it at the top of the active layer. + * @param object [optional] - an object literal containing the properties to be set on the group. + */ + constructor(object?: any); + + /** + * Specifies whether the group item is to be clipped. + * When setting to true, the first child in the group is automatically defined as the clipping mask. + */ + clipped: boolean; + + } + /** + * The Layer item represents a layer in a Paper.js project. + * The layer which is currently active can be accessed through project.activeLayer. + * An array of all layers in a project can be accessed through project.layers. + */ + export class Layer extends Group { + + /** + * Creates a new Layer item and places it at the end of the project.layers array. The newly created layer will be activated, so all newly created items will be placed within it. + * @param children [optional] - An array of Items that will be added to the newly created layer. + */ + constructor(children?: Item[]); + /** + * Creates a new Layer item and places it at the end of the project.layers array. The newly created layer will be activated, so all newly created items will be placed within it. + * @param object [optional] - an object literal containing the properties to be set on the layer. + */ + constructor(object?: any); + + /** + * Activates the layer. + */ + activate(): void; + + } + export class Shape extends Item { + + /** + * Creates a circular shape item. + * @param center - the center point of the circle + * @param radius - the radius of the circle + */ + static Circle(center: Point, radius: number): Shape; + + /** + * Creates a circular shape item from the properties described by an object literal. + * @param object - an object literal containing properties descriving the shapes attributes + */ + static Circle(object: any): Shape; + + /** + * Creates a rectangular shape item, with optionally rounded corners. + * @param rectangle - the rectangle object describing the geometry of the rectangular shape to be created. + * @param radius [optional] - the size of the rounded corners, default: null + */ + static Rectangle(rectangle: Rectangle, radius?: number): Shape; + + /** + * Creates a rectangular shape item from a point and a size object. + * @param point - the rectangle's top-left corner + * @param size - the rectangle's size. + */ + static Rectangle(point: Point, size: Size): Shape; + + /** + * Creates a rectangular shape item from the passed points. These do not necessarily need to be the top left and bottom right corners, the constructor figures out how to fit a rectangle between them. + * @param from - the first point defining the rectangle + * @param to - the second point defining the rectangle + */ + static Rectangle(from: Point, to: Point): Shape; + + /** + * Creates a rectangular shape item from the properties described by an object literal. + * @param object - an object literal containing properties describing the shape's attributes + */ + static Rectangle(object: any): Shape; + + /** + * Creates an elliptical shape item. + * @param rectangle - the rectangle circumscribing the ellipse + */ + static Ellipse(rectangle: Rectangle): Shape; + + /** + * Creates an elliptical shape item from the properties described by an object literal. + * @param object - an object literal containing properties describing the shape's attributes + */ + static Ellipse(object: any): Shape; + + /** + * The type of shape of the item as a string. + */ + type: string; + + /** + * The size of the shape. + */ + size: Size; + + /** + * The radius of the shape, as a number if it is a circle, or a size object for ellipses and rounded rectangles. + */ + radius: number | Size; + + } + /** + * The Raster item represents an image in a Paper.js project. + */ + export class Raster extends Item { + + /** + * Creates a new raster item from the passed argument, and places it in the active layer. object can either be a DOM Image, a Canvas, or a string describing the URL to load the image from, or the ID of a DOM element to get the image from (either a DOM Image or a Canvas). + * @param source [optional] - the source of the raster + * @param position [optional] - the center position at which the raster item is placed + */ + constructor(source?: HTMLImageElement | HTMLCanvasElement | string, position?: Point); + + /** + * The size of the raster in pixels. + */ + size: Size; + + /** + * The width of the raster in pixels. + */ + width: number; + + /** + * The height of the raster in pixels. + */ + height: number; + + /** + * The resolution of the raster at its current size, in PPI (pixels per inch). + * Read Only. + */ + resolution: Size; + + /** + * The HTMLImageElement of the raster, if one is associated. + */ + image: HTMLImageElement | HTMLCanvasElement; + + /** + * The Canvas object of the raster. If the raster was created from an image, accessing its canvas causes the raster to try and create one and draw the image into it. Depending on security policies, this might fail, in which case null is returned instead. + */ + canvas: HTMLCanvasElement; + + /** + * The Canvas 2D drawing context of the raster. + */ + context: CanvasRenderingContext2D; + + /** + * The source of the raster, which can be set using a DOM Image, a Canvas, a data url, a string describing the URL to load the image from, or the ID of a DOM element to get the image from (either a DOM Image or a Canvas). Reading this property will return the url of the source image or a data-url. + */ + source: HTMLImageElement | HTMLCanvasElement | string; + + /** + * Extracts a part of the Raster's content as a sub image, and returns it as a Canvas object. + * @param rect - the boundaries of the sub image in pixel coordinates + */ + getSubCanvas(rect: Rectangle): HTMLCanvasElement; + + /** + * Extracts a part of the raster item's content as a new raster item, placed in exactly the same place as the original content. + * @param rect - the boundaries of the sub raster in pixel coordinates + */ + getSubRaster(rect: Rectangle): Raster; + + /** + * Returns a Base 64 encoded data: URL representation of the raster. + */ + toDataURL(): string; + + /** + * Draws an image on the raster. + * @param image - the image to draw + * @param point - the offset of the image as a point in pixel coordinates + */ + drawImage(image: HTMLImageElement | HTMLCanvasElement, point: Point): void; + + /** + * Calculates the average color of the image within the given path, rectangle or point. This can be used for creating raster image effects. + * @param object - the path, rectangle or point to get the average image color from + */ + getAverageColor(object: Path | Rectangle | Point): Color; + + /** + * Gets the color of a pixel in the raster. + * @param x - the x offset of the pixel in pixel coordinates + * @param y - the y offset of the pixel in pixel coordinates + */ + getPixel(x: number, y: number): Color; + + /** + * Gets the color of a pixel in the raster. + * @param point - the offset of the pixel as a point in pixel coordinates + */ + getPixel(point: Point): Color; + + /** + * Sets the color of the specified pixel to the specified color + * @param x - the x offset of the pixel in pixel coordinates + * @param y - the y offset of the pixel in pixel coordinates + * @param color - the color that the pixel will be set to + */ + setPixel(x: number, y: number, color: Color): void; + + /** + * Sets the color of the specified pixel to the specified color. + * @param point - the offset of the pixel as a point in pixel coordinates + * @param color - the color that the pixel will be set to + */ + setPixel(point: Point, color: Color): void; + + /** + * + * @param size + */ + createImageData(size: Size): ImageData; + + /** + * + * @param rect + */ + getImageData(rect: Rectangle): ImageData; + + /** + * + * + * @param data + * @param point + */ + getImageData(data: ImageData, point: Point): void; + + } + /** + * A PlacedSymbol represents an instance of a symbol which has been placed in a Paper.js project. + */ + export class PlacedSymbol extends Item { + + /** + * Creates a new PlacedSymbol Item. + * @param symbol - the symbol to place + * @param point [optional] - the center point of the placed symbol + */ + constructor(symbol: Symbol, point?: Point); + + /** + * The symbol that the placed symbol refers to. + */ + symbol: Symbol; + + } + /** + * A HitResult object contains information about the results of a hit test. It is returned by item.hitTest(point) and project.hitTest(point). + */ + export class HitResult { + + /** + * Describes the type of the hit result. For example, if you hit a segment point, the type would be 'segment'. + * type String('segment', 'handle-in', 'handle-out', 'curve', 'stroke', 'fill', 'bounds', 'center', 'pixel') + */ + type: string; + + /** + * If the HitResult has a hitResult.type of 'bounds', this property describes which corner of the bounding rectangle was hit. + * type String('top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-center', 'top-center', 'right-center', 'bottom-center') + */ + name: string; + + /** + * The item that was hit. + */ + item: Item; + + /** + * If the HitResult has a type of 'curve' or 'stroke', this property gives more information about the exact position that was hit on the path. + */ + location: CurveLocation; + + /** + * If the HitResult has a type of 'pixel', this property refers to the color of the pixel on the Raster that was hit. + */ + color: Color; + + /** + * If the HitResult has a type of 'stroke', 'segment', 'handle-in' or 'handle-out', this property refers to the segment that was hit or that is closest to the hitResult.location on the curve. + */ + segment: Segment; + + /** + * Describes the actual coordinates of the segment, handle or bounding box corner that was hit + */ + point: Point; + + } + /** + * The PathItem class is the base for any items that describe paths and offer standardised methods for drawing and path manipulation, such as Path and CompoundPath. + */ + export class PathItem extends Item { + + /** + * The path's geometry, formatted as SVG style path data. + */ + pathData: string; + + /** + * Returns all intersections between two PathItem items as an array of CurveLocation objects. CompoundPath items are also supported. + * @param path - the other item to find the intersections with + * @param sorted [optional] - specifies whether the returned CurveLocation objects should be sorted by path and offset, default: false + */ + getIntersections(path: PathItem, sorted?: boolean): CurveLocation[]; + + /** + * Smooth bezier curves without changing the amount of segments or their points, by only smoothing and adjusting their handle points, for both open ended and closed paths. + */ + smooth(): void; + + /** + * On a normal empty Path, the point is simply added as the path's first segment. If called on a CompoundPath, a new Path is created as a child and the point is added as its first segment. + * @param point - the path's first segment + */ + moveTo(point: Point): void; + + /** + * Draw a line from the current point to the given point + * @param point - the end point of the line + */ + lineTo(point: Point): void; + + /** + * Adds a cubic bezier curve to the path, defined by two handles and a to point. + * @param handle1 - The first control point handle for the curve + * @param handle2 - The second control point handle for the curve + * @param to - The end control point of the curve + */ + cublicCurveTo(handle1: Point, handle2: Point, to: Point): void; + + /** + * Adds a quadratic bezier curve to the path, defined by a handle and a to point. + * @param handle - The control point for the curve + * @param to - The end control point of the curve + */ + quadraticCurveTo(handle: Point, to: Point): void; + + /** + * Draws a curve from the position of the last segment point in the path that goes through the specified through point, to the specified to point by adding one segment to the path. + * @param through - the point through which the curve should go + * @param to - the point where the curve should end + * @param parameter [optional] - default: 0.5 + */ + curveTo(through: Point, to: Point, parameter?: number): void; + + /** + * Draws an arc from the position of the last segment point in the path that goes through the specified through point, to the specified to point by adding one or more segments to the path. + * @param through - the point where the arc should pass through + * @param to - the point where the arc should end + */ + arcTo(through: Point, to: Point): void; + + /** + * Draws an arc from the position of the last segment point in the path to the specified point by adding one or more segments to the path. + * @param to - the point where the arc should end + * @param closewise [optional] - specifies whether the arc should be drawn in clockwise direction. optional, default: true + */ + arcTo(to: Point, clockwise?: boolean): void; + + /** + * Closes the path. When closed, Paper.js connects the first and last segment of the path with an additional curve. + * @param join - controls whether the method should attempt to merge the first segment with the last if they lie in the same location. + */ + closePath(join: boolean): void; + + /** + * If called on a CompoundPath, a new Path is created as a child and a point is added as its first segment relative to the position of the last segment of the current path. + * @param to - + */ + moveBy(to: Point): void; + + /** + * Adds a segment relative to the last segment point of the path. + * @param to - the vector which is added to the position of the last segment of the path, to get to the position of the new segment. + */ + lineBy(to: Point): void; + + /** + * + * @param through - + * @param to - + * @param parameter [optional] - default 0.5 + */ + curveBy(through: Point, to: Point, parameter?: number): void; + + /** + * + * @param handle1 - + * @param handle2 - + * @param to - + */ + cublicCurveBy(handle1: Point, handle2: Point, to: Point): void; + + /** + * + * @param handle - + * @param to - + */ + quadraticCurveBy(handle: Point, to: Point): void; + + /** + * + * @param through - + * @param to - + */ + arcBy(through: Point, to: Point): void; + + /** + * + * @param to - + * @param clockwise [optional] - default: true + */ + arcBy(to: Point, clockwise?: boolean): void; + + /** + * Merges the geometry of the specified path from this path's geometry and returns the result as a new path item. + * @param path - the path to unite with + */ + unite(path: PathItem): PathItem; + + /** + * Intersects the geometry of the specified path with this path's geometry and returns the result as a new path item. + * @param path - the path to intersect with + */ + intersect(path: PathItem): PathItem; + + /** + * Subtracts the geometry of the specified path from this path's geometry and returns the result as a new path item. + * @param - the path to subtract + */ + subtract(path: PathItem): PathItem; + + /** + * Excludes the intersection of the geometry of the specified path with this path's geometry and returns the result as a new group item. + * @param - the path to exclude the intersection of + */ + exclude(path: PathItem): PathItem; + + /** + * Splits the geometry of this path along the geometry of the specified path returns the result as a new group item. + * @param - the path to divide by + */ + divide(path: PathItem): PathItem; + + } + /** + * The path item represents a path in a Paper.js project. + */ + export class Path extends PathItem { + + /** + * Creates a linear path item from two points describing a line. + * @param from - the line's starting point + * @param to - the line's ending point + */ + static Line(from: Point, to: Point): Path; + + /** + * Creates a linear path item from the properties described by an object literal. + * @param object - an object literal containing properties describing the path's attributes + */ + static Line(object: any): Path; + + /** + * Creates a circular path item. + * @param center - the center point of the circle + * @param radius - the radius of the circle + */ + static Circle(center: Point, radius: number): Path; + + /** + * Creates a circular path item from the properties described by an object literal. + * @param object - an object literal containing properties describing the path's attributes + */ + static Circle(object: any): Path; + + /** + * Creates a rectangular path item, with optionally rounded corners. + * @param rectangle - the rectangle object describing the geometry of the rectangular path to be created. + * @param radius [optional] - the size of the rounded corners default: null + */ + static Rectangle(rectangle: Rectangle, radius?: number): Path; + + /** + * Creates a rectangular path item from a point and a size object. + * @param point - the rectangle's top-left corner. + * @param size - the rectangle's size. + */ + static Rectangle(point: Point, size: Size): Path; + + /** + * Creates a rectangular path item from the passed points. These do not necessarily need to be the top left and bottom right corners, the constructor figures out how to fit a rectangle between them. + * @param from - the first point defining the rectangle + * @param to - the second point defining the rectangle + */ + static Rectangle(from: Point, to: Point): Path; + + /** + * Creates a rectangular path item from the properties described by an object literal. + * @param object - an object literal containing properties describing the path's attributes + */ + static Rectangle(object: any): Path; + + /** + * Creates an elliptical path item. + * @param rectangle - the rectangle circumscribing the ellipse + */ + static Ellipse(rectangle: Rectangle): Path; + + /** + * Creates an elliptical path item from the properties described by an object literal. + * @param object - an object literal containing properties describing the path's attributes + */ + static Ellipse(object: any): Path; + /** + * Creates a circular arc path item + * @param from - the starting point of the circular arc + * @param through - the point the arc passes through + * @param to - the end point of the arc + */ + static Arc(from: Point, through: Point, to: Point): Path; + + /** + * Creates an circular arc path item from the properties described by an object literal. + * @param object - an object literal containing properties describing the path's attributes + */ + static Arc(object: any): Path; + + /** + * Creates a regular polygon shaped path item. + * @param center - the center point of the polygon + * @param sides - the number of sides of the polygon + * @param radius - the radius of the polygon + */ + static RegularPolygon(center: Point, sides: number, radius: number): Path; + + /** + * Creates a regular polygon shaped path item from the properties described by an object literal. + * @param object - an object literal containing properties describing the path's attributes + */ + static RegularPolygon(object: any): Path; + + /** + * Creates a star shaped path item. The largest of radius1 and radius2 will be the outer radius of the star. The smallest of radius1 and radius2 will be the inner radius. + * @param center - the center point of the star + * @param points - the number of points of the star + * @param radius1 + * @param radius2 + */ + static Star(center: Point, points: number, radius1: number, radius2: number): Path; + + /** + * Creates a star shaped path item from the properties described by an object literal. + * @param object - an object literal containing properties describing the path's attributes + */ + static Star(object: any): Path; + + /** + * Creates a new path item and places it at the top of the active layer. + * @param segments [optional] - An array of segments (or points to be converted to segments) that will be added to the path + */ + constructor(segments?: Segment[]| Point[]); + + /** + * Creates a new path item from an object description and places it at the top of the active layer. + * @param object - an object literal containing properties describing the path's attributes + */ + constructor(object?: any); + + /** + * Creates a new path item from SVG path-data and places it at the top of the active layer. + * @param pathData - the SVG path-data that describes the geometry of this path. + */ + constructor(pathData?: string); + + /** + * The segments contained within the path. + * Array of Segment objects + */ + segments: Segment[]; + + /** + * The first Segment contained within the path. + * Read only. + */ + firstSegment: Segment; + + /** + * The last Segment contained within the path + * Read only. + */ + lastSegment: Segment; + + /** + * The curves contained within the path. + * Array of Curve objects + */ + curves: Curve[]; + + /** + * The first Curve contained within the path. + * Read only. + */ + firstCurve: Curve; + + /** + * The last Curve contained within the path. + * Read only. + */ + lastCurve: Curve; + + /** + * Specifies whether the path is closed. If it is closed, Paper.js connects the first and last segments. + */ + closed: boolean; + + /** + * The approximate length of the path in points. + * Read only. + */ + length: number; + + /** + * The area of the path in square points. Self-intersecting paths can contain sub-areas that cancel each other out. + * Read only. + */ + area: number; + + /** + * Specifies whether the path and all its segments are selected. Cannot be true on an empty path. + */ + fullySelected: boolean; + + /** + * Specifies whether the path is oriented clock-wise. + */ + clockwise: boolean; + + /** + * Returns a point that is guaranteed to be inside the path. + * Read only. + */ + interiorPoint: Point; + + /** + * Adds one or more segments to the end of the segments array of this path. + * @param segment - the segment or point to be added. + * Returns the added segment. This is not necessarily the same object, e.g. if the segment to be added already belongs to another path. + */ + add(segment: Segment | Point): Segment; + + /** + * Inserts one or more segments at a given index in the list of this path's segments. + * @param index - the index at which to insert the segment. + * @param segment - the segment or point to be inserted. + * Returns the added segment. This is not necessarily the same object, e.g. if the segment to be added already belongs to another path. + */ + insert(index: number, segment: Segment | Point): Segment; + + /** + * Adds an array of segments (or types that can be converted to segments) to the end of the segments array. + * @param segments - Array of Segment objects + * Returns an array of the added segments. These segments are not necessarily the same objects, e.g. if the segment to be added already belongs to another path. + */ + addSegments(segments: Segment[]): Segment[]; + + /** + * Inserts an array of segments at a given index in the path's segments array. + * @param index - the index at which to insert the segments. + * @param segments - the segments to be inserted. + * Returns an array of the added segments. These segments are not necessarily the same objects, e.g. if the segment to be added already belongs to another path. + */ + insertSegments(index: number, segments: Segment[]): Segment[]; + + /** + * Removes the segment at the specified index of the path's segments array. + * @param index - the index of the segment to be removed + * Returns the removed segment + */ + removeSegment(index: number): Segment; + + /** + * Removes all segments from the path's segments array. + * Returns an array containing the removed segments + */ + removeSegments(): Segment[]; + + /** + * Removes the segments from the specified from index to the to index from the path's segments array. + * @param from - the beginning index, inclusive + * @param to [optional = segments.length] - the ending index + * Returns an array containing the removed segments + */ + removeSegments(from: number, to?: number): Segment[]; + + /** + * Converts the curves in a path to straight lines with an even distribution of points. The distance between the produced segments is as close as possible to the value specified by the maxDistance parameter. + * @param maxDistance - the maximum distance between the points + */ + flatten(maxDistance: number): void; + + /** + * Smooths a path by simplifying it. The path.segments array is analyzed and replaced by a more optimal set of segments, reducing memory usage and speeding up drawing. + * @param tolerance [optional = 2.5] - + */ + simplify(tolerance?: number): void; + + /** + * Splits the path at the given offset. After splitting, the path will be open. If the path was open already, splitting will result in two paths. + * @param offset - the offset at which to split the path as a number between 0 and path.length + * Returns the newly created path after splitting, if any + */ + split(offset: number): Path; + + /** + * Splits the path at the given curve location. After splitting, the path will be open. If the path was open already, splitting will result in two paths. + * @param location - the curve location at which to split the path + * Returns the newly created path after splitting, if any + */ + split(location: CurveLocation): Path; + + /** + * Splits the path at the given curve index and parameter. After splitting, the path will be open. If the path was open already, splitting will result in two paths. + * @param index - the index of the curve in the path.curves array at which to split + * @param parameter - the parameter at which the curve will be split + * Returns the newly created path after splitting, if any + */ + split(index: number, parameter: number): Path; + + /** + * Reverses the orientation of the path, by reversing all its segments. + */ + reverse(): void; + + /** + * Joins the path with the specified path, which will be removed in the process. + * @param path - the path to join this path with + * Returns the joined path + */ + join(path: Path): Path; + + /** + * Returns the curve location of the specified point if it lies on the path, null otherwise. + * @param point - the point on the path. + */ + getLocationOf(point: Point): CurveLocation; + + /** + * Returns the length of the path from its beginning up to up to the specified point if it lies on the path, null otherwise. + * @param point - the point on the path. + */ + getOffsetOf(point: Point): number; + + /** + * Returns the curve location of the specified offset on the path. + * @param offset - the offset on the path, where 0 is at the beginning of the path and path.length at the end. + * @param isParameter [optional=false] - + */ + getLocationAt(offset: number, isParameter?: boolean): CurveLocation; + + /** + * Calculates the point on the path at the given offset. Returns the point at the given offset + * @param offset - the offset on the path, where 0 is at the beginning of the path and path.length at the end. + * @param isParameter [optional=false] - + */ + getPointAt(offset: number, isPatameter?: boolean): Point; + + /** + * Calculates the tangent vector of the path at the given offset. Returns the tangent vector at the given offset + * @param offset - the offset on the path, where 0 is at the beginning of the path and path.length at the end. + * @param isParameter [optional=false] - + */ + getTangentAt(offset: number, isPatameter?: boolean): Point; + + /** + * Calculates the normal vector of the path at the given offset. Returns the normal vector at the given offset + * @param offset - the offset on the path, where 0 is at the beginning of the path and path.length at the end. + * @param isParameter [optional=false] - + */ + getNormalAt(offset: number, isParameter?: boolean): Point; + + /** + * Calculates the curvature of the path at the given offset. Curvatures indicate how sharply a path changes direction. A straight line has zero curvature, where as a circle has a constant curvature. The path's radius at the given offset is the reciprocal value of its curvature. + * @param offset - the offset on the path, where 0 is at the beginning of the path and path.length at the end. + * @param isParameter [optional=false] - + * @param point - the point for which we search the nearest location + */ + getCurvatureAt(offset: number, isParameter?: boolean, point?: Point): number; + + /** + * Returns the nearest point on the path to the specified point. + * @param point - the point for which we search the nearest point + */ + getNearestPoint(point: Point): Point; + + + } + /** + * A compound path contains two or more paths, holes are drawn where the paths overlap. All the paths in a compound path take on the style of the backmost path and can be accessed through its item.children list. + */ + export class CompoundPath extends PathItem { + + /** + * Creates a new compound path item from an object description and places it at the top of the active layer. + * @param object - an object literal containing properties to be set on the path + */ + constructor(object: any); + + /** + * Creates a new compound path item from SVG path-data and places it at the top of the active layer. + * @param pathData - the SVG path-data that describes the geometry of this path. + */ + constructor(pathData: string); + + /** + * Specifies whether the compound path is oriented clock-wise. + */ + clockwise: boolean; + + /** + * The first Segment contained within the path. + * Read Only + */ + firstSegment: Segment; + + /** + * The last Segment contained within the path. + * Read Only + */ + lastSegment: Segment; + + /** + * All the curves contained within the compound-path, from all its child Path items. + * Read Only + */ + curves: Curve[]; + + /** + * The first Curve contained within the path. + * Read Only + */ + firstCurve: Curve; + + /** + * The last Curve contained within the path. + * Read only. + */ + lastCurve: Curve; + + /** + * The area of the path in square points. Self-intersecting paths can contain sub-areas that cancel each other out. + * Read Only. + */ + area: number; + + /** + * Reverses the orientation of all nested paths. + */ + reverse(): void; + + } + /** + * The Segment object represents the points of a path through which its Curve objects pass. The segments of a path can be accessed through its path.segments array. + * Each segment consists of an anchor point (segment.point) and optionaly an incoming and an outgoing handle (segment.handleIn and segment.handleOut), describing the tangents of the two Curve objects that are connected by this segment. + */ + export class Segment { + + /** + * Creates a new Segment object. + * @param point [optional] - the anchor point of the segment default: {x: 0, y: 0} + * @param handleIn [optional] - the handle point relative to the anchor point of the segment that describes the in tangent of the segment default: {x: 0, y: 0} + * @param handleOut [optional] - the handle point relative to the anchor point of the segment that describes the out tangent of the segment default: {x: 0, y: 0} + */ + constructor(point?: Point, handleIn?: Point, handleOut?: Point); + + /** + * Creates a new Segment object. + * @param object - an object literal containing properties to be set on the segment. + */ + constructor(object?: any); + + /** + * The anchor point of the segment. + */ + point: Point; + + /** + * The handle point relative to the anchor point of the segment that describes the in tangent of the segment. + */ + handleIn: Point; + + /** + * The handle point relative to the anchor point of the segment that describes the out tangent of the segment. + */ + handleOut: Point; + + /** + * Specifies whether the segment has no handles defined, meaning it connects two straight lines. + */ + linear: boolean; + + /** + * Specifies whether the point of the segment is selected. + */ + selected: boolean; + + /** + * The index of the segment in the path.segments array that the segment belongs to. + * Read Only + */ + index: number; + + /** + * The path that the segment belongs to. + * Read Only + */ + path: Path; + + /** + * The curve that the segment belongs to. For the last segment of an open path, the previous segment is returned. + * Read only. + */ + curve: Curve; + + /** + * The curve location that describes this segment's position ont the path. + * Read Only. + */ + location: CurveLocation; + + /** + * The next segment in the path.segments array that the segment belongs to. If the segments belongs to a closed path, the first segment is returned for the last segment of the path. + * Read Only. + */ + next: Segment; + + /** + * The previous segment in the path.segments array that the segment belongs to. If the segments belongs to a closed path, the last segment is returned for the first segment of the path. + * Read Only. + */ + previous: Segment; + + /** + * Returns true if the the two segments are the beginning of two lines and if these two lines are running parallel. + * @param segment + */ + isColinear(segment: Segment): boolean; + + /** + * Returns true if the segment at the given index is the beginning of an orthogonal arc segment. The code looks at the length of the handles and their relation to the distance to the imaginary corner point. If the relation is kappa, then it's an arc. + */ + isArc(): boolean; + + /** + * Returns the reversed the segment, without modifying the segment itself. + */ + reverse(): Segment; + + /** + * Removes the segment from the path that it belongs to. + */ + remove(): boolean; + + /** + * A string representation of the segment + */ + toString(): string; + + /** + * Transform the segment by the specified matrix. + * @param matrix - the matrix to transform the segment by + */ + transform(matrix: Matrix): void; + + } + /** + * The Curve object represents the parts of a path that are connected by two following Segment objects. The curves of a path can be accessed through its path.curves array. + * While a segment describe the anchor point and its incoming and outgoing handles, a Curve object describes the curve passing between two such segments. Curves and segments represent two different ways of looking at the same thing, but focusing on different aspects. Curves for example offer many convenient ways to work with parts of the path, finding lengths, positions or tangents at given offsets. + */ + export class Curve { + + /** + * Creates a new curve object. + * @param segment1 - + * @param segment2 - + */ + constructor(segment1: Segment, segment2: Segment); + + /** + * Creates a new curve object. + * @param point1: Point + * @param handle1: Point + * @param handle2: Point + * @param point2: Point + */ + constructor(point1: Point, handle1: Point, handle2: Point, point2: Point); + + /** + * The first anchor point of the curve. + */ + point1: Point; + + /** + * The second anchor point of the curve. + */ + point2: Point; + + /** + * The handle point that describes the tangent in the first anchor point. + */ + handle1: Point; + + /** + * The handle point that describes the tangent in the second anchor point. + */ + handle2: Point; + + /** + * The first segment of the curve. + * Read Only. + */ + segment1: Segment; + + /** + * The second segment of the curve. + * Read only. + */ + segment2: Segment; + + /** + * The path that the curve belongs to. + * Read only. + */ + path: Path; + + /** + * The index of the curve in the path.curves array. + * Read Only. + */ + index: number; + + /** + * The next curve in the path.curves array that the curve belongs to. + * Read Only + */ + next: Curve; + + /** + * The previous curve in the path.curves array that the curve belongs to. + * Read Only. + */ + previous: Curve; + + /** + * Specifies whether the points and handles of the curve are selected. + */ + selected: boolean; + + /** + * The approximated length of the curve in points. + * Read Only. + */ + length: number; + + /** + * The bounding rectangle of the curve excluding stroke width. + */ + bounds: Rectangle; + + /** + * The bounding rectangle of the curve including stroke width. + */ + strokeBounds: Rectangle; + + /** + * The bounding rectangle of the curve including handles. + */ + handleBounds: Rectangle; + + /** + * Checks if this curve is linear, meaning it does not define any curve handle. + */ + isLinear(): boolean; + + /** + * TODO? + */ + //isHorizontal(): boolean; + + /** + * Divides the curve into two curves at the given offset. The curve itself is modified and becomes the first part, the second part is returned as a new curve. If the modified curve belongs to a path item, the second part is also added to the path. + * @param offset [optional] - the offset on the curve at which to split, or the curve time parameter if isParameter is true default: 0.5 + * @param isParameter [optional] - pass true if offset is a curve time parameter. default: false + */ + divide(offset?: number, isParameter?: boolean): Curve; + + /** + * Splits the path this curve belongs to at the given offset. After splitting, the path will be open. If the path was open already, splitting will result in two paths. + * @param offset [optional] - the offset on the curve at which to split, or the curve time parameter if isParameter is true default: 0.5 + * @param isParameter [optional] - pass true if offset is a curve time parameter. default: false + */ + split(offset?: number, isParameter?: boolean): Path; + + /** + * Returns a reversed version of the curve, without modifying the curve itself. + */ + reverse(): Curve; + + /** + * Removes the curve from the path that it belongs to, by merging its two path segments. + * returns true if the curve was removed, false otherwise + */ + remove(): boolean; + + /** + * Returns a copy of the curve. + */ + clone(): Curve; + + /** + * returns a string representation of the curve + */ + toString(): string; + + /** + * Calculates the curve time parameter of the specified offset on the path, relative to the provided start parameter. If offset is a negative value, the parameter is searched to the left of the start parameter. If no start parameter is provided, a default of 0 for positive values of offset and 1 for negative values of offset. + * @param offset - + * @param start [optional] - + */ + getParameterAt(offset: Point, start?: number): number; + + /** + * Returns the curve time parameter of the specified point if it lies on the curve, null otherwise. + * @param point - the point on the curve. + */ + getParameterOf(point: Point): number; + + /** + * Calculates the curve location at the specified offset or curve time parameter. + * @param offset - the offset on the curve, or the curve time parameter if isParameter is true + * @param isParameter [optional] - pass true if offset is a curve time parameter. default: false + */ + getLocationAt(offset: Point, isParameter?: boolean): CurveLocation; + + /** + * Returns the curve location of the specified point if it lies on the curve, null otherwise. + * @param point - the point on the curve + */ + getLocationOf(point: Point): CurveLocation; + + /** + * Returns the length of the path from its beginning up to up to the specified point if it lies on the path, null otherwise. + * @param point - the point on the path. + */ + getOffsetOf(point: Point): number; + + /** + * Calculates the point on the curve at the given offset. + * @param offset - the offset on the curve, or the curve time parameter if isParameter is true + * @param isParameter [optional] - pass true if offset is a curve time parameter. default: false + */ + getPointAt(offset: number, isParameter?: boolean): Point; + + /** + * Calculates the tangent vector of the curve at the given offset. + * @param offset - the offset on the curve, or the curve time parameter if isParameter is true + * @param isParameter [optional] - pass true if offset is a curve time parameter. default: false + */ + getTangentAt(offset: number, isParameter?: boolean): Point; + + /** + * Calculates the normal vector of the curve at the given offset. + * @param offset - the offset on the curve, or the curve time parameter if isParameter is true + * @param isParameter [optional] - pass true if offset is a curve time parameter. default: false + */ + getNormalAt(offset: number, isParameter?: boolean): Point; + + /** + * Calculates the curvature of the curve at the given offset. Curvatures indicate how sharply a curve changes direction. A straight line has zero curvature, where as a circle has a constant curvature. The curve's radius at the given offset is the reciprocal value of its curvature. + * @param offset - the offset on the curve, or the curve time parameter if isParameter is true + * @param isParameter - pass true if offset is a curve time parameter. default: false + */ + getCurvatureAt(offset: number, isParameter?: boolean): Point; + + } + /** + * CurveLocation objects describe a location on Curve objects, as defined by the curve parameter, a value between 0 (beginning of the curve) and 1 (end of the curve). If the curve is part of a Path item, its index inside the path.curves array is also provided. + * The class is in use in many places, such as path.getLocationAt(offset, isParameter), path.getLocationOf(point), Path#getNearestLocation(point),{@linkPathItem#getIntersections(path), etc. + */ + export class CurveLocation { + + /** + * Creates a new CurveLocation object. + * @param curve - + * @param parameter - + * @param point - + */ + constructor(curve: Curve, parameter: number, point: Point); + + /** + * The segment of the curve which is closer to the described location. + * Read Only + */ + segment: Segment; + + /** + * The curve that this location belongs to. + * Read Only + */ + curve: Curve; + + /** + * The curve location on the intersecting curve, if this location is the result of a call to pathItem.getIntersections(path) / Curve#getIntersections(curve). + * Read Only + */ + intersection: CurveLocation; + + /** + * The path this curve belongs to, if any. + * Read Only + */ + path: Path; + + /** + * The index of the curve within the path.curves list, if the curve is part of a Path item. + * Read Only. + */ + index: number; + + /** + * The length of the path from its beginning up to the location described by this object. If the curve is not part of a path, then the length within the curve is returned instead. + * Read only. + */ + offset: number; + + /** + * The length of the curve from its beginning up to the location described by this object. + * Read Only. + */ + curveOffset: number; + + /** + * The curve parameter, as used by various bezier curve calculations. It is value between 0 (beginning of the curve) and 1 (end of the curve). + * Read only. + */ + parameter: number; + + /** + * The point which is defined by the curve and parameter. + * Read only. + */ + point: Point; + + /** + * The distance from the queried point to the returned location. + * Read Only. + */ + distance: number; + + /** + * Checks whether tow CurveLocation objects are describing the same location on a path, by applying the same tolerances as elsewhere when dealing with curve time parameters. + * @param location CurveLocation + */ + equals(location: CurveLocation): boolean; + + /** + * Returns a string representation of the curve location + */ + toString(): string; + + } + /** + * A Project object in Paper.js is what usually is referred to as the document: The top level object that holds all the items contained in the scene graph. As the term document is already taken in the browser context, it is called Project. + * Projects allow the manipulation of the styles that are applied to all newly created items, give access to the selected items, and will in future versions offer ways to query for items in the scene graph defining specific requirements, and means to persist and load from different formats, such as SVG and PDF. + * The currently active project can be accessed through the paperScope.project variable. + * An array of all open projects is accessible through the paperScope.projects variable. + */ + export class Project { + + /** + * Creates a Paper.js project containing one empty Layer, referenced by project.activeLayer. + * @param element - the HTML canvas element that should be used as the element for the view, or an ID string by which to find the element. + */ + constructor(element: HTMLCanvasElement | string); + + /** + * The reference to the project's view. + * Read only. + */ + view: View; + + /** + * The currently active path style. All selected items and newly created items will be styled with this style. + */ + currentStyle: Style; + + /** + * The index of the project in the paperScope.projects list. + * Read Only + */ + index: number; + + /** + * The layers contained within the project. + */ + layers: Layer[]; + + /** + * The layer which is currently active. New items will be created on this layer by default. + * Read Only. + */ + activeLayer: Layer; + + /** + * The symbols contained within the project. + */ + symbols: Symbol[]; + + /** + * Activates this project, so all newly created items will be placed in it. + */ + activate(): void; + + /** + * Clears the project by removing all project.layers and project.symbols. + */ + clear(): void; + + /** + * Checks whether the project has any content or not. + */ + isEmpty(): boolean; + + /** + * Removes this project from the paperScope.projects list, and also removes its view, if one was defined. + */ + remove(): void; + + /** + * Selects all items in the project. + */ + selectAll(): void; + + /** + * Deselects all selected items in the project. + */ + deselectAll(): void; + + /** + * Perform a hit-test on the items contained within the project at the location of the specified point. + * The options object allows you to control the specifics of the hit-test and may contain a combination of the following values: + * @param point - the point where the hit-test should be performed + * @param options.tolerance -the tolerance of the hit-test in points. Can also be controlled through paperScope.settings.hitTolerance + * @param options.class - only hit-test again a certain item class and its sub-classes: Group, Layer, Path, CompoundPath, Shape, Raster, PlacedSymbol, PointText, etc. + * @param options.fill - hit-test the fill of items. + * @param options.stroke - hit-test the stroke of path items, taking into account the setting of stroke color and width. + * @param options.segments - hit-test for segment.point of Path items. + * @param options.curves - hit-test the curves of path items, without taking the stroke color or width into account. + * @param options.handles - hit-test for the handles. (segment.handleIn / segment.handleOut) of path segments. + * @param options.ends - only hit-test for the first or last segment points of open path items. + * @param options.bounds - hit-test the corners and side-centers of the bounding rectangle of items (item.bounds). + * @param options.center - hit-test the rectangle.center of the bounding rectangle of items (item.bounds). + * @param options.guides - hit-test items that have Item#guide set to true. + * @param options.selected - only hit selected items. + */ + hitTest(point: Point, options?: { tolerance?: number; class?: string; fill?: boolean; stroke?: boolean; segments?: boolean; curves?: boolean; handles?: boolean; ends?: boolean; bounds?: boolean; center?: boolean; guides?: boolean; selected?: boolean; }): HitResult; + + /** + * Fetch items contained within the project whose properties match the criteria in the specified object. + * Extended matching is possible by providing a compare function or regular expression. Matching points, colors only work as a comparison of the full object, not partial matching (e.g. only providing the x- coordinate to match all points with that x-value). Partial matching does work for item.data. + * Matching items against a rectangular area is also possible, by setting either match.inside or match.overlapping to a rectangle describing the area in which the items either have to be fully or partly contained. + */ + getItems(match: any): Item[]; + + /** + * Fetch the first item contained within the project whose properties match the criteria in the specified object. + * Extended matching is possible by providing a compare function or regular expression. Matching points, colors only work as a comparison of the full object, not partial matching (e.g. only providing the x- coordinate to match all points with that x-value). Partial matching does work for item.data. + */ + getItem(match: any): Item; + + /** + * Exports (serializes) the project with all its layers and child items to a JSON data string. + * @param options [optional] - default {asString: true, precision: 5} + * @param options.asString - whether the JSON is returned as a Object or a String. + * @param options.precision - the amount of fractional digits in numbers used in JSON data. + */ + exportJSON(options?: { asString?: boolean; precision?: number }): string; + + /** + * Imports (deserializes) the stored JSON data into the project. + * Note that the project is not cleared first. You can call project.clear() to do so. + */ + importJSON(json: string): void; + + /** + * Exports the project with all its layers and child items as an SVG DOM, all contained in one top level SVG group node. + * @param options [optional] the export options, default: { asString: false, precision: 5, matchShapes: false } + * @param options.asString - whether a SVG node or a String is to be returned. + * @param options.precision - the amount of fractional digits in numbers used in SVG data. + * @param options.matchShapes - whether path items should tried to be converted to shape items, if their geometries can be made to match + */ + exportSVG(options?: { asString?: boolean; precision?: number; matchShapes?: boolean }): SVGElement; + + /** + * Converts the provided SVG content into Paper.js items and adds them to the active layer of this project. + * Note that the project is not cleared first. You can call project.clear() to do so. + * @param svg - the SVG content to import + * @param options [optional] - the import options, default: { expandShapes: false } + * @param options.expandShapes - whether imported shape items should be expanded to path items. + */ + importSVG(svg: SVGElement | string, options?: any): Item; + + } + /** + * Symbols allow you to place multiple instances of an item in your project. This can save memory, since all instances of a symbol simply refer to the original item and it can speed up moving around complex objects, since internal properties such as segment lists and gradient positions don't need to be updated with every transformation. + */ + export class Symbol { + + /** + * Creates a Symbol item. + * @param item - the source item which is copied as the definition of the symbol + * @param dontCenter [optional] - default: false + */ + constructor(item: Item, dontCenter?: boolean); + + /** + * The project that this symbol belongs to. + * Read Only. + */ + project: Project; + + /** + * The symbol definition. + */ + definition: Item; + + /** + * Places in instance of the symbol in the project. + * @param position [optional] - The position of the placed symbol. + */ + place(position?: Point): PlacedSymbol; + + /** + * Returns a copy of the symbol. + */ + clone(): Symbol; + + } + /** + * Style is used for changing the visual styles of items contained within a Paper.js project and is returned by item.style and project.currentStyle. + * All properties of Style are also reflected directly in Item, i.e.: item.fillColor. + * To set multiple style properties in one go, you can pass an object to item.style. This is a convenient way to define a style once and apply it to a series of items: + */ + export class Style { + + /** + * The view that this style belongs to. + * Read only. + */ + view: View; + + /** + * The color of the stroke. + */ + strokeColor: Color | string; + + /** + * The width of the stroke. + */ + strokeWidth: number; + + /** + * The shape to be used at the beginning and end of open Path items, when they have a stroke. + * String('round', 'square', 'butt' + */ + strokeCap: string; + + /** + * The shape to be used at the segments and corners of Path items when they have a stroke. + * String('miter', 'round', 'bevel') + */ + strokeJoin: string; + + /** + * Specifies whether the stroke is to be drawn taking the current affine transformation into account (the default behavior), or whether it should appear as a non-scaling stroke. + */ + strokeScaling: boolean; + + /** + * The dash offset of the stroke. + */ + dashOffset: number; + + /** + * Specifies an array containing the dash and gap lengths of the stroke. + */ + dashArray: number[]; + + /** + * The miter limit of the stroke. When two line segments meet at a sharp angle and miter joins have been specified for strokeJoin, it is possible for the miter to extend far beyond the strokeWidth of the path. The miterLimit imposes a limit on the ratio of the miter length to the strokeWidth. + */ + miterLimit: number; + + /** + * The fill color. + */ + fillColor: Color | string; + + /** + * The shadow color. + */ + shadowColor: Color | string; + + /** + * The shadow's blur radius. + */ + shadowBlur: number; + + /** + * The shadow's offset. + */ + shadowOffset: Point; + + /** + * The color the item is highlighted with when selected. If the item does not specify its own color, the color defined by its layer is used instead. + */ + selectedColor: Color | string; + + /** + * The font-family to be used in text content. default 'sans-serif' + */ + fontFamily: string; + + /** + * The font-weight to be used in text content. + */ + fontWeight: string | number; + + /** + * The font size of text content, as {@Number} in pixels, or as {@String} with optional units 'px', 'pt' and 'em'. + */ + fontSize: string | number; + + /** + * The text leading of text content. + */ + leading: number | string; + + /** + * The justification of text paragraphs. default "left" + */ + justification: string; + + } + export interface IHSBColor { + + /** + * the hue of the color as a value in degrees between 0 and 360 + */ + hue?: number; + /** + * the saturation of the color as a value between 0 and 1 + */ + saturation?: number; + /** + * the brightness of the color as a value between 0 and 1 + */ + brightness?: number; + /** + * the alpha of the color as a value between 0 and 1 + */ + alpha?: number; + + } + export interface IHSLColor { + + /** + * the hue of the color as a value in degrees between 0 and 360 + */ + hue?: number; + /** + * the saturation of the color as a value between 0 and 1 + */ + saturation?: number; + /** + * the brightness of the color as a value between 0 and 1 + */ + lightness?: number; + /** + * the alpha of the color as a value between 0 and 1 + */ + alpha?: number; + + } + export interface IGradientColor { + /** + * the gradient object that describes the color stops and type of gradient to be used. + */ + gradient?: Gradient; + /** + * the origin point of the gradient + */ + origin?: Point; + /** + * the destination point of the gradient stops: Array of GradientStop - the gradient stops describing the gradient, as an alternative to providing a gradient object + */ + destination?: Point; + /** + * controls whether the gradient is radial, as an alternative to providing a gradient object + */ + radial?: boolean; + } + /** + * All properties and functions that expect color values in the form of instances of Color objects, also accept named colors and hex values as strings which are then converted to instances of Color internally. + */ + export class Color { + + /** + * Creates a RGB Color object. + * @param red - the amount of red in the color as a value between 0 and 1 + * @param green - the amount of green in the color as a value between 0 and 1 + * @param blue - the amount of blue in the color as a value between 0 and 1 + * @param alpha [optional] - the alpha of the color as a value between 0 and 1 + */ + constructor(red: number, green: number, blue: number, alpha?: number); + + /** + * Creates a gray Color object. + * @param gray - the amount of gray in the color as a value between 0 and 1 + * @param alpha [optional] - the alpha of the color as a value between 0 and 1 + */ + constructor(gray: number, alpha?: number); + + /** + * Creates a HSB, HSL or gradient Color object from the properties of the provided object: + * @param object - an object describing the components and properties of the color. + */ + constructor(object: IHSBColor | IHSLColor | IGradientColor); + + /** + * Creates a gradient Color object. + * @param gradient - + * @param origin - + * @param destination - + * @param highlight [optional] - + */ + constructor(color: Gradient, origin: Point, destination: Point, highlight?: Point); + + /** + * The type of the color as a string. + * String('rgb', 'gray', 'hsb', 'hsl') + */ + type: string; + + /** + * The color components that define the color, including the alpha value if defined. + * Read Only. + */ + components: number; + + /** + * The color's alpha value as a number between 0 and 1. + * All colors of the different subclasses support alpha values. + */ + alpha: number; + + /** + * The amount of red in the color as a value between 0 and 1. + */ + red: number; + + /** + * The amount of green in the color as a value between 0 and 1. + */ + green: number; + + /** + * The amount of blue in the color as a value between 0 and 1. + */ + blue: number; + + /** + * The amount of gray in the color as a value between 0 and 1. + */ + gray: number; + + /** + * The hue of the color as a value in degrees between 0 and 360. + */ + hue: number; + + /** + * The saturation of the color as a value between 0 and 1. + */ + saturation: number; + + /** + * The brightness of the color as a value between 0 and 1. + */ + brightness: number; + + /** + * The lightness of the color as a value between 0 and 1. + * Note that all other components are shared with HSB. + */ + lightness: number; + + /** + * The gradient object describing the type of gradient and the stops. + */ + gradient: Gradient; + + /** + * The highlight point of the gradient. + */ + highlight: Point; + + /** + * Converts the color another type. + * @param type - String('rgb'|'gray'|'hsb'|'hsl') the color type to convert to. + */ + convert(type: string): Color; + + /** + * Checks if the color has an alpha value. + */ + hasAlpha(): boolean; + + /** + * Checks if the component color values of the color are the same as those of the supplied one. + * @param color - the color to compare with + */ + equals(color: Color): boolean; + + /** + * a copy of the color object + */ + clone(): Color; + + /** + * a string representation of the color + */ + toString(): string; + + /** + * Returns the color as a CSS string. + * @param hex - whether to return the color in hexadecial representation or as a CSS RGB / RGBA string. + */ + toCSS(hex: boolean): string; + + /** + * Transform the gradient color by the specified matrix. + * @param matrix - the matrix to transform the gradient color by + */ + transform(matrix: Matrix): void; + + } + /** + * The Gradient object. + */ + export class Gradient { + + /** + * The gradient stops on the gradient ramp. + */ + stops: GradientStop[]; + + /** + * Specifies whether the gradient is radial or linear. + */ + radial: boolean; + + /** + * a copy of the gradient + */ + clone(): Gradient; + + /** + * Checks whether the gradient is equal to the supplied gradient. + * @param gradient - the gradient to check against + */ + equals(gradient: Gradient): boolean; + + } + /** + * The GradientStop object. + */ + export class GradientStop { + + /** + * Creates a GradientStop object. + * @param color [optional] - the color of the stop, default: new Color(0, 0, 0) + * @param rampPoint [optional] - the position of the stop on the gradient ramp as a value between 0 and 1, default: 0 + */ + constructor(color?: Color, rampPoint?: number); + + /** + * The ramp-point of the gradient stop as a value between 0 and 1. + */ + rampPoint: number; + + /** + * The color of the gradient stop. + */ + color: Color; + + /** + * Returns a copy of the gradient-stop + */ + clone(): GradientStop; + + } + /** + * The View object wraps an HTML element and handles drawing and user interaction through mouse and keyboard for it. It offer means to scroll the view, find the currently visible bounds in project coordinates, or the center, both useful for constructing artwork that should appear centered on screen. + */ + export class View { + + /** + * The underlying native element. + * Read Only. + */ + element: HTMLCanvasElement; + + /** + * The ratio between physical pixels and device-independent pixels (DIPs) of the underlying canvas / device. + * It is 1 for normal displays, and 2 or more for high-resolution displays. + * Read only. + */ + pixelRatio: number; + + /** + * The resoltuion of the underlying canvas / device in pixel per inch (DPI). + * It is 72 for normal displays, and 144 for high-resolution displays with a pixel-ratio of 2. + * Read only. + */ + resolution: number; + + /** + * The size of the view. Changing the view's size will resize it's underlying element. + */ + viewSize: Size; + + /** + * The bounds of the currently visible area in project coordinates. + * Read only. + */ + bounds: Rectangle; + + /** + * The size of the visible area in project coordinates. + * Read only. + */ + size: Size; + + /** + * The center of the visible area in project coordinates. + */ + center: Point; + + /** + * The zoom factor by which the project coordinates are magnified. + */ + zoom: number; + + /** + * Handler function to be called on each frame of an animation. + * The function receives an event object which contains information about the frame event: + */ + onFrame: (event: IFrameEvent) => void; + + /** + * Handler function that is called whenever a view is resized. + */ + onResize: (event: Event) => void; + + /** + * Removes this view from the project and frees the associated element. + */ + remove(): void; + + /** + * Checks whether the view is currently visible within the current browser viewport. + */ + isVisible(): boolean; + + /** + * Scrolls the view by the given vector. + * @param point - the vector to scroll by + */ + scrollBy(point: Point): void; + + /** + * Makes all animation play by adding the view to the request animation loop. + */ + play(): void; + + /** + * Makes all animation pause by removing the view to the request animation loop. + */ + pause(): void; + + /** + * Updates the view if there are changes. Note that when using built-in event hanlders for interaction, animation and load events, this method is invoked for you automatically at the end. + */ + update(): void; + + /** + * + * @param point - + */ + projectToView(point: Point): Point; + + /** + * + * @param point - + */ + viewToProject(point: Point): Point; + + //I cannot use function: Function as it is a reserved keyword + + /** + * Attach an event handler to the view. + * @param type - String('frame'|'resize') the event type + * @param function - The function to be called when the event occurs + */ + on(type: string, callback: (event: Event) => void): Item; + + /** + * Attach one or more event handlers to the view. + */ + on(param: any): Item; + + /** + * Detach an event handler from the view. + * @param type - String('frame'|'resize') the event type + * @param function - The function to be detached + */ + off(type: string, callback: (event: Event) => void): Item; + + /** + * Detach one or more event handlers from the view. + * @param param - an object literal containing one or more of the following properties: frame, resize + */ + off(param: any): Item; + + /** + * Emit an event on the view. + * @param type - String('frame'|'resize') the event type + * @param event - an object literal containing properties describing the event. + */ + emit(type: string, event: any): boolean; + + /** + * Check if the view has one or more event handlers of the specified type. + * @param type - String('frame'|'resize') the event type + */ + responds(type: string): boolean; + + /** + * Draws the view when using paper.js directly in JavaScript + */ + draw(): void; + + } + /** + * The Tool object refers to a script that the user can interact with by using the mouse and keyboard and can be accessed through the global tool variable. All its properties are also available in the paper scope. + * The global tool variable only exists in scripts that contain mouse handler functions (onMouseMove, onMouseDown, onMouseDrag, onMouseUp) or a keyboard handler function (onKeyDown, onKeyUp). + */ + export class Tool { + + /** + * The minimum distance the mouse has to drag before firing the onMouseDrag event, since the last onMouseDrag event. + */ + minDistance: number; + + /** + * The maximum distance the mouse has to drag before firing the onMouseDrag event, since the last onMouseDrag event. + */ + maxDistance: number; + + /** + * + */ + fixedDistance: number; + + /** + * The function to be called when the mouse button is pushed down. The function receives a ToolEvent object which contains information about the mouse event. + */ + onMouseDown: (event: ToolEvent) => void; + + /** + * The function to be called when the mouse position changes while the mouse is being dragged. The function receives a ToolEvent object which contains information about the mouse event. + */ + onMouseDrag: (event: ToolEvent) => void; + + /** + * The function to be called the mouse moves within the project view. The function receives a ToolEvent object which contains information about the mouse event. + */ + onMouseMove: (event: ToolEvent) => void; + + /** + * The function to be called when the mouse button is released. The function receives a ToolEvent object which contains information about the mouse event. + */ + onMouseUp: (event: ToolEvent) => void; + + /** + * The function to be called when the user presses a key on the keyboard. + * The function receives a KeyEvent object which contains information about the keyboard event. + * If the function returns false, the keyboard event will be prevented from bubbling up. This can be used for example to stop the window from scrolling, when you need the user to interact with arrow keys. + */ + onKeyDown: (event: KeyEvent) => void; + + /** + * The function to be called when the user releases a key on the keyboard. + * The function receives a KeyEvent object which contains information about the keyboard event. + * If the function returns false, the keyboard event will be prevented from bubbling up. This can be used for example to stop the window from scrolling, when you need the user to interact with arrow keys. + */ + onKeyUp: (event: KeyEvent) => void; + + /** + * Activates this tool, meaning paperScope.tool will point to it and it will be the one that recieves mouse events. + */ + activate(): void; + + /** + * Removes this tool from the paperScope.tools list. + */ + remove(): void; + + //I cannot use function: Function as it is a reserved keyword + + /** + * Attach an event handler to the tool. + * @param type - String('mousedown'|'mouseup'|'mousedrag'|'mousemove'|'keydown'|'keyup') the event type + * @param function - The function to be called when the event occurs + */ + on(type: string, callback: (event: ToolEvent) => void): Tool; + + /** + * Attach one or more event handlers to the tool. + * @param param - an object literal containing one or more of the following properties: mousedown, mouseup, mousedrag, mousemove, keydown, keyup + */ + on(param: any): Tool; + + /** + * Detach an event handler from the tool. + * @param type - String('mousedown'|'mouseup'|'mousedrag'|'mousemove'|'keydown'|'keyup') the event type + * @param function - The function to be detached + */ + off(type: string, callback: (event: ToolEvent) => void): Tool; + + /** + * Detach one or more event handlers from the tool. + * @param param - an object literal containing one or more of the following properties: mousedown, mouseup, mousedrag, mousemove, keydown, keyup + */ + off(param: any): Tool; + + /** + * Emit an event on the tool. + * @param type - String('mousedown'|'mouseup'|'mousedrag'|'mousemove'|'keydown'|'keyup') the event type + * @param event - an object literal containing properties describing the event. + */ + emit(type: string, event: any): boolean; + + /** + * Check if the tool has one or more event handlers of the specified type. + * @param type - String('mousedown'|'mouseup'|'mousedrag'|'mousemove'|'keydown'|'keyup') the event type + */ + responds(type: string): boolean; + + } + export class Event { + + /** + * Read Only + */ + modifiers: any; + + } + /** + * ToolEvent The ToolEvent object is received by the Tool's mouse event handlers tool.onMouseDown, tool.onMouseDrag, tool.onMouseMove and tool.onMouseUp. The ToolEvent object is the only parameter passed to these functions and contains information about the mouse event. + */ + export class ToolEvent extends Event { + + /** + * The type of tool event. + * String('mousedown', 'mouseup', 'mousemove', 'mousedrag') + */ + type: string; + + /** + * The position of the mouse in project coordinates when the event was fired. + */ + point: Point; + + /** + * The position of the mouse in project coordinates when the previous event was fired. + */ + lastPoint: Point; + + /** + * The position of the mouse in project coordinates when the mouse button was last clicked. + */ + downPoint: Point; + + /** + * The point in the middle between lastPoint and point. This is a useful position to use when creating artwork based on the moving direction of the mouse, as returned by delta. + */ + middlePoint: Point; + + /** + * The difference between the current position and the last position of the mouse when the event was fired. In case of the mouseup event, the difference to the mousedown position is returned. + */ + delta: Point; + + /** + * The number of times the mouse event was fired. + */ + count: number; + + /** + * The item at the position of the mouse (if any). If the item is contained within one or more Group or CompoundPath items, the most top level group or compound path that it is contained within is returned. + */ + item: Item; + + /** + * a string representation of the tool event + */ + toString(): string; + + } + export class Key { + + /** + * Checks whether the specified key is pressed. + * @param key - One of: 'backspace', 'enter', 'shift', 'control', 'option', 'pause', 'caps-lock', 'escape', 'space', 'end', 'home', 'left', 'up', 'right', 'down', 'delete', 'command' + */ + static isDown(key: string): boolean; + + } + /** + * The KeyEvent object is received by the Tool's keyboard handlers tool.onKeyDown, tool.onKeyUp. The KeyEvent object is the only parameter passed to these functions and contains information about the keyboard event. + */ + export class KeyEvent extends Event { + + /** + * The type of key event. + * String('keydown', 'keyup') + */ + type: string; + + /** + * The string character of the key that caused this key event. + */ + character: string; + + /** + * The key that caused this key event. + */ + key: string; + + /** + * a string representation of the key event + */ + toString(): string; + + } + /** + * The TextItem type allows you to create typography. Its functionality is inherited by different text item types such as PointText, and AreaText (coming soon). They each add a layer of functionality that is unique to their type, but share the underlying properties and functions that they inherit from TextItem. + */ + export class TextItem extends Item { + + /** + * The text contents of the text item. + */ + content: string; + + /** + * The font-family to be used in text content. + */ + fontFamily: string; + + /** + * The font-weight to be used in text content. + */ + fontWeight: string | number; + + /** + * The font size of text content, as {@Number} in pixels, or as {@String} with optional units 'px', 'pt' and 'em'. + */ + fontSize: string | number; + + /** + * The text leading of text content. + */ + leading: string | number; + + /** + * The justification of text paragraphs. + * String('left', 'right', 'center') + */ + justification: string; + + } + /** + * A PointText item represents a piece of typography in your Paper.js project which starts from a certain point and extends by the amount of characters contained in it. + */ + export class PointText extends TextItem { + + /** + * Creates a point text item + * @param point - the position where the text will start + */ + constructor(point: Point); + + /** + * Creates a point text item from the properties described by an object literal. + * @param object - an object literal containing properties describing the path's attributes + */ + constructor(object: any); + + /** + * The PointText's anchor point + */ + point: Point; + + } + +} From fee5da4cdccf6fc0abbbd0859be3c1713cbd9053 Mon Sep 17 00:00:00 2001 From: sqwk Date: Thu, 18 Aug 2016 11:52:56 +0200 Subject: [PATCH 002/111] Fix Header --- paper/paper.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper/paper.d.ts b/paper/paper.d.ts index 9fc0c154a1..daf7e56827 100644 --- a/paper/paper.d.ts +++ b/paper/paper.d.ts @@ -1,7 +1,7 @@ // Type definitions for Paper.js v0.9.22 // Project: http://paperjs.org/ // Definitions by: Clark Stevenson -// forked from https://github.com/clark-stevenson/paper.d.ts +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped declare module 'paper' { From 044bac98a20880c27be9dba1eff863a1b5fde482 Mon Sep 17 00:00:00 2001 From: sqwk Date: Thu, 18 Aug 2016 11:53:09 +0200 Subject: [PATCH 003/111] Add Provisional Tests File --- paper/paper-tests.ts | 1 + 1 file changed, 1 insertion(+) create mode 100644 paper/paper-tests.ts diff --git a/paper/paper-tests.ts b/paper/paper-tests.ts new file mode 100644 index 0000000000..8e011255a2 --- /dev/null +++ b/paper/paper-tests.ts @@ -0,0 +1 @@ +/// From b09a00f0229752958811e43cceeab60721aaabc6 Mon Sep 17 00:00:00 2001 From: sqwk Date: Thu, 18 Aug 2016 11:58:03 +0200 Subject: [PATCH 004/111] Remove Space --- paper/paper.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/paper/paper.d.ts b/paper/paper.d.ts index daf7e56827..e463d730c0 100644 --- a/paper/paper.d.ts +++ b/paper/paper.d.ts @@ -1,6 +1,6 @@ // Type definitions for Paper.js v0.9.22 // Project: http://paperjs.org/ -// Definitions by: Clark Stevenson +// Definitions by: Clark Stevenson // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped declare module 'paper' { From bef3b8072e56bc74e4619336e0a5f9a99a399844 Mon Sep 17 00:00:00 2001 From: Boriss Nazarovs Date: Sat, 27 Aug 2016 19:00:50 +0300 Subject: [PATCH 005/111] Added type definition for eventemitter3-1.2.0 --- eventemitter3/eventemitter3-1.2.0-tests.ts | 113 ++++++++++++++++++ .../eventemitter3-1.2.0-tests.ts.tscparams | 1 + eventemitter3/eventemitter3-1.2.0.d.ts | 107 +++++++++++++++++ 3 files changed, 221 insertions(+) create mode 100644 eventemitter3/eventemitter3-1.2.0-tests.ts create mode 100644 eventemitter3/eventemitter3-1.2.0-tests.ts.tscparams create mode 100644 eventemitter3/eventemitter3-1.2.0.d.ts diff --git a/eventemitter3/eventemitter3-1.2.0-tests.ts b/eventemitter3/eventemitter3-1.2.0-tests.ts new file mode 100644 index 0000000000..517b8afd72 --- /dev/null +++ b/eventemitter3/eventemitter3-1.2.0-tests.ts @@ -0,0 +1,113 @@ +/// +'use strict'; + +import EventEmitter from 'eventemitter3'; + +const eventName = 'test'; +const eventSymbol: symbol = Symbol('test'); +const fn = () => console.log(1); + +// Extending EventEmitter +class TestEmitter extends EventEmitter { + constructor() { + super(); + } +} + +const ee: TestEmitter = new TestEmitter(); + +// EventEmitter.prefixed +// should be boolean or string static property +const prefix = EventEmitter.prefixed; +if (typeof prefix === 'boolean') { + console.log(prefix.valueOf()); +} else { + console.log(prefix.length); +} + +// EventEmitter.eventNames() +// should return array of strings or symbols +ee.eventNames().every((event) => { + if (typeof event === 'symbol') { + return false; + } else { + return event.length > 0; + } +}); + +// EventEmitter.listeners() +// should return array of functions +ee.listeners(eventName).map((listener) => { + return listener.bind(this); +}); +// should accept symbol as event name +ee.listeners(eventSymbol).map((listener) => { + return listener.bind(this); +}); +// should return boolean with 'exists' flag +const hasListeners: boolean = ee.listeners(eventName, true); + +// EventEmitter.emit() +// should support any number of arguments +ee.emit(eventName, 1, true, {}, [], 'test', Symbol(), null); +// should accept symbol as event name +ee.emit(eventSymbol); + +// EventEmitter.addListener() and EventEmitter.on() +// should accept function +ee.on(eventName, fn); +ee.addListener(eventName, fn); +// should accept optional context argument +ee.on(eventName, fn, this); +ee.addListener(eventName, fn, this); +// should accept symbol as event name +ee.on(eventSymbol, fn); +ee.addListener(eventSymbol, fn); +// should support fluent interface +ee.on(eventSymbol, fn).on(eventName, fn); +ee.addListener(eventSymbol, fn).addListener(eventName, fn); + +// EventEmitter.once() +// should accept event name and function +ee.once(eventName, fn); +// should accept optional context argument +ee.once(eventName, fn, this); +ee.once(eventName, fn, {}); +// should accept symbol as event name +ee.once(eventSymbol, fn); +// should support fluent interface +ee.once(eventSymbol, fn).once(eventName, fn); + +// EventEmitter.removeListener() and EventEmitter.off() +// should accept event name +ee.removeListener(eventName); +ee.off(eventName); +// should accept optional function +ee.removeListener(eventName, fn); +ee.off(eventName, fn); +// should accept optional context argument +ee.removeListener(eventName, fn, {}); +ee.off(eventName, fn, {}); +// should accept optional boolean flag for removing listeners added with `EventEmitter.once()` +ee.removeListener(eventName, fn, null, true); +ee.off(eventName, fn, null, true); +// should accept symbol as event name +ee.removeListener(eventSymbol); +ee.off(eventSymbol); +// should support fluent interface +ee.removeListener(eventName).removeListener(eventSymbol); +ee.off(eventName).off(eventSymbol); + +// EventEmitter.removeAllListeners() +// should not require any arguments +ee.removeAllListeners(); +// should accept optional event name +ee.removeAllListeners(eventName); +// should accept symbol as event name +ee.removeAllListeners(eventSymbol); +// should support fluent interface +ee.removeAllListeners(eventName).removeAllListeners(eventSymbol); + +// EventEmitter.setMaxListeners() +// should support fluent interface +ee.setMaxListeners().setMaxListeners(); diff --git a/eventemitter3/eventemitter3-1.2.0-tests.ts.tscparams b/eventemitter3/eventemitter3-1.2.0-tests.ts.tscparams new file mode 100644 index 0000000000..a0aefcf79a --- /dev/null +++ b/eventemitter3/eventemitter3-1.2.0-tests.ts.tscparams @@ -0,0 +1 @@ +--target es6 --allowSyntheticDefaultImports --noImplicitAny diff --git a/eventemitter3/eventemitter3-1.2.0.d.ts b/eventemitter3/eventemitter3-1.2.0.d.ts new file mode 100644 index 0000000000..ca43aa6c95 --- /dev/null +++ b/eventemitter3/eventemitter3-1.2.0.d.ts @@ -0,0 +1,107 @@ +// Type definitions for EventEmitter3 1.2.0 +// Project: https://github.com/primus/eventemitter3 +// Definitions by: Boriss Nazarovs +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare module 'eventemitter3' { + /** + * Minimal EventEmitter interface that is molded against the Node.js + * EventEmitter interface. + */ + class EventEmitter { + constructor(); + + /** + * Return an array listing the events for which the emitter has registered listeners. + * + * @returns {(string|symbol)[]} + */ + eventNames(): (string|symbol)[]; + + /** + * Return the listeners registered for a given event. + * + * @param {(string|symbol)} event The event name. + * @returns {Function[]} + */ + listeners(event: string|symbol): Function[]; + + /** + * Check if there listeners for a given event. + * If `exists` argument is not `true` lists listeners. + * + * @param {(string|symbol)} event The event name. + * @param {boolean} exists Only check if there are listeners. + * @returns {boolean} + */ + listeners(event: string|symbol, exists: boolean): boolean; + + /** + * Calls each of the listeners registered for a given event. + * + * @param {(string|symbol)} event The event name. + * @param {...*} args Arguments that are passed to registered listeners + * @returns {boolean} `true` if the event had listeners, else `false`. + */ + emit(event: string|symbol, ...args: any[]): boolean; + + /** + * Add a listener for a given event. + * + * @param {(string|symbol)} event The event name. + * @param {Function} fn The listener function. + * @param {*} [context=this] The context to invoke the listener with. + * @returns {EventEmitter} `this`. + */ + on(event: string|symbol, fn: Function, context?: any): EventEmitter; + + /** + * Add a one-time listener for a given event. + * + * @param {(string|symbol)} event The event name. + * @param {Function} fn The listener function. + * @param {*} [context=this] The context to invoke the listener with. + * @returns {EventEmitter} `this`. + */ + once(event: string|symbol, fn: Function, context?: any): EventEmitter; + + /** + * Remove the listeners of a given event. + * + * @param {(string|symbol)} event The event name. + * @param {Function} fn Only remove the listeners that match this function. + * @param {*} context Only remove the listeners that have this context. + * @param {boolean} once Only remove one-time listeners. + * @returns {EventEmitter} `this`. + */ + removeListener(event: string|symbol, fn?: Function, context?: any, once?: boolean): EventEmitter; + + /** + * Remove all listeners, or those of the specified event. + * + * @param {(string|symbol)} event The event name. + * @returns {EventEmitter} `this`. + */ + removeAllListeners(event?: string|symbol): EventEmitter; + + /** + * Alias method for `removeListener` + */ + off(event: string|symbol, fn?: Function, context?: any, once?: boolean): EventEmitter; + + /** + * Alias method for `on` + */ + addListener(event: string|symbol, fn: Function, context?: any): EventEmitter; + + /** + * This function doesn't apply anymore. + * @deprecated + */ + setMaxListeners(): EventEmitter; + + static prefixed: string|boolean; + } + + export = EventEmitter; +} From 6ed248d516f1c83b05806be67ece4853b69be792 Mon Sep 17 00:00:00 2001 From: Boriss Nazarovs Date: Thu, 1 Sep 2016 23:52:01 +0300 Subject: [PATCH 006/111] Merged eventemitter3-1.2.0 typings with main typing file --- eventemitter3/eventemitter3-1.2.0-tests.ts | 113 --- eventemitter3/eventemitter3-1.2.0.d.ts | 107 --- eventemitter3/eventemitter3-tests.ts | 673 +++--------------- ...arams => eventemitter3-tests.ts.tscparams} | 0 eventemitter3/eventemitter3.d.ts | 128 ++-- 5 files changed, 157 insertions(+), 864 deletions(-) delete mode 100644 eventemitter3/eventemitter3-1.2.0-tests.ts delete mode 100644 eventemitter3/eventemitter3-1.2.0.d.ts rename eventemitter3/{eventemitter3-1.2.0-tests.ts.tscparams => eventemitter3-tests.ts.tscparams} (100%) diff --git a/eventemitter3/eventemitter3-1.2.0-tests.ts b/eventemitter3/eventemitter3-1.2.0-tests.ts deleted file mode 100644 index 517b8afd72..0000000000 --- a/eventemitter3/eventemitter3-1.2.0-tests.ts +++ /dev/null @@ -1,113 +0,0 @@ -/// -'use strict'; - -import EventEmitter from 'eventemitter3'; - -const eventName = 'test'; -const eventSymbol: symbol = Symbol('test'); -const fn = () => console.log(1); - -// Extending EventEmitter -class TestEmitter extends EventEmitter { - constructor() { - super(); - } -} - -const ee: TestEmitter = new TestEmitter(); - -// EventEmitter.prefixed -// should be boolean or string static property -const prefix = EventEmitter.prefixed; -if (typeof prefix === 'boolean') { - console.log(prefix.valueOf()); -} else { - console.log(prefix.length); -} - -// EventEmitter.eventNames() -// should return array of strings or symbols -ee.eventNames().every((event) => { - if (typeof event === 'symbol') { - return false; - } else { - return event.length > 0; - } -}); - -// EventEmitter.listeners() -// should return array of functions -ee.listeners(eventName).map((listener) => { - return listener.bind(this); -}); -// should accept symbol as event name -ee.listeners(eventSymbol).map((listener) => { - return listener.bind(this); -}); -// should return boolean with 'exists' flag -const hasListeners: boolean = ee.listeners(eventName, true); - -// EventEmitter.emit() -// should support any number of arguments -ee.emit(eventName, 1, true, {}, [], 'test', Symbol(), null); -// should accept symbol as event name -ee.emit(eventSymbol); - -// EventEmitter.addListener() and EventEmitter.on() -// should accept function -ee.on(eventName, fn); -ee.addListener(eventName, fn); -// should accept optional context argument -ee.on(eventName, fn, this); -ee.addListener(eventName, fn, this); -// should accept symbol as event name -ee.on(eventSymbol, fn); -ee.addListener(eventSymbol, fn); -// should support fluent interface -ee.on(eventSymbol, fn).on(eventName, fn); -ee.addListener(eventSymbol, fn).addListener(eventName, fn); - -// EventEmitter.once() -// should accept event name and function -ee.once(eventName, fn); -// should accept optional context argument -ee.once(eventName, fn, this); -ee.once(eventName, fn, {}); -// should accept symbol as event name -ee.once(eventSymbol, fn); -// should support fluent interface -ee.once(eventSymbol, fn).once(eventName, fn); - -// EventEmitter.removeListener() and EventEmitter.off() -// should accept event name -ee.removeListener(eventName); -ee.off(eventName); -// should accept optional function -ee.removeListener(eventName, fn); -ee.off(eventName, fn); -// should accept optional context argument -ee.removeListener(eventName, fn, {}); -ee.off(eventName, fn, {}); -// should accept optional boolean flag for removing listeners added with `EventEmitter.once()` -ee.removeListener(eventName, fn, null, true); -ee.off(eventName, fn, null, true); -// should accept symbol as event name -ee.removeListener(eventSymbol); -ee.off(eventSymbol); -// should support fluent interface -ee.removeListener(eventName).removeListener(eventSymbol); -ee.off(eventName).off(eventSymbol); - -// EventEmitter.removeAllListeners() -// should not require any arguments -ee.removeAllListeners(); -// should accept optional event name -ee.removeAllListeners(eventName); -// should accept symbol as event name -ee.removeAllListeners(eventSymbol); -// should support fluent interface -ee.removeAllListeners(eventName).removeAllListeners(eventSymbol); - -// EventEmitter.setMaxListeners() -// should support fluent interface -ee.setMaxListeners().setMaxListeners(); diff --git a/eventemitter3/eventemitter3-1.2.0.d.ts b/eventemitter3/eventemitter3-1.2.0.d.ts deleted file mode 100644 index ca43aa6c95..0000000000 --- a/eventemitter3/eventemitter3-1.2.0.d.ts +++ /dev/null @@ -1,107 +0,0 @@ -// Type definitions for EventEmitter3 1.2.0 -// Project: https://github.com/primus/eventemitter3 -// Definitions by: Boriss Nazarovs -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -declare module 'eventemitter3' { - /** - * Minimal EventEmitter interface that is molded against the Node.js - * EventEmitter interface. - */ - class EventEmitter { - constructor(); - - /** - * Return an array listing the events for which the emitter has registered listeners. - * - * @returns {(string|symbol)[]} - */ - eventNames(): (string|symbol)[]; - - /** - * Return the listeners registered for a given event. - * - * @param {(string|symbol)} event The event name. - * @returns {Function[]} - */ - listeners(event: string|symbol): Function[]; - - /** - * Check if there listeners for a given event. - * If `exists` argument is not `true` lists listeners. - * - * @param {(string|symbol)} event The event name. - * @param {boolean} exists Only check if there are listeners. - * @returns {boolean} - */ - listeners(event: string|symbol, exists: boolean): boolean; - - /** - * Calls each of the listeners registered for a given event. - * - * @param {(string|symbol)} event The event name. - * @param {...*} args Arguments that are passed to registered listeners - * @returns {boolean} `true` if the event had listeners, else `false`. - */ - emit(event: string|symbol, ...args: any[]): boolean; - - /** - * Add a listener for a given event. - * - * @param {(string|symbol)} event The event name. - * @param {Function} fn The listener function. - * @param {*} [context=this] The context to invoke the listener with. - * @returns {EventEmitter} `this`. - */ - on(event: string|symbol, fn: Function, context?: any): EventEmitter; - - /** - * Add a one-time listener for a given event. - * - * @param {(string|symbol)} event The event name. - * @param {Function} fn The listener function. - * @param {*} [context=this] The context to invoke the listener with. - * @returns {EventEmitter} `this`. - */ - once(event: string|symbol, fn: Function, context?: any): EventEmitter; - - /** - * Remove the listeners of a given event. - * - * @param {(string|symbol)} event The event name. - * @param {Function} fn Only remove the listeners that match this function. - * @param {*} context Only remove the listeners that have this context. - * @param {boolean} once Only remove one-time listeners. - * @returns {EventEmitter} `this`. - */ - removeListener(event: string|symbol, fn?: Function, context?: any, once?: boolean): EventEmitter; - - /** - * Remove all listeners, or those of the specified event. - * - * @param {(string|symbol)} event The event name. - * @returns {EventEmitter} `this`. - */ - removeAllListeners(event?: string|symbol): EventEmitter; - - /** - * Alias method for `removeListener` - */ - off(event: string|symbol, fn?: Function, context?: any, once?: boolean): EventEmitter; - - /** - * Alias method for `on` - */ - addListener(event: string|symbol, fn: Function, context?: any): EventEmitter; - - /** - * This function doesn't apply anymore. - * @deprecated - */ - setMaxListeners(): EventEmitter; - - static prefixed: string|boolean; - } - - export = EventEmitter; -} diff --git a/eventemitter3/eventemitter3-tests.ts b/eventemitter3/eventemitter3-tests.ts index 6c5733bec7..895dc7f54b 100644 --- a/eventemitter3/eventemitter3-tests.ts +++ b/eventemitter3/eventemitter3-tests.ts @@ -1,586 +1,113 @@ /// -/// -/// 'use strict'; -import EventEmitter = require('eventemitter3'); -import util = require('util'); -import * as EventEmitter3ImportedAsES6Module from 'eventemitter3'; +import EventEmitter from 'eventemitter3'; -declare namespace Assume { - interface Class { - new(...args: any[]): T; - } - - interface Assume { - equals(compare: T): Assume; - equal(compare: T): Assume; - eqls(compare: T): Assume; - is: Assume; - deep: Assume; - to: Assume; - either(arr: T[]): Assume; - instanceOf(clazz: Class): Assume; - a(typeofString: string): Assume; - } - - export function assume(input: T): Assume; -} - -let assume = Assume.assume; - -class EventEmitterTest { - v: EventEmitter3.EventEmitter; +const eventName = 'test'; +const eventSymbol: symbol = Symbol('test'); +const fn = () => console.log(1); +// Extending EventEmitter +class TestEmitter extends EventEmitter { constructor() { - this.v = new EventEmitter(); - this.v = new EventEmitter3ImportedAsES6Module(); - - // Some methods are missing or incompatible with current implementation (v4.2.x) of NodeJS.EventEmitter - // (e.g. getMaxListenters or listeners) - // var n: NodeJS.EventEmitter = this.v; - } - - listeners() { - var v1: Function[] = this.v.listeners('click'); - } - - emit() { - var v1: boolean = this.v.emit('click'); - var v2: boolean = this.v.emit('click', 1); - var v3: boolean = this.v.emit('click', 1, '1'); - var v4: boolean = this.v.emit('click', 1, '1', true); - var v5: boolean = this.v.emit('click', 1, '1', true, new Date()); - } - - on() { - var fn = () => console.log(1); - var v1: EventEmitter3.EventEmitter = this.v.on('click', fn); - var v2: EventEmitter3.EventEmitter = this.v.on('click', fn, this); - } - - once() { - var fn = () => console.log(1); - var v1: EventEmitter3.EventEmitter = this.v.once('click', fn); - var v2: EventEmitter3.EventEmitter = this.v.once('click', fn, this); - } - - removeListener() { - var fn = () => console.log(1); - var v1: EventEmitter3.EventEmitter = this.v.removeListener('click', fn); - var v2: EventEmitter3.EventEmitter = this.v.removeListener('click', fn, true); - } - - removeAllListeners() { - var v1: EventEmitter3.EventEmitter = this.v.removeAllListeners('click'); - } - - off() { - var fn = () => console.log(1); - var v1: EventEmitter3.EventEmitter = this.v.off('click', fn); - var v2: EventEmitter3.EventEmitter = this.v.off('click', fn, true); - } - - addListener() { - var fn = () => console.log(1); - var v1: EventEmitter3.EventEmitter = this.v.addListener('click', fn); - var v2: EventEmitter3.EventEmitter = this.v.addListener('click', fn, this); - } - - setMaxListeners() { - var v1: EventEmitter3.EventEmitter = this.v.setMaxListeners(); + super(); } } +const ee: TestEmitter = new TestEmitter(); -describe('EventEmitter', function tests() { - 'use strict'; +// EventEmitter.prefixed +// should be boolean or string static property +const prefix = EventEmitter.prefixed; +if (typeof prefix === 'boolean') { + console.log(prefix.valueOf()); +} else { + console.log(prefix.length); +} - it('exposes a `prefixed` property', function () { - assume(EventEmitter.prefixed).is.either([false, '~']); - }); - - it('inherits when used with require(util).inherits', function () { - class Beast extends EventEmitter { - /* rawr, i'm a beast */ +// EventEmitter.eventNames() +// should return array of strings or symbols +ee.eventNames().every((event) => { + if (typeof event === 'symbol') { + return false; + } else { + return event.length > 0; } - - class BeastES6 extends EventEmitter3ImportedAsES6Module { - /* rawr, i'm a beast */ - } - - util.inherits(Beast, EventEmitter); - - var moop = new Beast() - , meap = new Beast(); - - assume(moop).is.instanceOf(Beast); - assume(moop).is.instanceOf(EventEmitter); - - moop.listeners(); - meap.listeners(); - - moop.on('data', function () { - throw new Error('I should not emit'); - }); - - meap.emit('data', 'rawr'); - meap.removeListener('foo'); - meap.removeAllListeners(); - }); - - describe('EventEmitter#emit', function () { - it('should return false when there are not events to emit', function () { - var e = new EventEmitter(); - - assume(e.emit('foo')).equals(false); - assume(e.emit('bar')).equals(false); - }); - - it('emits with context', function (done) { - var context = { bar: 'baz' } - , e = new EventEmitter(); - - e.on('foo', function (bar: string) { - assume(bar).equals('bar'); - assume(this).equals(context); - - done(); - }, context).emit('foo', 'bar'); - }); - - it('emits with context, multiple arguments (force apply)', function (done) { - var context = { bar: 'baz' } - , e = new EventEmitter(); - - e.on('foo', function (bar: string) { - assume(bar).equals('bar'); - assume(this).equals(context); - - done(); - }, context).emit('foo', 'bar', 1,2,3,4,5,6,7,8,9,0); - }); - - it('can emit the function with multiple arguments', function () { - var e = new EventEmitter(); - - for(var i = 0; i < 100; i++) { - (function (j: number) { - for (var i = 0, args: number[] = []; i < j; i++) { - args.push(j); - } - - e.once('args', function () { - assume(arguments.length).equals(args.length); - }); - - e.emit.apply(e, (['args'] as any[]).concat(args)); - })(i); - } - }); - - it('can emit the function with multiple arguments, multiple listeners', function () { - var e = new EventEmitter(); - - for(var i = 0; i < 100; i++) { - (function (j: number) { - for (var i = 0, args: number[] = []; i < j; i++) { - args.push(j); - } - - e.once('args', function () { - assume(arguments.length).equals(args.length); - }); - - e.once('args', function () { - assume(arguments.length).equals(args.length); - }); - - e.once('args', function () { - assume(arguments.length).equals(args.length); - }); - - e.once('args', function () { - assume(arguments.length).equals(args.length); - }); - - e.emit.apply(e, (['args'] as any[]).concat(args)); - })(i); - } - }); - - it('emits with context, multiple listeners (force loop)', function () { - var e = new EventEmitter(); - - e.on('foo', function (bar: string) { - assume(this).eqls({ foo: 'bar' }); - assume(bar).equals('bar'); - }, { foo: 'bar' }); - - e.on('foo', function (bar: string) { - assume(this).eqls({ bar: 'baz' }); - assume(bar).equals('bar'); - }, { bar: 'baz' }); - - e.emit('foo', 'bar'); - }); - - it('emits with different contexts', function () { - var e = new EventEmitter() - , pattern = ''; - - function writer() { - pattern += this; - } - - e.on('write', writer, 'foo'); - e.on('write', writer, 'baz'); - e.once('write', writer, 'bar'); - e.once('write', writer, 'banana'); - - e.emit('write'); - assume(pattern).equals('foobazbarbanana'); - }); - - it('should return true when there are events to emit', function (done) { - var e = new EventEmitter(); - - e.on('foo', function () { - process.nextTick(done); - }); - - assume(e.emit('foo')).equals(true); - assume(e.emit('foob')).equals(false); - }); - - it('receives the emitted events', function (done) { - var e = new EventEmitter(); - - e.on('data', function (a: string, b: EventEmitter3.EventEmitter, c: Date, d: void, undef: void) { - assume(a).equals('foo'); - assume(b).equals(e); - assume(c).is.instanceOf(Date); - assume(undef).equals(undefined); - assume(arguments.length).equals(3); - - done(); - }); - - e.emit('data', 'foo', e, new Date()); - }); - - it('emits to all event listeners', function () { - var e = new EventEmitter() - , pattern: string[] = []; - - e.on('foo', function () { - pattern.push('foo1'); - }); - - e.on('foo', function () { - pattern.push('foo2'); - }); - - e.emit('foo'); - - assume(pattern.join(';')).equals('foo1;foo2'); - }); - - (function each(keys: string[]) { - var key = keys.shift(); - - if (!key) return; - - it('can store event which is a known property: '+ key, function (next) { - var e = new EventEmitter(); - - e.on(key, function (key: string) { - assume(key).equals(key); - next(); - }).emit(key, key); - }); - - each(keys); - })([ - 'hasOwnProperty', - 'constructor', - '__proto__', - 'toString', - 'toValue', - 'unwatch', - 'watch' - ]); - }); - - describe('EventEmitter#listeners', function () { - it('returns an empty array if no listeners are specified', function () { - var e = new EventEmitter(); - - assume(e.listeners('foo')).is.a('array'); - assume(e.listeners('foo').length).equals(0); - }); - - it('returns an array of function', function () { - var e = new EventEmitter(); - - function foo() {} - - e.on('foo', foo); - assume(e.listeners('foo')).is.a('array'); - assume(e.listeners('foo').length).equals(1); - assume(e.listeners('foo')).deep.equals([foo]); - }); - - it('is not vulnerable to modifications', function () { - var e = new EventEmitter(); - - function foo() {} - - e.on('foo', foo); - - assume(e.listeners('foo')).deep.equals([foo]); - - e.listeners('foo').length = 0; - assume(e.listeners('foo')).deep.equals([foo]); - }); - - it('can return a boolean as indication if listeners exist', function () { - var e = new EventEmitter(); - - function foo() {} - - e.once('once', foo); - e.once('multiple', foo); - e.once('multiple', foo); - e.on('on', foo); - e.on('multi', foo); - e.on('multi', foo); - - assume(e.listeners('foo', true)).equals(false); - assume(e.listeners('multiple', true)).equals(true); - assume(e.listeners('on', true)).equals(true); - assume(e.listeners('multi', true)).equals(true); - - e.removeAllListeners(); - - assume(e.listeners('multiple', true)).equals(false); - assume(e.listeners('on', true)).equals(false); - assume(e.listeners('multi', true)).equals(false); - }); - }); - - describe('EventEmitter#once', function () { - it('only emits it once', function () { - var e = new EventEmitter() - , calls = 0; - - e.once('foo', function () { - calls++; - }); - - e.emit('foo'); - e.emit('foo'); - e.emit('foo'); - e.emit('foo'); - e.emit('foo'); - - assume(e.listeners('foo').length).equals(0); - assume(calls).equals(1); - }); - - it('only emits once if emits are nested inside the listener', function () { - var e = new EventEmitter() - , calls = 0; - - e.once('foo', function () { - calls++; - e.emit('foo'); - }); - - e.emit('foo'); - assume(e.listeners('foo').length).equals(0); - assume(calls).equals(1); - }); - - it('only emits once for multiple events', function () { - var e = new EventEmitter() - , multi = 0 - , foo = 0 - , bar = 0; - - e.once('foo', function () { - foo++; - }); - - e.once('foo', function () { - bar++; - }); - - e.on('foo', function () { - multi++; - }); - - e.emit('foo'); - e.emit('foo'); - e.emit('foo'); - e.emit('foo'); - e.emit('foo'); - - assume(e.listeners('foo').length).equals(1); - assume(multi).equals(5); - assume(foo).equals(1); - assume(bar).equals(1); - }); - - it('only emits once with context', function (done) { - var context = { foo: 'bar' } - , e = new EventEmitter(); - - e.once('foo', function (bar: string) { - assume(this).equals(context); - assume(bar).equals('bar'); - - done(); - }, context).emit('foo', 'bar'); - }); - }); - - describe('EventEmitter#removeListener', function () { - it('should only remove the event with the specified function', function () { - var e = new EventEmitter(); - - function bar() {} - e.on('foo', function () {}); - e.on('bar', function () {}); - e.on('bar', bar); - - assume(e.removeListener('foo', bar)).equals(e); - assume(e.listeners('foo').length).equals(1); - assume(e.listeners('bar').length).equals(2); - - assume(e.removeListener('foo')).equals(e); - assume(e.listeners('foo').length).equals(0); - assume(e.listeners('bar').length).equals(2); - - assume(e.removeListener('bar', bar)).equals(e); - assume(e.listeners('bar').length).equals(1); - assume(e.removeListener('bar')).equals(e); - assume(e.listeners('bar').length).equals(0); - }); - - it('should only remove once events when using the once flag', function () { - var e = new EventEmitter(); - - function foo() {} - e.on('foo', foo); - - assume(e.removeListener('foo', function () {}, undefined, true)).equals(e); - assume(e.listeners('foo').length).equals(1); - assume(e.removeListener('foo', foo, undefined, true)).equals(e); - assume(e.listeners('foo').length).equals(1); - assume(e.removeListener('foo', foo)).equals(e); - assume(e.listeners('foo').length).equals(0); - - e.on('foo', foo); - e.once('foo', foo); - - assume(e.removeListener('foo', function () {}, undefined, true)).equals(e); - assume(e.listeners('foo').length).equals(2); - assume(e.removeListener('foo', foo, undefined, true)).equals(e); - assume(e.listeners('foo').length).equals(1); - - e.once('foo', foo); - - assume(e.removeListener('foo', foo)).equals(e); - assume(e.listeners('foo').length).equals(0); - }); - - it('should only remove listeners matching the correct context', function () { - var e = new EventEmitter() - , context = { foo: 'bar' }; - - function foo() {} - function bar() {} - e.on('foo', foo, context); - - assume(e.listeners('foo').length).equals(1); - assume(e.removeListener('foo', function () {}, context)).equals(e); - assume(e.listeners('foo').length).equals(1); - assume(e.removeListener('foo', foo, { baz: 'quux' })).equals(e); - assume(e.listeners('foo').length).equals(1); - assume(e.removeListener('foo', foo, context)).equals(e); - assume(e.listeners('foo').length).equals(0); - - e.on('foo', foo, context); - e.on('foo', bar); - - assume(e.listeners('foo').length).equals(2); - assume(e.removeListener('foo', foo, { baz: 'quux' })).equals(e); - assume(e.listeners('foo').length).equals(2); - assume(e.removeListener('foo', foo, context)).equals(e); - assume(e.listeners('foo').length).equals(1); - assume(e.listeners('foo')[0]).equals(bar); - - e.on('foo', foo, context); - - assume(e.listeners('foo').length).equals(2); - assume(e.removeAllListeners('foo')).equals(e); - assume(e.listeners('foo').length).equals(0); - }); - }); - - describe('EventEmitter#removeAllListeners', function () { - it('removes all events for the specified events', function () { - var e = new EventEmitter(); - - e.on('foo', function () { throw new Error('oops'); }); - e.on('foo', function () { throw new Error('oops'); }); - e.on('bar', function () { throw new Error('oops'); }); - e.on('aaa', function () { throw new Error('oops'); }); - - assume(e.removeAllListeners('foo')).equals(e); - assume(e.listeners('foo').length).equals(0); - assume(e.listeners('bar').length).equals(1); - assume(e.listeners('aaa').length).equals(1); - - assume(e.removeAllListeners('bar')).equals(e); - assume(e.removeAllListeners('aaa')).equals(e); - - assume(e.emit('foo')).equals(false); - assume(e.emit('bar')).equals(false); - assume(e.emit('aaa')).equals(false); - }); - - it('just nukes the fuck out of everything', function () { - var e = new EventEmitter(); - - e.on('foo', function () { throw new Error('oops'); }); - e.on('foo', function () { throw new Error('oops'); }); - e.on('bar', function () { throw new Error('oops'); }); - e.on('aaa', function () { throw new Error('oops'); }); - - assume(e.removeAllListeners()).equals(e); - assume(e.listeners('foo').length).equals(0); - assume(e.listeners('bar').length).equals(0); - assume(e.listeners('aaa').length).equals(0); - - assume(e.emit('foo')).equals(false); - assume(e.emit('bar')).equals(false); - assume(e.emit('aaa')).equals(false); - }); - }); - - describe('#setMaxListeners', function () { - it('is a function', function () { - var e = new EventEmitter(); - - assume(e.setMaxListeners).is.a('function'); - }); - - it('returns self when called', function () { - var e = new EventEmitter(); - - assume(e.setMaxListeners()).to.equal(e); - }); - }); }); + +// EventEmitter.listeners() +// should return array of functions +ee.listeners(eventName).map((listener) => { + return listener.bind(this); +}); +// should accept symbol as event name +ee.listeners(eventSymbol).map((listener) => { + return listener.bind(this); +}); +// should return boolean with 'exists' flag +const hasListeners: boolean = ee.listeners(eventName, true); + +// EventEmitter.emit() +// should support any number of arguments +ee.emit(eventName, 1, true, {}, [], 'test', Symbol(), null); +// should accept symbol as event name +ee.emit(eventSymbol); + +// EventEmitter.addListener() and EventEmitter.on() +// should accept function +ee.on(eventName, fn); +ee.addListener(eventName, fn); +// should accept optional context argument +ee.on(eventName, fn, this); +ee.addListener(eventName, fn, this); +// should accept symbol as event name +ee.on(eventSymbol, fn); +ee.addListener(eventSymbol, fn); +// should support fluent interface +ee.on(eventSymbol, fn).on(eventName, fn); +ee.addListener(eventSymbol, fn).addListener(eventName, fn); + +// EventEmitter.once() +// should accept event name and function +ee.once(eventName, fn); +// should accept optional context argument +ee.once(eventName, fn, this); +ee.once(eventName, fn, {}); +// should accept symbol as event name +ee.once(eventSymbol, fn); +// should support fluent interface +ee.once(eventSymbol, fn).once(eventName, fn); + +// EventEmitter.removeListener() and EventEmitter.off() +// should accept event name +ee.removeListener(eventName); +ee.off(eventName); +// should accept optional function +ee.removeListener(eventName, fn); +ee.off(eventName, fn); +// should accept optional context argument +ee.removeListener(eventName, fn, {}); +ee.off(eventName, fn, {}); +// should accept optional boolean flag for removing listeners added with `EventEmitter.once()` +ee.removeListener(eventName, fn, null, true); +ee.off(eventName, fn, null, true); +// should accept symbol as event name +ee.removeListener(eventSymbol); +ee.off(eventSymbol); +// should support fluent interface +ee.removeListener(eventName).removeListener(eventSymbol); +ee.off(eventName).off(eventSymbol); + +// EventEmitter.removeAllListeners() +// should not require any arguments +ee.removeAllListeners(); +// should accept optional event name +ee.removeAllListeners(eventName); +// should accept symbol as event name +ee.removeAllListeners(eventSymbol); +// should support fluent interface +ee.removeAllListeners(eventName).removeAllListeners(eventSymbol); + +// EventEmitter.setMaxListeners() +// should support fluent interface +ee.setMaxListeners().setMaxListeners(); diff --git a/eventemitter3/eventemitter3-1.2.0-tests.ts.tscparams b/eventemitter3/eventemitter3-tests.ts.tscparams similarity index 100% rename from eventemitter3/eventemitter3-1.2.0-tests.ts.tscparams rename to eventemitter3/eventemitter3-tests.ts.tscparams diff --git a/eventemitter3/eventemitter3.d.ts b/eventemitter3/eventemitter3.d.ts index 0d692b8247..ad71b1d49b 100644 --- a/eventemitter3/eventemitter3.d.ts +++ b/eventemitter3/eventemitter3.d.ts @@ -1,123 +1,109 @@ -// Type definitions for EventEmitter3 1.1.1 +// Type definitions for EventEmitter3 1.2.0 // Project: https://github.com/primus/eventemitter3 -// Definitions by: Yuichi Murata , Leon Yu +// Definitions by: Yuichi Murata , Leon Yu , Boriss Nazarovs // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped declare namespace EventEmitter3 { - interface EventEmitter3Static { - new (): EventEmitter; - prefixed: string | boolean; - } + /** + * Minimal EventEmitter interface that is molded against the Node.js + * EventEmitter interface. + */ class EventEmitter { - /** - * Minimal EventEmitter interface that is molded against the Node.js - * EventEmitter interface. - * - * @constructor - * @api public - */ constructor(); /** - * Return a list of assigned event listeners. + * Return an array listing the events for which the emitter has registered listeners. * - * @param {String} event The events that should be listed. - * @returns {Array} - * @api public + * @returns {(string|symbol)[]} */ - listeners(event?: string): Function[]; + eventNames(): (string|symbol)[]; /** - * Return a list of assigned event listeners. + * Return the listeners registered for a given event. * - * @param {String} event The events that should be listed. - * @param {Boolean} exists We only need to know if there are listeners. - * @returns {Boolean} - * @api public + * @param {(string|symbol)} event The event name. + * @returns {Function[]} */ - listeners(event: string, param: boolean): boolean; + listeners(event: string|symbol): Function[]; /** - * Emit an event to all registered event listeners. + * Check if there listeners for a given event. + * If `exists` argument is not `true` lists listeners. * - * @param {String} event The name of the event. - * @returns {Boolean} Indication if we've emitted an event. - * @api public + * @param {(string|symbol)} event The event name. + * @param {boolean} exists Only check if there are listeners. + * @returns {boolean} */ - emit(event: string, ...args: any[]): boolean; + listeners(event: string|symbol, exists: boolean): boolean; /** - * Register a new EventListener for the given event. + * Calls each of the listeners registered for a given event. * - * @param {String} event Name of the event. - * @param {Function} fn Callback function. - * @param {Mixed} [context=this] The context of the function. - * @api public + * @param {(string|symbol)} event The event name. + * @param {...*} args Arguments that are passed to registered listeners + * @returns {boolean} `true` if the event had listeners, else `false`. */ - on(event: string, fn: Function, context?: any): EventEmitter; + emit(event: string|symbol, ...args: any[]): boolean; /** - * Add an EventListener that's only called once. + * Add a listener for a given event. * - * @param {String} event Name of the event. - * @param {Function} fn Callback function. - * @param {Mixed} [context=this] The context of the function. - * @api public + * @param {(string|symbol)} event The event name. + * @param {Function} fn The listener function. + * @param {*} [context=this] The context to invoke the listener with. + * @returns {EventEmitter} `this`. */ - once(event: string, fn: Function, context?: any): EventEmitter; + on(event: string|symbol, fn: Function, context?: any): EventEmitter; /** - * Remove event listeners. + * Add a one-time listener for a given event. * - * @param {String} event The event we want to remove. - * @param {Function} fn The listener that we need to find. - * @param {Mixed} context Only remove listeners matching this context. - * @param {Boolean} once Only remove once listeners. - * @api public + * @param {(string|symbol)} event The event name. + * @param {Function} fn The listener function. + * @param {*} [context=this] The context to invoke the listener with. + * @returns {EventEmitter} `this`. */ - removeListener(event: string, fn?: Function, context?: any, once?: boolean): EventEmitter; + once(event: string|symbol, fn: Function, context?: any): EventEmitter; /** - * Remove all listeners or only the listeners for the specified event. + * Remove the listeners of a given event. * - * @param {String} event The event want to remove all listeners for. - * @api public + * @param {(string|symbol)} event The event name. + * @param {Function} fn Only remove the listeners that match this function. + * @param {*} context Only remove the listeners that have this context. + * @param {boolean} once Only remove one-time listeners. + * @returns {EventEmitter} `this`. */ - removeAllListeners(event?: string): EventEmitter; + removeListener(event: string|symbol, fn?: Function, context?: any, once?: boolean): EventEmitter; /** - * Remove event listeners. + * Remove all listeners, or those of the specified event. * - * @param {String} event The event we want to remove. - * @param {Function} fn The listener that we need to find. - * @param {Mixed} context Only remove listeners matching this context. - * @param {Boolean} once Only remove once listeners. - * @api public + * @param {(string|symbol)} event The event name. + * @returns {EventEmitter} `this`. */ - off(event: string, fn?: Function, context?: any, once?: boolean): EventEmitter; + removeAllListeners(event?: string|symbol): EventEmitter; /** - * Register a new EventListener for the given event. - * - * @param {String} event Name of the event. - * @param {Function} fn Callback function. - * @param {Mixed} [context=this] The context of the function. - * @api public + * Alias method for `removeListener` */ - addListener(event: string, fn: Function, context?: any): EventEmitter; + off(event: string|symbol, fn?: Function, context?: any, once?: boolean): EventEmitter; + + /** + * Alias method for `on` + */ + addListener(event: string|symbol, fn: Function, context?: any): EventEmitter; /** * This function doesn't apply anymore. * @deprecated */ setMaxListeners(): EventEmitter; + + static prefixed: string|boolean; } } declare module 'eventemitter3' { - // - // Expose the module. - // - var EventEmitter3: EventEmitter3.EventEmitter3Static; - export = EventEmitter3; + export = EventEmitter3.EventEmitter; } From d240f0ad0289e58d73701b8b5667cd973b60a69f Mon Sep 17 00:00:00 2001 From: Boriss Nazarovs Date: Fri, 2 Sep 2016 00:01:37 +0300 Subject: [PATCH 007/111] Added support for fluent interface in classes extending EventEmitter --- eventemitter3/eventemitter3-tests.ts | 18 +++++++++++------- eventemitter3/eventemitter3.d.ts | 14 +++++++------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/eventemitter3/eventemitter3-tests.ts b/eventemitter3/eventemitter3-tests.ts index 895dc7f54b..8af197a80c 100644 --- a/eventemitter3/eventemitter3-tests.ts +++ b/eventemitter3/eventemitter3-tests.ts @@ -12,6 +12,10 @@ class TestEmitter extends EventEmitter { constructor() { super(); } + + test() { + return this; + } } const ee: TestEmitter = new TestEmitter(); @@ -64,8 +68,8 @@ ee.addListener(eventName, fn, this); ee.on(eventSymbol, fn); ee.addListener(eventSymbol, fn); // should support fluent interface -ee.on(eventSymbol, fn).on(eventName, fn); -ee.addListener(eventSymbol, fn).addListener(eventName, fn); +ee.on(eventSymbol, fn).test(); +ee.addListener(eventSymbol, fn).test(); // EventEmitter.once() // should accept event name and function @@ -76,7 +80,7 @@ ee.once(eventName, fn, {}); // should accept symbol as event name ee.once(eventSymbol, fn); // should support fluent interface -ee.once(eventSymbol, fn).once(eventName, fn); +ee.once(eventSymbol, fn).test(); // EventEmitter.removeListener() and EventEmitter.off() // should accept event name @@ -95,8 +99,8 @@ ee.off(eventName, fn, null, true); ee.removeListener(eventSymbol); ee.off(eventSymbol); // should support fluent interface -ee.removeListener(eventName).removeListener(eventSymbol); -ee.off(eventName).off(eventSymbol); +ee.removeListener(eventName).test(); +ee.off(eventName).test(); // EventEmitter.removeAllListeners() // should not require any arguments @@ -106,8 +110,8 @@ ee.removeAllListeners(eventName); // should accept symbol as event name ee.removeAllListeners(eventSymbol); // should support fluent interface -ee.removeAllListeners(eventName).removeAllListeners(eventSymbol); +ee.removeAllListeners(eventName).test(); // EventEmitter.setMaxListeners() // should support fluent interface -ee.setMaxListeners().setMaxListeners(); +ee.setMaxListeners().test(); diff --git a/eventemitter3/eventemitter3.d.ts b/eventemitter3/eventemitter3.d.ts index ad71b1d49b..96af62c94b 100644 --- a/eventemitter3/eventemitter3.d.ts +++ b/eventemitter3/eventemitter3.d.ts @@ -53,7 +53,7 @@ declare namespace EventEmitter3 { * @param {*} [context=this] The context to invoke the listener with. * @returns {EventEmitter} `this`. */ - on(event: string|symbol, fn: Function, context?: any): EventEmitter; + on(event: string|symbol, fn: Function, context?: any): this; /** * Add a one-time listener for a given event. @@ -63,7 +63,7 @@ declare namespace EventEmitter3 { * @param {*} [context=this] The context to invoke the listener with. * @returns {EventEmitter} `this`. */ - once(event: string|symbol, fn: Function, context?: any): EventEmitter; + once(event: string|symbol, fn: Function, context?: any): this; /** * Remove the listeners of a given event. @@ -74,7 +74,7 @@ declare namespace EventEmitter3 { * @param {boolean} once Only remove one-time listeners. * @returns {EventEmitter} `this`. */ - removeListener(event: string|symbol, fn?: Function, context?: any, once?: boolean): EventEmitter; + removeListener(event: string|symbol, fn?: Function, context?: any, once?: boolean): this; /** * Remove all listeners, or those of the specified event. @@ -82,23 +82,23 @@ declare namespace EventEmitter3 { * @param {(string|symbol)} event The event name. * @returns {EventEmitter} `this`. */ - removeAllListeners(event?: string|symbol): EventEmitter; + removeAllListeners(event?: string|symbol): this; /** * Alias method for `removeListener` */ - off(event: string|symbol, fn?: Function, context?: any, once?: boolean): EventEmitter; + off(event: string|symbol, fn?: Function, context?: any, once?: boolean): this; /** * Alias method for `on` */ - addListener(event: string|symbol, fn: Function, context?: any): EventEmitter; + addListener(event: string|symbol, fn: Function, context?: any): this; /** * This function doesn't apply anymore. * @deprecated */ - setMaxListeners(): EventEmitter; + setMaxListeners(): this; static prefixed: string|boolean; } From 6151d69fadae62c9a4636a0736b0820b53f44e44 Mon Sep 17 00:00:00 2001 From: Boriss Nazarovs Date: Sat, 24 Sep 2016 14:37:30 +0300 Subject: [PATCH 008/111] Updated import in tests to use standard TypeScript import syntax --- eventemitter3/eventemitter3-tests.ts | 4 ++-- eventemitter3/eventemitter3-tests.ts.tscparams | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eventemitter3/eventemitter3-tests.ts b/eventemitter3/eventemitter3-tests.ts index 8af197a80c..77d84093cf 100644 --- a/eventemitter3/eventemitter3-tests.ts +++ b/eventemitter3/eventemitter3-tests.ts @@ -1,10 +1,10 @@ /// 'use strict'; -import EventEmitter from 'eventemitter3'; +import EventEmitter = require('eventemitter3'); const eventName = 'test'; -const eventSymbol: symbol = Symbol('test'); +const eventSymbol = Symbol('test'); const fn = () => console.log(1); // Extending EventEmitter diff --git a/eventemitter3/eventemitter3-tests.ts.tscparams b/eventemitter3/eventemitter3-tests.ts.tscparams index a0aefcf79a..30c9419a57 100644 --- a/eventemitter3/eventemitter3-tests.ts.tscparams +++ b/eventemitter3/eventemitter3-tests.ts.tscparams @@ -1 +1 @@ ---target es6 --allowSyntheticDefaultImports --noImplicitAny +-m commonjs From e79245412e9faeb362cac8e46beb1a8767e2f88d Mon Sep 17 00:00:00 2001 From: gatsbimantico Date: Wed, 28 Sep 2016 21:21:30 +0200 Subject: [PATCH 009/111] gapi.analytics --- gapi.analytics/gapi.analytics.d.ts | 124 +++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 gapi.analytics/gapi.analytics.d.ts diff --git a/gapi.analytics/gapi.analytics.d.ts b/gapi.analytics/gapi.analytics.d.ts new file mode 100644 index 0000000000..36cca1263c --- /dev/null +++ b/gapi.analytics/gapi.analytics.d.ts @@ -0,0 +1,124 @@ +// Type definitions for Google Analytics API + +/// + +declare namespace gapi.client.analytics {} +declare namespace gapi.client.analytics.provisioning { + export function createAccountTicket() : Promise; +} + +interface DataQuery { + "ids" ?: string; + "start-date" ?: string; + "30daysAgo" ?: string; + "end-date" ?: string; + "yesterday" ?: string; + "metrics" ?: string; + "dimensions" ?: string; + "sort" ?: string; + "filters" ?: string; + "segment" ?: string; + "samplingLevel" ?: string; + "include-empty-rows" ?: string; + "start-index" ?: string; + "max-results" ?: string; +} +declare namespace gapi.client.analytics.data {} +declare namespace gapi.client.analytics.data.ga { + export function get(data ?: DataQuery) : Promise; +} +declare namespace gapi.client.analytics.data.mcf { + export function get(data ?: DataQuery) : Promise; +} +declare namespace gapi.client.analytics.data.realtime { + export function get(data ?: DataQuery) : Promise; +} + +interface AnalyticsParameter { + "type" ?: string; + "description" ?: string; + "default" ?: string; + "enum" ?: string[]; + "enumDescriptions" ?: string[]; + "location" ?: string; +} +declare namespace gapi.client.analytics.kB { + export class parameters { + alt: AnalyticsParameter; + fields: AnalyticsParameter; + key: AnalyticsParameter; + oauth_token: AnalyticsParameter; + prettyPrint: AnalyticsParameter; + quotaUser: AnalyticsParameter; + userIP: AnalyticsParameter; + } +} + +interface View { + accountId ?: string; + webPropertyId ?: string; + webViewId ?: string; +} +declare namespace gapi.client.analytics.management {} +declare namespace gapi.client.analytics.managementaccountSummaries { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.managementaccountUserLinks { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.accounts { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.customDataSources { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.customDimensions { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.customMetrics { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.experiments { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.filters { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.goals { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.profileFilterLinks { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.profileUserLinks { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.profiles { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.remarketingAudience { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.segments { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.unsampledReports { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.uploads { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.webPropertyAdWordsLinks { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.webproperties { + export function list(view ?: View) : Promise; +} +declare namespace gapi.client.analytics.management.webpropertyUserLinks { + export function list(view ?: View) : Promise; +} + +declare namespace gapi.client.analytics.metadata {} +declare namespace gapi.client.analytics.metadata.column { + export function list() : Promise; +} From 93a4381634e2d4d50e925b5218f63455ce4d9022 Mon Sep 17 00:00:00 2001 From: gatsbimantico Date: Thu, 29 Sep 2016 14:09:42 +0200 Subject: [PATCH 010/111] added gapi.analytics-tests and a few corrections --- gapi.analytics/gapi.analytics-tests.ts | 67 ++++++++++++++++++++++++++ gapi.analytics/gapi.analytics.d.ts | 40 +++++++-------- 2 files changed, 87 insertions(+), 20 deletions(-) create mode 100644 gapi.analytics/gapi.analytics-tests.ts diff --git a/gapi.analytics/gapi.analytics-tests.ts b/gapi.analytics/gapi.analytics-tests.ts new file mode 100644 index 0000000000..711fffeca9 --- /dev/null +++ b/gapi.analytics/gapi.analytics-tests.ts @@ -0,0 +1,67 @@ +// Type definitions for Google Analytics API + +/// +/// +/// + +function test_namespace() { + var analytics : boolean = gapi.client.analytics instanceof Object; + + var provisioning : boolean = gapi.client.analytics.provisioning.createAccountTicket instanceof Function; + analytics = analytics && provisioning; + + var data : boolean = gapi.client.analytics.data.ga.get instanceof Function; + data = data && gapi.client.analytics.data.mcf.get instanceof Function; + data = data && gapi.client.analytics.data.realtime.get instanceof Function; + analytics = analytics && data; + + interface AnalyticsParameter { + "type" ?: string; + "description" ?: string; + "default" ?: string; + "enum" ?: string[]; + "enumDescriptions" ?: string[]; + "location" ?: string; + } + var kBI : AnalyticsParameter = gapi.client.analytics.kB.parameters.alt; + var kB = !!kBI; + kBI = gapi.client.analytics.kB.parameters.fields; + kB = kB && !!kBI; + kBI = gapi.client.analytics.kB.parameters.key; + kB = kB && !!kBI; + kBI = gapi.client.analytics.kB.parameters.oauth_token; + kB = kB && !!kBI; + kBI = gapi.client.analytics.kB.parameters.prettyPrint; + kB = kB && !!kBI; + kBI = gapi.client.analytics.kB.parameters.quotaUser; + kB = kB && !!kBI; + kBI = gapi.client.analytics.kB.parameters.userIP; + kB = kB && !!kBI; + analytics = analytics && kB; + + var management : boolean = gapi.client.analytics.management.accountSummaries.list instanceof Function; + management = management && gapi.client.analytics.management.accountUserLinks.list instanceof Function; + management = management && gapi.client.analytics.management.accounts.list instanceof Function; + management = management && gapi.client.analytics.management.customDataSources.list instanceof Function; + management = management && gapi.client.analytics.management.customDimensions.list instanceof Function; + management = management && gapi.client.analytics.management.customMetrics.list instanceof Function; + management = management && gapi.client.analytics.management.experiments.list instanceof Function; + management = management && gapi.client.analytics.management.filters.list instanceof Function; + management = management && gapi.client.analytics.management.goals.list instanceof Function; + management = management && gapi.client.analytics.management.profileFilterLinks.list instanceof Function; + management = management && gapi.client.analytics.management.profileUserLinks.list instanceof Function; + management = management && gapi.client.analytics.management.profiles.list instanceof Function; + management = management && gapi.client.analytics.management.remarketingAudience.list instanceof Function; + management = management && gapi.client.analytics.management.segments.list instanceof Function; + management = management && gapi.client.analytics.management.unsampledReports.list instanceof Function; + management = management && gapi.client.analytics.management.uploads.list instanceof Function; + management = management && gapi.client.analytics.management.webPropertyAdWordsLinks.list instanceof Function; + management = management && gapi.client.analytics.management.webproperties.list instanceof Function; + management = management && gapi.client.analytics.management.webpropertyUserLinks.list instanceof Function; + analytics = analytics && management; + + var metadata : boolean = gapi.client.analytics.metadata.column.list instanceof Function; + analytics = analytics && metadata; + + return analytics; +} diff --git a/gapi.analytics/gapi.analytics.d.ts b/gapi.analytics/gapi.analytics.d.ts index 36cca1263c..f89e015de8 100644 --- a/gapi.analytics/gapi.analytics.d.ts +++ b/gapi.analytics/gapi.analytics.d.ts @@ -1,5 +1,6 @@ // Type definitions for Google Analytics API +/// /// declare namespace gapi.client.analytics {} @@ -34,24 +35,23 @@ declare namespace gapi.client.analytics.data.realtime { export function get(data ?: DataQuery) : Promise; } -interface AnalyticsParameter { - "type" ?: string; - "description" ?: string; - "default" ?: string; - "enum" ?: string[]; - "enumDescriptions" ?: string[]; - "location" ?: string; -} -declare namespace gapi.client.analytics.kB { - export class parameters { - alt: AnalyticsParameter; - fields: AnalyticsParameter; - key: AnalyticsParameter; - oauth_token: AnalyticsParameter; - prettyPrint: AnalyticsParameter; - quotaUser: AnalyticsParameter; - userIP: AnalyticsParameter; - } +declare namespace gapi.client.analytics.kB {} +declare namespace gapi.client.analytics.kB.parameters { + export interface AnalyticsParameter { + "type" ?: string; + "description" ?: string; + "default" ?: string; + "enum" ?: string[]; + "enumDescriptions" ?: string[]; + "location" ?: string; + } + export class alt implements AnalyticsParameter {} + export class fields implements AnalyticsParameter {} + export class key implements AnalyticsParameter {} + export class oauth_token implements AnalyticsParameter {} + export class prettyPrint implements AnalyticsParameter {} + export class quotaUser implements AnalyticsParameter {} + export class userIP implements AnalyticsParameter {} } interface View { @@ -60,10 +60,10 @@ interface View { webViewId ?: string; } declare namespace gapi.client.analytics.management {} -declare namespace gapi.client.analytics.managementaccountSummaries { +declare namespace gapi.client.analytics.management.accountSummaries { export function list(view ?: View) : Promise; } -declare namespace gapi.client.analytics.managementaccountUserLinks { +declare namespace gapi.client.analytics.management.accountUserLinks { export function list(view ?: View) : Promise; } declare namespace gapi.client.analytics.management.accounts { From 00272360284225ccf9fae6b2b32846114862c1c4 Mon Sep 17 00:00:00 2001 From: gatsbimantico Date: Thu, 29 Sep 2016 14:12:24 +0200 Subject: [PATCH 011/111] Tested with --target es6 --- gapi.analytics/gapi.analytics-tests.ts | 1 - gapi.analytics/gapi.analytics.d.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/gapi.analytics/gapi.analytics-tests.ts b/gapi.analytics/gapi.analytics-tests.ts index 711fffeca9..a6aea00796 100644 --- a/gapi.analytics/gapi.analytics-tests.ts +++ b/gapi.analytics/gapi.analytics-tests.ts @@ -1,6 +1,5 @@ // Type definitions for Google Analytics API -/// /// /// diff --git a/gapi.analytics/gapi.analytics.d.ts b/gapi.analytics/gapi.analytics.d.ts index f89e015de8..da9b81cb68 100644 --- a/gapi.analytics/gapi.analytics.d.ts +++ b/gapi.analytics/gapi.analytics.d.ts @@ -1,6 +1,5 @@ // Type definitions for Google Analytics API -/// /// declare namespace gapi.client.analytics {} From d7fb4e38081924e1a92acdb1fa6f196581467da5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20S=C3=A4nger?= Date: Thu, 29 Sep 2016 15:23:23 +0200 Subject: [PATCH 012/111] use correct richselect.getList() return type --- webix/webix.d.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/webix/webix.d.ts b/webix/webix.d.ts index 7931ef83d9..1936102a6d 100644 --- a/webix/webix.d.ts +++ b/webix/webix.d.ts @@ -5941,7 +5941,10 @@ interface richselect extends webix.ui.baseview{ getChildViews():any[]; getFormView():webix.ui.baseview; getInputNode():HTMLElement; - getList():webix.ui.baseview; + /** + * returns list view of the control + */ + getList():webix.ui.list; getNode():any; getParentView():any; getPopup():webix.ui.baseview; From 724ceafbde3450d4afb3797c6c73141e862e75e0 Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Fri, 30 Sep 2016 15:45:41 -0400 Subject: [PATCH 013/111] react-ga: add set method definition --- react-ga/react-ga-tests.tsx | 27 ++++++++++++++++++++------- react-ga/react-ga.d.ts | 5 +++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/react-ga/react-ga-tests.tsx b/react-ga/react-ga-tests.tsx index 2248665dd9..1dd6e04bd7 100644 --- a/react-ga/react-ga-tests.tsx +++ b/react-ga/react-ga-tests.tsx @@ -8,11 +8,11 @@ describe("Testing react-ga initialize object", () => { }); it("Able to initailize react-ga object", () => { let ga = __reactGA; - + let options: __reactGA.InitializeOptions = { debug: true, } - + ga.initialize("UA-65432-1", options); }); }); @@ -21,7 +21,7 @@ describe("Testing react-ga pageview calls", () => { it("Able to make pageview calls", () => { let ga = __reactGA; ga.initialize("UA-65432-1"); - + ga.pageview("http://telshin.com"); }); }); @@ -30,7 +30,7 @@ describe("Testing react-ga modal calls", () => { it("Able to make modal calls", () => { let ga = __reactGA; ga.initialize("UA-65432-1"); - + ga.modalview("Test modal"); }); }); @@ -39,7 +39,7 @@ describe("Testing react-ga event calls", () => { it("Able to make event calls", () => { let ga = __reactGA; ga.initialize("UA-65432-1"); - + let options: __reactGA.EventArgs = { category: "Test", action: "CI", @@ -47,7 +47,20 @@ describe("Testing react-ga event calls", () => { value: 4, nonInteraction: true, } - + ga.event(options); }); -}); \ No newline at end of file +}); + +describe("Testing react-ga set calls", () => { + it("Able to make set calls", () => { + let ga = __reactGA; + ga.initialize("UA-65432-1"); + + let fieldObject: __reactGA.FieldsObject = { + page: '/users' + }; + + ga.set(fieldObject); + }); +}); diff --git a/react-ga/react-ga.d.ts b/react-ga/react-ga.d.ts index 3a80651dc1..0a0973113b 100644 --- a/react-ga/react-ga.d.ts +++ b/react-ga/react-ga.d.ts @@ -16,10 +16,15 @@ declare namespace __reactGA { debug?: boolean; } + export interface FieldsObject { + [i: string]: any; + } + export function initialize(trackingCode: string, options?: InitializeOptions): void; export function pageview(path: string): void; export function modalview(name: string): void; export function event(args: EventArgs): void; + export function set(fieldsObject: FieldsObject): void; } declare module 'react-ga' { From a661b359b5255a7993507db32d9febb6d0d07b93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Jeancolas?= Date: Wed, 19 Oct 2016 13:46:53 -0400 Subject: [PATCH 014/111] [material-ui] Add onKeyDown event on TextFieldProps interface --- material-ui/material-ui.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/material-ui/material-ui.d.ts b/material-ui/material-ui.d.ts index c096cfd6ae..475b719bea 100644 --- a/material-ui/material-ui.d.ts +++ b/material-ui/material-ui.d.ts @@ -1663,6 +1663,7 @@ declare namespace __MaterialUI { onBlur?: React.FocusEventHandler; onChange?: React.FormEventHandler; onFocus?: React.FocusEventHandler; + onKeyDown?: React.KeyboardEventHandler; rows?: number, rowsMax?: number, style?: React.CSSProperties; From 5a85550382751d3d28c70f56f8acb14940cd3996 Mon Sep 17 00:00:00 2001 From: shivarajkv Date: Fri, 21 Oct 2016 20:35:01 +0530 Subject: [PATCH 015/111] Initial commit on fushionchart typings --- fusioncharts/fusioncharts-tests.ts | 30 +++++ fusioncharts/fusioncharts.d.ts | 196 +++++++++++++++++++++++++++++ 2 files changed, 226 insertions(+) create mode 100644 fusioncharts/fusioncharts-tests.ts create mode 100644 fusioncharts/fusioncharts.d.ts diff --git a/fusioncharts/fusioncharts-tests.ts b/fusioncharts/fusioncharts-tests.ts new file mode 100644 index 0000000000..32ae533705 --- /dev/null +++ b/fusioncharts/fusioncharts-tests.ts @@ -0,0 +1,30 @@ +/// + +FusionCharts.addEventListener('ready',(eventObject)=>{ + eventObject.stopPropagation(); +}); + + +let chart = new FusionCharts({ + type: 'column2d', + renderAt: 'chart-container', + width: '450', + height: '200', + dataFormat: 'json', + dataSource: { + "chart": { + "caption": "Monthly revenue for last year", + "subCaption": "Harry's SuperMart", + }, + "data": [{ + "label": "Jan", + "value": "420000" + }, { + "label": "Feb", + "value": "810000" + } + ] + } +}); + +chart.isActive(); \ No newline at end of file diff --git a/fusioncharts/fusioncharts.d.ts b/fusioncharts/fusioncharts.d.ts new file mode 100644 index 0000000000..d0e0a58e99 --- /dev/null +++ b/fusioncharts/fusioncharts.d.ts @@ -0,0 +1,196 @@ + +declare namespace FusionCharts { + + type ChartDataFormats = 'json' | 'jsonurl' | 'csv' | 'xml' | 'xmlurl'; + + type ImageHAlign = 'left' | 'right' | 'middle'; + + type ImageVAlign = 'top' | 'bottom' | 'middle'; + + interface EventObject { + type: string; + + eventId: number; + + sender: FusionCharts; + + cancelled: boolean; + + stopPropagation: () => void; + + prevented: boolean; + + preventDefault: () => void; + + detached: boolean; + + detachHandler: () => void; + } + + interface ChartObject { + + type?: string; + + id?: string; + + width?: number | string; + + height?: number | string; + + renderAt?: string; + + dataFormat?: ChartDataFormats; + + dataSource?: string | Object; + + events?: Object; + + link?: Object; + + showDataLoadingMessage?: boolean; + + showChartLoadingMessage?: boolean; + + baseChartMessageFont?: string; + + baseChartMessageFontSize?: string; + + baseChartMessageColor?: string; + + dataLoadStartMessage?: string; + + dataLoadErrorMessage?: string; + + dataInvalidMessage?: string; + + dataEmptyMessage?: string; + + typeNotSupportedMessage?: string; + + loadMessage?: string; + + renderErrorMessage?: string; + + containerBackgroundColor?: string; + + containerBackgroundOpacity?: number; + + containerClassName?: string; + + baseChartMessageImageHAlign?: ImageHAlign; + + dataLoadErrorMessageImageVAlign?: ImageVAlign; + + dataLoadErrorMessageImageAlpha?: number; + + dataLoadErrorMessageImageScale?: number; + + dataLoadStartMessageImageHAlign?: ImageHAlign; + + dataLoadStartMessageImageVAlign?: ImageVAlign; + + dataLoadStartMessageImageAlpha?: number; + + dataLoadStartMessageImageScale?: number; + + dataInvalidMessageImageHAlign?: ImageHAlign; + + dataInvalidMessageImageVAlign?: ImageVAlign; + + dataInvalidMessageImageAlpha?: number; + + dataInvalidMessageImageScale?: number; + + dataEmptyMessageImageHAlign?: ImageHAlign; + + dataEmptyMessageImageVAlign?: ImageVAlign; + + dataEmptyMessageImageAlpha?: number; + + dataEmptyMessageImageScale?: number; + + renderErrorMessageImageHAlign?: ImageHAlign; + + renderErrorMessageImageVAlign?: ImageVAlign; + + renderErrorMessageImageAlpha?: number; + + renderErrorMessageImageScale?: number; + + loadMessageImageHAlign?: ImageHAlign; + + loadMessageImageVAlign?: ImageVAlign; + + loadMessageImageAlpha?: number; + + loadMessageImageScale?: number; + } + + interface FusionCharts { + clone(overrides?: Object, argsOnly?: boolean): any; + + isActive(): boolean; + + chartType(value: string, options?: any): string; + + addEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: Object) => void): void; + + removeEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: Object) => void): void; + + configureLink(param: Object | any[], level?: number): void; + + setChartAttribute(attributes: ChartObject | String, value?: string): void; + + getChartAttribute(attribute?: string | string[]): ChartObject; + + getXMLData(): any; + + setXMLData(data: string | Object): void; + + setXMLUrl(url: string): void; + + setChartDataUrl(url: string, format: ChartDataFormats): void; + + setChartData(data: string | Object, format: ChartDataFormats): void; + + getChartData(format: ChartDataFormats): any; + + dataReady(available?: boolean): boolean; + + feedData(stream: string): void; + + getData(): any; + + getDataWithId(): any; + + setData(value: number, label: string): void; + + } + + interface FusionChartStatic { + new (chartObject: ChartObject): FusionCharts; + + getObjectReference(elementId: string): Element; + + addEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: Object) => void): void; + + removeEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: Object) => void): void; + + ready(callback: (fusionChartStatic?: FusionChartStatic) => any, context: any): FusionChartStatic; + + transcodeData(data: string | Object, source: ChartDataFormats, target: ChartDataFormats, advanced: boolean): any; + + + + } + +} + +declare module 'FusionCharts' { + var FusionCharts: FusionCharts.FusionChartStatic; + export = FusionCharts; +} + +declare var FusionCharts: FusionCharts.FusionChartStatic; + + From ff763f9cfbacd3574a5babb40e2d91de59dff698 Mon Sep 17 00:00:00 2001 From: Shivaraj kv Date: Sat, 22 Oct 2016 17:59:50 +0530 Subject: [PATCH 016/111] Added all possible methods and static variables. --- fusioncharts/fusioncharts-tests.ts | 27 ++++++- fusioncharts/fusioncharts.d.ts | 112 ++++++++++++++++++++++++++++- 2 files changed, 133 insertions(+), 6 deletions(-) diff --git a/fusioncharts/fusioncharts-tests.ts b/fusioncharts/fusioncharts-tests.ts index 32ae533705..d50bff87c9 100644 --- a/fusioncharts/fusioncharts-tests.ts +++ b/fusioncharts/fusioncharts-tests.ts @@ -4,8 +4,17 @@ FusionCharts.addEventListener('ready',(eventObject)=>{ eventObject.stopPropagation(); }); +FusionCharts.ready((fusioncharts)=>{ -let chart = new FusionCharts({ +}); + +FusionCharts.version; + +FusionCharts('chartId').render();; + +FusionCharts["debugger"].enable(true); + +let chartData ={ type: 'column2d', renderAt: 'chart-container', width: '450', @@ -25,6 +34,18 @@ let chart = new FusionCharts({ } ] } -}); +}; -chart.isActive(); \ No newline at end of file +let chart = new FusionCharts(chartData); +chart.render(); +chart.isActive(); +chart.addEventListener('ready',function(eventObject){ + eventObject.type; +}); +chart.chartType(); +chart.addVariable(); +chart.clone(); +chart.zoomTo(0,3); +chart.zoomOut(); +chart.setJSONData(chartData); +chart.ref; \ No newline at end of file diff --git a/fusioncharts/fusioncharts.d.ts b/fusioncharts/fusioncharts.d.ts index d0e0a58e99..5e68eab97f 100644 --- a/fusioncharts/fusioncharts.d.ts +++ b/fusioncharts/fusioncharts.d.ts @@ -1,3 +1,8 @@ +// Type definitions for FusionCharts 3.11.2 +// Project: http://www.fusioncharts.com +// Definitions by: Shivaraj KV +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + declare namespace FusionCharts { @@ -126,12 +131,22 @@ declare namespace FusionCharts { loadMessageImageScale?: number; } + interface Debugger { + outputFormat(format: any): void; + + outputTo(callback: (message: any) => any): void; + + enable(state:any,outputTo?:(message: any) =>any,outputFormat?:any):void + + enableFirebugLite():any; + } + interface FusionCharts { clone(overrides?: Object, argsOnly?: boolean): any; isActive(): boolean; - chartType(value: string, options?: any): string; + chartType(value?: string, options?: any): string; addEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: Object) => void): void; @@ -165,10 +180,84 @@ declare namespace FusionCharts { setData(value: number, label: string): void; + stopUpdate(): void; + + restartUpdate(): void; + + isUpdateActive(): boolean; + + clearChart(): void; + + getSWFHTML(): any; + + addVariable(): void; + + getXML(): any; + + setDataXML(data: string | Object): void; + + setDataURL(url: string): void; + + hasRendered(): boolean; + + setTransparent(transparency?: boolean): void; + + isPlotItemSliced(index: number): boolean; + + slicePlotItem(index: number, slice: boolean): void; + + centerLabel(labelText: string, options?: Object): void; + + startingAngle(angle?: number, relative?: boolean): void; + + zoomOut(): void; + + zoomTo(startIndex: number, endIndex: number): void; + + resetChart(): void; + + setZoomMode(yes: boolean): void; + + getViewStartIndex(): number; + + getViewEndIndex(): number; + + print(options?: Object): void; + + exportChart(options?: Object): void; + + getSVGString(): string; + + lockResize(state: boolean): boolean; + + showChartMessage(text: string, modal?: boolean, cancelable?: boolean): void; + + getJSONData(): JSON; + + setJSONData(data: string | Object): void; + + setJSONUrl(url: string): void; + + getCSVData(): any; + + getDataAsCSV(): any; + + render(containerElement?: string | Element, insertMode?: string, callback?: () => any): FusionCharts; + + resizeTo(width: number | string, height: number | string): any; + + dispose(): void; + + configure(options: Object): void; + + ref: Object; + } interface FusionChartStatic { - new (chartObject: ChartObject): FusionCharts; + new (chartObject: ChartObject|Object): FusionCharts; + + (chartId: string): FusionCharts; getObjectReference(elementId: string): Element; @@ -176,10 +265,27 @@ declare namespace FusionCharts { removeEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: Object) => void): void; - ready(callback: (fusionChartStatic?: FusionChartStatic) => any, context: any): FusionChartStatic; + ready(callback: (fusionChartStatic?: FusionChartStatic) => any, context?: any): FusionChartStatic; transcodeData(data: string | Object, source: ChartDataFormats, target: ChartDataFormats, advanced: boolean): any; + batchExport(options: Object): void; + + formatNumber(num: number, type?: string, config?: Object): Element; + + setCurrentRenderer(name: string): void + + getCurrentRenderer(): string; + + render(options?: ChartObject, callback?: () => any): FusionCharts; + + version: string[]; + + items: Object; + + options: Object; + + debugger:Debugger; } From ae7666402d056042e89e605db23c715c0aba07a4 Mon Sep 17 00:00:00 2001 From: Tomas Trescak Date: Tue, 25 Oct 2016 09:34:16 +1100 Subject: [PATCH 017/111] Update react.d.ts Having context as {} did not allow me access context members via .notation. --- react/react.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/react/react.d.ts b/react/react.d.ts index fd7aec5045..5cba332275 100644 --- a/react/react.d.ts +++ b/react/react.d.ts @@ -173,7 +173,7 @@ declare namespace __React { // on the existence of `children` in `P`, then we should remove this. props: P & { children?: ReactNode }; state: S; - context: {}; + context: any; refs: { [key: string]: ReactInstance }; From 7392a1acd09920470abe4ef1710d11bd893f08d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=8E=E6=89=AC?= Date: Tue, 25 Oct 2016 18:18:53 +0800 Subject: [PATCH 018/111] koa ```listen``` allow empty arguments (#12084) https://github.com/koajs/koa/blob/a293cc2d5e714281260111b6729929fcf379a93f/test/context/state.js#L16 and the ```server.listen([port][, hostname][, backlog][, callback])``` all parameters is options https://nodejs.org/api/net.html#net_server_listen_port_hostname_backlog_callback --- koa/koa-tests.ts | 2 ++ koa/koa.d.ts | 1 + 2 files changed, 3 insertions(+) diff --git a/koa/koa-tests.ts b/koa/koa-tests.ts index 71814fe4fc..ac42c1f1de 100644 --- a/koa/koa-tests.ts +++ b/koa/koa-tests.ts @@ -19,3 +19,5 @@ app.use(ctx => { }); app.listen(3000); + +const server = app.listen(); diff --git a/koa/koa.d.ts b/koa/koa.d.ts index 1356ffdb0e..1e45997f9f 100644 --- a/koa/koa.d.ts +++ b/koa/koa.d.ts @@ -159,6 +159,7 @@ declare module "koa" { constructor(); // From node.d.ts + listen(): http.Server; listen(port: number, hostname?: string, backlog?: number, listeningListener?: Function): http.Server; listen(port: number, hostname?: string, listeningListener?: Function): http.Server; listen(port: number, backlog?: number, listeningListener?: Function): http.Server; From 4a17fd3ae7356868aa84d0cd1a8b1162240cd6b5 Mon Sep 17 00:00:00 2001 From: Chris Manning Date: Tue, 25 Oct 2016 23:19:31 +1300 Subject: [PATCH 019/111] Added methods from Joi.any() to the root exports, as the root clones Joi.any() (see line 31 of https://github.com/hapijs/joi/blob/1ea86e6ad16c218714b39209bac3be99a0c598dd/lib/index.js) and a number of the any methods (such as Joi.required()) are necessary for use with the .when method. (#12025) --- joi/joi-tests.ts | 53 ++++++++++++++++++++++ joi/joi.d.ts | 114 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+) diff --git a/joi/joi-tests.ts b/joi/joi-tests.ts index c75309b45e..8d5463a7c0 100644 --- a/joi/joi-tests.ts +++ b/joi/joi-tests.ts @@ -801,3 +801,56 @@ Joi.isRef(ref); schema = Joi.reach(schema, ''); const Joi2 = Joi.extend({ name: '', base: schema }); + +// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- + +schema = Joi.allow(x, x); +schema = Joi.allow([x, x, x]); +schema = Joi.valid(x); +schema = Joi.valid(x, x); +schema = Joi.valid([x, x, x]); +schema = Joi.only(x); +schema = Joi.only(x, x); +schema = Joi.only([x, x, x]); +schema = Joi.equal(x); +schema = Joi.equal(x, x); +schema = Joi.equal([x, x, x]); +schema = Joi.invalid(x); +schema = Joi.invalid(x, x); +schema = Joi.invalid([x, x, x]); +schema = Joi.disallow(x); +schema = Joi.disallow(x, x); +schema = Joi.disallow([x, x, x]); +schema = Joi.not(x); +schema = Joi.not(x, x); +schema = Joi.not([x, x, x]); + +schema = Joi.required(); +schema = Joi.optional(); +schema = Joi.forbidden(); +schema = Joi.strip(); + +schema = Joi.description(str); +schema = Joi.notes(str); +schema = Joi.notes(strArr); +schema = Joi.tags(str); +schema = Joi.tags(strArr); + +schema = Joi.meta(obj); +schema = Joi.example(obj); +schema = Joi.unit(str); + +schema = Joi.options(validOpts); +schema = Joi.strict(); +schema = Joi.strict(bool); +schema = Joi.concat(x); + +schema = Joi.when(str, whenOpts); +schema = Joi.when(ref, whenOpts); + +schema = Joi.label(str); +schema = Joi.raw(); +schema = Joi.raw(bool); +schema = Joi.empty(); +schema = Joi.empty(str); +schema = Joi.empty(anySchema); \ No newline at end of file diff --git a/joi/joi.d.ts b/joi/joi.d.ts index b827903f9b..206c5778ca 100644 --- a/joi/joi.d.ts +++ b/joi/joi.d.ts @@ -879,4 +879,118 @@ declare module 'joi' { */ export function extend(extention: Extension): any; + /** + * Whitelists a value + */ + export function allow(value: any, ...values: any[]): Schema; + export function allow(values: any[]): Schema; + + /** + * Adds the provided values into the allowed whitelist and marks them as the only valid values allowed. + */ + export function valid(value: any, ...values: any[]): Schema; + export function valid(values: any[]): Schema; + export function only(value: any, ...values : any[]): Schema; + export function only(values: any[]): Schema; + export function equal(value: any, ...values : any[]): Schema; + export function equal(values: any[]): Schema; + + /** + * Blacklists a value + */ + export function invalid(value: any, ...values: any[]): Schema; + export function invalid(values: any[]): Schema; + export function disallow(value: any, ...values : any[]): Schema; + export function disallow(values: any[]): Schema; + export function not(value: any, ...values : any[]): Schema; + export function not(values: any[]): Schema; + + /** + * Marks a key as required which will not allow undefined as value. All keys are optional by default. + */ + export function required(): Schema; + + /** + * Marks a key as optional which will allow undefined as values. Used to annotate the schema for readability as all keys are optional by default. + */ + export function optional(): Schema; + + /** + * Marks a key as forbidden which will not allow any value except undefined. Used to explicitly forbid keys. + */ + export function forbidden(): Schema; + + /** + * Marks a key to be removed from a resulting object or array after validation. Used to sanitize output. + */ + export function strip(): Schema; + + /** + * Annotates the key + */ + export function description(desc: string): Schema; + + /** + * Annotates the key + */ + export function notes(notes: string): Schema; + export function notes(notes: string[]): Schema; + + /** + * Annotates the key + */ + export function tags(notes: string): Schema; + export function tags(notes: string[]): Schema; + + /** + * Attaches metadata to the key. + */ + export function meta(meta: Object): Schema; + + /** + * Annotates the key with an example value, must be valid. + */ + export function example(value: any): Schema; + + /** + * Annotates the key with an unit name. + */ + export function unit(name: string): Schema; + + /** + * Overrides the global validate() options for the current key and any sub-key. + */ + export function options(options: ValidationOptions): Schema; + + /** + * Sets the options.convert options to false which prevent type casting for the current key and any child keys. + */ + export function strict(isStrict?: boolean): Schema; + + /** + * Returns a new type that is the result of adding the rules of one type to another. + */ + export function concat(schema: T): T; + + /** + * Converts the type into an alternatives type where the conditions are merged into the type definition where: + */ + export function when(ref: string, options: WhenOptions): AlternativesSchema; + export function when(ref: Reference, options: WhenOptions): AlternativesSchema; + + /** + * Overrides the key name in error messages. + */ + export function label(name: string): Schema; + + /** + * Outputs the original untouched value instead of the casted value. + */ + export function raw(isRaw?: boolean): Schema; + + /** + * Considers anything that matches the schema to be empty (undefined). + * @param schema - any object or joi schema to match. An undefined schema unsets that rule. + */ + export function empty(schema?: any) : Schema; } From 988270f5f4aae5a1b3d7faf04fafd271580cbfd9 Mon Sep 17 00:00:00 2001 From: clementdevos Date: Tue, 25 Oct 2016 12:23:30 +0200 Subject: [PATCH 020/111] feat(react-redux-i18n): definitions (#12052) * feat(react-redux-i18n): definitions Added definitions for react-redux-i18n https://github.com/zoover/react-redux-i18n * Renamed test file to react-redux-i18n-tests.tsx --- react-redux-i18n/react-redux-i18n-tests.tsx | 52 +++++++++++++++++ react-redux-i18n/react-redux-i18n.d.ts | 65 +++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 react-redux-i18n/react-redux-i18n-tests.tsx create mode 100644 react-redux-i18n/react-redux-i18n.d.ts diff --git a/react-redux-i18n/react-redux-i18n-tests.tsx b/react-redux-i18n/react-redux-i18n-tests.tsx new file mode 100644 index 0000000000..37230b3b1a --- /dev/null +++ b/react-redux-i18n/react-redux-i18n-tests.tsx @@ -0,0 +1,52 @@ +/// + +import * as React from "react"; +import * as I18n from "react-redux-i18n"; + +class ReactReduxI18nTests_Translate1 extends React.Component, {}>{ + + render() { + return ( + + ) + } +} + + + +class ReactReduxI18nTests_Translate2 extends React.Component, {}>{ + + render() { + return ( + + ) + } +} + + +class ReactReduxI18nTests_Translate3 extends React.Component, {}>{ + + render() { + return ( + + ) + } +} + + +class ReactReduxI18nTests_Translate4 extends React.Component, {}>{ + + render() { + return ( + + ) + } +} + +function testI18Helper() { + I18n.I18n.t('application.title'); // => returns 'Toffe app met i18n!' + I18n.I18n.t('application.name', { name: 'Aad' }); // => returns 'Hallo, Aad!' + + I18n.I18n.l(1385856000000, { dateFormat: 'date.long' }); // => returns '1 december 2013' + I18n.I18n.l(Math.PI, { maximumFractionDigits: 2 }); // => returns '3,14' +} diff --git a/react-redux-i18n/react-redux-i18n.d.ts b/react-redux-i18n/react-redux-i18n.d.ts new file mode 100644 index 0000000000..537955af37 --- /dev/null +++ b/react-redux-i18n/react-redux-i18n.d.ts @@ -0,0 +1,65 @@ +// Type definitions for react-redux-i18n +// Project: https://github.com/zoover/react-redux-i18n +// Definitions by: Clément Devos +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// +/// + +declare module 'react-redux-i18n' { + import R = __React; + import _Redux = Redux; + + /** + * Helper methods + */ + interface I18n { + t(code: string, options?: any): string; + l(timestamp: number, options?: any): string; + } + export var I18n : I18n; + + type SubTranslationObject = string | { [key: string]: SubTranslationObject }; + + type TranslationObjects = { [lang: string]: SubTranslationObject }; + + type I18nState = { + translations: TranslationObjects; + locale: string; + } + + type TranslateProps = { + value: string; + [prop: string]: string; + + } + type LocalizeProps = { + value: string | number; + dateFormat?: string; + options?: Object; + } + + /** + * React components + */ + export class Translate extends R.Component{ } + export class Localize extends R.Component{ } + + /** + * Reducer + */ + export function i18nReducer(state?: any, options?: any): _Redux.Reducer; + + /** + * Reducer init + */ + export function syncTranslationWithStore(store: _Redux.Store): void; + + /** + * Redux Actions + */ + export function loadTranslations(translationsObject: TranslationObjects): void; + + export function setLocale(locale: string): void; + +} From fc856815903ac3d981274f261ece6561044c407a Mon Sep 17 00:00:00 2001 From: rinzeb Date: Tue, 25 Oct 2016 12:24:38 +0200 Subject: [PATCH 021/111] Update kafka-node.d.ts (#12057) --- kafka-node/kafka-node.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/kafka-node/kafka-node.d.ts b/kafka-node/kafka-node.d.ts index 19d9bc3010..1275f80834 100644 --- a/kafka-node/kafka-node.d.ts +++ b/kafka-node/kafka-node.d.ts @@ -9,6 +9,7 @@ declare module 'kafka-node' { export class Client { constructor(connectionString: string, clientId: string, options?: ZKOptions); close(callback?: Function): void; + topicExists(topics: Array, callback: Function): void; } export class Producer { From 3c223cbfb1240951ad92fdfb38638c483d2c03e5 Mon Sep 17 00:00:00 2001 From: Haoliang Yu Date: Tue, 25 Oct 2016 06:25:57 -0400 Subject: [PATCH 022/111] Update definition for leaflet 1.0 (#12016) * add initial definition of DomEvent for leaflet 1.0 * fix wrong type definition * complete type definition of L.DomEvent * remove unclear definition * adjust definition according to the leaflet API doc --- leaflet/leaflet-tests.ts | 8 ++++++++ leaflet/leaflet.d.ts | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/leaflet/leaflet-tests.ts b/leaflet/leaflet-tests.ts index 539ec2d8a3..a6f07eaefe 100644 --- a/leaflet/leaflet-tests.ts +++ b/leaflet/leaflet-tests.ts @@ -207,6 +207,14 @@ tileLayer = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png'); tileLayer = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', tileLayerOptions); tileLayer = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png?{foo}&{bar}&{abc}', {foo: 'bar', bar: (data: any) => 'foo', abc: () => ''}); +let eventHandler = () => {}; +L.DomEvent.on(htmlElement, 'click', eventHandler); +L.DomEvent.off(htmlElement, 'click', eventHandler); +L.DomEvent.on(htmlElement, { 'click': eventHandler }); +L.DomEvent.off(htmlElement, { 'click': eventHandler }, eventHandler); +L.DomEvent.disableScrollPropagation(htmlElement); +L.DomEvent.disableClickPropagation(htmlElement); + map = map // addControl // removeControl diff --git a/leaflet/leaflet.d.ts b/leaflet/leaflet.d.ts index c67c02e29b..38872edcb1 100644 --- a/leaflet/leaflet.d.ts +++ b/leaflet/leaflet.d.ts @@ -1185,6 +1185,15 @@ declare namespace L { distance: number; } + export namespace DomEvent { + export function on(el: HTMLElement, types: string, fn: Function, context?: Object): typeof DomEvent; + export function on(el: HTMLElement, eventMap: {[eventName: string]: Function}, context?: Object): typeof DomEvent; + export function off(el: HTMLElement, types: string, fn: Function, context?: Object): typeof DomEvent; + export function off(el: HTMLElement, eventMap: {[eventName: string]: Function}, context?: Object): typeof DomEvent; + export function disableScrollPropagation(el: HTMLElement): typeof DomEvent; + export function disableClickPropagation(el: HTMLElement): typeof DomEvent; + } + interface DefaultMapPanes { mapPane: HTMLElement; tilePane: HTMLElement; From 9e778b38c214e52ef1718cc024c008cae2db605c Mon Sep 17 00:00:00 2001 From: Foxeye-Rinx Date: Tue, 25 Oct 2016 17:26:49 +0700 Subject: [PATCH 023/111] Add support for custom reporter (#11938) * Add support for custom reporter * Update CustomReporter and add more test: - jasmineDone() shoud return type "any" instead of "void". - CustomReporter should has optional method. * Fix error: Duplicate identifier 'Promise'. --- jasmine/jasmine-tests.ts | 56 ++++++++++++++++++++++++++++++++++++++++ jasmine/jasmine.d.ts | 40 ++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) diff --git a/jasmine/jasmine-tests.ts b/jasmine/jasmine-tests.ts index 96ac307ca0..6c5bf855e1 100644 --- a/jasmine/jasmine-tests.ts +++ b/jasmine/jasmine-tests.ts @@ -904,6 +904,62 @@ describe("Custom matcher: 'toBeGoofy'", function () { }); }); +// test based on http://jasmine.github.io/2.5/custom_reporter.html +var myReporter: jasmine.CustomReporter = { + jasmineStarted: function (suiteInfo: jasmine.SuiteInfo ) { + console.log("Running suite with " + suiteInfo.totalSpecsDefined); + }, + + suiteStarted: function (result: jasmine.CustomReporterResult) { + console.log("Suite started: " + result.description + " whose full description is: " + result.fullName); + }, + + specStarted: function (result: jasmine.CustomReporterResult) { + console.log("Spec started: " + result.description + " whose full description is: " + result.fullName); + }, + + specDone: function (result: jasmine.CustomReporterResult) { + console.log("Spec: " + result.description + " was " + result.status); + for (var i = 0; i < result.failedExpectations.length; i++) { + console.log("Failure: " + result.failedExpectations[i].message); + console.log("Actual: " + result.failedExpectations[i].actual); + console.log("Expected: " + result.failedExpectations[i].expected); + console.log(result.failedExpectations[i].stack); + } + console.log(result.passedExpectations.length); + }, + + suiteDone: function (result: jasmine.CustomReporterResult) { + console.log('Suite: ' + result.description + ' was ' + result.status); + for (var i = 0; i < result.failedExpectations.length; i++) { + console.log('AfterAll ' + result.failedExpectations[i].message); + console.log(result.failedExpectations[i].stack); + } + }, + + jasmineDone: function() { + console.log('Finished suite'); + } +}; + +jasmine.getEnv().addReporter(myReporter); + +// test for custom reporter which return ES6 Promise in jasmineDone(): +var myShortReporter: jasmine.CustomReporter = { + jasmineDone: function() { + return new Promise(function(resolve, reject) { + setTimeout(() => resolve(), 10000); + }); + } +} + +var jasmineDoneResolved: Promise = myShortReporter.jasmineDone(); +jasmineDoneResolved.then(() => { + console.log("[ShortReporter] : jasmineDone Resolved"); +}); + +jasmine.getEnv().addReporter(myShortReporter); + describe("Randomize Tests", function() { it("should allow randomization of the order of tests", function() { expect(function() { diff --git a/jasmine/jasmine.d.ts b/jasmine/jasmine.d.ts index c4151995a7..79436134ff 100644 --- a/jasmine/jasmine.d.ts +++ b/jasmine/jasmine.d.ts @@ -162,6 +162,7 @@ declare namespace jasmine { versionString(): string; nextSpecId(): number; addReporter(reporter: Reporter): void; + addReporter(reporter: CustomReporter): void; execute(): void; describe(description: string, specDefinitions: () => void): Suite; // ddescribe(description: string, specDefinitions: () => void): Suite; Not a part of jasmine. Angular team adds these @@ -354,6 +355,45 @@ declare namespace jasmine { addReporter(reporter: Reporter): void; } + interface SuiteInfo { + totalSpecsDefined: number; + } + + interface CustomReportExpectation { + matcherName: string; + message: string; + passed: boolean; + stack: string; + } + + interface FailedExpectation extends CustomReportExpectation { + actual: string; + expected: string; + } + + interface PassedExpectation extends CustomReportExpectation { + + } + + interface CustomReporterResult { + description: string, + failedExpectations?: FailedExpectation[], + fullName: string, + id: string; + passedExpectations?: PassedExpectation[], + pendingReason?: string; + status?: string; + } + + interface CustomReporter { + jasmineStarted?(suiteInfo: SuiteInfo): void; + suiteStarted?(result: CustomReporterResult): void; + specStarted?(result: CustomReporterResult): void; + specDone?(result: CustomReporterResult): void; + suiteDone?(result: CustomReporterResult): void; + jasmineDone?(): any; + } + interface Runner { new (env: Env): any; From 57a716701e78bf1958c86c1726bd028b12fc6a95 Mon Sep 17 00:00:00 2001 From: Michael Sivolobov Date: Tue, 25 Oct 2016 17:29:33 +0700 Subject: [PATCH 024/111] Added typings for `react-native-sortable-list` component (#12105) --- .../react-native-sortable-list-tests.tsx | 208 ++++++++++++++++++ .../react-native-sortable-list.d.ts | 99 +++++++++ react-native-sortable-list/tsconfig.json | 6 + 3 files changed, 313 insertions(+) create mode 100644 react-native-sortable-list/react-native-sortable-list-tests.tsx create mode 100644 react-native-sortable-list/react-native-sortable-list.d.ts create mode 100644 react-native-sortable-list/tsconfig.json diff --git a/react-native-sortable-list/react-native-sortable-list-tests.tsx b/react-native-sortable-list/react-native-sortable-list-tests.tsx new file mode 100644 index 0000000000..fb72ce2e2f --- /dev/null +++ b/react-native-sortable-list/react-native-sortable-list-tests.tsx @@ -0,0 +1,208 @@ +/// +/// +/// + +import * as React from 'react'; +import { + Animated, + Easing, + AppRegistry, + StyleSheet, + Text, + Image, + View, + Dimensions, + FlexJustifyType, + FlexAlignType +} from 'react-native'; +import SortableList, {RowProps} from 'react-native-sortable-list'; + + +const window = Dimensions.get('window'); + +const data = { + 0: { + image: 'https://placekitten.com/200/200', + text: 'Chloe', + }, + 1: { + image: 'https://placekitten.com/200/201', + text: 'Jasper', + }, + 2: { + image: 'https://placekitten.com/200/202', + text: 'Pepper', + }, + 3: { + image: 'https://placekitten.com/200/203', + text: 'Oscar', + }, + 4: { + image: 'https://placekitten.com/200/204', + text: 'Dusty', + }, + 5: { + image: 'https://placekitten.com/200/205', + text: 'Spooky', + }, + 6: { + image: 'https://placekitten.com/200/210', + text: 'Kiki', + }, + 7: { + image: 'https://placekitten.com/200/215', + text: 'Smokey', + }, + 8: { + image: 'https://placekitten.com/200/220', + text: 'Gizmo', + }, + 9: { + image: 'https://placekitten.com/220/239', + text: 'Kitty', + }, +}; + +const styles = StyleSheet.create({ + container: { + flex: 1, + justifyContent: "center" as FlexJustifyType, + alignItems: "center" as FlexAlignType, + backgroundColor: '#eee', + paddingTop: 60, + }, + + list: { + flex: 1, + }, + + contentContainer: { + width: window.width, + paddingHorizontal: 30, + }, + + row: { + flexDirection: 'row', + alignItems: 'center', + backgroundColor: 'white', + padding: 16, + marginVertical: 5, + height: 90, + width: window.width - 30 * 2, + borderRadius: 4, + shadowColor: 'rgba(0,0,0,0.2)', + shadowOpacity: 1, + shadowOffset: {height: 2, width: 2}, + shadowRadius: 2, + }, + + image: { + width: 60, + height: 60, + marginRight: 30, + borderRadius: 30, + }, + + text: { + fontSize: 24, + }, + +}); + +class Basic extends React.Component { + render() { + return ( + + + + ); + } + + _renderRow = ({data, active}: RowProps) => { + return + } +} + +interface RowState { + style: { + shadowRadius: Animated.Value + transform: {scale: Animated.Value}[] + } +} + +class Row extends React.Component { + + state = { + style: { + shadowRadius: new Animated.Value(2), + transform: [{scale: new Animated.Value(1)}], + } + }; + + componentWillReceiveProps(nextProps: RowProps) { + if (this.props.active !== nextProps.active) { + if (this.props.active !== nextProps.active) { + if (nextProps.active) { + this.startActivationAnimation(); + } else { + this.startDeactivationAnimation(); + } + } + } + } + + startActivationAnimation = () => { + const {style} = this.state; + + Animated.parallel([ + Animated.timing(style.transform[0].scale, { + duration: 100, + easing: Easing.out(Easing.quad), + toValue: 1.1 + }), + Animated.timing(style.shadowRadius, { + duration: 100, + easing: Easing.out(Easing.quad), + toValue: 10 + }), + ]).start(); + }; + + startDeactivationAnimation = () => { + const {style} = this.state; + + Animated.parallel([ + Animated.timing(style.transform[0].scale, { + duration: 100, + easing: Easing.out(Easing.quad), + toValue: 1 + }), + Animated.timing(style.shadowRadius, { + duration: 100, + easing: Easing.out(Easing.quad), + toValue: 2 + }), + ]).start(); + }; + + render() { + const {data} = this.props; + + return ( + + + {data.text} + + ); + } +} + + +AppRegistry.registerComponent('Basic', () => Basic); diff --git a/react-native-sortable-list/react-native-sortable-list.d.ts b/react-native-sortable-list/react-native-sortable-list.d.ts new file mode 100644 index 0000000000..38a078c689 --- /dev/null +++ b/react-native-sortable-list/react-native-sortable-list.d.ts @@ -0,0 +1,99 @@ +// Type definitions for react-native-sortable-list +// Project: https://github.com/gitim/react-native-sortable-list +// Definitions by: Michael Sivolobov +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// +/// + +declare namespace __SortableList { + + type DataKey = string | number; + + export type DataValue = any + + type DataByNumber = { + [key: number]: DataValue + } + + type DataByString = { + [key: string]: DataValue + } + + export type Data = DataByNumber | DataByString; + + export interface RowProps { + active: boolean + data: DataValue + key?: DataKey + index?: number + disabled?: boolean + } + + interface SortableListProps { + + /** + * data source + */ + data: Data + + /** + * an array of keys from data, the order of keys from the array will be used to initial rows order + */ + order?: DataKey[] + + /** + * style of HOC + */ + style?: React.ViewStyle + + /** + * these styles will be applied to the inner scroll view content container + */ + contentContainerStyle?: React.ViewStyle + + /** + * when false, rows are not sortable. The default value is true. + */ + sortingEnabled?: boolean + + /** + * when false, the content does not scrollable. The default value is true. + */ + scrollEnabled?: boolean + + /** + * Takes a row key, row index, data entry from the data source and its statuses disabled, + * active and should return a renderable component to be rendered as the row. + */ + renderRow: (props: RowProps) => JSX.Element + + /** + * Called when rows were reordered, takes an array of rows keys of the next rows order. + */ + onChangeOrder?: (nextOrder: DataKey[]) => void + + /** + * Called when a row was activated (user long tapped). + */ + onActivateRow?: (key: DataKey) => void + + /** + * Called when the active row was released. + */ + onReleaseRow?: (key: DataKey) => void + } + + export interface SortableListStatic extends React.ClassicComponentClass {} + + export var SortableList: SortableListStatic; + export type SortableList = SortableListStatic; +} + +declare module 'react-native-sortable-list' { + import SortableList = __SortableList; + + export interface RowProps extends SortableList.RowProps {} + + export default SortableList.SortableList; +} diff --git a/react-native-sortable-list/tsconfig.json b/react-native-sortable-list/tsconfig.json new file mode 100644 index 0000000000..b666373644 --- /dev/null +++ b/react-native-sortable-list/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "es6", + "noImplicitAny": true + } +} From bf5d81c29f9ef26ca950ebe4d23e31902cd3726c Mon Sep 17 00:00:00 2001 From: Karol Janyst Date: Tue, 25 Oct 2016 19:37:44 +0900 Subject: [PATCH 025/111] Add definitions for bootstrap-select (#12113) --- bootstrap-select/bootstrap-select-tests.ts | 43 +++++++++++++++++++++ bootstrap-select/bootstrap-select.d.ts | 44 ++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 bootstrap-select/bootstrap-select-tests.ts create mode 100644 bootstrap-select/bootstrap-select.d.ts diff --git a/bootstrap-select/bootstrap-select-tests.ts b/bootstrap-select/bootstrap-select-tests.ts new file mode 100644 index 0000000000..9758b1c9ed --- /dev/null +++ b/bootstrap-select/bootstrap-select-tests.ts @@ -0,0 +1,43 @@ +// Bootstrap Select Test +// ================================================================================ +/// +/// + +$(".selectpicker").selectpicker({ + actionsBox: true, + container: "body", + countSelectedText: "counts > #", + deselectAllText: "test", + dropdownAlignRight: true, + dropupAuto: true, + header: "test", + hideDisabled: true, + iconBase: "fa", + liveSearch: true, + liveSearchNormalize: true, + liveSearchPlaceholder: "test", + liveSearchStyle: "contains", + maxOptions: 10, + maxOptionsText: "test", + mobile: true, + multipleSeparator: ", ", + noneSelectedText: "test", + selectAllText: "test", + selectedTextFormat: "values", + selectOnTab: true, + showContent: true, + showIcon: true, + showSubtext: true, + showTick: true, + size: "auto", + style: "test", + tickIcon: "test", + title: "test", + width: "auto" +}) + +$(".selectpicker").selectpicker("val", "foo") +$(".selectpicker").selectpicker("val", ["foo", "bar"]) +$(".selectpicker").selectpicker("selectAll") +$(".selectpicker").selectpicker("setStyle", "btn-large", "add") + diff --git a/bootstrap-select/bootstrap-select.d.ts b/bootstrap-select/bootstrap-select.d.ts new file mode 100644 index 0000000000..9f1436a624 --- /dev/null +++ b/bootstrap-select/bootstrap-select.d.ts @@ -0,0 +1,44 @@ +// Type definitions for bootstrap-select v1.11.2 +// Project: https://silviomoreto.github.io/bootstrap-select/ +// Definitions by: Karol Janyst +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +interface BootstrapSelectOptions { + actionsBox?: boolean + container?: string | boolean + countSelectedText?: string | Function + deselectAllText?: string + dropdownAlignRight?: string | boolean + dropupAuto?: boolean + header?: string + hideDisabled?: boolean + iconBase?: string + liveSearch?: boolean + liveSearchNormalize?: boolean + liveSearchPlaceholder?: string + liveSearchStyle?: string + maxOptions?: number | boolean + maxOptionsText?: string | Array | Function + mobile?: boolean + multipleSeparator?: string + noneSelectedText?: string + selectAllText?: string + selectedTextFormat?: string + selectOnTab?: boolean + showContent?: boolean + showIcon?: boolean + showSubtext?: boolean + showTick?: boolean + size?: string | number | boolean + style?: string + tickIcon?: string + title?: string + width?: string | boolean +} + +interface JQuery { + selectpicker(opts?: BootstrapSelectOptions): void + selectpicker(method: string, ...args: Array>): void +} From cdcbb561a9a2d9168c67c3bc338581c13c961b6e Mon Sep 17 00:00:00 2001 From: Karol Janyst Date: Tue, 25 Oct 2016 19:38:07 +0900 Subject: [PATCH 026/111] Add definitions for credit-card-type (#12115) --- credit-card-type/credit-card-type-tests.ts | 11 ++++++++ credit-card-type/credit-card-type.d.ts | 32 ++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 credit-card-type/credit-card-type-tests.ts create mode 100644 credit-card-type/credit-card-type.d.ts diff --git a/credit-card-type/credit-card-type-tests.ts b/credit-card-type/credit-card-type-tests.ts new file mode 100644 index 0000000000..11519a14ab --- /dev/null +++ b/credit-card-type/credit-card-type-tests.ts @@ -0,0 +1,11 @@ +// Credit Card Type Test +// ================================================================================ +/// + +// Imports +// -------------------------------------------------------------------------------- +import * as creditCardType from "credit-card-type" + +var cardTypes: Array = creditCardType("") +var cardInfo: CreditCardType.CreditCardTypeInfo = creditCardType.getTypeInfo("") +var types: { [type: string]: string } = creditCardType.types diff --git a/credit-card-type/credit-card-type.d.ts b/credit-card-type/credit-card-type.d.ts new file mode 100644 index 0000000000..159de50be6 --- /dev/null +++ b/credit-card-type/credit-card-type.d.ts @@ -0,0 +1,32 @@ +// Type definitions for Credit Card Type v5.0.0 +// Project: https://github.com/braintree/credit-card-type +// Definitions by: Karol Janyst +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare namespace CreditCardType { + + type CardBrand = "american-express" | "diners-club" | "discover" | "jcb" | "maestro" | "master-card" | "unionpay" | "visa" + + interface CreditCardTypeInfo { + niceType?: string + type?: CardBrand + pattern?: RegExp + gaps?: Array + lengths?: Array + code?: { + name?: string + size?: number + } + } + + interface CreditCardType { + (number: string): Array + getTypeInfo (type: string): CreditCardTypeInfo + types: { [type: string]: string } + } +} + +declare module "credit-card-type" { + const creditCardType: CreditCardType.CreditCardType + export = creditCardType +} From 52410f6f389586942d6427bbf66ac2bf4a9cf04b Mon Sep 17 00:00:00 2001 From: Karol Janyst Date: Tue, 25 Oct 2016 19:38:44 +0900 Subject: [PATCH 027/111] Add definitions for es6-error (#12116) --- es6-error/es6-error-tests.ts | 15 +++++++++++++++ es6-error/es6-error.d.ts | 8 ++++++++ 2 files changed, 23 insertions(+) create mode 100644 es6-error/es6-error-tests.ts create mode 100644 es6-error/es6-error.d.ts diff --git a/es6-error/es6-error-tests.ts b/es6-error/es6-error-tests.ts new file mode 100644 index 0000000000..a7f8ac6e25 --- /dev/null +++ b/es6-error/es6-error-tests.ts @@ -0,0 +1,15 @@ +// ES6 Error Test +// ================================================================================ +/// + +// Imports +// -------------------------------------------------------------------------------- +import * as ExtendableError from "es6-error" + +class TestError extends ExtendableError { + constructor (message: string = "TestError") { + super(message) + } +} + +throw new TestError("Test Message") diff --git a/es6-error/es6-error.d.ts b/es6-error/es6-error.d.ts new file mode 100644 index 0000000000..ce987f1a2f --- /dev/null +++ b/es6-error/es6-error.d.ts @@ -0,0 +1,8 @@ +// Type definitions for es6-error v4.0.0 +// Project: https://github.com/bjyoungblood/es6-error +// Definitions by: Karol Janyst +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare module "es6-error" { + export = Error +} From 57d9667b2d0e483399ccf97eb3c44cf48c82f07f Mon Sep 17 00:00:00 2001 From: Karol Janyst Date: Tue, 25 Oct 2016 19:39:31 +0900 Subject: [PATCH 028/111] Add definitions for react-color (#12117) --- react-color/react-color-tests.tsx | 54 +++++++ react-color/react-color.d.ts | 250 ++++++++++++++++++++++++++++++ 2 files changed, 304 insertions(+) create mode 100644 react-color/react-color-tests.tsx create mode 100644 react-color/react-color.d.ts diff --git a/react-color/react-color-tests.tsx b/react-color/react-color-tests.tsx new file mode 100644 index 0000000000..5cc201c4f7 --- /dev/null +++ b/react-color/react-color-tests.tsx @@ -0,0 +1,54 @@ +// React Color Test +// ================================================================================ +/// +/// +/// + +// Imports +// -------------------------------------------------------------------------------- +import * as React from "react" +import { StatelessComponent } from "react" +import { render } from "react-dom" +import { + AlphaPicker, BlockPicker, ChromePicker, CirclePicker, + CompactPicker, GithubPicker, HuePicker, MaterialPicker, + PhotoshopPicker, SketchPicker, SliderPicker, SwatchesPicker, + TwitterPicker, CustomPicker +} from "react-color" +import { Alpha, Checkboard, EditableInput, Hue, Saturation } from "react-color/lib/components/common" + +interface CustomProps extends ReactColor.InjectedColorProps { + color?: ReactColor.Color +} + +var CustomComponent: StatelessComponent = (props: CustomProps) => { + function onChange (color: ReactColor.ColorResult) {} + + return ( +
+ + + + + +
+ ) +} +var Custom = CustomPicker(CustomComponent) + +var colors: Array = ["#000", "#333"] + +render(, document.getElementById("main")) +render(, document.getElementById("main")) +render(, document.getElementById("main")) +render(, document.getElementById("main")) +render(, document.getElementById("main")) +render(, document.getElementById("main")) +render(, document.getElementById("main")) +render(, document.getElementById("main")) +render(, document.getElementById("main")) +render(, document.getElementById("main")) +render(, document.getElementById("main")) +render(, document.getElementById("main")) +render(, document.getElementById("main")) +render(, document.getElementById("main")) diff --git a/react-color/react-color.d.ts b/react-color/react-color.d.ts new file mode 100644 index 0000000000..a771ca445f --- /dev/null +++ b/react-color/react-color.d.ts @@ -0,0 +1,250 @@ +// Type definitions for react-color v2.3.4 +// Project: https://casesandberg.github.io/react-color/ +// Definitions by: Karol Janyst +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +declare namespace ReactColor { + import React = __React + + interface HSLColor { + a?: number + h: number + l: number + s: number + } + + interface RGBColor { + a?: number + b: number + g: number + r: number + } + + type Color = string | HSLColor | RGBColor + + interface ColorResult { + hex: string + hsl: HSLColor + rgb: RGBColor + } + + type ColorChangeHandler = (color: ColorResult) => void + + interface ColorPickerProps extends React.ClassAttributes { + color?: Color + onChange?: ColorChangeHandler + onChangeComplete?: ColorChangeHandler + } + + /* Predefined pickers */ + interface AlphaPickerProps extends ColorPickerProps { + height?: string + width?: string + } + interface AlphaPicker extends React.ComponentClass {} + const AlphaPicker: AlphaPicker + + interface BlockPickerProps extends ColorPickerProps { + colors?: Array + width?: string + } + interface BlockPicker extends React.ComponentClass {} + const BlockPicker: BlockPicker + + interface ChromePickerProps extends ColorPickerProps { + disableAlpha?: boolean + } + interface ChromePicker extends React.ComponentClass {} + const ChromePicker: ChromePicker + + interface CirclePickerProps extends ColorPickerProps { + colors?: Array + width?: string + } + interface CirclePicker extends React.ComponentClass {} + const CirclePicker: CirclePicker + + interface CompactPickerProps extends ColorPickerProps { + colors?: Array + } + interface CompactPicker extends React.ComponentClass {} + const CompactPicker: CompactPicker + + interface GithubPickerProps extends ColorPickerProps { + colors?: Array + width?: string + } + interface GithubPicker extends React.ComponentClass {} + const GithubPicker: GithubPicker + + interface HuePickerProps extends ColorPickerProps { + height?: string + width?: string + } + interface HuePicker extends React.ComponentClass {} + const HuePicker: HuePicker + + interface MaterialPickerProps extends ColorPickerProps {} + interface MaterialPicker extends React.ComponentClass {} + const MaterialPicker: MaterialPicker + + interface PhotoshopPickerProps extends ColorPickerProps { + header?: string + onAccept?: ColorChangeHandler + onCancel?: ColorChangeHandler + } + interface PhotoshopPicker extends React.ComponentClass {} + const PhotoshopPicker: PhotoshopPicker + + interface SketchPickerProps extends ColorPickerProps { + disableAlpha?: boolean + presetColors?: Array + width?: string + } + interface SketchPicker extends React.ComponentClass {} + const SketchPicker: SketchPicker + + interface SliderPickerProps extends ColorPickerProps {} + interface SliderPicker extends React.ComponentClass {} + const SliderPicker: SliderPicker + + interface SwatchesPickerProps extends ColorPickerProps { + colors?: Array> + height?: number + width?: number + } + interface SwatchesPicker extends React.ComponentClass {} + const SwatchesPicker: SwatchesPicker + + interface TwitterPickerProps extends ColorPickerProps {} + interface TwitterPicker extends React.ComponentClass {} + const TwitterPicker: TwitterPicker + + /* For custom picker */ + interface InjectedColorProps { + hex?: string + hsl?: HSLColor + rgb?: RGBColor + onChange?: ColorChangeHandler + } + + function CustomPicker(component: React.ComponentClass | React.StatelessComponent): React.ComponentClass + + interface CustomPickerProps extends React.ClassAttributes { + color?: Color + pointer?: React.ReactNode + onChange?: ColorChangeHandler + } + + interface AlphaProps extends CustomPickerProps {} + interface Alpha extends React.ComponentClass {} + const Alpha: Alpha + + interface EditableInputStyles { + input?: React.CSSProperties + label?: React.CSSProperties + wrap?: React.CSSProperties + } + interface EditableInputProps extends React.ClassAttributes { + color?: Color + label?: string + onChange?: ColorChangeHandler + styles?: EditableInputStyles + value?: any + } + interface EditableInput extends React.ComponentClass {} + const EditableInput: EditableInput + + interface HueProps extends CustomPickerProps { + direction?: "horizontal" | "vertical" + } + interface Hue extends React.ComponentClass {} + const Hue: Hue + + interface SaturationProps extends CustomPickerProps {} + interface Saturation extends React.ComponentClass {} + const Saturation: Saturation + + interface CheckboardProps extends React.ClassAttributes { + grey?: string + size?: number + white?: string + } + interface Checkboard extends React.ComponentClass {} + const Checkboard: Checkboard +} + +declare module "react-color/lib/components/common/Alpha" { export default ReactColor.Alpha } +declare module "react-color/lib/components/common/Checkboard" { export default ReactColor.Checkboard } +declare module "react-color/lib/components/common/EditableInput" { export default ReactColor.EditableInput } +declare module "react-color/lib/components/common/Hue" { export default ReactColor.Hue } +declare module "react-color/lib/components/common/Saturation" { export default ReactColor.Saturation } +declare module "react-color/lib/components/common/ColorWrap" { export default ReactColor.CustomPicker } + +declare module "react-color/lib/components/common" { + import Alpha from "react-color/lib/components/common/Alpha" + import Checkboard from "react-color/lib/components/common/Checkboard" + import EditableInput from "react-color/lib/components/common/EditableInput" + import Hue from "react-color/lib/components/common/Hue" + import Saturation from "react-color/lib/components/common/Saturation" + + export { + Alpha, + Checkboard, + EditableInput, + Hue, + Saturation + } +} + +declare module "react-color/lib/components/alpha/Alpha" { export default ReactColor.AlphaPicker } +declare module "react-color/lib/components/block/Block" { export default ReactColor.BlockPicker } +declare module "react-color/lib/components/chrome/Chrome" { export default ReactColor.ChromePicker } +declare module "react-color/lib/components/circle/Circle" { export default ReactColor.CirclePicker } +declare module "react-color/lib/components/compact/Compact" { export default ReactColor.CompactPicker } +declare module "react-color/lib/components/github/Github" { export default ReactColor.GithubPicker } +declare module "react-color/lib/components/hue/Hue" { export default ReactColor.HuePicker } +declare module "react-color/lib/components/meterial/Material" { export default ReactColor.MaterialPicker } +declare module "react-color/lib/components/photoshop/Photoshop" { export default ReactColor.PhotoshopPicker } +declare module "react-color/lib/components/sketch/Sketch" { export default ReactColor.SketchPicker } +declare module "react-color/lib/components/slider/Slider" { export default ReactColor.SliderPicker } +declare module "react-color/lib/components/swatches/Swatches" { export default ReactColor.SwatchesPicker } +declare module "react-color/lib/components/twitter/Twitter" { export default ReactColor.TwitterPicker } + +declare module "react-color" { + import AlphaPicker from "react-color/lib/components/alpha/Alpha" + import BlockPicker from "react-color/lib/components/block/Block" + import ChromePicker from "react-color/lib/components/chrome/Chrome" + import CirclePicker from "react-color/lib/components/circle/Circle" + import CompactPicker from "react-color/lib/components/compact/Compact" + import GithubPicker from "react-color/lib/components/github/Github" + import HuePicker from "react-color/lib/components/hue/Hue" + import MaterialPicker from "react-color/lib/components/meterial/Material" + import PhotoshopPicker from "react-color/lib/components/photoshop/Photoshop" + import SketchPicker from "react-color/lib/components/sketch/Sketch" + import SliderPicker from "react-color/lib/components/slider/Slider" + import SwatchesPicker from "react-color/lib/components/swatches/Swatches" + import TwitterPicker from "react-color/lib/components/twitter/Twitter" + import CustomPicker from "react-color/lib/components/common/ColorWrap" + + export type CustomPickerProps = ReactColor.CustomPickerProps + + export { + AlphaPicker, + BlockPicker, + ChromePicker, + CirclePicker, + CompactPicker, + GithubPicker, + HuePicker, + MaterialPicker, + PhotoshopPicker, + SketchPicker, + SliderPicker, + SwatchesPicker, + TwitterPicker, + CustomPicker + } +} From c080846200eecc80ba9e19fb0b8389f3104a361e Mon Sep 17 00:00:00 2001 From: Karol Janyst Date: Tue, 25 Oct 2016 19:39:56 +0900 Subject: [PATCH 029/111] Add definitions for react-css-transition-replace (#12118) --- .gitignore | 1 + .../react-css-transition-replace-tests.tsx | 18 +++++++++++++++ .../react-css-transition-replace.d.ts | 23 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 react-css-transition-replace/react-css-transition-replace-tests.tsx create mode 100644 react-css-transition-replace/react-css-transition-replace.d.ts diff --git a/.gitignore b/.gitignore index 35dd5a667e..a79d28de0c 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ node_modules .sublimets .settings/launch.json +yarn.lock diff --git a/react-css-transition-replace/react-css-transition-replace-tests.tsx b/react-css-transition-replace/react-css-transition-replace-tests.tsx new file mode 100644 index 0000000000..7b51aee946 --- /dev/null +++ b/react-css-transition-replace/react-css-transition-replace-tests.tsx @@ -0,0 +1,18 @@ +// React CSS Transition Replace Test +// ================================================================================ +/// +/// +/// + +// Imports +// -------------------------------------------------------------------------------- +import * as React from "react" +import { render } from 'react-dom'; +import * as CSSTransitionReplace from "react-css-transition-replace" + +render( + +
Test
+
, + document.getElementById("main") +) diff --git a/react-css-transition-replace/react-css-transition-replace.d.ts b/react-css-transition-replace/react-css-transition-replace.d.ts new file mode 100644 index 0000000000..34d067904e --- /dev/null +++ b/react-css-transition-replace/react-css-transition-replace.d.ts @@ -0,0 +1,23 @@ +// Type definitions for react-css-transition-replace 2.0.1 +// Project: http://marnusw.github.io/react-css-transition-replace/ +// Definitions by: Karol Janyst +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// +/// + +declare namespace TransitionReplace { + import React = __React + + interface CSSTransitionReplaceProps extends React.CSSTransitionGroupProps { + overflowHidden?: boolean + } + + type CSSTransitionReplace = React.ComponentClass +} + +declare module "react-css-transition-replace" { + var CSSTransitionReplace: TransitionReplace.CSSTransitionReplace + type CSSTransitionReplace = TransitionReplace.CSSTransitionReplace + export = CSSTransitionReplace +} From bd58de638896c437a35e27bfd9c1f2474d1ecc90 Mon Sep 17 00:00:00 2001 From: Karol Janyst Date: Tue, 25 Oct 2016 19:41:28 +0900 Subject: [PATCH 030/111] Add definitions for react-intl-redux (#12120) * Add definitions for react-intl-redux * Change credits --- react-intl-redux/react-intl-redux-tests.tsx | 28 +++++++++++++++++++++ react-intl-redux/react-intl-redux.d.ts | 28 +++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 react-intl-redux/react-intl-redux-tests.tsx create mode 100644 react-intl-redux/react-intl-redux.d.ts diff --git a/react-intl-redux/react-intl-redux-tests.tsx b/react-intl-redux/react-intl-redux-tests.tsx new file mode 100644 index 0000000000..d38abbcf0c --- /dev/null +++ b/react-intl-redux/react-intl-redux-tests.tsx @@ -0,0 +1,28 @@ +// React Intl Redux Test +// ================================================================================ +/// +/// +/// + +// Imports +// -------------------------------------------------------------------------------- +import * as React from "react" +import { render } from "react-dom" +import { Provider, IntlProvider, IntlState, IntlAction, intlReducer, updateIntl } from "react-intl-redux" + +var action: IntlAction = updateIntl({ locale : "en", messages : {} }) +var state: IntlState = intlReducer({ locale : "en", messages : {} }, action) + +render( + +
Test
+
, + document.getElementById("main") +) + +render( + +
Test
+
, + document.getElementById("main") +) diff --git a/react-intl-redux/react-intl-redux.d.ts b/react-intl-redux/react-intl-redux.d.ts new file mode 100644 index 0000000000..ac6e77d5cb --- /dev/null +++ b/react-intl-redux/react-intl-redux.d.ts @@ -0,0 +1,28 @@ +// Type definitions for react-intl-redux v0.1.0 +// Project: https://github.com/ratson/react-intl-redux +// Definitions by: Karol Janyst +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// +/// +/// + +declare module "react-intl-redux" { + import { Action } from "redux" + import { Provider as ReduxProvider } from "react-redux" + import { IntlProvider as ReactIntlProvider } from "react-intl" + + interface IntlState { + locale: string + messages: any + } + + interface IntlAction extends Action { + payload?: IntlState + } + + export function intlReducer(state: IntlState, action: IntlAction): IntlState + export function updateIntl (opts: IntlState): IntlAction + export class IntlProvider extends ReactIntlProvider {} + export class Provider extends ReduxProvider {} +} From 62c6882723381197b638445d6035e19c1945dfa3 Mon Sep 17 00:00:00 2001 From: Karol Janyst Date: Tue, 25 Oct 2016 19:41:57 +0900 Subject: [PATCH 031/111] Add definitions for react-onclickoutside (#12121) --- .../react-onclickoutside-tests.tsx | 46 +++++++++++++++++++ .../react-onclickoutside.d.ts | 32 +++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 react-onclickoutside/react-onclickoutside-tests.tsx create mode 100644 react-onclickoutside/react-onclickoutside.d.ts diff --git a/react-onclickoutside/react-onclickoutside-tests.tsx b/react-onclickoutside/react-onclickoutside-tests.tsx new file mode 100644 index 0000000000..a39cef1f3f --- /dev/null +++ b/react-onclickoutside/react-onclickoutside-tests.tsx @@ -0,0 +1,46 @@ +// React onClickOutside Test +// ================================================================================ +/// +/// +/// + +// Imports +// -------------------------------------------------------------------------------- +import * as React from "react" +import { Component, StatelessComponent, MouseEvent } from "react" +import { render } from "react-dom" +import * as onClickOutside from "react-onclickoutside" + +interface TestProps extends ReactOnClickOutside.OnClickOutsideProps {} + +var TestStateless: StatelessComponent = (props: TestProps) => { + return (
Test
) +} +var TestStatelessWrapped = onClickOutside(TestStateless) + +class Test extends Component implements ReactOnClickOutside.OnClickOutsideComponent { + handleClickOutside (e: MouseEvent) {} + + render () { + return (
Test
) + } +} +var TestWrapped = onClickOutside(Test) + +render( + , + document.getElementById("main") +) + +render( + , + document.getElementById("main") +) diff --git a/react-onclickoutside/react-onclickoutside.d.ts b/react-onclickoutside/react-onclickoutside.d.ts new file mode 100644 index 0000000000..ca807da848 --- /dev/null +++ b/react-onclickoutside/react-onclickoutside.d.ts @@ -0,0 +1,32 @@ +// Type definitions for react-onclickoutside v5.7.0 +// Project: https://github.com/Pomax/react-onclickoutside +// Definitions by: Karol Janyst +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +declare namespace ReactOnClickOutside { + import React = __React + + interface OnClickOutsideComponent { + handleClickOutside(e: React.MouseEvent): void + } + + interface OnClickOutsideProps { + disableOnClickOutside?: boolean | Function + enableOnClickOutside?: Function + eventTypes?: string | Array + outsideClickIgnoreClass?: string + preventDefault?: boolean + stopPropagation?: boolean + } + + interface onClickOutside { +
(component: React.ComponentClass | React.StatelessComponent): React.ComponentClass + } +} + +declare module "react-onclickoutside" { + const onClickOutside: ReactOnClickOutside.onClickOutside + export = onClickOutside +} From 19490da3d7a39a1edfb6f22660d2254eaf632dd9 Mon Sep 17 00:00:00 2001 From: Karol Janyst Date: Tue, 25 Oct 2016 19:42:14 +0900 Subject: [PATCH 032/111] Add definitions for validatorjs (#12123) --- validatorjs/validatorjs-tests.ts | 40 ++++++++++++++++++ validatorjs/validatorjs.d.ts | 72 ++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 validatorjs/validatorjs-tests.ts create mode 100644 validatorjs/validatorjs.d.ts diff --git a/validatorjs/validatorjs-tests.ts b/validatorjs/validatorjs-tests.ts new file mode 100644 index 0000000000..1c2096c03b --- /dev/null +++ b/validatorjs/validatorjs-tests.ts @@ -0,0 +1,40 @@ +// ValidatorJS Test +// ================================================================================ +/// + +// Imports +// -------------------------------------------------------------------------------- +import * as Validator from "validatorjs" + +var rules: any = { + foo: "required" +} + +var data: any = { + foo: "bar" +} + +var validator: ValidatorJS.Validator = new Validator(data, rules) + +var passes: boolean = validator.passes() as boolean +validator.passes(() => {}) + +var fails: boolean = validator.fails() as boolean +validator.fails(() => {}) + +var check: boolean = validator.check() + +var errors: ValidatorJS.Errors = validator.errors +var all: ValidatorJS.ValidationErrors = errors.all() +var error: Array = errors.get("foo") +var first: string | boolean = errors.first("foo") +var has: boolean = errors.has("foo") + +Validator.setMessages("en", {}) +var messages: ValidatorJS.ErrorMessages = Validator.getMessages("en") +Validator.useLang("en") +var lang: string = Validator.getDefaultLang() +Validator.setAttributeFormatter((attributes: any) => ({})) +Validator.stopOnError(true) +Validator.register("custom", () => {}, "error.custom") +Validator.registerAsync("custom", () => {}, "error.custom") diff --git a/validatorjs/validatorjs.d.ts b/validatorjs/validatorjs.d.ts new file mode 100644 index 0000000000..50df271a94 --- /dev/null +++ b/validatorjs/validatorjs.d.ts @@ -0,0 +1,72 @@ +// Type definitions for validatorjs v3.7.0 +// Project: https://github.com/skaterdav85/validatorjs +// Definitions by: Karol Janyst +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare namespace ValidatorJS { + + interface ParsedRule { + attribute: Array<{ name: string, value: any }> + } + + interface ValidationErrors { + [field: string]: string + } + + interface ErrorMessages { + [key: string]: string + } + + interface AttributeNames { + [attribute: string]: string + } + + type AttributeFormatter = (attribute: any) => any + + interface Errors { + errors : ValidationErrors + add (attribute: string, message: string): void + get (attribute: string): Array + first (attribute: string): string | boolean + all (): ValidationErrors + has (attribute: string): boolean + } + + interface ValidatorStatic { + new (data: A, rules: any, customMessages?: ErrorMessages): Validator + setMessages (lang: string, messages: ErrorMessages): any + getMessages (lang: string): ErrorMessages + useLang (lang: string): void + getDefaultLang (): string + setAttributeFormatter (func: AttributeFormatter): void + stopOnError (attributes: boolean | Array): void + register (name: string, fn: Function, message: string): void + registerAsync (name: string, fn: Function, message: string): void + } + + interface Validator { + lang: string + input: A + messages: ErrorMessages + errors: Errors + errorCount: number + hasAsync: boolean + rules: any + numericRules: Array + attributeFormatter: AttributeFormatter + check (): boolean + checkAsync (passes?: Function, fails?: Function): void + setAttributeNames (attributes: AttributeNames): void + setAttributeFormatter (func: AttributeFormatter): void + getRule (name: string): Function + stopOnError (passes?: Function): boolean | void + passes (passes?: Function): boolean | void + fails (fails?: Function): boolean | void + } + +} + +declare module "validatorjs" { + const Validator: ValidatorJS.ValidatorStatic + export = Validator +} From 9ebe39be08d0805e5d9c5449a363343a7d9443c1 Mon Sep 17 00:00:00 2001 From: Karol Janyst Date: Tue, 25 Oct 2016 19:43:11 +0900 Subject: [PATCH 033/111] Add definitions for color (#12114) * Add definitions for color * Rename color-test.ts to color-tests.ts --- color/color-tests.ts | 85 +++++++++++++++++++++++ color/color.d.ts | 162 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 247 insertions(+) create mode 100644 color/color-tests.ts create mode 100644 color/color.d.ts diff --git a/color/color-tests.ts b/color/color-tests.ts new file mode 100644 index 0000000000..9bfc656206 --- /dev/null +++ b/color/color-tests.ts @@ -0,0 +1,85 @@ +// Color Test +// ================================================================================ +/// + +// Imports +// -------------------------------------------------------------------------------- +import * as Color from "color" + +var color: Color.Color = Color("white") +var colorOther: Color.Color = Color("black") + +var colorRGB: Color.Color = color.rgb(0, 0, 0) +var colorRGB: Color.Color = color.rgb([0, 0, 0]) +var rgb: Color.RGBColor = color.rgb() + +var colorHSL: Color.Color = color.hsl([0, 0, 0]) +var hsl: Color.HSLColor = color.hsl() + +var colorHSV: Color.Color = color.hsv([0, 0, 0]) +var hsv: Color.HSVColor = color.hsv() + +var colorHBW: Color.Color = color.hbw([0, 0, 0]) +var hbw: Color.HBWColor = color.hbw() + +var colorCMYK: Color.Color = color.cmyk([0, 0, 0, 0]) +var cmyk: Color.CMYKColor = color.cmyk() + +var hex: string = color.hexString() +var percent: string = color.percentString() +var keyword: string | void = color.keyword() +var alpha: number = color.alpha() +var red: number = color.red() +var green: number = color.green() +var blue: number = color.blue() +var hue: number = color.hue() +var saturation: number = color.saturation() +var lightness: number = color.lightness() +var saturationv: number = color.saturationv() +var value: number = color.value() +var whiteness: number = color.whiteness() +var blackness: number = color.blackness() +var cyan: number = color.cyan() +var magenta: number = color.magenta() +var yellow: number = color.yellow() +var black: number = color.black() +var luminosity: number = color.luminosity() +var contrast: number = color.contrast(colorOther) +var dark: boolean = color.dark() +var light: boolean = color.light() +var level: string = color.level(colorOther) + +var chain: Color.Color = color + .rgb(0, 0, 0) + .hsl([0, 0, 0]) + .hsv([0, 0, 0]) + .hbw([0, 0, 0]) + .cmyk([0, 0, 0 ,0]) + .alpha(0) + .red(0) + .green(0) + .blue(0) + .hue(0) + .saturation(0) + .lightness(0) + .saturationv(0) + .value(0) + .whiteness(0) + .blackness(0) + .cyan(0) + .magenta(0) + .yellow(0) + .black(0) + .negate() + .lighten(0) + .darken(0) + .saturate(0) + .desaturate(0) + .greyscale() + .whiten(0) + .blacken(0) + .clearer(0) + .opaquer(0) + .rotate(0) + .mix(colorOther, 0) + .clone() diff --git a/color/color.d.ts b/color/color.d.ts new file mode 100644 index 0000000000..7c697004e7 --- /dev/null +++ b/color/color.d.ts @@ -0,0 +1,162 @@ +// Type definitions for color v0.12.0 +// Project: https://github.com/qix-/color +// Definitions by: Karol Janyst +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare namespace Color { + + interface RGBColor { + r: number + g: number + b: number + a?: number + } + + interface FullRGBColor { + red: number + green: number + blue: number + alpha?: number + } + + interface HSLColor { + h: number + s: number + l: number + a?: number + } + + interface FullHSLColor { + hue: number + saturation: number + lightness: number + alpha?: number + } + + interface HSVColor { + h: number + s: number + v: number + } + + interface FullHSVColor { + hue: number + saturation: number + value: number + } + + interface HBWColor { + h: number + b: number + w: number + } + + interface FullHBWColor { + hue: number + whiteness: number + blackness: number + } + + interface CMYKColor { + c: number + m: number + y: number + k: number + } + + interface FullCMYKColor { + cyan: number + magenta: number + yellow: number + black: number + } + + type ColorParam = string | RGBColor | FullRGBColor | HSLColor | FullHSLColor | HSVColor + | FullHSVColor | HBWColor | FullHBWColor | CMYKColor | FullCMYKColor + + interface Color { + (color: ColorParam | Color) : Color + rgb(values: Array): Color + rgb(r: number, g: number, b: number, a?: number): Color + rgb(values: RGBColor): Color + rgb(values: FullRGBColor): Color + rgb(): RGBColor + rgbArray(): Array + rgbString(): string + rgbaString(): string + rgbNumber(): number + hsl(values: Array): Color + hsl(): HSLColor + hslArray(): Array + hslString(): string + hslaString(): string + hsv(values: Array): Color + hsv(): HSVColor + hsvArray(): Array + hsvString(): string + hbw(values: Array): Color + hbw(): HBWColor + hbwArray(): Array + hbwString(): string + cmyk(values: Array): Color + cmyk(): CMYKColor + cmykArray(): Array + cmykString(): string + hexString(): string + percentString(): string + keyword(): string | void + alpha(alpha: number): Color + alpha(): number + red(red: number): Color + red(): number + green(green: number): Color + green(): number + blue(blue: number): Color + blue(): number + hue(hue: number): Color + hue(): number + saturation(saturation: number): Color + saturation(): number + lightness(lightness: number): Color + lightness(): number + saturationv(saturationv: number): Color + saturationv(): number + value(value: number): Color + value(): number + whiteness(whiteness: number): Color + whiteness(): number + blackness(blackness: number): Color + blackness(): number + cyan(cyan: number): Color + cyan(): number + magenta(magenta: number): Color + magenta(): number + yellow(yellow: number): Color + yellow(): number + black(black: number): Color + black(): number + luminosity(): number + contrast(color: Color): number + dark(): boolean + light(): boolean + negate(): Color + lighten(value: number): Color + darken(value: number): Color + saturate(value: number): Color + desaturate(value: number): Color + greyscale(): Color + whiten(value: number): Color + blacken(value: number): Color + clearer(value: number): Color + opaquer(value: number): Color + rotate(value: number): Color + mix(color: Color, value?: number): Color + level(color: Color): string + clone(): Color + } +} + +declare module "color" { + const Color: Color.Color + export = Color +} From 6f617176460d27db7c78fd8ca9650e84f146b6db Mon Sep 17 00:00:00 2001 From: Shantanu Bhadoria Date: Tue, 25 Oct 2016 19:15:38 +0800 Subject: [PATCH 034/111] Added missing attributes for noble Peripheral class (#12124) * Added missing attributes for noble peripheral * Added new contributor name for reference * Updated contributors --- CONTRIBUTORS.md | 3 ++- noble/noble.d.ts | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 44f0d8e9a0..8b263f19ae 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -401,6 +401,7 @@ This document generated by [dt-contributors-generator](https://github.com/vvakam * [:link:](egg.js/egg.js.d.ts) [Egg.js](https://github.com/mikeflynn/egg.js) by [Markus Peloso](https://github.com/ToastHawaii) * [:link:](ejs-locals/ejs-locals.d.ts) [ejs-locals](https://github.com/randometc/ejs-locals) by [jt000](https://github.com/jt000) * [:link:](ejs/ejs.d.ts) [ejs.js](http://ejs.co) by [Ben Liddicott](https://github.com/benliddicott/DefinitelyTyped) +* [:link:](ejson/ejson.d.ts) [ejson](https://www.npmjs.com/package/ejson) by [Shantanu Bhadoria](https://github.com/shantanubhadoria) * [:link:](elasticsearch/elasticsearch.d.ts) [elasticsearch](https://www.elastic.co) by [Casper Skydt](https://github.com/CasperSkydt/DefinitelyTyped), [Blake Smith](https://github.com/bfsmith/DefinitelyTyped) * [:link:](jquery.elang/jquery.elang.d.ts) [eLang](https://github.com/sumegizoltan/ELang) by [Zoltan Sumegi](https://github.com/sumegizoltan) * [:link:](github-electron/github-electron.d.ts) [Electron](http://electron.atom.io) by [jedmao](https://github.com/jedmao), [rhysd](https://rhysd.github.io), [Milan Burda](https://github.com/miniak) @@ -1189,7 +1190,7 @@ This document generated by [dt-contributors-generator](https://github.com/vvakam * [:link:](ng-stomp/ng-stomp.d.ts) [ngStomp](https://github.com/beevelop/ng-stomp) by [Lukasz Potapczuk](https://github.com/lpotapczuk) * [:link:](ngstorage/ngstorage.d.ts) [ngstorage](https://github.com/gsklee/ngStorage) by [Jakub Pistek](https://github.com/kubiq) * [:link:](nightmare/nightmare.d.ts) [Nightmare](https://github.com/segmentio/nightmare) by [horiuchi](https://github.com/horiuchi) -* [:link:](noble/noble.d.ts) [noble](https://github.com/sandeepmistry/noble) by [Seon-Wook Park](https://github.com/swook), [Hans Bakker](https://github.com/wind-rider) +* [:link:](noble/noble.d.ts) [noble](https://github.com/sandeepmistry/noble) by [Seon-Wook Park](https://github.com/swook), [Hans Bakker](https://github.com/wind-rider), [Shantanu Bhadoria](https://github.com/shantanubhadoria) * [:link:](nock/nock.d.ts) [nock](https://github.com/pgte/nock) by [bonnici](https://github.com/bonnici) * [:link:](node-imap/imap.d.ts) [node imap](https://github.com/mscdex/node-imap) by [Steve Fenton](https://github.com/Steve-Fenton) * [:link:](oauth2-server/oauth2-server.d.ts) [Node OAuth2 Server](https://github.com/thomseddon/node-oauth2-server) by [Robbie Van Gorkom](https://github.com/vangorra) diff --git a/noble/noble.d.ts b/noble/noble.d.ts index 8003bdbc68..584d3f792a 100644 --- a/noble/noble.d.ts +++ b/noble/noble.d.ts @@ -1,6 +1,6 @@ // Type definitions for noble // Project: https://github.com/sandeepmistry/noble -// Definitions by: Seon-Wook Park , Hans Bakker +// Definitions by: Seon-Wook Park , Hans Bakker , Shantanu Bhadoria // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped /// @@ -20,7 +20,11 @@ declare module "noble" { export function on(event: "discover", listener: (peripheral: Peripheral) => void): events.EventEmitter; export class Peripheral extends events.EventEmitter { + id: string; uuid: string; + address: string; + addressType: string; + connectable: boolean; advertisement: Advertisement; rssi: number; services: Service[]; From c94d21a5e09c194bd1189b90cdb9787f12c6a964 Mon Sep 17 00:00:00 2001 From: Niels Kristian Hansen Skovmand Date: Tue, 25 Oct 2016 15:07:49 +0200 Subject: [PATCH 035/111] Improvement to Spotify API Typings (#12130) * Improvement to Spotify API Typings - Improve references to endpoints in tests-file - Add a few missing endpoint tests - Add Recommendations Object for options to send to the API for Recommendations * Fix Header * Fix Header * Update comment in test file --- spotify-api/spotify-api-tests.ts | 502 +++++++++++++++++++++++++++---- spotify-api/spotify-api.d.ts | 219 +++++++++++++- 2 files changed, 649 insertions(+), 72 deletions(-) diff --git a/spotify-api/spotify-api-tests.ts b/spotify-api/spotify-api-tests.ts index d9864b2d9a..0ec4c7e123 100644 --- a/spotify-api/spotify-api-tests.ts +++ b/spotify-api/spotify-api-tests.ts @@ -1,22 +1,24 @@ +// Tests for the type definitions for The Spotify Web API (including changes March 29th 2016) +// Project: https://developer.spotify.com/web-api/ +// Definitions by: Niels Kristian Hansen Skovmand +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + /* * This test file contains the sample output from The Spotify Web Api obtained from [The Web API Console](https://developer.spotify.com/web-api/console/) - * The standard suggested values for input were used. * - * Updated for the March 29th, 2016 changes to the Spotify Web Api. - * - * Combined with the typings it should compile without errors. + * Run the tests (they should always compile without any errors): + * tsc spotify-api-tests.ts --target es6 --noImplicitAny * * The order of tests is the same as on [The Spotify Web Api](https://developer.spotify.com/web-api/endpoint-reference/) - * To find tests, search for "* Tests" instead of scrolling to keep sane. */ /// - - - /** - * Tests the response of https://developer.spotify.com/web-api/get-album/ + * Get an Album + * + * GET /v1/albums/{id} + * https://developer.spotify.com/web-api/get-album/ */ const getSingleAlbum : SpotifyApi.SingleAlbumResponse = { "album_type" : "album", @@ -401,9 +403,11 @@ const getSingleAlbum : SpotifyApi.SingleAlbumResponse = { - /** - * Tests https://developer.spotify.com/web-api/get-several-albums/ + * Get Several Albums + * + * GET /v1/albums?ids={ids} + * https://developer.spotify.com/web-api/get-several-albums/ */ const getMultipleAlbumsResponse : SpotifyApi.MultipleAlbumsResponse = { "albums" : [ { @@ -2236,7 +2240,10 @@ const getMultipleAlbumsResponse : SpotifyApi.MultipleAlbumsResponse = { /** - * Tests https://developer.spotify.com/web-api/get-albums-tracks/ + * Get an Album’s Tracks + * + * GET /v1/albums/{id}/tracks + * https://developer.spotify.com/web-api/get-albums-tracks/ */ const getAlbumTracks : SpotifyApi.AlbumTracksResponse = { "href" : "https://api.spotify.com/v1/albums/6akEvsycLGftJxYudPjmqK/tracks?offset=0&limit=2", @@ -2302,7 +2309,10 @@ const getAlbumTracks : SpotifyApi.AlbumTracksResponse = { /** - * Tests https://developer.spotify.com/web-api/get-artist/ + * Get an Artist + * + * GET /v1/artists/{id} + * https://developer.spotify.com/web-api/get-artist/ */ const getAnArtist : SpotifyApi.SingleArtistResponse = { "external_urls" : { @@ -2341,7 +2351,10 @@ const getAnArtist : SpotifyApi.SingleArtistResponse = { /** - * Tests https://developer.spotify.com/web-api/get-several-artists/ + * Get Several Artists + * + * GET /v1/artists + * https://developer.spotify.com/web-api/get-several-artists/ */ const getSeveralArtists : SpotifyApi.MultipleArtistsResponse = { "artists" : [ { @@ -2415,7 +2428,10 @@ const getSeveralArtists : SpotifyApi.MultipleArtistsResponse = { /** - * Tests https://developer.spotify.com/web-api/get-artists-albums/ + * Get an Artist’s Albums + * + * GET /v1/artists/{id}/albums + * https://developer.spotify.com/web-api/get-artists-albums/ */ const getArtistsAlbums : SpotifyApi.ArtistsAlbumsResponse = { "href" : "https://api.spotify.com/v1/artists/1vCWHaC5f2uS3yhpwWbIA6/albums?offset=0&limit=2&album_type=single", @@ -2477,6 +2493,12 @@ const getArtistsAlbums : SpotifyApi.ArtistsAlbumsResponse = { +/** + * Get an Artist’s Top Tracks + * + * GET /v1/artists/{id}/top-tracks + * https://developer.spotify.com/web-api/get-artists-top-tracks/ + */ const getArtistsTopTracks : SpotifyApi.ArtistsTopTracksResponse = { "tracks" : [ { "album" : { @@ -3042,6 +3064,12 @@ const getArtistsTopTracks : SpotifyApi.ArtistsTopTracksResponse = { +/** + * Get an Artist’s Related Artists + * + * GET /v1/artists/{id}/related-artists + * https://developer.spotify.com/web-api/get-related-artists/ + */ const getArtistRelatedArtists : SpotifyApi.ArtistsRelatedArtistsResponse = { "artists" : [ { "external_urls" : { @@ -3687,7 +3715,10 @@ const getArtistRelatedArtists : SpotifyApi.ArtistsRelatedArtistsResponse = { /** - * Tests https://developer.spotify.com/get-audio-features/ + * Get audio features for a track + * + * GET /v1/audio-features/{id} + * https://developer.spotify.com/web-api/get-audio-features/ */ const singleAudioFeaturesResponse : SpotifyApi.AudioFeaturesResponse = { "danceability": 0.281, @@ -3715,7 +3746,10 @@ const singleAudioFeaturesResponse : SpotifyApi.AudioFeaturesResponse = { /** - * Tests https://developer.spotify.com/web-api/get-several-audio-features/ + * Get audio features for several tracks + * + * GET /v1/audio-features?ids={ids} + * https://developer.spotify.com/get-several-audio-features/ */ const severalAudioFeaturesResponse : SpotifyApi.MultipleAudioFeaturesResponse = { audio_features: [ { "danceability": 0.808, @@ -3782,7 +3816,10 @@ const severalAudioFeaturesResponse : SpotifyApi.MultipleAudioFeaturesResponse = /** - * Tests https://developer.spotify.com/web-api/get-list-featured-playlists/ + * Get a list of featured playlists + * + * GET /v1/browse/featured-playlists + * https://developer.spotify.com/web-api/get-list-featured-playlists/ */ const featuredPlaylists : SpotifyApi.ListOfFeaturedPlaylistsResponse = { "message" : "Enjoy a mellow afternoon.", @@ -3861,7 +3898,10 @@ const featuredPlaylists : SpotifyApi.ListOfFeaturedPlaylistsResponse = { /** - * Tests https://developer.spotify.com/web-api/get-list-new-releases/ + * Get a list of new releases + * + * GET /v1/browse/new-releases + * https://developer.spotify.com/web-api/get-list-new-releases/ */ const newReleases : SpotifyApi.ListOfNewReleasesResponse = { "albums" : { @@ -4359,7 +4399,10 @@ const newReleases : SpotifyApi.ListOfNewReleasesResponse = { /** - * Tests https://developer.spotify.com/web-api/get-list-categories/ + * Get a list of categories + * + * GET /v1/browse/categories + * https://developer.spotify.com/web-api/get-list-categories/ */ const listOfCategories : SpotifyApi.MultipleCategoriesResponse = { "categories" : { @@ -4557,7 +4600,10 @@ const listOfCategories : SpotifyApi.MultipleCategoriesResponse = { /** - * Tests https://developer.spotify.com/web-api/get-category/ + * Get a category + * + * GET /v1/browse/categories/{category_id} + * https://developer.spotify.com/web-api/get-category/ */ const category : SpotifyApi.SingleCategoryResponse = { "href" : "https://api.spotify.com/v1/browse/categories/rock", @@ -4574,7 +4620,10 @@ const category : SpotifyApi.SingleCategoryResponse = { /** - * Tests https://developer.spotify.com/web-api/get-categorys-playlists/ + * Get a categorys playlists + * + * GET /v1/browse/categories/{id}/playlists + * https://developer.spotify.com/web-api/get-categorys-playlists/ */ const categoryPlaylists : SpotifyApi.CategoryPlaylistsReponse = { "playlists" : { @@ -4651,8 +4700,12 @@ const categoryPlaylists : SpotifyApi.CategoryPlaylistsReponse = { + /** - * Tests https://developer.spotify.com/web-api/get-current-users-profile/ + * Get Current User’s Profile + * + * GET /v1/me + * https://developer.spotify.com/web-api/get-current-users-profile/ */ const userProfilePrivate : SpotifyApi.CurrentUsersProfileResponse = { "birthdate" : "1982-06-29", @@ -4678,7 +4731,10 @@ const userProfilePrivate : SpotifyApi.CurrentUsersProfileResponse = { /** - * Tests https://developer.spotify.com/web-api/get-followed-artists/ + * Get User’s Followed Artists + * + * GET /v1/me/following?type=artist + * https://developer.spotify.com/web-api/get-followed-artists/ */ const followedArtists : SpotifyApi.UsersFollowedArtistsResponse = { "artists" : { @@ -4757,7 +4813,10 @@ const followedArtists : SpotifyApi.UsersFollowedArtistsResponse = { /** - * Tests https://developer.spotify.com/web-api/follow-artists-users/ + * Follow artists or users + * + * PUT /v1/me/following + * https://developer.spotify.com/web-api/follow-artists-users/ */ const followArtistsOrUsers : SpotifyApi.FollowArtistsOrUsersResponse = {} @@ -4765,7 +4824,10 @@ const followArtistsOrUsers : SpotifyApi.FollowArtistsOrUsersResponse = {} /** - * Tests https://developer.spotify.com/web-api/unfollow-artists-users/ + * Unfollow artists or users + * + * DELETE /v1/me/following + * https://developer.spotify.com/web-api/unfollow-artists-users/ */ const unfollowArtistsOrUsers : SpotifyApi.UnfollowArtistsOrUsersResponse = {} @@ -4773,7 +4835,10 @@ const unfollowArtistsOrUsers : SpotifyApi.UnfollowArtistsOrUsersResponse = {} /** - * Tests https://developer.spotify.com/web-api/check-current-user-follows/ + * Check if User Follows Users or Artists + * + * GET /v1/me/following/contains + * https://developer.spotify.com/web-api/check-current-user-follows/ */ const checkCurrentUserFollows : SpotifyApi.UserFollowsUsersOrArtistsResponse = [ true, true, false ]; @@ -4781,7 +4846,10 @@ const checkCurrentUserFollows : SpotifyApi.UserFollowsUsersOrArtistsResponse = [ /** - * Tests https://developer.spotify.com/web-api/follow-playlist/ + * Follow a Playlist + * + * PUT /v1/users/{owner_id}/playlists/{playlist_id}/followers + * https://developer.spotify.com/web-api/follow-playlist/ */ const followPlaylist : SpotifyApi.FollowPlaylistReponse = {}; @@ -4789,7 +4857,10 @@ const followPlaylist : SpotifyApi.FollowPlaylistReponse = {}; /** - * Tests https://developer.spotify.com/web-api/unfollow-playlist/ + * Unfollow a Playlist + * + * DELETE /v1/users/{owner_id}/playlists/{playlist_id}/followers + * https://developer.spotify.com/web-api/unfollow-playlist/ */ const unfollowPlaylist : SpotifyApi.UnfollowPlaylistReponse = {}; @@ -4797,7 +4868,10 @@ const unfollowPlaylist : SpotifyApi.UnfollowPlaylistReponse = {}; /** - * Tests https://developer.spotify.com/web-api/save-tracks-user/ + * Save tracks for user + * + * PUT /v1/me/tracks?ids={ids} + * https://developer.spotify.com/web-api/save-tracks-user/ */ const saveTracksForUser : SpotifyApi.SaveTracksForUserResponse = {}; @@ -4805,7 +4879,10 @@ const saveTracksForUser : SpotifyApi.SaveTracksForUserResponse = {}; /** - * Tests https://developer.spotify.com/web-api/console/get-current-user-saved-tracks + * Get user's saved tracks + * + * GET /v1/me/tracks + * https://developer.spotify.com/web-api/get-users-saved-tracks/ */ const getSavedTracks : SpotifyApi.UsersSavedTracksResponse = { "href" : "https://api.spotify.com/v1/me/tracks?offset=0&limit=5&market=DK", @@ -5101,7 +5178,10 @@ const getSavedTracks : SpotifyApi.UsersSavedTracksResponse = { /** - * Tests https://developer.spotify.com/web-api/remove-tracks-user/ + * Remove User’s Saved Tracks + * + * DELETE /v1/me/tracks?ids={ids} + * https://developer.spotify.com/web-api/remove-tracks-user/ */ const removeUsersTracks : SpotifyApi.RemoveUsersSavedTracksResponse = {}; @@ -5109,7 +5189,10 @@ const removeUsersTracks : SpotifyApi.RemoveUsersSavedTracksResponse = {}; /** - * Tests https://developer.spotify.com/web-api/check-users-saved-tracks/ + * Check User’s Saved Tracks + * + * GET /v1/me/tracks/contains?ids={ids} + * https://developer.spotify.com/web-api/check-users-saved-tracks/ */ const checkUsersTracks : SpotifyApi.CheckUserSavedAlbumsResponse = [ false, false, true ]; @@ -5117,15 +5200,167 @@ const checkUsersTracks : SpotifyApi.CheckUserSavedAlbumsResponse = [ false, fals /** - * Tests https://developer.spotify.com/web-api/save-albums-user/ + * Save albums for user + * + * PUT /v1/me/albums?ids={ids} + * https://developer.spotify.com/web-api/save-albums-user/ */ const saveAlbumForUser : SpotifyApi.SaveAlbumsForUserResponse = {}; +/** + * Get user's saved albums + * + * GET /v1/me/albums + * https://developer.spotify.com/web-api/get-users-saved-albums/ + */ +const usersSavedAlbums : SpotifyApi.UsersSavedAlbumsResponse = { + "href" : "https://api.spotify.com/v1/me/albums?offset=0&limit=1", + "items" : [ { + "added_at" : "2015-11-26T19:13:31Z", + "album" : { + "album_type" : "album", + "artists" : [ { + "external_urls" : { + "spotify" : "https://open.spotify.com/artist/58RMTlPJKbmpmVk1AmRK3h" + }, + "href" : "https://api.spotify.com/v1/artists/58RMTlPJKbmpmVk1AmRK3h", + "id" : "58RMTlPJKbmpmVk1AmRK3h", + "name" : "Abidaz", + "type" : "artist", + "uri" : "spotify:artist:58RMTlPJKbmpmVk1AmRK3h" + } ], + "available_markets" : [ "AR", "AT", "AU", "BE", "BR", "CL", "CO", "CY", "CZ", "DE" ], + "copyrights" : [ { + "text" : "(C) 2013 Soblue Music Group AB, Under exclusive license to Universal Music AB", + "type" : "C" + }, { + "text" : "(P) 2013 Soblue Music Group AB, Under exclusive license to Universal Music AB", + "type" : "P" + } ], + "external_ids" : { + "upc" : "00602537623730" + }, + "external_urls" : { + "spotify" : "https://open.spotify.com/album/5m4VYOPoIpkV0XgOiRKkWC" + }, + "genres" : [ ], + "href" : "https://api.spotify.com/v1/albums/5m4VYOPoIpkV0XgOiRKkWC", + "id" : "5m4VYOPoIpkV0XgOiRKkWC", + "images" : [ { + "height" : 640, + "url" : "https://i.scdn.co/image/ccbb1e3bea2461e69783895e880965b171e29f4c", + "width" : 640 + }, { + "height" : 300, + "url" : "https://i.scdn.co/image/2210b7d23f320a2cab2736bd3b3b948415dd21d8", + "width" : 300 + }, { + "height" : 64, + "url" : "https://i.scdn.co/image/609153aca7f4760136d97fbaccdb4ec0757e4c9e", + "width" : 64 + } ], + "name" : "In & ut", + "popularity" : 49, + "release_date" : "2013-01-01", + "release_date_precision" : "day", + "tracks" : { + "href" : "https://api.spotify.com/v1/albums/5m4VYOPoIpkV0XgOiRKkWC/tracks?offset=0&limit=50", + "items" : [ { + "artists" : [ { + "external_urls" : { + "spotify" : "https://open.spotify.com/artist/58RMTlPJKbmpmVk1AmRK3h" + }, + "href" : "https://api.spotify.com/v1/artists/58RMTlPJKbmpmVk1AmRK3h", + "id" : "58RMTlPJKbmpmVk1AmRK3h", + "name" : "Abidaz", + "type" : "artist", + "uri" : "spotify:artist:58RMTlPJKbmpmVk1AmRK3h" + }, { + "external_urls" : { + "spotify" : "https://open.spotify.com/artist/1l63szZeUpN1m87MOD1u7K" + }, + "href" : "https://api.spotify.com/v1/artists/1l63szZeUpN1m87MOD1u7K", + "id" : "1l63szZeUpN1m87MOD1u7K", + "name" : "Chapee", + "type" : "artist", + "uri" : "spotify:artist:1l63szZeUpN1m87MOD1u7K" + }, { + "external_urls" : { + "spotify" : "https://open.spotify.com/artist/1VLf7Ncxb5Jga6eyd3jh6K" + }, + "href" : "https://api.spotify.com/v1/artists/1VLf7Ncxb5Jga6eyd3jh6K", + "id" : "1VLf7Ncxb5Jga6eyd3jh6K", + "name" : "C.U.P", + "type" : "artist", + "uri" : "spotify:artist:1VLf7Ncxb5Jga6eyd3jh6K" + } ], + "available_markets" : [ "AR", "AT", "AU", "BE", "BR", "CL", "CO", "CY", "CZ", "DE" ], + "disc_number" : 1, + "duration_ms" : 170920, + "explicit" : false, + "external_urls" : { + "spotify" : "https://open.spotify.com/track/3VNWq8rTnQG6fM1eldSpZ0" + }, + "href" : "https://api.spotify.com/v1/tracks/3VNWq8rTnQG6fM1eldSpZ0", + "id" : "3VNWq8rTnQG6fM1eldSpZ0", + "name" : "E.C.", + "preview_url" : "https://p.scdn.co/mp3-preview/f95e0dba1a76b44fa2b52da2bc273d4f1c4126a5", + "track_number" : 1, + "type" : "track", + "uri" : "spotify:track:3VNWq8rTnQG6fM1eldSpZ0" + }, + { + "artists" : [ { + "external_urls" : { + "spotify" : "https://open.spotify.com/artist/58RMTlPJKbmpmVk1AmRK3h" + }, + "href" : "https://api.spotify.com/v1/artists/58RMTlPJKbmpmVk1AmRK3h", + "id" : "58RMTlPJKbmpmVk1AmRK3h", + "name" : "Abidaz", + "type" : "artist", + "uri" : "spotify:artist:58RMTlPJKbmpmVk1AmRK3h" + } ], + "available_markets" : [ "AR", "AT", "AU", "BE", "BR", "CL", "CO", "CY", "CZ", "DE", "DK", "EE" ], + "disc_number" : 1, + "duration_ms" : 165946, + "explicit" : false, + "external_urls" : { + "spotify" : "https://open.spotify.com/track/6ZrVKylVlxkaXHj42O0q2r" + }, + "href" : "https://api.spotify.com/v1/tracks/6ZrVKylVlxkaXHj42O0q2r", + "id" : "6ZrVKylVlxkaXHj42O0q2r", + "name" : "Råknas - Radio Edit", + "preview_url" : "https://p.scdn.co/mp3-preview/a7c9a4bfa9e346e3733e9d88076ad1ae409136fb", + "track_number" : 13, + "type" : "track", + "uri" : "spotify:track:6ZrVKylVlxkaXHj42O0q2r" + } ], + "limit" : 50, + "next" : null, + "offset" : 0, + "previous" : null, + "total" : 13 + }, + "type" : "album", + "uri" : "spotify:album:5m4VYOPoIpkV0XgOiRKkWC" + } + } ], + "limit" : 1, + "next" : "https://api.spotify.com/v1/me/albums?offset=1&limit=1", + "offset" : 0, + "previous" : null, + "total" : 19 +} + + /** - * Tests https://developer.spotify.com/web-api/remove-albums-user/ + * Remove Albums for Current User + * + * DELETE /v1/me/albums?ids={ids} + * https://developer.spotify.com/web-api/remove-albums-user/ */ const removeAlbumForUser : SpotifyApi.RemoveAlbumsForUserResponse = {}; @@ -5134,14 +5369,20 @@ const removeAlbumForUser : SpotifyApi.RemoveAlbumsForUserResponse = {}; /** - * Tests https://developer.spotify.com/web-api/check-users-saved-albums/ + * Check user's saved albums + * + * DELETE /v1/me/albums/contains?ids={ids} + * https://developer.spotify.com/web-api/check-users-saved-albums/ */ const checkUsersSavedAlbums : SpotifyApi.CheckUserSavedAlbumsResponse = [ true, false, false, true ]; /** - * Tests https://developer.spotify.com/web-api/get-users-top-artists-and-tracks/ + * Get a User’s Top Artists and Tracks (Note: This is only Artists) + * + * GET /v1/me/top/{type} + * https://developer.spotify.com/web-api/get-users-top-artists-and-tracks/ */ const usersTopArtists : SpotifyApi.UsersTopArtistsResponse = { "items" : [ @@ -5219,8 +5460,12 @@ const usersTopArtists : SpotifyApi.UsersTopArtistsResponse = { + /** - * Tests https://developer.spotify.com/web-api/get-users-top-artists-and-tracks/ + * Get a User’s Top Artists and Tracks (Note: This is only Tracks) + * + * GET /v1/me/top/{type} + * https://developer.spotify.com/web-api/get-users-top-artists-and-tracks/ */ const usersTopTracks : SpotifyApi.UsersTopTracksResponse = { "items" : [ @@ -5362,7 +5607,10 @@ const usersTopTracks : SpotifyApi.UsersTopTracksResponse = { /** - * Tests + * Get recommendations based on seeds + * + * GET /v1/recommendations + * https://developer.spotify.com/get-recommendations/ */ const recommendationsBasedOnSeeds: SpotifyApi.RecommendationsFromSeedsResponse = { "tracks": [ @@ -5449,7 +5697,21 @@ const recommendationsBasedOnSeeds: SpotifyApi.RecommendationsFromSeedsResponse = /** - * Tests https://developer.spotify.com/web-api/search-item/?type=album + * Get available genre seeds + * + * GET /v1/recommendations/available-genre-seeds + * https://developer.spotify.com/web-api/get-recommendations/#available-genre-seeds + */ +const availableGenreSeeds : SpotifyApi.AvailableGenreSeedsResponse = { + "genres" : [ "acoustic", "afrobeat", "alt-rock", "alternative", "ambient", "anime", "black-metal", "bluegrass", "blues", "bossanova", "brazil", "breakbeat", "british", "cantopop", "chicago-house", "children", "chill", "classical", "club", "comedy", "country", "dance", "dancehall", "death-metal", "deep-house", "detroit-techno", "disco", "disney", "drum-and-bass", "dub", "dubstep", "edm", "electro", "electronic", "emo", "folk", "forro", "french", "funk", "garage", "german", "gospel", "goth", "grindcore", "groove", "grunge", "guitar", "happy", "hard-rock", "hardcore", "hardstyle", "heavy-metal", "hip-hop", "holidays", "honky-tonk", "house", "idm", "indian", "indie", "indie-pop", "industrial", "iranian", "j-dance", "j-idol", "j-pop", "j-rock", "jazz", "k-pop", "kids", "latin", "latino", "malay", "mandopop", "metal", "metal-misc", "metalcore", "minimal-techno", "movies", "mpb", "new-age", "new-release", "opera", "pagode", "party", "philippines-opm", "piano", "pop", "pop-film", "post-dubstep", "power-pop", "progressive-house", "psych-rock", "punk", "punk-rock", "r-n-b", "rainy-day", "reggae", "reggaeton", "road-trip", "rock", "rock-n-roll", "rockabilly", "romance", "sad", "salsa", "samba", "sertanejo", "show-tunes", "singer-songwriter", "ska", "sleep", "songwriter", "soul", "soundtracks", "spanish", "study", "summer", "swedish", "synth-pop", "tango", "techno", "trance", "trip-hop", "turkish", "work-out", "world-music" ] +} + + +/** + * Search for an album + * + * GET /v1/search?type=album + * https://developer.spotify.com/web-api/search-item/ */ const searchAlbums : SpotifyApi.AlbumSearchResponse = { "albums" : { @@ -5515,7 +5777,10 @@ const searchAlbums : SpotifyApi.AlbumSearchResponse = { /** - * Tests https://developer.spotify.com/web-api/search-item/?type=artist + * Search for an artist + * + * GET /v1/search?type=artist + * https://developer.spotify.com/web-api/search-item/ */ const searchArtists : SpotifyApi.ArtistSearchResponse = { "artists" : { @@ -5561,7 +5826,10 @@ const searchArtists : SpotifyApi.ArtistSearchResponse = { /** - * Tests https://developer.spotify.com/web-api/search-item/?type=playlist + * Search for a playlist + * + * GET /v1/search?type=playlist + * https://developer.spotify.com/web-api/search-item/ */ const searchPlaylists : SpotifyApi.PlaylistSearchResponse = { "playlists" : { @@ -5655,7 +5923,10 @@ const searchPlaylists : SpotifyApi.PlaylistSearchResponse = { /** - * Tests https://developer.spotify.com/web-api/search-item/?type=track + * Search for a track + * + * GET /v1/search?type=track + * https://developer.spotify.com/web-api/search-item/ */ const searchTracks : SpotifyApi.TrackSearchResponse = { "tracks" : { @@ -5799,7 +6070,10 @@ const searchTracks : SpotifyApi.TrackSearchResponse = { /** - * Tests https://developer.spotify.com/web-api/get-track/ + * Get a track + * + * GET /v1/tracks/{id} + * https://developer.spotify.com/web-api/get-track/ */ const track : SpotifyApi.SingleTrackResponse = { "album" : { @@ -5861,7 +6135,10 @@ const track : SpotifyApi.SingleTrackResponse = { /** - * Tests https://developer.spotify.com/web-api/get-several-tracks/ + * Get multiple tracks + * + * GET /v1/tracks?ids={ids} + * https://developer.spotify.com/web-api/get-several-tracks/ */ const tracks : SpotifyApi.MultipleTracksResponse = { "tracks" : [ { @@ -5977,9 +6254,11 @@ const tracks : SpotifyApi.MultipleTracksResponse = { - /** - * Tests https://developer.spotify.com/web-api/get-users-profile/ + * Get user profile + * + * GET /v1/users/{user_id} + * https://developer.spotify.com/web-api/get-users-profile/ */ const userProfile : SpotifyApi.UserProfileResponse = { "display_name" : "Ronald Pompa", @@ -6005,7 +6284,10 @@ const userProfile : SpotifyApi.UserProfileResponse = { /** - * Tests https://developer.spotify.com/web-api/get-list-users-playlists/ + * Get a list of a user's playlists + * + * GET /v1/users/{user_id}/playlists + * https://developer.spotify.com/web-api/get-list-users-playlists/ */ const usersPlaylists : SpotifyApi.ListOfUsersPlaylistsResponse = { "href" : "https://api.spotify.com/v1/users/wizzler/playlists?offset=0&limit=2", @@ -6081,7 +6363,89 @@ const usersPlaylists : SpotifyApi.ListOfUsersPlaylistsResponse = { /** - * Tests https://developer.spotify.com/web-api/get-playlist/ + * Get a list of the current user's playlists + * + * GET /v1/users/{user_id}/playlists + * https://developer.spotify.com/web-api/get-list-users-playlists/ + */ +const currentUsersPlaylists : SpotifyApi.ListOfUsersPlaylistsResponse = { + "href" : "https://api.spotify.com/v1/users/wizzler/playlists?offset=0&limit=2", + "items" : [ { + "collaborative" : false, + "external_urls" : { + "spotify" : "http://open.spotify.com/user/wizzler/playlist/6yRf9SJ1YiAhNAu7UCwgXQ" + }, + "href" : "https://api.spotify.com/v1/users/wizzler/playlists/6yRf9SJ1YiAhNAu7UCwgXQ", + "id" : "6yRf9SJ1YiAhNAu7UCwgXQ", + "images" : [ { + "height" : 640, + "url" : "https://i.scdn.co/image/5c383056e25a3e3ec858151afb70afe763c00f9b", + "width" : 640 + } ], + "name" : "My Shazam Tracks", + "owner" : { + "external_urls" : { + "spotify" : "http://open.spotify.com/user/wizzler" + }, + "href" : "https://api.spotify.com/v1/users/wizzler", + "id" : "wizzler", + "type" : "user", + "uri" : "spotify:user:wizzler" + }, + "public" : true, + "snapshot_id" : "WlQppvajE5kH/Xt5cHfHxJ6mSsFckwYixA06q7y1asdUz+m5v7pq6xb1f0FiFa7I", + "tracks" : { + "href" : "https://api.spotify.com/v1/users/wizzler/playlists/6yRf9SJ1YiAhNAu7UCwgXQ/tracks", + "total" : 1 + }, + "type" : "playlist", + "uri" : "spotify:user:wizzler:playlist:6yRf9SJ1YiAhNAu7UCwgXQ" + }, { + "collaborative" : false, + "external_urls" : { + "spotify" : "http://open.spotify.com/user/wizzler/playlist/3FJd21jWvCjGCLx7eKrext" + }, + "href" : "https://api.spotify.com/v1/users/wizzler/playlists/3FJd21jWvCjGCLx7eKrext", + "id" : "3FJd21jWvCjGCLx7eKrext", + "images" : [ { + "height" : 300, + "url" : "https://i.scdn.co/image/15858d38fdac4af890dcc634f4946c5bf83c0915", + "width" : 300 + } ], + "name" : "Video Game Masterpieces", + "owner" : { + "external_urls" : { + "spotify" : "http://open.spotify.com/user/wizzler" + }, + "href" : "https://api.spotify.com/v1/users/wizzler", + "id" : "wizzler", + "type" : "user", + "uri" : "spotify:user:wizzler" + }, + "public" : true, + "snapshot_id" : "LO0O/RGsDLEgeDC3xVR4HisMNsDqoPLE8QBRqllyvevTJ09tFWIUbjrYoEJbUhCa", + "tracks" : { + "href" : "https://api.spotify.com/v1/users/wizzler/playlists/3FJd21jWvCjGCLx7eKrext/tracks", + "total" : 33 + }, + "type" : "playlist", + "uri" : "spotify:user:wizzler:playlist:3FJd21jWvCjGCLx7eKrext" + } ], + "limit" : 2, + "next" : "https://api.spotify.com/v1/users/wizzler/playlists?offset=2&limit=2", + "offset" : 0, + "previous" : null, + "total" : 7 +}; + + + + +/** + * Get a playlist + * + * GET /v1/users/{user_id}/playlists/{playlist_id} + * https://developer.spotify.com/web-api/get-playlist/ */ const playlist : SpotifyApi.SinglePlaylistResponse = { "collaborative" : false, @@ -6339,7 +6703,10 @@ const playlist : SpotifyApi.SinglePlaylistResponse = { /** - * Tests + * Get a playlist's tracks + * + * GET /v1/users/{user_id}/playlists/{playlist_id}/tracks + * https://developer.spotify.com/web-api/get-playlists-tracks/ */ const playlistTracks : SpotifyApi.PlaylistTrackResponse = { "href" : "https://api.spotify.com/v1/users/spotify_espa%C3%B1a/playlists/21THa8j9TaSGuXYNBU5tsC/tracks?offset=0&limit=3", @@ -6583,7 +6950,10 @@ const playlistTracks : SpotifyApi.PlaylistTrackResponse = { /** - * Tests https://developer.spotify.com/web-api/create-playlist/ + * Create a Playlist + * + * POST /v1/users/{user_id}/playlists + * https://developer.spotify.com/web-api/create-playlist/ */ const newPlaylist : SpotifyApi.CreatePlaylistResponse = { "collaborative" : false, @@ -6627,7 +6997,10 @@ const newPlaylist : SpotifyApi.CreatePlaylistResponse = { /** - * Tests https://developer.spotify.com/web-api/change-playlist-details/ + * Change a Playlist’s Details + * + * PUT /v1/users/{user_id}/playlists/{playlist_id} + * https://developer.spotify.com/web-api/change-playlist-details/ */ const changePlaylistDetails : SpotifyApi.ChangePlaylistDetailsReponse = {}; @@ -6635,7 +7008,10 @@ const changePlaylistDetails : SpotifyApi.ChangePlaylistDetailsReponse = {}; /** - * Tests https://developer.spotify.com/web-api/add-tracks-to-playlist/ + * Add Tracks to a Playlist + * + * POST /v1/users/{user_id}/playlists/{playlist_id}/tracks + * https://developer.spotify.com/web-api/add-tracks-to-playlist/ */ const addTracksToPlaylist : SpotifyApi.AddTracksToPlaylistResponse = { "snapshot_id" : "4qQeMTnHV5LCL9w/lI9Mlu5shi2pk+iiIm6VEpmKdMPCE6adhRNTG9SXflxh8DTt" @@ -6645,7 +7021,10 @@ const addTracksToPlaylist : SpotifyApi.AddTracksToPlaylistResponse = { /** - * Tests https://developer.spotify.com/web-api/remove-tracks-playlist/ + * Remove Tracks from a Playlist + * + * DELETE /v1/users/{user_id}/playlists/{playlist_id}/tracks + * https://developer.spotify.com/web-api/remove-tracks-playlist/ */ const removeTracksFromPlaylist : SpotifyApi.RemoveTracksFromPlaylistResponse = { "snapshot_id" : "t3+4ZWOqedj+bmcHHu1HKNqYfIyYAfXKlSHHykvS4KAm7hoVhDoCpn+KIuFZebZp" @@ -6655,7 +7034,10 @@ const removeTracksFromPlaylist : SpotifyApi.RemoveTracksFromPlaylistResponse = { /** - * Tests https://developer.spotify.com/web-api/reorder-playlists-tracks/ + * Reorder a Playlist’s Tracks + * + * PUT /v1/users/{user_id}/playlists/{playlist_id}/tracks + * https://developer.spotify.com/web-api/reorder-playlists-tracks/ */ const reorderTracksInPlaylist : SpotifyApi.ReorderPlaylistTracksResponse = { "snapshot_id" : "t3+4ZWOqedj+bmcHHu1HKNqYfIyYAfXKlSHHykvS4KAm7hoVhDoCpn+KIuFZebZp" @@ -6665,7 +7047,10 @@ const reorderTracksInPlaylist : SpotifyApi.ReorderPlaylistTracksResponse = { /** - * Tests https://developer.spotify.com/web-api/replace-playlists-tracks/ + * Replace a Playlist’s Tracks + * + * PUT /v1/users/{user_id}/playlists/{playlist_id}/tracks + * https://developer.spotify.com/web-api/replace-playlists-tracks/ */ const replacePlaylistTracks : SpotifyApi.ReplacePlaylistTracksResponse = {}; @@ -6673,6 +7058,9 @@ const replacePlaylistTracks : SpotifyApi.ReplacePlaylistTracksResponse = {}; /** - * Tests https://developer.spotify.com/web-api/check-user-following-playlist/ + * Check if Users Follow a Playlist + * + * GET /v1/users/{user_id}/playlists/{playlist_id}/followers/contains + * https://developer.spotify.com/web-api/check-user-following-playlist/ */ const checkUserFollowsPlaylist : SpotifyApi.UsersFollowPlaylistReponse = [true, false, true]; \ No newline at end of file diff --git a/spotify-api/spotify-api.d.ts b/spotify-api/spotify-api.d.ts index b175080ac8..d0f655358a 100644 --- a/spotify-api/spotify-api.d.ts +++ b/spotify-api/spotify-api.d.ts @@ -5,6 +5,9 @@ // Release comments: // ----------------- + +// The audio analysis object is not yet in the Object Model at Spotify, therefore it is typed as any in this file. + // TrackObjects and AlbumObjects is specified in the docs as always having the available_markets property, // but when it is sent in https://developer.spotify.com/web-api/console/get-current-user-saved-tracks // the available_markets are missing. Therefore it is marked as optional in this source code. @@ -37,6 +40,69 @@ declare namespace SpotifyApi { offset?: number; } + /** + * Object for use in Recommendations Based on Seeds. + * See: [Recommendations Based on Seeds](https://developer.spotify.com/web-api/get-recommendations/) + * + * @limit q Optional. The target size of the list of recommended tracks. For seeds with unusually small pools or when highly restrictive filtering is applied, it may be impossible to generate the requested number of recommended tracks. Debugging information for such cases is available in the response. Default: 20. Minimum: 1. Maximum: 100. + * @market q Optional. An ISO 3166-1 alpha-2 country code. Provide this parameter if you want to apply Track Relinking. Because min_*, max_* and target_* are applied to pools before relinking, the generated results may not precisely match the filters applied. Original, non-relinked tracks are available via the linked_from attribute of the relinked track response. + * @max_ q Optional. Multiple values. For each tunable track attribute, a hard ceiling on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, max_instrumentalness=0.35 would filter out most tracks that are likely to be instrumental. + * @min_ q Optional. Multiple values. For each tunable track attribute, a hard floor on the selected track attribute’s value can be provided. See tunable track attributes below for the list of available options. For example, min_tempo=140 would restrict results to only those tracks with a tempo of greater than 140 beats per minute. + * @seed_artists q A comma separated list of Spotify IDs for seed artists. Up to 5 seed values may be provided in any combination of seed_artists, seed_tracks and seed_genres. + * @seed_genres q A comma separated list of any genres in the set of available genre seeds. Up to 5 seed values may be provided in any combination of seed_artists, seed_tracks and seed_genres. + * @seed_tracks q A comma separated list of Spotify IDs for a seed track. Up to 5 seed values may be provided in any combination of seed_artists, seed_tracks and seed_genres. + * @target_ q Optional. Multiple values. For each of the tunable track attributes (below) a target value may be provided. Tracks with the attribute values nearest to the target values will be preferred. For example, you might request target_energy=0.6 and target_danceability=0.8. All target values will be weighed equally in ranking results. + */ + interface RecommendationsOptionsObject { + limit?: number, + market?: string, + max_acousticness?: number, + max_danceability?: number, + max_duration_ms?: number, + max_energy?: number, + max_instrumentalness?: number, + max_key?: number, + max_liveness?: number, + max_loudness?: number, + max_mode?: number, + max_popularity?: number, + max_speechiness?: number, + max_tempo?: number, + max_time_signature?: number, + max_valence?: number, + min_acousticness?: number, + min_danceability?: number, + min_duration_ms?: number, + min_energy?: number, + min_instrumentalness?: number, + min_key?: number, + min_liveness?: number, + min_loudness?: number, + min_mode?: number, + min_popularity?: number, + min_speechiness?: number, + min_tempo?: number, + min_time_signature?: number, + min_valence?: number, + seed_artists?: string, // Comma separated string + seed_genres?: string, // Comma separated string + seed_tracks?: string, // Comma separated string + target_acousticness?: number + target_danceability?: number + target_duration_ms?: number + target_energy?: number + target_instrumentalness?: number + target_key?: number + target_liveness?: number + target_loudness?: number + target_mode?: number + target_popularity?: number + target_speechiness?: number + target_tempo?: number + target_time_signature?: number + target_valence?: number + } + // // Responses from the Spotify Web API in the same order as in the API endpoint docs seen here: @@ -62,13 +128,17 @@ declare namespace SpotifyApi { /** * Get an Album + * * GET /v1/albums/{id} + * https://developer.spotify.com/web-api/get-album/ */ interface SingleAlbumResponse extends AlbumObjectFull {} /** * Get Several Albums - * GET /v1/albums + * + * GET /v1/albums?ids={ids} + * https://developer.spotify.com/web-api/get-several-albums/ */ interface MultipleAlbumsResponse { albums: AlbumObjectFull[] @@ -76,19 +146,25 @@ declare namespace SpotifyApi { /** * Get an Album’s Tracks + * * GET /v1/albums/{id}/tracks + * https://developer.spotify.com/web-api/get-albums-tracks/ */ interface AlbumTracksResponse extends PagingObject {} /** * Get an Artist + * * GET /v1/artists/{id} + * https://developer.spotify.com/web-api/get-artist/ */ interface SingleArtistResponse extends ArtistObjectFull {} /** * Get Several Artists - * GET /v1/artists + * + * /v1/artists?ids={ids} + * https://developer.spotify.com/web-api/get-several-artists/ */ interface MultipleArtistsResponse { artists: ArtistObjectFull[] @@ -96,13 +172,17 @@ declare namespace SpotifyApi { /** * Get an Artist’s Albums + * * GET /v1/artists/{id}/albums + * https://developer.spotify.com/web-api/get-artists-albums/ */ interface ArtistsAlbumsResponse extends PagingObject {} /** * Get an Artist’s Top Tracks + * * GET /v1/artists/{id}/top-tracks + * https://developer.spotify.com/web-api/get-artists-top-tracks/ */ interface ArtistsTopTracksResponse { tracks: TrackObjectFull[] @@ -110,21 +190,38 @@ declare namespace SpotifyApi { /** * Get an Artist’s Related Artists + * * GET /v1/artists/{id}/related-artists + * https://developer.spotify.com/web-api/get-related-artists/ */ interface ArtistsRelatedArtistsResponse { artists: ArtistObjectFull[] } + /** + * Get Audio Analysis for a Track + * + * GET /v1/audio-analysis/{id} + * https://developer.spotify.com/web-api/get-audio-analysis/ + * + * At the time of typing, the Audio Analysis Object is absent from the Object Model, so it is typed as any. + * Object Model: https://developer.spotify.com/web-api/object-model/ + */ + interface AudioAnalysisResponse extends Object {} + /** * Get audio features for a track + * * GET /v1/audio-features/{id} + * https://developer.spotify.com/web-api/get-audio-features/ */ interface AudioFeaturesResponse extends AudioFeaturesObject {} /** * Get audio features for several tracks - * GET /v1/audio-features + * + * GET /v1/audio-features?ids={ids} + * https://developer.spotify.com/get-several-audio-features/ */ interface MultipleAudioFeaturesResponse { "audio_features": AudioFeaturesObject[] @@ -132,7 +229,9 @@ declare namespace SpotifyApi { /** * Get a list of featured playlists + * * GET /v1/browse/featured-playlists + * https://developer.spotify.com/web-api/get-list-featured-playlists/ */ interface ListOfFeaturedPlaylistsResponse { message?: string, @@ -141,7 +240,9 @@ declare namespace SpotifyApi { /** * Get a list of new releases + * * GET /v1/browse/new-releases + * https://developer.spotify.com/web-api/get-list-new-releases/ */ interface ListOfNewReleasesResponse { message?: string, @@ -150,7 +251,9 @@ declare namespace SpotifyApi { /** * Get a list of categories + * * GET /v1/browse/categories + * https://developer.spotify.com/web-api/get-list-categories/ */ interface MultipleCategoriesResponse { categories: PagingObject @@ -158,13 +261,17 @@ declare namespace SpotifyApi { /** * Get a category - * GET /v1/browse/categories/{category_id} + * + * GET /v1/browse/categories/{id} + * https://developer.spotify.com/web-api/get-category/ */ interface SingleCategoryResponse extends CategoryObject {} /** * Get a categorys playlists + * * GET /v1/browse/categories/{id}/playlists + * https://developer.spotify.com/web-api/get-categorys-playlists/ */ interface CategoryPlaylistsReponse { playlists: PagingObject @@ -172,13 +279,17 @@ declare namespace SpotifyApi { /** * Get Current User’s Profile + * * GET /v1/me + * https://developer.spotify.com/web-api/get-current-users-profile/ */ interface CurrentUsersProfileResponse extends UserObjectPrivate {} /** * Get User’s Followed Artists - * GET /v1/me/following?type=artist + * + * GET /v1/me/following + * https://developer.spotify.com/web-api/get-followed-artists/ */ interface UsersFollowedArtistsResponse { artists: CursorBasedPagingObject @@ -186,103 +297,147 @@ declare namespace SpotifyApi { /** * Follow artists or users + * * PUT /v1/me/following + * https://developer.spotify.com/web-api/follow-artists-users/ */ interface FollowArtistsOrUsersResponse extends VoidResponse {} /** * Unfollow artists or users + * * DELETE /v1/me/following + * https://developer.spotify.com/web-api/unfollow-artists-users/ */ interface UnfollowArtistsOrUsersResponse extends VoidResponse {} /** * Check if User Follows Users or Artists + * * GET /v1/me/following/contains + * https://developer.spotify.com/web-api/check-current-user-follows/ */ interface UserFollowsUsersOrArtistsResponse extends Array {} /** * Follow a Playlist + * * PUT /v1/users/{owner_id}/playlists/{playlist_id}/followers + * https://developer.spotify.com/web-api/follow-playlist/ */ interface FollowPlaylistReponse extends VoidResponse {} /** * Unfollow a Playlist + * * DELETE /v1/users/{owner_id}/playlists/{playlist_id}/followers + * https://developer.spotify.com/web-api/unfollow-playlist/ */ interface UnfollowPlaylistReponse extends VoidResponse {} /** * Save tracks for user + * * PUT /v1/me/tracks?ids={ids} + * https://developer.spotify.com/web-api/save-tracks-user/ */ interface SaveTracksForUserResponse extends VoidResponse {} /** * Get user's saved tracks + * * GET /v1/me/tracks + * https://developer.spotify.com/web-api/get-users-saved-tracks/ */ interface UsersSavedTracksResponse extends PagingObject {} /** * Remove User’s Saved Tracks + * * DELETE /v1/me/tracks?ids={ids} + * https://developer.spotify.com/web-api/remove-tracks-user/ */ interface RemoveUsersSavedTracksResponse extends VoidResponse {} /** * Check User’s Saved Tracks - * GET /v1/me/tracks/contains + * + * GET /v1/me/tracks/contains?ids={ids} + * https://developer.spotify.com/web-api/check-users-saved-tracks/ */ interface CheckUsersSavedTracksResponse extends Array {} /** * Save albums for user + * * PUT /v1/me/albums?ids={ids} + * https://developer.spotify.com/web-api/save-albums-user/ */ interface SaveAlbumsForUserResponse extends VoidResponse {} /** * Get user's saved albums + * * GET /v1/me/albums + * https://developer.spotify.com/web-api/get-users-saved-albums/ */ - interface UsersSavedAlbumsResponse extends PagingObject {} + interface UsersSavedAlbumsResponse extends PagingObject {} /** * Remove Albums for Current User + * * DELETE /v1/me/albums?ids={ids} + * https://developer.spotify.com/web-api/remove-albums-user/ */ interface RemoveAlbumsForUserResponse extends VoidResponse {} /** * Check user's saved albums - * DELETE /v1/me/albums/contains?ids={ids} + * + * GET /v1/me/albums/contains?ids={ids} + * https://developer.spotify.com/web-api/check-users-saved-albums/ */ interface CheckUserSavedAlbumsResponse extends Array {} /** - * Get a User’s Top Artists and Tracks - * GET /v1/me/top/{type} - */ - interface UsersTopTracksResponse extends PagingObject {} - - /** - * Get a User’s Top Artists and Tracks + * Get a User’s Top Artists and Tracks (Note: This is only Artists) + * * GET /v1/me/top/{type} + * https://developer.spotify.com/web-api/get-users-top-artists-and-tracks/ */ interface UsersTopArtistsResponse extends PagingObject {} + /** + * Get a User’s Top Artists and Tracks (Note: This is only Tracks) + * + * GET /v1/me/top/{type} + * https://developer.spotify.com/web-api/get-users-top-artists-and-tracks/ + */ + interface UsersTopTracksResponse extends PagingObject {} + /** * Get recommendations based on seeds + * * GET /v1/recommendations + * https://developer.spotify.com/get-recommendations/ */ interface RecommendationsFromSeedsResponse extends RecommendationsObject {} + /** + * Get available genre seeds + * + * GET /v1/recommendations/available-genre-seeds + * https://developer.spotify.com/web-api/get-recommendations/#available-genre-seeds + */ + interface AvailableGenreSeedsResponse { + "genres": string[] + } + /** * Search for an album + * * GET /v1/search?type=album + * https://developer.spotify.com/web-api/search-item/ */ interface AlbumSearchResponse { albums: PagingObject @@ -290,7 +445,9 @@ declare namespace SpotifyApi { /** * Search for an artist + * * GET /v1/search?type=artist + * https://developer.spotify.com/web-api/search-item/ */ interface ArtistSearchResponse { artists: PagingObject @@ -298,7 +455,9 @@ declare namespace SpotifyApi { /** * Search for a playlist + * * GET /v1/search?type=playlist + * https://developer.spotify.com/web-api/search-item/ */ interface PlaylistSearchResponse { playlists: PagingObject @@ -306,7 +465,9 @@ declare namespace SpotifyApi { /** * Search for a track + * * GET /v1/search?type=track + * https://developer.spotify.com/web-api/search-item/ */ interface TrackSearchResponse { tracks: PagingObject @@ -314,13 +475,17 @@ declare namespace SpotifyApi { /** * Get a track + * * GET /v1/tracks/{id} + * https://developer.spotify.com/web-api/get-track/ */ interface SingleTrackResponse extends TrackObjectFull {} /** * Get multiple tracks + * * GET /v1/tracks?ids={ids} + * https://developer.spotify.com/web-api/get-several-tracks/ */ interface MultipleTracksResponse { tracks: TrackObjectFull[] @@ -328,73 +493,97 @@ declare namespace SpotifyApi { /** * Get user profile + * * GET /v1/users/{user_id} + * https://developer.spotify.com/web-api/get-users-profile/ */ interface UserProfileResponse extends UserObjectPublic {} /** * Get a list of a user's playlists + * * GET /v1/users/{user_id}/playlists + * https://developer.spotify.com/web-api/get-list-users-playlists/ */ interface ListOfUsersPlaylistsResponse extends PagingObject {} /** * Get a list of the current user's playlists + * * GET /v1/me/playlists + * https://developer.spotify.com/web-api/get-list-users-playlists/ */ interface ListOfCurrentUsersPlaylistsResponse extends PagingObject {} /** * Get a playlist + * * GET /v1/users/{user_id}/playlists/{playlist_id} + * https://developer.spotify.com/web-api/get-playlist/ */ interface SinglePlaylistResponse extends PlaylistObjectFull {} /** * Get a playlist's tracks + * * GET /v1/users/{user_id}/playlists/{playlist_id}/tracks + * https://developer.spotify.com/web-api/get-playlists-tracks/ */ interface PlaylistTrackResponse extends PagingObject {} /** * Create a Playlist + * * POST /v1/users/{user_id}/playlists + * https://developer.spotify.com/web-api/create-playlist/ */ interface CreatePlaylistResponse extends PlaylistObjectFull {} /** * Change a Playlist’s Details + * * PUT /v1/users/{user_id}/playlists/{playlist_id} + * https://developer.spotify.com/web-api/change-playlist-details/ */ interface ChangePlaylistDetailsReponse extends VoidResponse {} /** * Add Tracks to a Playlist + * * POST /v1/users/{user_id}/playlists/{playlist_id}/tracks + * https://developer.spotify.com/web-api/add-tracks-to-playlist/ */ interface AddTracksToPlaylistResponse extends PlaylistSnapshotResponse {} /** * Remove Tracks from a Playlist + * * DELETE /v1/users/{user_id}/playlists/{playlist_id}/tracks + * https://developer.spotify.com/web-api/remove-tracks-playlist/ */ interface RemoveTracksFromPlaylistResponse extends PlaylistSnapshotResponse {} /** * Reorder a Playlist’s Tracks + * * PUT /v1/users/{user_id}/playlists/{playlist_id}/tracks + * https://developer.spotify.com/web-api/reorder-playlists-tracks/ */ interface ReorderPlaylistTracksResponse extends PlaylistSnapshotResponse {} /** * Replace a Playlist’s Tracks + * * PUT /v1/users/{user_id}/playlists/{playlist_id}/tracks + * https://developer.spotify.com/web-api/replace-playlists-tracks/ */ interface ReplacePlaylistTracksResponse extends VoidResponse {} /** * Check if Users Follow a Playlist + * * GET /v1/users/{user_id}/playlists/{playlist_id}/followers/contains + * https://developer.spotify.com/web-api/check-user-following-playlist/ */ interface UsersFollowPlaylistReponse extends Array {} From 5e10a26cea0224db26c41641eb15494f3bced54e Mon Sep 17 00:00:00 2001 From: Sergei Basharov Date: Tue, 25 Oct 2016 16:08:00 +0300 Subject: [PATCH 036/111] Typos fixes (#12111) --- nes/nes.d.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nes/nes.d.ts b/nes/nes.d.ts index c86627db47..736b4382c8 100644 --- a/nes/nes.d.ts +++ b/nes/nes.d.ts @@ -61,7 +61,7 @@ declare module 'nes' { user?: any; } - export interface ServerEachSokcetOptions { + export interface ServerEachSocketOptions { subscription?: string; user?: any; } @@ -70,7 +70,7 @@ declare module 'nes' { broadcast(message: any, options?: ServerBroadcastOptions): void; subscription(path: string, options?: ServerSubscriptionOptions): void; publish(path: string, message: any, options?: ServerPublishOptions): void; - eachSocket(each: (socket: Socket) => void, options?: ServerEachSokcetOptions): void; + eachSocket(each: (socket: Socket) => void, options?: ServerEachSocketOptions): void; } export class Request extends Hapi.Request { @@ -82,7 +82,7 @@ declare module 'nes' { timeout?: number | boolean; } - export interface ClientConnnectOptions { + export interface ClientConnectOptions { auth?: any; delay?: number; maxDelay?: number; @@ -107,7 +107,7 @@ declare module 'nes' { onConnect: () => void; onDisconnect: () => void; onUpdate: (message: any) => void; - connect(options: ClientConnnectOptions, callback: (err?: any) => void): void; + connect(options: ClientConnectOptions, callback: (err?: any) => void): void; connect(callback: (err?: any) => void): void; disconnect(): void; id: any; @@ -123,7 +123,7 @@ declare module 'nes' { declare module 'nes/client' { export { Client, - ClientConnnectOptions, + ClientConnectOptions, ClientRequestOptions, ClientSubscribeFlags } from 'nes'; From e6413e382de7bad614897c3417e029b0d1804f5b Mon Sep 17 00:00:00 2001 From: Ivo Stratev Date: Tue, 25 Oct 2016 16:10:17 +0300 Subject: [PATCH 037/111] updating jest to 16.0.0 (#12066) --- jest/jest-tests.ts | 13 +++++++++--- jest/jest.d.ts | 49 ++++++++++++++++++++++++++-------------------- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/jest/jest-tests.ts b/jest/jest-tests.ts index b547bd40ad..bb28a77b26 100644 --- a/jest/jest-tests.ts +++ b/jest/jest-tests.ts @@ -209,6 +209,8 @@ describe('missing tests', function () { expect(getFruits()).toContain('Orange'); mock.mockReturnValueOnce(['Apple', 'Plum']); expect(mock()).not.toContain('Orange'); + const myBeverage: any = {delicious: true, sour: false}; + expect(myBeverage).toContainEqual({delicious: true, sour: false}); mock.mockReturnValue([]); //Deprecated: Use jest.fn(() => value) instead. mock.mockClear(); let thisMock: jest.Mock = jest.fn().mockReturnThis(); @@ -216,8 +218,7 @@ describe('missing tests', function () { }); it('creates snapshoter', function () { - jest.disableAutomock(); - jest.mock('./render', () => jest.fn((): string => "{Link to: \"facebook\"}"), { virtual: true }); + jest.disableAutomock().mock('./render', () => jest.fn((): string => "{Link to: \"facebook\"}"), { virtual: true }); const render: () => string = require('./render'); expect(render()).toMatch(/Link/); jest.enableAutomock(); @@ -226,7 +227,7 @@ describe('missing tests', function () { it('runs only pending timers', function () { jest.useRealTimers(); setTimeout(() => expect(1).not.toEqual(0), 3000); - jest.runOnlyPendingTimers(); + jest.runOnlyPendingTimers().runTimersToTime(300); }); it('runs all timers', function () { @@ -250,6 +251,12 @@ describe('toMatchSnapshot', function () { }); }); +describe('toThrowErrorMatchingSnapshot', function () { + it('compares snapshots', function () { + expect(() => { throw new Error('descriptiton') }).toThrowErrorMatchingSnapshot(); + }); +}); + function testInstances() { var mockFn = jest.fn(); var a = new mockFn(); diff --git a/jest/jest.d.ts b/jest/jest.d.ts index d0660193f6..dc0260cebb 100644 --- a/jest/jest.d.ts +++ b/jest/jest.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Jest 15.1.1 +// Type definitions for Jest 16.0.0 // Project: http://facebook.github.io/jest/ // Definitions by: Asana , Ivo Stratev , jwbay // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -26,23 +26,25 @@ interface NodeRequire { } declare namespace jest { - function addMatchers(matchers: jasmine.CustomMatcherFactories): void; + function addMatchers(matchers: jasmine.CustomMatcherFactories): typeof jest; /** Disables automatic mocking in the module loader. */ - function autoMockOff(): void; + function autoMockOff(): typeof jest; /** Enables automatic mocking in the module loader. */ - function autoMockOn(): void; + function autoMockOn(): typeof jest; + /** Clears the mock.calls and mock.instances properties of all mocks. Equivalent to calling .mockClear() on every mocked function. */ + function clearAllMocks(): typeof jest; /** Removes any pending timers from the timer system. If any timers have been scheduled, they will be cleared and will never have the opportunity to execute in the future. */ - function clearAllTimers(): void; + function clearAllTimers(): typeof jest; /** Indicates that the module system should never return a mocked version of the specified module, including all of the specificied module's dependencies. */ - function deepUnmock(moduleName: string): void; + function deepUnmock(moduleName: string): typeof jest; /** Disables automatic mocking in the module loader. */ - function disableAutomock(): void; + function disableAutomock(): typeof jest; /** Mocks a module with an auto-mocked version when it is being required. */ - function doMock(moduleName: string): void; + function doMock(moduleName: string): typeof jest; /** Indicates that the module system should never return a mocked version of the specified module from require() (e.g. that it should always return the real module). */ - function dontMock(moduleName: string): void; + function dontMock(moduleName: string): typeof jest; /** Enables automatic mocking in the module loader. */ - function enableAutomock(): void; + function enableAutomock(): typeof jest; /** Creates a mock function. Optionally takes a mock implementation. */ function fn(implementation?: Function): Mock; /** Use the automatic mocking system to generate a mocked version of the given module. */ @@ -50,28 +52,30 @@ declare namespace jest { /** Returns whether the given function is a mock function. */ function isMockFunction(fn: any): fn is Mock; /** Mocks a module with an auto-mocked version when it is being required. */ - function mock(moduleName: string, factory?: any, options?: MockOptions): void; + function mock(moduleName: string, factory?: any, options?: MockOptions): typeof jest; /** Resets the module registry - the cache of all required modules. This is useful to isolate modules where local state might conflict between tests. */ - function resetModuleRegistry(): void; + function resetModuleRegistry(): typeof jest; /** Resets the module registry - the cache of all required modules. This is useful to isolate modules where local state might conflict between tests. */ - function resetModules(): void; + function resetModules(): typeof jest; /** Exhausts tasks queued by setImmediate(). */ - function runAllImmediates(): void; + function runAllImmediates(): typeof jest; /** Exhausts the micro-task queue (usually interfaced in node via process.nextTick). */ - function runAllTicks(): void; + function runAllTicks(): typeof jest; /** Exhausts the macro-task queue (i.e., all tasks queued by setTimeout() and setInterval()). */ - function runAllTimers(): void; + function runAllTimers(): typeof jest; /** Executes only the macro-tasks that are currently pending (i.e., only the tasks that have been queued by setTimeout() or setInterval() up to this point). * If any of the currently pending macro-tasks schedule new macro-tasks, those new tasks will not be executed by this call. */ - function runOnlyPendingTimers(): void; + function runOnlyPendingTimers(): typeof jest; + /** Executes only the macro task queue (i.e. all tasks queued by setTimeout() or setInterval() and setImmediate()). */ + function runTimersToTime(msToRun: number): typeof jest; /** Explicitly supplies the mock object that the module system should return for the specified module. */ - function setMock(moduleName: string, moduleExports: T): void; + function setMock(moduleName: string, moduleExports: T): typeof jest; /** Indicates that the module system should never return a mocked version of the specified module from require() (e.g. that it should always return the real module). */ - function unmock(moduleName: string): void; + function unmock(moduleName: string): typeof jest; /** Instructs Jest to use fake versions of the standard timer functions. */ - function useFakeTimers(): void; + function useFakeTimers(): typeof jest; /** Instructs Jest to use the real versions of the standard timer functions. */ - function useRealTimers(): void; + function useRealTimers(): typeof jest; interface MockOptions { virtual?: boolean; @@ -98,6 +102,7 @@ declare namespace jest { (name: string, fn: ProvidesCallback): void; only: It; skip: It; + concurrent: It; } interface Describe { @@ -124,6 +129,7 @@ declare namespace jest { toBeTruthy(): void; toBeUndefined(): void; toContain(expected: any): void; + toContainEqual(expected: any): void; toEqual(expected: any): void; toHaveBeenCalled(): boolean; toHaveBeenCalledTimes(expected: number): boolean; @@ -132,6 +138,7 @@ declare namespace jest { toMatchSnapshot(): void; toThrow(): void; toThrowError(error?: string | Constructable | RegExp): void; + toThrowErrorMatchingSnapshot(): void; } interface Constructable { From 0e2d4e9680d7cf91f36dd7348d8a4ca9f560bd6d Mon Sep 17 00:00:00 2001 From: bryanjjohnson Date: Tue, 25 Oct 2016 07:12:08 -0600 Subject: [PATCH 038/111] update mapbox-gl definitions to 0.26.0 (#11992) --- mapbox-gl/mapbox-gl-0.25.1.d.ts | 936 ++++++++++++++++++++++++++++++++ mapbox-gl/mapbox-gl.d.ts | 24 +- 2 files changed, 954 insertions(+), 6 deletions(-) create mode 100644 mapbox-gl/mapbox-gl-0.25.1.d.ts diff --git a/mapbox-gl/mapbox-gl-0.25.1.d.ts b/mapbox-gl/mapbox-gl-0.25.1.d.ts new file mode 100644 index 0000000000..2ee8d30949 --- /dev/null +++ b/mapbox-gl/mapbox-gl-0.25.1.d.ts @@ -0,0 +1,936 @@ +// Type definitions for Mapbox GL JS v0.24.0 +// Project: https://github.com/mapbox/mapbox-gl-js +// Definitions by: Dominik Bruderer +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +declare namespace mapboxgl { + let accessToken: string; + let version: string; + export function supported(options?: {failIfMajorPerformanceCaveat?: boolean}): boolean; + + /** + * Map + */ + export class Map extends Evented { + constructor(options?: MapboxOptions); + + addControl(control: Control): this; + + addClass(klass: string, options?: mapboxgl.StyleOptions): this; + + removeClass(klass: string, options?: mapboxgl.StyleOptions): this; + + setClasses(klasses: string[], options?: mapboxgl.StyleOptions): this; + + hasClass(klass: string): boolean; + + getClasses(): string[]; + + resize(): this; + + getBounds(): mapboxgl.LngLatBounds; + + setMaxBounds(lnglatbounds?: mapboxgl.LngLatBounds | number[][]): this; + + setMinZoom(minZoom?: number): this; + + setMaxZoom(maxZoom?: number): this; + + project(lnglat: mapboxgl.LngLat | number[]): mapboxgl.Point; + + unproject(point: mapboxgl.Point | number[]): mapboxgl.LngLat; + + queryRenderedFeatures(pointOrBox?: mapboxgl.Point|number[]|mapboxgl.Point[]|number[][], parameters?: {layers?: string[], filter?: any[]}): GeoJSON.Feature[]; + + querySourceFeatures(sourceID: string, parameters: {sourceLayer?: string, filter?: any[]}): GeoJSON.Feature[]; + + setStyle(style: mapboxgl.Style | string): this; + + getStyle(): mapboxgl.Style; + + addSource(id: string, source: VectorSource | RasterSource | GeoJSONSource | ImageSource | VideoSource | GeoJSONSourceRaw): this; + + removeSource(id: string): this; + + getSource(id: string): VectorSource | RasterSource | GeoJSONSource | ImageSource | VideoSource; + + addLayer(layer: mapboxgl.Layer, before?: string): this; + + removeLayer(id: string): this; + + getLayer(id: string): mapboxgl.Layer; + + setFilter(layer: string, filter: any[]): this; + + setLayerZoomRange(layerId: string, minzoom: number, maxzoom: number): this; + + getFilter(layer: string): any[]; + + setPaintProperty(layer: string, name: string, value: any, klass?: string): this; + + getPaintProperty(layer: string, name: string, klass?: string): any; + + setLayoutProperty(layer: string, name: string, value: any): this; + + getLayoutProperty(layer: string, name: string, klass?: string): any; + + getContainer(): HTMLElement; + + getCanvasContainer(): HTMLElement; + + getCanvas(): HTMLCanvasElement; + + loaded(): boolean; + + remove(): void; + + onError(): void; + + showTileBoundaries: boolean; + + showCollisionBoxes: boolean; + + repaint: boolean; + + getCenter(): mapboxgl.LngLat; + + setCenter(center: LngLat|number[], eventData?: mapboxgl.EventData): this; + + panBy(offset: number[], options?: mapboxgl.AnimationOptions, eventData?: mapboxgl.EventData): this; + + panTo(lnglat: mapboxgl.LngLat, options?: mapboxgl.AnimationOptions, eventdata?: mapboxgl.EventData): this; + + getZoom(): number; + + setZoom(zoom: number, eventData?: mapboxgl.EventData): this; + + zoomTo(zoom: number, options?: mapboxgl.AnimationOptions, eventData?: mapboxgl.EventData): this; + + zoomIn(options?: mapboxgl.AnimationOptions, eventData?: mapboxgl.EventData): this; + + zoomOut(options?: mapboxgl.AnimationOptions, eventData?: mapboxgl.EventData): this; + + getBearing(): number; + + setBearing(bearing: number, eventData?: mapboxgl.EventData): this; + + rotateTo(bearing: number, options?: mapboxgl.AnimationOptions, eventData?: EventData): this; + + resetNorth(options?: mapboxgl.AnimationOptions, eventData?: mapboxgl.EventData): this; + + snapToNorth(options?: mapboxgl.AnimationOptions, eventData?: mapboxgl.EventData): this; + + getPitch(): number; + + setPitch(pitch: number, eventData?: EventData): this; + + fitBounds(bounds: mapboxgl.LngLatBounds | number[][], options?: { linear?: boolean, easing?: Function, padding?: number, offset?: Point|number[],maxZoom?: number }): this; + + jumpTo(options: mapboxgl.CameraOptions, eventData?: mapboxgl.EventData): this; + + easeTo(options: mapboxgl.CameraOptions | mapboxgl.AnimationOptions, eventData?: mapboxgl.EventData): this; + + flyTo(options: mapboxgl.FlyToOptions, eventData?: mapboxgl.EventData): this; + + stop(): this; + + scrollZoom: ScrollZoomHandler; + + boxZoom: BoxZoomHandler; + + dragRotate: DragRotateHandler; + + dragPan: DragPanHandler; + + keyboard: KeyboardHandler; + + doublClickZoom: DoubleClickZoomHandler; + + touchZoomRotate: TouchZoomRotateHandler; + } + + export interface MapboxOptions { + /** If true, an attribution control will be added to the map. */ + attributionControl?: boolean; + + bearing?: number; + + /** Snap to north threshold in degrees. */ + bearingSnap?: number; + + /** If true, enable the "box zoom" interaction (see BoxZoomHandler) */ + boxZoom?: boolean; + + /** initial map center */ + center?: mapboxgl.LngLat | number[]; + + /** Style class names with which to initialize the map */ + classes?: string[]; + + /** ID of the container element */ + container?: string | Element; + + /** If true, enable the "drag to pan" interaction (see DragPanHandler). */ + dragPan?: boolean; + + /** If true, enable the "drag to rotate" interaction (see DragRotateHandler). */ + dragRotate?: boolean; + + /** If true, enable the "double click to zoom" interaction (see DoubleClickZoomHandler). */ + doubleClickZoom?: boolean; + + /** If true, the map will track and update the page URL according to map position */ + hash?: boolean; + + /** If true, map creation will fail if the implementation determines that the performance of the created WebGL context would be dramatically lower than expected. */ + failIfMayorPerformanceCaveat?: boolean; + + /** If false, no mouse, touch, or keyboard listeners are attached to the map, so it will not respond to input */ + interactive?: boolean; + + /** If true, enable keyboard shortcuts (see KeyboardHandler). */ + keyboard?: boolean; + + /** If set, the map is constrained to the given bounds. */ + maxBounds?: mapboxgl.LngLatBounds | number[][]; + + /** Maximum zoom of the map */ + maxZoom?: number; + + /** Minimum zoom of the map */ + minZoom?: number; + + /** If true, The maps canvas can be exported to a PNG using map.getCanvas().toDataURL();. This is false by default as a performance optimization. */ + preserveDrawingBuffer?: boolean; + + pitch?: number; + + /** If true, enable the "scroll to zoom" interaction */ + scrollZoom?: boolean; + + /** stylesheet location */ + style?: mapboxgl.Style | string; + + /** If true, the map will automatically resize when the browser window resizes */ + trackResize?: boolean; + + /** If true, enable the "pinch to rotate and zoom" interaction (see TouchZoomRotateHandler). */ + touchZoomRotate?: boolean; + + /** Initial zoom level */ + zoom?: number; + } + + /** + * BoxZoomHandler + */ + export class BoxZoomHandler { + constructor(map: mapboxgl.Map); + + isEnabled(): boolean; + + isActive(): boolean; + + enable(): void; + + disable(): void; + } + + /** + * ScrollZoomHandler + */ + export class ScrollZoomHandler { + constructor(map: mapboxgl.Map); + + isEnabled(): boolean; + + enable(): void; + + disable(): void; + } + + /** + * DragPenHandler + */ + export class DragPanHandler { + constructor(map: mapboxgl.Map); + + isEnabled(): boolean; + + isActive(): boolean; + + enable(): void; + + disable(): void; + } + + /** + * DragRotateHandler + */ + export class DragRotateHandler { + constructor(map: mapboxgl.Map, options?: {bearingSnap?: number, pitchWithRotate?: boolean}); + + isEnabled(): boolean; + + isActive(): boolean; + + enable(): void; + + disable(): void; + } + + /** + * KeyboardHandler + */ + export class KeyboardHandler { + constructor(map: mapboxgl.Map); + + isEnabled(): boolean; + + enable(): void; + + disable(): void; + } + + /** + * DoubleClickZoomHandler + */ + export class DoubleClickZoomHandler { + constructor(map: mapboxgl.Map); + + isEnabled(): boolean; + + enable(): void; + + disable(): void; + } + + /** + * TouchZoomRotateHandler + */ + export class TouchZoomRotateHandler { + constructor(map: mapboxgl.Map); + + isEnabled(): boolean; + + enable(): void; + + disable(): void; + + disableRotation(): void; + + enableRotation(): void; + } + + /** + * Control + */ + export class Control extends Evented { + addTo(map: mapboxgl.Map): this; + + remove(): this; + } + + /** + * ControlOptions + */ + export interface ControlOptions { + position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left'; + } + + /** + * Navigation + */ + export class Navigation extends Control { + constructor(options?: mapboxgl.ControlOptions); + } + + /** + * Geolocate + */ + export class Geolocate extends Control { + constructor(options?: mapboxgl.ControlOptions); + } + + /** + * Attribution + */ + export class Attribution extends Control { + constructor(options?: mapboxgl.ControlOptions); + } + + /** + * Scale + */ + export class Scale extends Control { + constructor(options?: {position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left', maxWidth?: number, unit?: string}) + } + + /** + * Popup + */ + export class Popup extends Evented { + constructor(options?: mapboxgl.PopupOptions); + + addTo(map: mapboxgl.Map): this; + + isOpen(): boolean; + + remove(): this; + + getLngLat(): mapboxgl.LngLat; + + setLngLat(lnglat: mapboxgl.LngLat | number[]): this; + + setText(text: string): this; + + setHTML(html: string): this; + + setDOMContent(htmlNode: Node): this; + } + + export interface PopupOptions { + closeButton?: boolean; + + closeOnClick?: boolean; + + anchor?: 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; + + offset?: number | Point | number[] | { [key:string]: Point | number[];}; + } + + export interface Style { + bearing?: number; + center?: number[]; + glyphs?: string; + layers?: Layer[]; + metadata?: any; + name?: string; + pitch?: number; + sources?: any; + sprite?: string; + transition?: Transition; + version: number; + zoom?: number; + } + + export interface Transition { + delay?: number; + duration?: number; + } + + export interface Source { + type: "vector" | "raster" | "geojson" | "image" | "video"; + } + + /** + * GeoJSONSource + */ + + export interface GeoJSONSourceRaw extends Source, GeoJSONSourceOptions { + type: "geojson"; + } + + export class GeoJSONSource implements GeoJSONSourceRaw { + type: "geojson"; + + constructor(options?: mapboxgl.GeoJSONSourceOptions); + + setData(data: GeoJSON.Feature | GeoJSON.FeatureCollection | String): this; + } + + export interface GeoJSONSourceOptions { + data?: GeoJSON.Feature | GeoJSON.FeatureCollection | string; + + maxzoom?: number; + + buffer?: number; + + tolerance?: number; + + cluster?: number | boolean; + + clusterRadius?: number; + + clusterMaxZoom?: number; + } + + /** + * VideoSource + */ + export class VideoSource implements Source, VideoSourceOptions { + type: "video"; + + constructor(options?: mapboxgl.VideoSourceOptions); + + getVideo(): HTMLVideoElement; + + setCoordinates(coordinates: number[][]): this; + } + + export interface VideoSourceOptions { + urls?: string[]; + + coordinates?: number[][]; + } + + /** + * ImageSource + */ + export class ImageSource implements Source, ImageSourceOptions { + type: "image"; + + constructor(options?: mapboxgl.ImageSourceOptions); + + setCoordinates(coordinates: number[][]): this; + } + + export interface ImageSourceOptions { + url?: string; + + coordinates?: number[][]; + } + + interface VectorSource extends Source { + type: "vector"; + url?: string; + tiles?: string[]; + minzoom?: number; + maxzoom?: number; + } + + interface RasterSource extends Source { + type: "raster"; + url: string; + tiles?: string[]; + minzoom?: number; + maxzoom?: number; + tileSize?: number; + } + + /** + * LngLat + */ + export class LngLat { + lng: number; + lat: number; + + constructor(lng: number, lat: number); + + /** Return a new LngLat object whose longitude is wrapped to the range (-180, 180). */ + wrap(): mapboxgl.LngLat; + + /** Return a LngLat as an array */ + toArray(): number[]; + + /** Return a LngLat as a string */ + toString(): string; + + static convert(input: number[]|mapboxgl.LngLat): mapboxgl.LngLat; + } + + /** + * LngLatBounds + */ + export class LngLatBounds { + sw: LngLat | number[]; + ne: LngLat | number[]; + constructor(sw?: LngLat, ne?: LngLat); + + /** Extend the bounds to include a given LngLat or LngLatBounds. */ + extend(obj: mapboxgl.LngLat | mapboxgl.LngLatBounds): this; + + /** Get the point equidistant from this box's corners */ + getCenter(): mapboxgl.LngLat; + + /** Get southwest corner */ + getSouthWest(): mapboxgl.LngLat; + + /** Get northeast corner */ + getNorthEast(): mapboxgl.LngLat; + + /** Get northwest corner */ + getNorthWest(): mapboxgl.LngLat; + + /** Get southeast corner */ + getSouthEast(): mapboxgl.LngLat; + + /** Get west edge longitude */ + getWest(): number; + + /** Get south edge latitude */ + getSouth(): number; + + /** Get east edge longitude */ + getEast(): number; + + /** Get north edge latitude */ + getNorth(): number; + + /** Returns a LngLatBounds as an array */ + toArray(): number[][]; + + /** Return a LngLatBounds as a string */ + toString(): string; + + /** Convert an array to a LngLatBounds object, or return an existing LngLatBounds object unchanged. */ + static convert(input: mapboxgl.LngLatBounds | number[] | number[][]): mapboxgl.LngLatBounds; + } + + /** + * Point + */ + // Todo: Pull out class to seperate definition for Module "point-geometry" + export class Point { + constructor(options?: Object); + + clone(): Point; + + add(p: number): Point; + + sub(p: number): Point; + + mult(k: number): Point; + + div(k: number): Point; + + rotate(a: number): Point; + + matMult(m: number): Point; + + unit(): Point; + + perp(): Point; + + round(): Point; + + mag(): number; + + equals(): boolean; + + dist(): number; + + distSqr(): number; + + angle(): number; + + angleTo(): number; + + angleWidth(): number; + + angleWidthSep(): number; + } + + export class Marker { + constructor(element?: HTMLElement, options?: { offset?: Point | number[] }); + + addTo(map: Map): this; + + remove(): this; + + getLngLat(): LngLat; + + setLngLat(lngLat: LngLat | number[]): this; + + setPopup(popup?: Popup): this; + + getPopup(): Popup; + + togglePopup(): this; + } + + /** + * Evented + */ + export class Evented { + on(type: string, listener: Function): this; + + off(type?: string | any, listener?: Function): this; + + once(type: string, listener: Function): this; + + fire(type: string, data?: mapboxgl.EventData | Object): this; + + listens(type: string): boolean; + } + + /** + * StyleOptions + */ + export interface StyleOptions { + transition?: boolean; + } + + /** + * EventData + */ + export class EventData { + type: string; + target: Map; + originalEvent: Event; + point: mapboxgl.Point; + lngLat: mapboxgl.LngLat; + } + + export class MapMouseEvent { + type: string; + target: Map; + originalEvent: MouseEvent; + point: mapboxgl.Point; + lngLat: mapboxgl.LngLat; + } + + export class MapTouchEvent { + type: string; + target: Map; + originalEvent: TouchEvent; + point: mapboxgl.Point; + lngLat: mapboxgl.LngLat; + points: Point[]; + lngLats: LngLat[]; + } + + export class MapBoxZoomEvent { + originalEvent: MouseEvent; + boxZoomBounds: LngLatBounds; + } + + /** + * AnimationOptions + */ + export interface AnimationOptions { + /** Number in milliseconds */ + duration?: number; + easing?: Function; + /** point, origin of movement relative to map center */ + offset?: Point | number[]; + /** When set to false, no animation happens */ + animate?: boolean; + } + + /** + * CameraOptions + */ + export interface CameraOptions { + /** Map center */ + center?: mapboxgl.LngLat | number[]; + /** Map zoom level */ + zoom?: number; + /** Map rotation bearing in degrees counter-clockwise from north */ + bearing?: number; + /** Map angle in degrees at which the camera is looking at the ground */ + pitch?: number; + /** If zooming, the zoom center (defaults to map center) */ + around?: mapboxgl.LngLat | number[]; + } + + /** + * FlyToOptions + */ + export interface FlyToOptions extends AnimationOptions, CameraOptions { + curve?: number; + minZoom?: number; + speed?: number; + screenSpeed?: number; + easing?: Function; + } + + /** + * MapEvent + */ + export interface MapEvent { + webglcontextlost?: {originalEvent: WebGLContextEvent}; + webglcontextrestored?: {originalEvent: WebGLContextEvent}; + render?: void; + contextmenu?: {data: mapboxgl.MapMouseEvent}; + dblclick?: {data: mapboxgl.MapMouseEvent}; + click?: {data: mapboxgl.MapMouseEvent}; + touchcancel?: {data: mapboxgl.MapTouchEvent}; + touchmove?: {data: mapboxgl.MapTouchEvent}; + touchend?: {data: mapboxgl.MapTouchEvent}; + touchstart?: {data: mapboxgl.MapTouchEvent}; + mousemove?: {data: mapboxgl.MapMouseEvent}; + mouseup?: {data: mapboxgl.MapMouseEvent}; + mousedown?: {data: mapboxgl.MapMouseEvent}; + moveend?: {data: mapboxgl.MapMouseEvent | mapboxgl.MapTouchEvent}; + move?: {data: mapboxgl.MapMouseEvent | mapboxgl.MapTouchEvent}; + movestart?: {data: mapboxgl.MapMouseEvent | mapboxgl.MapTouchEvent}; + mouseout?:{data: mapboxgl.MapMouseEvent}; + load?: void; + zoomend?: {data: mapboxgl.MapMouseEvent | mapboxgl.MapTouchEvent}; + zoom?: {data: mapboxgl.MapMouseEvent | mapboxgl.MapTouchEvent}; + zoomstart?: {data: mapboxgl.MapMouseEvent | mapboxgl.MapTouchEvent}; + boxzoomcancel?: {data: mapboxgl.MapBoxZoomEvent}; + boxzoomstart?: {data: mapboxgl.MapBoxZoomEvent}; + boxzoomend?: {data: mapboxgl.MapBoxZoomEvent}; + rotate?: {data: mapboxgl.MapMouseEvent | mapboxgl.MapTouchEvent}; + rotatestart?: {data: mapboxgl.MapMouseEvent | mapboxgl.MapTouchEvent}; + rotateend?: {data: mapboxgl.MapMouseEvent | mapboxgl.MapTouchEvent}; + drag?: {data: mapboxgl.MapMouseEvent | mapboxgl.MapTouchEvent}; + dragend?: {data: mapboxgl.MapMouseEvent | mapboxgl.MapTouchEvent}; + pitch?: {data: mapboxgl.EventData}; + } + + export interface Layer { + id: string; + type?: "fill" | "line" | "symbol" | "circle" | "raster" | "background" | string; //TODO: Ideally we wouldn't accept string here, just these specific strings + + metadata?: any; + ref?: string; + + source?: string; + + "source-layer"?: string; + + minzoom?: number; + maxzoom?: number; + + interactive?: boolean; + + filter?: any[]; + layout?: BackgroundLayout | FillLayout | LineLayout | SymbolLayout | RasterLayout | CircleLayout; + paint?: BackgroundPaint | FillPaint | LinePaint | SymbolPaint | RasterPaint | CirclePaint; + } + + export interface StyleFunction { + stops: any[][]; + property?: string; + base?: number; + type?: "continuous" | "interval" | "categorical"; + } + + export interface BackgroundLayout { + visibility?: "visible" | "none"; + } + export interface BackgroundPaint { + "background-color"?: string; + "background-pattern"?: string; + "background-opacity"?: number; + } + + export interface FillLayout { + visibility?: "visible" | "none"; + } + export interface FillPaint { + "fill-antialias"?: boolean; + "fill-opacity"?: number | StyleFunction; + "fill-color"?: string | StyleFunction; + "fill-outline-color": string | StyleFunction; + "fill-translate"?: number[]; + "fill-translate-anchor"?: "map" | "viewport"; + "fill-pattern"?: "string"; + } + + export interface LineLayout { + visibility?: "visible" | "none"; + + "line-cap"?: "butt" | "round" | "square"; + "line-join"?: "bevel" | "round" | "miter"; + "line-miter-limit"?: number; + "line-round-limit"?: number; + } + export interface LinePaint { + "line-opacity"?: number; + "line-color"?: string| StyleFunction; + "line-translate"?: number[]; + "line-translate-anchor"?: "map" | "viewport"; + "line-width"?: number; + "line-gap-width"?: number; + "line-offset"?: number; + "line-blur"?: number; + "line-dasharray"?: number[]; + "line-dasharray-transition"?: Transition; + "line-pattern"?: string; + } + + export interface SymbolLayout { + visibility?: "visible" | "none"; + + "symbol-placement"?: "point" | "line"; + "symbol-spacing"?: number; + "symbol-avoid-edges"?: boolean; + "icon-allow-overlap"?: boolean; + "icon-ignore-placement"?: boolean; + "icon-optional"?: boolean; + "icon-rotation-alignment"?: "map" | "viewport" | "auto"; + "icon-size"?: number; + "icon-text-fit"?: "none" | "both" | "width" | "height"; + "icon-text-fit-padding"?: number[]; + "icon-image"?: string; + "icon-rotate"?: number | StyleFunction; + "icon-padding"?: number; + "icon-keep-upright"?: boolean; + "icon-offset"?: number[]; + "text-pitch-alignment"?: "map" | "viewport" | "auto"; + "text-rotation-alignment"?: "map" | "viewport" | "auto"; + "text-field"?: string; + "text-font"?: string | string[]; + "text-size"?: number; + "text-max-width"?: number; + "text-line-height"?: number; + "text-letter-spacing"?: number; + "text-justify"?: "left" | "center" | "right"; + "text-anchor"?: "center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right"; + "text-max-angle"?: number; + "text-rotate"?: number; + "text-padding"?: number; + "text-keep-upright"?: boolean; + "text-transform"?: "none" | "uppercase" | "lowercase"; + "text-offset"?: number[]; + "text-allow-overlap"?: boolean; + "text-ignore-placement"?: boolean; + "text-optional"?: boolean; + + } + export interface SymbolPaint { + "icon-opacity"?: number; + "icon-color"?: string; + "icon-halo-color"?: string; + "icon-halo-width"?: number; + "icon-halo-blur"?: number; + "icon-translate"?: number[]; + "icon-translate-anchor"?: "map" | "viewport"; + "text-opacity"?: number; + "text-color"?: "string"; + "text-halo-color"?: "string"; + "text-halo-width"?: number; + "text-halo-blur"?: number; + "text-translate"?: number[]; + "text-translate-anchor"?: "map" | "viewport"; + } + + export interface RasterLayout { + visibility?: "visible" | "none"; + } + + export interface RasterPaint { + "raster-opacity"?: number; + "raster-hue-rotate"?: number; + "raster-brightness-min"?: number; + "raster-brightness-max"?: number; + "raster-saturation"?: number; + "raster-contrast"?: number; + "raster-fade-duration"?: number; + } + + export interface CircleLayout { + visibility?: "visible" | "none"; + } + + export interface CirclePaint { + "circle-radius"?: number | StyleFunction; + "circle-radius-transition"?: Transition; + "circle-color"?: number | StyleFunction; + "circle-blur"?: number | StyleFunction; + "circle-opacity"?: number | StyleFunction; + "circle-translate"?: number[]; + "circle-translate-anchor"?: "map" | "viewport"; + "circle-pitch-scale"?: "map" | "viewport"; + } +} + +declare module 'mapbox-gl' { + export = mapboxgl; +} diff --git a/mapbox-gl/mapbox-gl.d.ts b/mapbox-gl/mapbox-gl.d.ts index 2ee8d30949..ddb6344cbd 100644 --- a/mapbox-gl/mapbox-gl.d.ts +++ b/mapbox-gl/mapbox-gl.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Mapbox GL JS v0.24.0 +// Type definitions for Mapbox GL JS v0.26.0 // Project: https://github.com/mapbox/mapbox-gl-js // Definitions by: Dominik Bruderer // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -343,28 +343,28 @@ declare namespace mapboxgl { /** * Navigation */ - export class Navigation extends Control { + export class NavigationControl extends Control { constructor(options?: mapboxgl.ControlOptions); } /** * Geolocate */ - export class Geolocate extends Control { + export class GeolocateControl extends Control { constructor(options?: mapboxgl.ControlOptions); } /** * Attribution */ - export class Attribution extends Control { + export class AttributionControl extends Control { constructor(options?: mapboxgl.ControlOptions); } /** * Scale */ - export class Scale extends Control { + export class ScaleControl extends Control { constructor(options?: {position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left', maxWidth?: number, unit?: string}) } @@ -697,6 +697,11 @@ declare namespace mapboxgl { boxZoomBounds: LngLatBounds; } + export class MapDataEvent { + type: string; + dataType: "source" | "style" | "tile"; + } + /** * AnimationOptions */ @@ -741,8 +746,12 @@ declare namespace mapboxgl { * MapEvent */ export interface MapEvent { + resize?: void; webglcontextlost?: {originalEvent: WebGLContextEvent}; webglcontextrestored?: {originalEvent: WebGLContextEvent}; + remove?: void; + dataloading?: {data: mapboxgl.MapDataEvent}; + data?: {data: mapboxgl.MapDataEvent}; render?: void; contextmenu?: {data: mapboxgl.MapMouseEvent}; dblclick?: {data: mapboxgl.MapMouseEvent}; @@ -798,7 +807,8 @@ declare namespace mapboxgl { stops: any[][]; property?: string; base?: number; - type?: "continuous" | "interval" | "categorical"; + type?: "identity" | "exponential" | "interval" | "categorical"; + "colorSpace"?: "rgb" | "lab" | "interval"; } export interface BackgroundLayout { @@ -821,6 +831,8 @@ declare namespace mapboxgl { "fill-translate"?: number[]; "fill-translate-anchor"?: "map" | "viewport"; "fill-pattern"?: "string"; + "fill-extrude-height"?: number; + "fill-extrude-base"?: number; } export interface LineLayout { From 8557bb8cbeabf189d982fa04b9ee719e49d99c13 Mon Sep 17 00:00:00 2001 From: Dave Alden Date: Tue, 25 Oct 2016 14:14:33 +0100 Subject: [PATCH 039/111] Add definitions and tests for cordova.plugins.diagnostic (#12139) --- .../cordova.plugins.diagnostic-tests.ts | 510 +++++++++++++ .../cordova.plugins.diagnostic.d.ts | 693 ++++++++++++++++++ 2 files changed, 1203 insertions(+) create mode 100644 cordova.plugins.diagnostic/cordova.plugins.diagnostic-tests.ts create mode 100644 cordova.plugins.diagnostic/cordova.plugins.diagnostic.d.ts diff --git a/cordova.plugins.diagnostic/cordova.plugins.diagnostic-tests.ts b/cordova.plugins.diagnostic/cordova.plugins.diagnostic-tests.ts new file mode 100644 index 0000000000..e95c973171 --- /dev/null +++ b/cordova.plugins.diagnostic/cordova.plugins.diagnostic-tests.ts @@ -0,0 +1,510 @@ +/// +/// + + +cordova.plugins.diagnostic.isLocationAvailable(function(available){ + console.log("Location is " + (available ? "available" : "not available")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.isWifiAvailable(function(available){ + console.log("WiFi is " + (available ? "available" : "not available")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.isCameraAvailable(function(available){ + console.log("Camera is " + (available ? "available" : "not available")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.isBluetoothAvailable(function(available){ + console.log("Bluetooth is " + (available ? "available" : "not available")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.switchToLocationSettings(); +cordova.plugins.diagnostic.switchToMobileDataSettings(); +cordova.plugins.diagnostic.switchToBluetoothSettings(); +cordova.plugins.diagnostic.switchToWifiSettings(); + +cordova.plugins.diagnostic.isWifiEnabled(function(enabled){ + console.log("WiFi is " + (enabled ? "enabled" : "disabled")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.setWifiState(function(){ + console.log("Wifi was enabled"); + }, function(error){ + console.error("The following error occurred: "+error); + }, true +); + +cordova.plugins.diagnostic.setBluetoothState(function(){ + console.log("Bluetooth was enabled"); + }, function(error){ + console.error("The following error occurred: "+error); + }, true +); + +cordova.plugins.diagnostic.isLocationEnabled(function(enabled){ + console.log("Location setting is " + (enabled ? "enabled" : "disabled")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.isLocationAuthorized(function(enabled){ + console.log("Location authorization is " + (enabled ? "enabled" : "disabled")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.getLocationAuthorizationStatus(function(status){ + switch(status){ + case cordova.plugins.diagnostic.permissionStatus.NOT_REQUESTED: + console.log("Permission not requested"); + break; + case cordova.plugins.diagnostic.permissionStatus.DENIED: + console.log("Permission denied"); + break; + case cordova.plugins.diagnostic.permissionStatus.GRANTED: + console.log("Permission granted always"); + break; + case cordova.plugins.diagnostic.permissionStatus.GRANTED_WHEN_IN_USE: + console.log("Permission granted only when in use"); + break; + } +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.requestLocationAuthorization(function(status){ + switch(status){ + case cordova.plugins.diagnostic.permissionStatus.NOT_REQUESTED: + console.log("Permission not requested"); + break; + case cordova.plugins.diagnostic.permissionStatus.DENIED: + console.log("Permission denied"); + break; + case cordova.plugins.diagnostic.permissionStatus.GRANTED: + console.log("Permission granted always"); + break; + case cordova.plugins.diagnostic.permissionStatus.GRANTED_WHEN_IN_USE: + console.log("Permission granted only when in use"); + break; + } +}, function(error){ + console.error(error); +}, cordova.plugins.diagnostic.locationAuthorizationMode.ALWAYS); + +cordova.plugins.diagnostic.isCameraPresent(function(present){ + console.log("Camera is " + (present ? "present" : "absent")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.isCameraAuthorized(function(authorized){ + console.log("App is " + (authorized ? "authorized" : "denied") + " access to the camera"); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.getCameraAuthorizationStatus(function(status){ + if(status === cordova.plugins.diagnostic.permissionStatus.GRANTED){ + console.log("Camera use is authorized"); + } +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.requestCameraAuthorization(function(status){ + console.log("Authorization request for camera use was " + (status == cordova.plugins.diagnostic.permissionStatus.GRANTED ? "granted" : "denied")); +}, function(error){ + console.error(error); +}); + +cordova.plugins.diagnostic.isMicrophoneAuthorized(function(authorized){ + console.log("App is " + (authorized ? "authorized" : "denied") + " access to the microphone"); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.getMicrophoneAuthorizationStatus(function(status){ + if(status === cordova.plugins.diagnostic.permissionStatus.GRANTED){ + console.log("Microphone use is authorized"); + } +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.requestMicrophoneAuthorization(function(status){ + if(status === cordova.plugins.diagnostic.permissionStatus.GRANTED){ + console.log("Microphone use is authorized"); + } +}, function(error){ + console.error(error); +}); + +cordova.plugins.diagnostic.isContactsAuthorized(function(authorized){ + console.log("App is " + (authorized ? "authorized" : "denied") + " access to contacts"); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.getContactsAuthorizationStatus(function(status){ + if(status === cordova.plugins.diagnostic.permissionStatus.GRANTED){ + console.log("Contacts use is authorized"); + } +}, function(error){ + console.error(error); +}); + +cordova.plugins.diagnostic.requestContactsAuthorization(function(status){ + if(status === cordova.plugins.diagnostic.permissionStatus.GRANTED){ + console.log("Contacts use is authorized"); + } +}, function(error){ + console.error(error); +}); + +cordova.plugins.diagnostic.isCalendarAuthorized(function(authorized){ + console.log("App is " + (authorized ? "authorized" : "denied") + " access to calendar"); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.getCalendarAuthorizationStatus(function(status){ + if(status === cordova.plugins.diagnostic.permissionStatus.GRANTED){ + console.log("Calendar use is authorized"); + } +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.requestCalendarAuthorization(function(status){ + if(status === cordova.plugins.diagnostic.permissionStatus.GRANTED){ + console.log("Calendar use is authorized"); + } +}, function(error){ + console.error(error); +}); + +cordova.plugins.diagnostic.switchToSettings(function(){ + console.log("Successfully switched to Settings app"); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.getBluetoothState(function(state){ + if(state === cordova.plugins.diagnostic.bluetoothState.POWERED_ON){ + console.log("Bluetooth is able to connect"); + } +}, function(error){ + console.error(error); +}); + +cordova.plugins.diagnostic.registerBluetoothStateChangeHandler(function(state){ + if(state === cordova.plugins.diagnostic.bluetoothState.POWERED_ON){ + console.log("Bluetooth is able to connect"); + } +}); + +cordova.plugins.diagnostic.registerLocationStateChangeHandler(function(state){ + if((device.platform === "Android" && state !== cordova.plugins.diagnostic.locationMode.LOCATION_OFF) + || (device.platform === "iOS") && ( state === cordova.plugins.diagnostic.permissionStatus.GRANTED + || state === cordova.plugins.diagnostic.permissionStatus.GRANTED_WHEN_IN_USE + )){ + console.log("Location is available"); + } +}); + +cordova.plugins.diagnostic.getLocationMode(function(locationMode){ + switch(locationMode){ + case cordova.plugins.diagnostic.locationMode.HIGH_ACCURACY: + console.log("High accuracy"); + break; + case cordova.plugins.diagnostic.locationMode.BATTERY_SAVING: + console.log("Battery saving"); + break; + case cordova.plugins.diagnostic.locationMode.DEVICE_ONLY: + console.log("Device only"); + break; + case cordova.plugins.diagnostic.locationMode.LOCATION_OFF: + console.log("Location off"); + break; + } +},function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.isGpsLocationAvailable(function(available){ + console.log("GPS location is " + (available ? "available" : "not available")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.isGpsLocationEnabled(function(enabled){ + console.log("GPS location is " + (enabled ? "enabled" : "disabled")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.isNetworkLocationAvailable(function(available){ + console.log("Network location is " + (available ? "available" : "not available")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.isNetworkLocationEnabled(function(enabled){ + console.log("Network location is " + (enabled ? "enabled" : "disabled")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.getLocationMode(function(locationMode){ + switch(locationMode){ + case cordova.plugins.diagnostic.locationMode.HIGH_ACCURACY: + console.log("High accuracy"); + break; + case cordova.plugins.diagnostic.locationMode.BATTERY_SAVING: + console.log("Battery saving"); + break; + case cordova.plugins.diagnostic.locationMode.DEVICE_ONLY: + console.log("Device only"); + break; + case cordova.plugins.diagnostic.locationMode.LOCATION_OFF: + console.log("Location off"); + break; + } +},function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.getPermissionAuthorizationStatus(function(status){ + switch(status){ + case cordova.plugins.diagnostic.permissionStatus.GRANTED: + console.log("Permission granted to use the camera"); + break; + case cordova.plugins.diagnostic.permissionStatus.NOT_REQUESTED: + console.log("Permission to use the camera has not been requested yet"); + break; + case cordova.plugins.diagnostic.permissionStatus.DENIED: + console.log("Permission denied to use the camera - ask again?"); + break; + case cordova.plugins.diagnostic.permissionStatus.DENIED_ALWAYS: + console.log("Permission permanently denied to use the camera - guess we won't be using it then!"); + break; + } +}, function(error){ + console.error("The following error occurred: "+error); +}, cordova.plugins.diagnostic.permission.CAMERA); + +cordova.plugins.diagnostic.getPermissionsAuthorizationStatus(function(statuses){ + for (var permission in statuses){ + switch(statuses[permission]){ + case cordova.plugins.diagnostic.permissionStatus.GRANTED: + console.log("Permission granted to use "+permission); + break; + case cordova.plugins.diagnostic.permissionStatus.NOT_REQUESTED: + console.log("Permission to use "+permission+" has not been requested yet"); + break; + case cordova.plugins.diagnostic.permissionStatus.DENIED: + console.log("Permission denied to use "+permission+" - ask again?"); + break; + case cordova.plugins.diagnostic.permissionStatus.DENIED_ALWAYS: + console.log("Permission permanently denied to use "+permission+" - guess we won't be using it then!"); + break; + } + } +}, function(error){ + console.error("The following error occurred: "+error); +},[ + cordova.plugins.diagnostic.permission.ACCESS_FINE_LOCATION, + cordova.plugins.diagnostic.permission.ACCESS_COARSE_LOCATION +]); + +cordova.plugins.diagnostic.requestRuntimePermission(function(status){ + switch(status){ + case cordova.plugins.diagnostic.permissionStatus.GRANTED: + console.log("Permission granted to use the camera"); + break; + case cordova.plugins.diagnostic.permissionStatus.NOT_REQUESTED: + console.log("Permission to use the camera has not been requested yet"); + break; + case cordova.plugins.diagnostic.permissionStatus.DENIED: + console.log("Permission denied to use the camera - ask again?"); + break; + case cordova.plugins.diagnostic.permissionStatus.DENIED_ALWAYS: + console.log("Permission permanently denied to use the camera - guess we won't be using it then!"); + break; + } +}, function(error){ + console.error("The following error occurred: "+error); +}, cordova.plugins.diagnostic.permission.CAMERA); + +cordova.plugins.diagnostic.requestRuntimePermissions(function(statuses){ + for (var permission in statuses){ + switch(statuses[permission]){ + case cordova.plugins.diagnostic.permissionStatus.GRANTED: + console.log("Permission granted to use "+permission); + break; + case cordova.plugins.diagnostic.permissionStatus.NOT_REQUESTED: + console.log("Permission to use "+permission+" has not been requested yet"); + break; + case cordova.plugins.diagnostic.permissionStatus.DENIED: + console.log("Permission denied to use "+permission+" - ask again?"); + break; + case cordova.plugins.diagnostic.permissionStatus.DENIED_ALWAYS: + console.log("Permission permanently denied to use "+permission+" - guess we won't be using it then!"); + break; + } + } +}, function(error){ + console.error("The following error occurred: "+error); +},[ + cordova.plugins.diagnostic.permission.ACCESS_FINE_LOCATION, + cordova.plugins.diagnostic.permission.ACCESS_COARSE_LOCATION +]); + +if(!cordova.plugins.diagnostic.isRequestingPermission()){ + console.log("Request some permissions"); +}else{ + cordova.plugins.diagnostic.registerPermissionRequestCompleteHandler(function(statuses){ + cordova.plugins.diagnostic.registerPermissionRequestCompleteHandler(null); // de-register handler after single call + console.log("Request some permissions"); + }); +} + +function onPermissionRequestComplete(statuses:any){ + console.info("Permission request complete"); + for (var permission in statuses){ + switch(statuses[permission]){ + case cordova.plugins.diagnostic.permissionStatus.GRANTED: + console.log("Permission granted to use "+permission); + break; + case cordova.plugins.diagnostic.permissionStatus.NOT_REQUESTED: + console.log("Permission to use "+permission+" has not been requested yet"); + break; + case cordova.plugins.diagnostic.permissionStatus.DENIED: + console.log("Permission denied to use "+permission); + break; + case cordova.plugins.diagnostic.permissionStatus.DENIED_ALWAYS: + console.log("Permission permanently denied to use "+permission); + break; + } + } + cordova.plugins.diagnostic.registerPermissionRequestCompleteHandler(null); // de-register handler +} +cordova.plugins.diagnostic.registerPermissionRequestCompleteHandler(onPermissionRequestComplete) + +cordova.plugins.diagnostic.isBluetoothEnabled(function(enabled){ + console.log("Bluetooth is " + (enabled ? "enabled" : "disabled")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.hasBluetoothSupport(function(supported){ + console.log("Bluetooth is " + (supported ? "supported" : "unsupported")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.hasBluetoothLESupport(function(supported){ + console.log("Bluetooth LE is " + (supported ? "supported" : "unsupported")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.hasBluetoothLEPeripheralSupport(function(supported){ + console.log("Bluetooth LE Peripheral Mode is " + (supported ? "supported" : "unsupported")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.isCameraRollAuthorized(function(authorized){ + console.log("App is " + (authorized ? "authorized" : "denied") + " access to the camera roll"); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.getCameraRollAuthorizationStatus(function(status){ + switch(status){ + case cordova.plugins.diagnostic.permissionStatus.NOT_REQUESTED: + console.log("Permission not requested"); + break; + case cordova.plugins.diagnostic.permissionStatus.DENIED: + console.log("Permission denied"); + break; + case cordova.plugins.diagnostic.permissionStatus.GRANTED: + console.log("Permission granted"); + break; + } +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.requestCameraRollAuthorization(function(status){ + console.log("Authorization request for camera roll was " + (status == cordova.plugins.diagnostic.permissionStatus.GRANTED ? "granted" : "denied")); +}, function(error){ + console.error(error); +}); + +cordova.plugins.diagnostic.isRemoteNotificationsEnabled(function(enabled){ + console.log("Remote notifications are " + (enabled ? "enabled" : "disabled")); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.isRegisteredForRemoteNotifications(function(registered){ + console.log("Device " + (registered ? "is" : "isn't") + " registered for remote notifications"); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.getRemoteNotificationTypes(function(types){ + for(var type in types){ + console.log(type + " is " + (types[type] ? "enabled" : "disabled")); + } +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.isRemindersAuthorized(function(authorized){ + console.log("App is " + (authorized ? "authorized" : "denied") + " access to reminders"); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.getRemindersAuthorizationStatus(function(status){ + if(status === cordova.plugins.diagnostic.permissionStatus.GRANTED){ + console.log("Reminders authorization allowed"); + } +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.requestRemindersAuthorization(function(status){ + if(status === cordova.plugins.diagnostic.permissionStatus.GRANTED){ + console.log("Reminders authorization allowed"); + } +}, function(error){ + console.error(error); +}); + +cordova.plugins.diagnostic.isBackgroundRefreshAuthorized(function(authorized){ + console.log("App is " + (authorized ? "authorized" : "not authorized") + " to perform background refresh"); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.getBackgroundRefreshStatus(function(status){ + if(status === cordova.plugins.diagnostic.permissionStatus.GRANTED){ + console.log("Background refresh is allowed"); + } +}, function(error){ + console.error("The following error occurred: "+error); +}); \ No newline at end of file diff --git a/cordova.plugins.diagnostic/cordova.plugins.diagnostic.d.ts b/cordova.plugins.diagnostic/cordova.plugins.diagnostic.d.ts new file mode 100644 index 0000000000..0fcca3b1ca --- /dev/null +++ b/cordova.plugins.diagnostic/cordova.plugins.diagnostic.d.ts @@ -0,0 +1,693 @@ +// Type definitions for cordova.plugins.diagnostic v3.2.2 +// Project: https://github.com/dpa99c/cordova-diagnostic-plugin +// Definitions by: Dave Alden +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + + +/** + * Checks whether device hardware features are enabled or available to the app, e.g. camera, GPS, wifi + */ +interface Diagnostic { + + /** + * ANDROID ONLY + * "Dangerous" permissions that need to be requested at run-time (Android 6.0/API 23 and above) + * See http://developer.android.com/guide/topics/security/permissions.html#perm-groups + * @type {Object} + */ + permission?: any; + + /** + * ANDROID ONLY + * Permission groups indicate which associated permissions will also be requested if a given permission is requested. + * See http://developer.android.com/guide/topics/security/permissions.html#perm-groups + * @type {Object} + */ + permissionGroups?: any; + + /** + * ANDROID and iOS ONLY + * Constants for requesting and reporting the various permission states. + * @type {Object} + */ + permissionStatus?: any; + + /** + * iOS ONLY + * Location authorization mode + * @type {Object} + */ + locationAuthorizationMode?: any; + + + /** + * ANDROID ONLY + * Constants for the various location modes on Android. + * @type {Object} + */ + locationMode?: any; + + /** + * ANDROID and iOS ONLY + * Constants for the various Bluetooth hardware states. + * @type {Object} + */ + bluetoothState?: any; + + + /** + * Checks if app is able to access device location. + * @param successCallback + * @param errorCallback + */ + isLocationAvailable: ( + successCallback: (available: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * Checks if Wifi is available. + * On iOS this returns true if the device is connected to a network by WiFi. + * On Android and Windows 10 Mobile this returns true if the WiFi setting is set to enabled, and is the same as isWifiEnabled() + * @param successCallback + * @param errorCallback + */ + isWifiAvailable: ( + successCallback: (available: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * Checks if camera is available. + * On Android & iOS this returns true if the device has a camera AND the application is authorized to use it. + * On Windows 10 Mobile this returns true if the device has a rear-facing camera. + * @param successCallback + * @param errorCallback + */ + isCameraAvailable: ( + successCallback: (available: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * Checks if Bluetooth is available to the app. + * Returns true if the device has Bluetooth capabilities AND if Bluetooth setting is switched on (same on Android, iOS and Windows 10 Mobile) + * @param successCallback + * @param errorCallback + */ + isBluetoothAvailable: ( + successCallback: (available: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and WINDOWS ONLY + * Displays the device location settings to allow user to enable location services/change location mode. + */ + switchToLocationSettings?: () => void; + + /** + * ANDROID and WINDOWS ONLY + * Displays mobile settings to allow user to enable mobile data. + */ + switchToMobileDataSettings?: () => void; + + /** + * ANDROID and WINDOWS ONLY + * Displays Bluetooth settings to allow user to enable Bluetooth. + */ + switchToBluetoothSettings?: () => void; + + /** + * ANDROID and WINDOWS ONLY + * Displays WiFi settings to allow user to enable WiFi. + */ + switchToWifiSettings?: () => void; + + /** + * ANDROID and WINDOWS ONLY + * Returns true if the WiFi setting is set to enabled, and is the same as isWifiAvailable() + * @param successCallback + * @param errorCallback + */ + isWifiEnabled?: ( + successCallback: (enabled: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and WINDOWS ONLY + * Enables/disables WiFi on the device. + * @param successCallback + * @param errorCallback + * @param state + */ + setWifiState?: ( + successCallback: (enabled: boolean) => void, + errorCallback: (error: string) => void, + state: boolean + ) => void; + + /** + * ANDROID and WINDOWS ONLY + * Enables/disables Bluetooth on the device. + * @param successCallback + * @param errorCallback + * @param state + */ + setBluetoothState?: ( + successCallback: (enabled: boolean) => void, + errorCallback: (error: string) => void, + state: boolean + ) => void; + + /** + * ANDROID and iOS ONLY + * Returns true if the device setting for location is on. + * On Android this returns true if Location Mode is switched on. + * On iOS this returns true if Location Services is switched on. + * @param successCallback + * @param errorCallback + */ + isLocationEnabled?: ( + successCallback: (enabled: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Checks if the application is authorized to use location. + * @param successCallback + * @param errorCallback + */ + isLocationAuthorized?: ( + successCallback: (authorized: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Returns the location authorization status for the application. + * @param successCallback + * @param errorCallback + */ + getLocationAuthorizationStatus?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Requests location authorization for the application. + * @param successCallback + * @param errorCallback + * @param mode - (iOS-only / optional) location authorization mode specified as a locationAuthorizationMode constant. If not specified, defaults to WHEN_IN_USE. + */ + requestLocationAuthorization?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void, + mode?: string + ) => void; + + + /** + * ANDROID and iOS ONLY + * Checks if camera hardware is present on device. + * @param successCallback + * @param errorCallback + */ + isCameraPresent?: ( + successCallback: (present: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Checks if the application is authorized to use the camera. + * @param successCallback + * @param errorCallback + */ + isCameraAuthorized?: ( + successCallback: (authorized: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Returns the camera authorization status for the application. + * @param successCallback + * @param errorCallback + */ + getCameraAuthorizationStatus?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Requests camera authorization for the application. + * @param successCallback + * @param errorCallback + */ + requestCameraAuthorization?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Checks if the application is authorized to use the microphone. + * @param successCallback + * @param errorCallback + */ + isMicrophoneAuthorized?: ( + successCallback: (authorized: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Returns the microphone authorization status for the application. + * @param successCallback + * @param errorCallback + */ + getMicrophoneAuthorizationStatus?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Requests microphone authorization for the application. + * @param successCallback + * @param errorCallback + */ + requestMicrophoneAuthorization?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Checks if the application is authorized to use contacts (address book). + * @param successCallback + * @param errorCallback + */ + isContactsAuthorized?: ( + successCallback: (authorized: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Returns the contacts authorization status for the application. + * @param successCallback + * @param errorCallback + */ + getContactsAuthorizationStatus?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Requests contacts authorization for the application. + * @param successCallback + * @param errorCallback + */ + requestContactsAuthorization?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Checks if the application is authorized to use the calendar. + * @param successCallback + * @param errorCallback + */ + isCalendarAuthorized?: ( + successCallback: (authorized: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Returns the calendar authorization status for the application. + * @param successCallback + * @param errorCallback + */ + getCalendarAuthorizationStatus?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Requests calendar authorization for the application. + * @param successCallback + * @param errorCallback + */ + requestCalendarAuthorization?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Opens settings page for this app. + * On Android, this opens the "App Info" page in the Settings app. + * On iOS, this opens the app settings page in the Settings app. This works only on iOS 8+ - iOS 7 and below will invoke the errorCallback. + */ + switchToSettings?: ( + successCallback: () => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Returns the state of Bluetooth on the device. + * @param successCallback + * @param errorCallback + */ + getBluetoothState?: ( + successCallback: (state: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Registers a function to be called when a change in Bluetooth state occurs. Pass in a falsey value to de-register the currently registered function. + * @param successCallback + */ + registerBluetoothStateChangeHandler?: ( + successCallback: (state: string) => void + ) => void; + + /** + * ANDROID and iOS ONLY + * Registers a function to be called when a change in Location state occurs. Pass in a falsey value to de-register the currently registered function. + * On Android, this occurs when the Location Mode is changed. + * On iOS, this occurs when location authorization status is changed. This can be triggered either by the user's response to a location permission authorization dialog, by the user turning on/off Location Services, or by the user changing the Location authorization state specifically for your app. + * @param successCallback + */ + registerLocationStateChangeHandler?: ( + successCallback: (state: string) => void + ) => void; + + + /** + * ANDROID ONLY + * Checks if high-accuracy locations are available to the app from GPS hardware. + * Returns true if Location mode is enabled and is set to "Device only" or "High accuracy" AND if the app is authorised to use location. + * @param successCallback + * @param errorCallback + */ + isGpsLocationAvailable?: ( + successCallback: (available: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID ONLY + * Checks if the device location setting is set to return high-accuracy locations from GPS hardware. + * Returns true if Location mode is enabled and is set to either Device only or High accuracy + * @param successCallback + * @param errorCallback + */ + isGpsLocationEnabled?: ( + successCallback: (enabled: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID ONLY + * Checks if low-accuracy locations are available to the app from network triangulation/WiFi access points. + * Returns true if Location mode is enabled and is set to "Battery saving" or "High accuracy" AND if the app is authorised to use location. + * @param successCallback + * @param errorCallback + */ + isNetworkLocationAvailable?: ( + successCallback: (available: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID ONLY + * Checks if the device location setting is set to return high-accuracy locations from GPS hardware. + * Returns true if Location mode is enabled and is set to either Battery saving or High accuracy + * @param successCallback + * @param errorCallback + */ + isNetworkLocationEnabled?: ( + successCallback: (enabled: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID ONLY + * Returns the current location mode setting for the device. + * @param successCallback + * @param errorCallback + */ + getLocationMode?: ( + successCallback: (mode: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID ONLY + * Returns the current authorisation status for a given permission. + * @param successCallback + * @param errorCallback + * @param permission + */ + getPermissionAuthorizationStatus?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void, + permission: string + ) => void; + + /** + * ANDROID ONLY + * Returns the current authorisation status for multiple permissions. + * @param successCallback + * @param errorCallback + * @param permissions + */ + getPermissionsAuthorizationStatus?: ( + successCallback: (status: string[]) => void, + errorCallback: (error: string) => void, + permissions: string[] + ) => void; + + /** + * ANDROID ONLY + * Requests app to be granted authorisation for a runtime permission. + * @param successCallback + * @param errorCallback + * @param permission + */ + requestRuntimePermission?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void, + permission: string + ) => void; + + /** + * ANDROID ONLY + * Requests app to be granted authorisation for multiple runtime permissions. + * @param successCallback + * @param errorCallback + * @param permissions + */ + requestRuntimePermissions?: ( + successCallback: (status: string[]) => void, + errorCallback: (error: string) => void, + permissions: string[] + ) => void; + + /** + * ANDROID ONLY + * Indicates if the plugin is currently requesting a runtime permission via the native API. + */ + isRequestingPermission?: () => boolean; + + /** + * ANDROID ONLY + * Registers a function to be called when a runtime permission request has completed. Pass in a falsey value to de-register the currently registered function. + * @param successCallback + */ + registerPermissionRequestCompleteHandler?: ( + successCallback: (statuses: any) => void + ) => void; + + /** + * ANDROID ONLY + * Checks if the device setting for Bluetooth is switched on. + * @param successCallback + * @param errorCallback + */ + isBluetoothEnabled?: ( + successCallback: (enabled: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID ONLY + * Checks if the device has Bluetooth capabilities. + * @param successCallback + * @param errorCallback + */ + hasBluetoothSupport?: ( + successCallback: (supported: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID ONLY + * Checks if the device has Bluetooth Low Energy (LE) capabilities. + * @param successCallback + * @param errorCallback + */ + hasBluetoothLESupport?: ( + successCallback: (supported: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * ANDROID ONLY + * Checks if the device supports Bluetooth Low Energy (LE) Peripheral mode. + * @param successCallback + * @param errorCallback + */ + hasBluetoothLEPeripheralSupport?: ( + successCallback: (supported: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Checks if the application is authorized to use the Camera Roll in Photos app. + * @param successCallback + * @param errorCallback + */ + isCameraRollAuthorized?: ( + successCallback: (authorized: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Returns the authorization status for the application to use the Camera Roll in Photos app. + * @param successCallback + * @param errorCallback + */ + getCameraRollAuthorizationStatus?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Requests camera roll authorization for the application. + * @param successCallback + * @param errorCallback + */ + requestCameraRollAuthorization?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Checks if remote (push) notifications are enabled. + * @param successCallback + * @param errorCallback + */ + isRemoteNotificationsEnabled?: ( + successCallback: (enabled: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Indicates if the app is registered for remote (push) notifications on the device. + * @param successCallback + * @param errorCallback + */ + isRegisteredForRemoteNotifications?: ( + successCallback: (registered: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Indicates the current setting of notification types for the app in the Settings app. + * @param successCallback + * @param errorCallback + */ + getRemoteNotificationTypes?: ( + successCallback: (types: any) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Checks if the application is authorized to use reminders. + * @param successCallback + * @param errorCallback + */ + isRemindersAuthorized?: ( + successCallback: (authorized: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Returns the reminders authorization status for the application. + * @param successCallback + * @param errorCallback + */ + getRemindersAuthorizationStatus?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Requests reminders authorization for the application. + * @param successCallback + * @param errorCallback + */ + requestRemindersAuthorization?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Checks if the application is authorized for background refresh. + * @param successCallback + * @param errorCallback + */ + isBackgroundRefreshAuthorized?: ( + successCallback: (authorized: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Returns the background refresh authorization status for the application. + * @param successCallback + * @param errorCallback + */ + getBackgroundRefreshStatus?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; +} + +interface CordovaPlugins { + diagnostic: Diagnostic +} \ No newline at end of file From 68f63a6482c1bbdc4a55fe0750f9faf1b6852c51 Mon Sep 17 00:00:00 2001 From: Gidon Date: Tue, 25 Oct 2016 16:21:48 +0300 Subject: [PATCH 040/111] Add cordova-plugin-ble-central and jquery.rateit (#12127) * Add cordova-plugin-ble-central * Added jquery.rateit definitions --- .../cordova-plugin-ble-central-tests.ts | 121 ++++++++++++++++++ .../cordova-plugin-ble-central.d.ts | 108 ++++++++++++++++ jquery.rateit/jquery.rateit-tests.ts | 48 +++++++ jquery.rateit/jquery.rateit.d.ts | 45 +++++++ 4 files changed, 322 insertions(+) create mode 100644 cordova-plugin-ble-central/cordova-plugin-ble-central-tests.ts create mode 100644 cordova-plugin-ble-central/cordova-plugin-ble-central.d.ts create mode 100644 jquery.rateit/jquery.rateit-tests.ts create mode 100644 jquery.rateit/jquery.rateit.d.ts diff --git a/cordova-plugin-ble-central/cordova-plugin-ble-central-tests.ts b/cordova-plugin-ble-central/cordova-plugin-ble-central-tests.ts new file mode 100644 index 0000000000..1fb9037604 --- /dev/null +++ b/cordova-plugin-ble-central/cordova-plugin-ble-central-tests.ts @@ -0,0 +1,121 @@ +/// + +var log = (msg : string) => {}; +var devices: BLECentralPlugin.PeripheralData[] = []; +var demoDevice :BLECentralPlugin.PeripheralData = { + "name": "Battery Demo", + "id": "20:FF:D0:FF:D1:C0", + "advertising": [2,1,6,3,3,15,24,8,9,66,97,116,116,101,114,121], + "rssi": -55 +}; + +devices.push(demoDevice); +var demoExtendedData : BLECentralPlugin.PeripheralDataExtended = { + "name": "Battery Demo", + "id": "20:FF:D0:FF:D1:C0", + "advertising": [2,1,6,3,3,15,24,8,9,66,97,116,116,101,114,121], + "rssi": -55, + "services": [ + "1800", + "1801", + "180f" + ], + "characteristics": [ + { + "service": "1800", + "characteristic": "2a00", + "properties": [ + "Read" + ] + }, + { + "service": "1800", + "characteristic": "2a01", + "properties": [ + "Read" + ] + }, + { + "service": "1801", + "characteristic": "2a05", + "properties": [ + "Read" + ] + }, + { + "service": "180f", + "characteristic": "2a19", + "properties": [ + "Read" + ], + "descriptors": [ + { + "uuid": "2901" + }, + { + "uuid": "2904" + } + ] + } + ] +}; + + +//get updates about the bluethooth states +ble.startStateNotifications((state) => log(`BLE state ${state}`)); + +ble.isEnabled(()=> log(`bluetooth is enabled`), ()=>log(`bluetooth is not enabled`)); + +//here we try to enable bluetooth +ble.enable(() => log(`yes it worked, or it was already enabled `), () => log(`nope it didn't work, the user pressed cancel, or we are in iOS`)); + +ble.showBluetoothSettings(() => log(`yes it worked`), () => log(`nope it didn't work`)) + +//stop getting updates about the bluethooth states +ble.stopStateNotifications() + +//scan 5 seconds +ble.scan([], 5000, (data) => { devices.push(data); }, ()=> log('couldn\'t connect') ); + +//scan continously +ble.startScan([], (data) => { devices.push(data); }, ()=> log('couldn\'t connect') ) + +////scan continously +ble.startScanWithOptions([], {reportDuplicates:false }, (data) => { devices.push(data); }, ()=> log('couldn\'t connect') ) + +//stop scanning +ble.stopScan(()=> log('all good'), ()=> log('couldn\'t stop scanning')); + +//are we conenected to that device? +ble.isConnected(demoDevice.id, () => log(`already connected to this device`), ()=> log(`not yet connected to that device`)); + +//connect to a specific device +var extendedData : BLECentralPlugin.PeripheralDataExtended; +ble.connect(demoDevice.id, (data)=> extendedData = data, () => log(`couldn't connect to the device`) ); + +//read some data from a characteristic +var charsOfOneOfItsServices = demoExtendedData.characteristics.filter((value) => value.service == demoExtendedData.services[0]); +ble.read(demoDevice.id, charsOfOneOfItsServices[0].service, charsOfOneOfItsServices[0].characteristic, (data) => log(`we've received some data`), ()=> log(`couldn't read any data`)); + +//read the rssi +ble.readRSSI(demoDevice.id, (rssi)=>log(`Device ${demoDevice.name} has an RSSI of ${rssi}`)); + +var notificationsReceived : number = 0; +//get notified of changes for that characteristic +ble.startNotification(demoDevice.id, charsOfOneOfItsServices[0].service, charsOfOneOfItsServices[0].characteristic, (data)=> notificationsReceived++, ()=> log(`darn`)); + +//write some data +ble.write(demoDevice.id, charsOfOneOfItsServices[0].service, charsOfOneOfItsServices[0].characteristic, new ArrayBuffer(40), ()=> log(`all good`), ()=> log(`could't write`)); +//write some data without getting notified +ble.writeWithoutResponse(demoDevice.id, charsOfOneOfItsServices[0].service, charsOfOneOfItsServices[0].characteristic, new ArrayBuffer(40), ()=> log(`all good`), ()=> log(`could't write`)); + +//stop getting notified of changes. +ble.stopNotification(demoDevice.id, charsOfOneOfItsServices[0].service, charsOfOneOfItsServices[0].characteristic); + +//notificationsReceived == 1 + +//just disconnect +ble.disconnect(demoDevice.id); + + + diff --git a/cordova-plugin-ble-central/cordova-plugin-ble-central.d.ts b/cordova-plugin-ble-central/cordova-plugin-ble-central.d.ts new file mode 100644 index 0000000000..ccf2396833 --- /dev/null +++ b/cordova-plugin-ble-central/cordova-plugin-ble-central.d.ts @@ -0,0 +1,108 @@ +// Type definitions for cordova-plugin-ble-central 1.1.2 +// Project: https://github.com/don/cordova-plugin-ble-central +// Definitions by: Gidon Junge +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + + +declare namespace BLECentralPlugin { + + interface PeripheralCharacteristic { + service: string; + characteristic: string; + properties: string[]; + descriptors?: any[]; + } + + interface PeripheralData { + name: string; + id: string; + rssi: number + advertising: ArrayBuffer|any; + } + + + interface PeripheralDataExtended extends PeripheralData{ + services: string[]; + characteristics: PeripheralCharacteristic[] + } + + + + + interface StartScanOptions { + reportDuplicates?: boolean; + } + + export interface BLECentralPluginStatic { + scan(services: string[], seconds: number, success : (data: PeripheralData) => any): void; + scan(services: string[], seconds: number, success : (data: PeripheralData) => any, failure : () => any): void; + + startScan(services: string[], success: (data: PeripheralData) => any): void; + startScan(services: string[], success: (data: PeripheralData) => any, failure: () => any): void; + + startScanWithOptions(services: string[], options: StartScanOptions, success: (data: PeripheralData) => any): void; + startScanWithOptions(services: string[], options: StartScanOptions, success: (data: PeripheralData) => any, failure: () => any): void; + + stopScan(): void; + stopScan(success: () => any): void; + stopScan(success: () => any, failure: () => any): void; + + connect(device_id:string, success: (data: PeripheralDataExtended) => any, failure: () => any): void; + + disconnect(device_id:string): void; + disconnect(device_id:string, success: () => any): void; + disconnect(device_id:string, success: () => any, failure: () => any): void; + + read(device_id: string, service_uuid:string, characteristic_uuid:string): void; + read(device_id: string, service_uuid:string, characteristic_uuid:string, success: (rawData: ArrayBuffer) => any): void; + read(device_id: string, service_uuid:string, characteristic_uuid:string, success: (rawData: ArrayBuffer) => any, failure: () => any): void; + + write(device_id: string, service_uuid:string, characteristic_uuid:string, data: ArrayBuffer): void; + write(device_id: string, service_uuid:string, characteristic_uuid:string, data: ArrayBuffer, success : () => any): void; + write(device_id: string, service_uuid:string, characteristic_uuid:string, data: ArrayBuffer, success : () => any, failure: () => any): void; + + /* Writes data to a characteristic without a response from the peripheral. You are not notified if the write fails in the BLE stack. + The success callback is be called when the characteristic is written.*/ + writeWithoutResponse(device_id: string, service_uuid:string, characteristic_uuid:string, data: ArrayBuffer): void; + writeWithoutResponse(device_id: string, service_uuid:string, characteristic_uuid:string, data: ArrayBuffer, success : () => any): void; + writeWithoutResponse(device_id: string, service_uuid:string, characteristic_uuid:string, data: ArrayBuffer, success : () => any, failure: () => any): void; + + /* Register to be notified when the value of a characteristic changes. */ + startNotification(device_id: string, service_uuid:string, characteristic_uuid:string, success: (rawData: ArrayBuffer) => any): void; + startNotification(device_id: string, service_uuid:string, characteristic_uuid:string, success: (rawData: ArrayBuffer) => any, failure: () => any): void; + + stopNotification(device_id: string, service_uuid:string, characteristic_uuid:string): void; + stopNotification(device_id: string, service_uuid:string, characteristic_uuid:string, success: () => any): void; + stopNotification(device_id: string, service_uuid:string, characteristic_uuid:string, success: () => any, failure: () => any): void; + + /* Reports if bluetooth is enabled. */ + isEnabled(success: () => any , failure: () => any): void; + + /* Calls the success callback when the peripheral is connected and the failure callback when not connected. */ + isConnected(device_id: string, success: () => any): void; + isConnected(device_id: string, success: () => any, failure: () => any): void; + + startStateNotifications(success: (state: string) => any): void; + startStateNotifications(success: (state: string) => any, failure: () => any): void; + + stopStateNotifications(): void; + stopStateNotifications(success: () => any): void; + stopStateNotifications(success: () => any, failure: () => any): void; + + /* Opens the Bluetooth settings for the operating systems. + [iOS] showBluetoothSettings is not supported on iOS. */ + showBluetoothSettings(): void; + showBluetoothSettings(success: () => any): void; + showBluetoothSettings(success: () => any, failure: () => any): void; + + /* Enable Bluetooth on the device. + [iOS] enable is not supported on iOS. */ + enable(success: () => any, failure: () => any): void; + + + readRSSI(device_id:string, success: (rssi: number) => any): void; + readRSSI(device_id:string, success: (rssi: number) => any, failure: () => any): void; + } +} + +declare var ble: BLECentralPlugin.BLECentralPluginStatic; \ No newline at end of file diff --git a/jquery.rateit/jquery.rateit-tests.ts b/jquery.rateit/jquery.rateit-tests.ts new file mode 100644 index 0000000000..989d5c5565 --- /dev/null +++ b/jquery.rateit/jquery.rateit-tests.ts @@ -0,0 +1,48 @@ +/// + +var rateit_simple = $('.rateit').rateit(); + +var rateit_properties_font = $('.rateit').rateit({ + backingfld: '#backingfield', + icon: '@', + mode: 'font', + ispreset: false, + max: 5, + min: 0, + readonly: false, + resetable: false, + step: 0.5, + value: 2 +}); + +var rateit_properties_bg = $('.rateit').rateit({ + backingfld: '#backingfield', + mode: 'bg', + ispreset: false, + max: 5, + min: 0, + readonly: false, + resetable: false, + step: 0.5, + value: 2, + starheight: 16, + starwidth: 16 +}); + +//getters +var val : number = rateit_properties_bg.rateit('value'); +var min : number = rateit_properties_bg.rateit('min'); +var max : number = rateit_properties_bg.rateit('max'); +var readonly :boolean = rateit_properties_bg.rateit('readonly'); +var ispreset :boolean = rateit_properties_bg.rateit('ispreset'); + + +//setters +rateit_properties_bg.rateit('value',4); +rateit_properties_bg.rateit('min',0); +rateit_properties_bg.rateit('max',6); +rateit_properties_bg.rateit('readonly',true); +rateit_properties_bg.rateit('ispreset',false); + +//reset it +rateit_properties_bg.rateit('reset'); \ No newline at end of file diff --git a/jquery.rateit/jquery.rateit.d.ts b/jquery.rateit/jquery.rateit.d.ts new file mode 100644 index 0000000000..d5540792b5 --- /dev/null +++ b/jquery.rateit/jquery.rateit.d.ts @@ -0,0 +1,45 @@ +// Type definitions for jquery.rateit.js 1.1.1 +// Project: https://github.com/gjunge/rateit.js +// Definitions by: Gidon Junge +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// +type RateItMode = "bg" | "font"; +interface RateItOptions { + value? : number; + min?: number; + max?: number; + step?:number; + backingfld?:string; + readonly?:boolean; + ispreset? : boolean; + resetable? : boolean; + starwidth?: number; + starheight?: number; + mode?: RateItMode; + icon?: string; +} + +interface JQuery { + rateit() : JQuery; + rateit(options: RateItOptions) : JQuery; + + rateit(method: 'value') : number; + rateit(method: 'value', param: number) : JQuery; + + rateit(method: 'max') : number; + rateit(method: 'max', param: number) : JQuery; + + rateit(method: 'min') : number; + rateit(method: 'min', param: number) : JQuery; + + rateit(method: 'readonly') : boolean; + rateit(method: 'readonly', param: boolean) : JQuery; + + rateit(method: 'ispreset') : boolean; + rateit(method: 'ispreset', param: boolean) : JQuery; + + rateit(method: 'reset') : JQuery; + + rateit(method: string, param: any) : any; +} From 912bbfc70d42455492cad784e92f3764972bcebc Mon Sep 17 00:00:00 2001 From: Craig Boland Date: Tue, 25 Oct 2016 08:22:35 -0500 Subject: [PATCH 041/111] Updated jquery.dataTables for 1.10.8 (#11718) Release Notes: https://cdn.datatables.net/1.10.8/ * Expanded .draw() parameter data type to allow string. * Added "serverSide" parameter to page.Info() return type. * $.fn.dataTable.tables() can now return instance of DataTables API. * Added rowId option. * Added row().id() method. * Added rows().ids() method. * Added count() method. * Added 'numbers' paging option. * Resolved implicit 'any' instances in test file. * Attempt to clarify use of $.fn.dataTable.tables() method in test file. Note: rows().every(), columns().every(), cells().every() parameter list was incorrectly updated in the 1.10.6 version of this file. The parameters listed apply to 1.10.8. Note: the added 'postfix' option to 'number' renderer appears to be used internally. --- jquery.dataTables/jquery.dataTables-tests.ts | 44 +++++++++++---- jquery.dataTables/jquery.dataTables.d.ts | 58 +++++++++++++++++--- 2 files changed, 83 insertions(+), 19 deletions(-) diff --git a/jquery.dataTables/jquery.dataTables-tests.ts b/jquery.dataTables/jquery.dataTables-tests.ts index 21599fdbdf..b8234b69fa 100644 --- a/jquery.dataTables/jquery.dataTables-tests.ts +++ b/jquery.dataTables/jquery.dataTables-tests.ts @@ -219,6 +219,7 @@ $(document).ready(function () { pagingType: "simple", retrieve: true, renderer: "bootstrap", + rowId: "custId", scrollCollapse: true, search: true, searchCols: [{ "search": "", "smart": true, "regex": false, "caseInsensitive": true }], @@ -261,7 +262,7 @@ $(document).ready(function () { { ajax: { data: ajaxDataFunc, - dataSrc: function (data) { }, + dataSrc: function (data: any) { }, }, }; @@ -305,8 +306,9 @@ $(document).ready(function () { destroy = dt.destroy(true); destroy.$(""); - var draw = dt.draw(); + var draw: DataTables.DataTable = dt.draw(); draw = dt.draw(true); + draw = dt.draw("page"); draw.$(""); var initSettings = dt.init(); @@ -343,7 +345,8 @@ $(document).ready(function () { "end": 20, "length": 10, "recordsTotal": 57, - "recordsDisplay": 57 + "recordsDisplay": 57, + "serverSide": false }; var page_len_get = dt.page.len(); @@ -401,7 +404,7 @@ $(document).ready(function () { .cache('search') .sort() .unique() - .each(function (d) { + .each(function (d: any) { select.append($('')); }); @@ -520,7 +523,7 @@ $(document).ready(function () { columns = dt.columns("selector", modifier); var columns_cache = columns.cache("order"); - dt.columns('.select-filter').eq(0).each(function (colIdx) { + dt.columns('.select-filter').eq(0).each(function (colIdx: any) { // Create the select list and search operation var select = $('') .appendTo( @@ -707,7 +710,7 @@ $(document).ready(function () { .cache('search') .sort() .unique() - .each(function (d) { + .each(function (d: any) { select.append($('')); }); }); @@ -751,6 +754,8 @@ $(document).ready(function () { var row_19 = dt.row("selector").index(); var row_20 = dt.row("selector").node(); var row_21 = dt.row("selector").remove(); + var row_22: string = dt.row("selector").id(); + var row_23: string = dt.row("selector").id(false); var rows_1 = dt.rows(); var rows_2 = dt.rows().remove(); @@ -767,6 +772,8 @@ $(document).ready(function () { var rows_13 = dt.rows.add([{}, {}]); dt.rows().every(function () { }); dt.rows().every(function (rowIdx, tableLoop, rowLoop) { }); + var rows_14: DataTables.DataTable = dt.rows("selector").ids(); + var rows_15: DataTables.DataTable = dt.rows("selector").ids(false); var table3 = $('#example').DataTable(); table3.row.add({ @@ -831,7 +838,7 @@ $(document).ready(function () { ]) .show(); - dt.rows().eq(0).each(function (rowIdx) { + dt.rows().eq(0).each(function (rowIdx: any) { dt .row(rowIdx) .child( @@ -881,6 +888,20 @@ $(document).ready(function () { //#endregion "Methods-Row" + //#region "Methods-Static" + + // Variable is a stand-in for $.fn.dataTable. See extension of JQueryStatic at the top of jquery.dataTables.d.ts. + var staticFn: DataTables.StaticFunctions; + + // With boolean parameter type, always returns DataTables.DataTable[]. + var static_1: DataTables.DataTable[] = staticFn.tables(true); + // With object parameter type, returns DataTables.DataTable[] when "api" property is false. + static_1 = staticFn.tables({ "visible": true, "api": false }); + // With object parameter type, returns DataTables.DataTable when "api" property is true. + var static_2: DataTables.DataTable = staticFn.tables({ "visible": true, "api": true }); + + //#endregion "Methods-Static" + //#region "Methods-Table" var tables = dt.tables(); @@ -905,6 +926,7 @@ $(document).ready(function () { //#region "Methods-Util" var util_1: boolean = dt.any(); + var util_2: number = dt.count(); //#endregion "Methods-Util" }); diff --git a/jquery.dataTables/jquery.dataTables.d.ts b/jquery.dataTables/jquery.dataTables.d.ts index 84938e01cf..13d14bd64b 100644 --- a/jquery.dataTables/jquery.dataTables.d.ts +++ b/jquery.dataTables/jquery.dataTables.d.ts @@ -1,4 +1,4 @@ -// Type definitions for JQuery DataTables 1.10.7 +// Type definitions for JQuery DataTables 1.10.8 // Project: http://www.datatables.net // Definitions by: Kiarash Ghiaseddin , Omid Rad , Armin Sander // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -182,11 +182,11 @@ declare namespace DataTables { destroy(remove?: boolean): DataTable; /** - * Redraw the table. + * Redraw the DataTables in the current context, optionally updating ordering, searching and paging as required. * - * @param reset Reset (default) or hold the current paging position. A full re-sort and re-filter is performed when this method is called, which is why the pagination reset is the default action. + * @param paging This parameter is used to determine what kind of draw DataTables will perform. */ - draw(reset?: boolean): DataTable; + draw(paging?: boolean | string): DataTable; /* * Look up a language token that was defined in the DataTables' language initialisation object. @@ -374,6 +374,7 @@ declare namespace DataTables { length: number; recordsTotal: number; recordsDisplay: number; + serverSide: boolean } //#endregion "page-methods" @@ -436,6 +437,11 @@ declare namespace DataTables { */ concat(a: Object, ...b: Object[]): DataTable; + /** + * Get the number of entries in an API instance's result set, regardless of multi-table grouping (e.g. any data, selected rows, etc). Since: 1.10.8 + */ + count(): number; + /** * Iterate over the contents of the API result set. * @@ -910,6 +916,15 @@ declare namespace DataTables { */ id(hash?: boolean): string; + /** + * Get the id of the selected row. Since: 1.10.8 + * + * @param hash true - Append a hash (#) to the start of the row id. This can be useful for then using the id as a selector + * false - Do not modify the id value. + * @returns Row id. If the row does not have an id available 'undefined' will be returned. + */ + id(hash?: boolean): string; + /** * Get the row index of the row column. */ @@ -970,6 +985,15 @@ declare namespace DataTables { */ every(fn: (rowIdx: number, tableLoop: number, rowLoop: number) => void): DataTable; + /** + * Get the ids of the selected rows. Since: 1.10.8 + * + * @param hash true - Append a hash (#) to the start of each row id. This can be useful for then using the ids as selectors + * false - Do not modify the id value. + * @returns Api instance with the selected rows in its result set. If a row does not have an id available 'undefined' will be returned as the value. + */ + ids(hash?: boolean): DataTable; + /** * Get the row indexes of the selected rows. */ @@ -1057,11 +1081,12 @@ declare namespace DataTables { isDataTable(table: string): boolean; /** - * Get all DataTables on the page + * Get all DataTable tables that have been initialised - optionally you can select to get only currently visible tables and / or retrieve the tables as API instances. * - * @param visible Get only visible tables + * @param visible As a boolean value this options is used to indicate if you want all tables on the page should be returned (false), or visible tables only (true). + * Since 1.10.8 this option can also be given as an object. */ - tables(visible?: boolean): DataTables.DataTable[]; + tables(visible?: boolean | ObjectTablesStatic): DataTables.DataTable[] | DataTables.DataTable; /** * Version number compatibility check function @@ -1100,6 +1125,18 @@ declare namespace DataTables { throttle(fn: Function, period?: number): Function; } + interface ObjectTablesStatic { + /** + * Get only visible tables (true) or all tables regardless of visibility (false). + */ + visible: boolean + + /** + * Return a DataTables API instance for the selected tables (true) or an array (false). + */ + api: boolean + } + //#endregion "Static-Methods" //#region "Settings" @@ -1257,7 +1294,7 @@ declare namespace DataTables { pageLength?: number; /** - * Pagination button display options. Basic Types: simple, simple_numbers, full, full_numbers + * Pagination button display options. Basic Types: numbers (1.10.8) simple, simple_numbers, full, full_numbers */ pagingType?: string; @@ -1271,6 +1308,11 @@ declare namespace DataTables { */ renderer?: string | RendererSettings; + /** + * Data property name that DataTables will use to set element DOM IDs. Since: 1.10.8 + */ + rowId?: string; + /** * Allow the table to reduce in height when a limited number of rows are shown. Since: 1.10 */ From 7ee04856878c9a8a09125b315a971cdee2aa5081 Mon Sep 17 00:00:00 2001 From: Leo Rudberg Date: Tue, 25 Oct 2016 09:26:49 -0400 Subject: [PATCH 042/111] Added Seeded interface to Chance definition (#11919) * Fixes #10684 I kept the deprecated `pick` declarations, but added the proposed (JSDoc-influenced) [deprecation annotation](https://github.com/Microsoft/TypeScript/issues/390) to them. The added `pickone` and `pickset` declarations have identical types to their respective `pick` flavors. * Added Seeded interface to Chance definition --- chance/chance.d.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/chance/chance.d.ts b/chance/chance.d.ts index 6390b57864..7ce79b431f 100644 --- a/chance/chance.d.ts +++ b/chance/chance.d.ts @@ -5,13 +5,19 @@ declare namespace Chance { + interface Seeded { + seed: number; + } + + type SeededChance = Chance & Seeded; + interface ChanceStatic { (): Chance - (seed: number): Chance + (seed: number): SeededChance (generator: () => any): Chance new(): Chance; - new(seed: number): Chance; + new(seed: number): SeededChance; new(generator: () => any): Chance; } From a7d9f4a4f55a6791d8a6b4b8c9159a0f098885c9 Mon Sep 17 00:00:00 2001 From: CJ Bell Date: Tue, 25 Oct 2016 09:30:55 -0400 Subject: [PATCH 043/111] Updating pegs to 0.10.0. (#12151) Also added comments and more detailed typing restrictions on parser-generator options. --- pegjs/pegjs-tests.ts | 8 ++--- pegjs/pegjs.d.ts | 71 ++++++++++++++++++++++++++++++++++++++------ 2 files changed, 66 insertions(+), 13 deletions(-) diff --git a/pegjs/pegjs-tests.ts b/pegjs/pegjs-tests.ts index 082836e74f..abd6b601c7 100644 --- a/pegjs/pegjs-tests.ts +++ b/pegjs/pegjs-tests.ts @@ -8,7 +8,7 @@ import * as pegjs from 'pegjs'; { - let pegparser: pegjs.Parser = pegjs.buildParser("start = ('a' / 'b')+"); + let pegparser: pegjs.Parser = pegjs.generate("start = ('a' / 'b')+"); try { let result: string = pegparser.parse("abba"); @@ -20,7 +20,7 @@ import * as pegjs from 'pegjs'; } { - let parser = pegjs.buildParser("A = 'test'", { + let parser = pegjs.generate("A = 'test'", { cache: true, allowedStartRules: ["A"], optimize: "speed", @@ -29,7 +29,7 @@ import * as pegjs from 'pegjs'; } try { - let parserOrSource: pegjs.Parser | string = pegjs.buildParser("A = 'test'", {output: "source"}); + let source: string = pegjs.generate("A = 'test'", {output: "source"}); } catch (error) { if (error instanceof pegjs.GrammarError) { let e: pegjs.GrammarError = error; @@ -46,4 +46,4 @@ try { console.log(e.location.end.line); console.log(e.message); console.log(e.name); -} \ No newline at end of file +} diff --git a/pegjs/pegjs.d.ts b/pegjs/pegjs.d.ts index 8dae497cfa..340fed4bf2 100644 --- a/pegjs/pegjs.d.ts +++ b/pegjs/pegjs.d.ts @@ -1,6 +1,6 @@ -// Type definitions for PEG.js +// Type definitions for PEG.js v0.10.0 // Project: http://pegjs.org/ -// Definitions by: vvakame , Tobias Kahlert +// Definitions by: vvakame , Tobias Kahlert , C.J. Bell // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped declare namespace PEG { @@ -63,19 +63,72 @@ declare module "pegjs" { SyntaxError: any; } - interface BuildOptions { - cache?: boolean; + interface BuildOptionsBase { + /** rules the parser will be allowed to start parsing from (default: the first rule in the grammar) */ allowedStartRules?: string[]; - optimize?: string; + /** if `true`, makes the parser cache results, avoiding exponential parsing time in pathological cases but making the parser slower (default: `false`) */ + cache?: boolean; + /** selects between optimizing the generated parser for parsing speed (`"speed"`) or code size (`"size"`) (default: `"speed"`) */ + optimize?: "speed" | "size"; + /** plugins to use */ plugins?: any[]; + /** makes the parser trace its progress (default: `false`) */ + trace?: boolean } - interface OutputBuildOptions extends BuildOptions { - output?: string; + + interface ParserBuildOptions extends BuildOptionsBase { + /** if set to `"parser"`, the method will return generated parser object; if set to `"source"`, it will return parser source code as a string (default: `"parser"`) */ + output?: "parser" } - function buildParser(grammar: string, options?: BuildOptions): Parser; - function buildParser(grammar: string, options?: OutputBuildOptions): Parser | string; + interface OutputFormatAmdCommonjs extends BuildOptionsBase { + /** if set to `"parser"`, the method will return generated parser object; if set to `"source"`, it will return parser source code as a string (default: `"parser"`) */ + output: "source"; + /** format of the genreated parser (`"amd"`, `"bare"`, `"commonjs"`, `"globals"`, or `"umd"`); valid only when `output` is set to `"source"` (default: `"bare"`) */ + format: "amd" | "commonjs"; + /** parser dependencies, the value is an object which maps variables used to access the dependencies in the parser to module IDs used to load them; valid only when `format` is set to `"amd"`, `"commonjs"`, or `"umd"` (default: `{}`) */ + dependencies?: any + } + + interface OutputFormatUmd extends BuildOptionsBase { + /** if set to `"parser"`, the method will return generated parser object; if set to `"source"`, it will return parser source code as a string (default: `"parser"`) */ + output: "source"; + /** format of the genreated parser (`"amd"`, `"bare"`, `"commonjs"`, `"globals"`, or `"umd"`); valid only when `output` is set to `"source"` (default: `"bare"`) */ + format: "umd"; + /** parser dependencies, the value is an object which maps variables used to access the dependencies in the parser to module IDs used to load them; valid only when `format` is set to `"amd"`, `"commonjs"`, or `"umd"` (default: `{}`) */ + dependencies?: any + /** name of a global variable into which the parser object is assigned to when no module loader is detected; valid only when `format` is set to `"globals"` or `"umd"` (default: `null`) */ + exportVar?: any + } + + interface OutputFormatGlobals extends BuildOptionsBase { + /** if set to `"parser"`, the method will return generated parser object; if set to `"source"`, it will return parser source code as a string (default: `"parser"`) */ + output: "source"; + /** format of the genreated parser (`"amd"`, `"bare"`, `"commonjs"`, `"globals"`, or `"umd"`); valid only when `output` is set to `"source"` (default: `"bare"`) */ + format: "globals"; + /** name of a global variable into which the parser object is assigned to when no module loader is detected; valid only when `format` is set to `"globals"` or `"umd"` (default: `null`) */ + exportVar?: any + } + + interface OutputFormatBare extends BuildOptionsBase { + /** if set to `"parser"`, the method will return generated parser object; if set to `"source"`, it will return parser source code as a string (default: `"parser"`) */ + output: "source"; + /** format of the genreated parser (`"amd"`, `"bare"`, `"commonjs"`, `"globals"`, or `"umd"`); valid only when `output` is set to `"source"` (default: `"bare"`) */ + format?: "bare" + } + + /** Returns a generated parser object. It will throw an exception if the grammar is invalid. The exception will contain `message` property with more details about the error. */ + function generate(grammar: string, options?: ParserBuildOptions): Parser; + /** Returns the generated source code as a `string`. It will throw an exception if the grammar is invalid. The exception will contain `message` property with more details about the error. */ + function generate(grammar: string, options: OutputFormatAmdCommonjs): string; + /** Returns the generated source code as a `string`. It will throw an exception if the grammar is invalid. The exception will contain `message` property with more details about the error. */ + function generate(grammar: string, options: OutputFormatUmd): string; + /** Returns the generated source code as a `string`. It will throw an exception if the grammar is invalid. The exception will contain `message` property with more details about the error. */ + function generate(grammar: string, options: OutputFormatGlobals): string; + /** Returns the generated source code as a `string`. It will throw an exception if the grammar is invalid. The exception will contain `message` property with more details about the error. */ + function generate(grammar: string, options: OutputFormatBare): string; + namespace parser { type SyntaxError = PegjsError; From 28b8b029adde23a6e93a3b7b6d88fec239e15e3a Mon Sep 17 00:00:00 2001 From: Bert Loedeman Date: Tue, 25 Oct 2016 15:49:22 +0200 Subject: [PATCH 044/111] Added support for automapper-ts npm package (#12159) --- automapper-ts/automapper-ts-tests.ts | 1990 ++++++++++++++++++++++++++ automapper-ts/automapper-ts.d.ts | 559 ++++++++ 2 files changed, 2549 insertions(+) create mode 100644 automapper-ts/automapper-ts-tests.ts create mode 100644 automapper-ts/automapper-ts.d.ts diff --git a/automapper-ts/automapper-ts-tests.ts b/automapper-ts/automapper-ts-tests.ts new file mode 100644 index 0000000000..5e18f75789 --- /dev/null +++ b/automapper-ts/automapper-ts-tests.ts @@ -0,0 +1,1990 @@ +/// +/// + +var globalScope = this; + +declare module jasmine { + interface Matchers { + toEqualData(data: any): boolean; + fail(message: string): boolean; + } +} + +declare function expect(): jasmine.Matchers; + +module AutoMapperJs { + describe('AutoMapper', () => { + beforeEach(() => { + jasmine.addMatchers(ExtendJasmine.addCustomMatchers()); + + // clear mappings (please, don't try this at home!) + for (var key in (automapper)._mappings) { + if (!(automapper)._mappings.hasOwnProperty(key)) { + continue; + } + delete (automapper)._mappings[key]; + } + }); + + it('should validate mapping using strictMode set to \'true\' (with valid mappings)', () => { + // arrange + automapper.createMap(AssertConfigPropertiesProp, AssertConfigPropertiesProp); + + // act and assert + automapper.assertConfigurationIsValid(true); + }); + + it('should set strictMode to \'true\' when no value is provided and validate (with valid mappings)', () => { + // arrange + automapper.createMap(AssertConfigPropertiesProp, AssertConfigPropertiesProp); + + // act and assert + automapper.assertConfigurationIsValid(); + }); + + it('should validate mapping using strictMode set to \'false\'', () => { + // arrange + automapper.createMap(AssertConfigPropertiesProp, AssertConfigPropertiesProp); + automapper.createMap('AssertMappingConfigUntestableA', 'AssertMappingConfigUntestableB'); + + // act and assert + automapper.assertConfigurationIsValid(false); + }); + + it('should fail when validating mappings using strictMode set to \'true\' (with unvalidatable mappings)', () => { + // arrange + automapper.createMap(AssertConfigPropertiesProp, AssertConfigPropertiesProp); + automapper.createMap('AssertMappingConfigUntestableA', 'AssertMappingConfigUntestableB'); + + // act + try { + automapper.assertConfigurationIsValid(true); + } catch (e) { + // assert + var errorMessage: string = e.message; + var dekeyedErrorMessage = + errorMessage.substr(0, errorMessage.indexOf('\'') + 1) + + errorMessage.substr(errorMessage.lastIndexOf('\'')); + + expect(dekeyedErrorMessage).toEqual(`Mapping '' cannot be validated, since mapping.sourceType or mapping.destinationType are unspecified.`); + return; + } + + // assert + expect(null).fail('Expected error was not raised.'); + }); + + it('should fail when auto mapping a property which does not exist on destination', () => { + // arrange + var srcType = AssertConfigPropertiesProp; + var dstType = AssertConfigPropertiesProp2; + + var srcName = AutoMapperHelper.getClassName(srcType); + var dstName = AutoMapperHelper.getClassName(dstType); + + automapper.createMap(srcType, dstType); + + try { + // act + automapper.assertConfigurationIsValid(true); + } catch (e) { + // assert + expect(e.message).toEqual(`Mapping '${srcName}=>${dstName}' is invalid: Source member 'prop' is configured to be mapped, ` + + `but does not exist on destination type (source: '${srcName}', destination: '${dstName}').`); + return; + } + + // assert + expect(null).fail('Expected error was not raised.'); + }); + + it('should succeed when mapping objects with ignored properties not existing on the other side', () => { + // arrange + var srcType = AssertConfigPropertiesProp; + var dstType = AssertConfigPropertiesProp2; + + var srcName = AutoMapperHelper.getClassName(srcType); + var dstName = AutoMapperHelper.getClassName(dstType); + + automapper + .createMap(srcType, dstType) + .forSourceMember('prop', (opts: ISourceMemberConfigurationOptions) => { opts.ignore(); }) + .forMember('prop2', (opts: IMemberConfigurationOptions) => { opts.ignore(); }); + + // act and assert + automapper.assertConfigurationIsValid(true); + }); + + it('should fail when auto mapping a property which does not exist on source', () => { + // arrange + var srcType = AssertConfigPropertiesProp; + var dstType = AssertConfigPropertiesPropProp2; + + var srcName = AutoMapperHelper.getClassName(srcType); + var dstName = AutoMapperHelper.getClassName(dstType); + + automapper.createMap(srcType, dstType); + + try { + // act + automapper.assertConfigurationIsValid(true); + } catch (e) { + // assert + expect(e.message).toEqual(`Mapping '${srcName}=>${dstName}' is invalid: Destination member 'prop2' does not exist on source type (source: '${srcName}', destination: '${dstName}').`); + return; + } + + // assert + expect(null).fail('Expected error was not raised.'); + }); + + it('should fail when providing configuration for a property which does not exist on destination', () => { + // arrange + var srcType = AssertConfigPropertiesProp; + var dstType = AssertConfigPropertiesPropProp2; + + var srcName = AutoMapperHelper.getClassName(srcType); + var dstName = AutoMapperHelper.getClassName(dstType); + + automapper + .createMap(srcType, dstType) + .forMember('prop3', (opts: IMemberConfigurationOptions) => { opts.ignore(); }); + + try { + // act + automapper.assertConfigurationIsValid(true); + } catch (e) { + // assert + expect(e.message).toEqual(`Mapping '${srcName}=>${dstName}' is invalid: Destination member 'prop3' is configured, but does not exist on destination type (source: '${srcName}', destination: '${dstName}').`); + return; + } + + // assert + expect(null).fail('Expected error was not raised.'); + }); + + it('should fail when providing configuration for a property which does not exist on source', () => { + // arrange + var srcType = AssertConfigPropertiesProp; + var dstType = AssertConfigPropertiesPropProp2; + + var srcName = AutoMapperHelper.getClassName(srcType); + var dstName = AutoMapperHelper.getClassName(dstType); + + automapper + .createMap(srcType, dstType) + .forSourceMember('prop2', (opts: ISourceMemberConfigurationOptions) => { opts.ignore(); }); + + try { + // act + automapper.assertConfigurationIsValid(true); + } catch (e) { + // assert + expect(e.message).toEqual(`Mapping '${srcName}=>${dstName}' is invalid: Source member 'prop2' is configured, but does not exist on source type (source: '${srcName}', destination: '${dstName}').`); + return; + } + + // assert + expect(null).fail('Expected error was not raised.'); + }); + }); + + describe('AutoMapper (asynchronous mapping)', () => { + beforeEach(() => { + jasmine.addMatchers(ExtendJasmine.addCustomMatchers()); + }); + + it('should be able to map asynchronous using forMember', (done) => { + // arrange + var objFrom = { prop: 'prop' }; + + var fromKey = 'async-forMember-'; + var toKey = 'valid-1'; + + // act + automapper + .createMap(fromKey, toKey) + .forMember('prop', (opts: IMemberConfigurationOptions, cb: IMemberCallback) => { + var func = (o: IMemberConfigurationOptions, c: IMemberCallback) => { + c(o.intermediatePropertyValue + ' (async)'); + }; + + // do something asynchronous + setTimeout((): void => { + func(opts, cb); + }, 10); + }) + .forMember('prop', (opts: IMemberConfigurationOptions) => { + return opts.intermediatePropertyValue + ' (sync)'; + }); + + automapper.mapAsync(fromKey, toKey, objFrom, (result: any) => { + // assert + expect(result.prop).toEqual(objFrom.prop + ' (async)' + ' (sync)'); + done(); + }); + }); + + it('should be able to map asynchronous using forMember in combination with a constant value', (done: () => void) => { + // arrange + var objFrom = { prop: 'prop' }; + + var fromKey = 'async-forMember-'; + var toKey = 'valid-2'; + + // act + automapper + .createMap(fromKey, toKey) + .forMember('prop', (opts: IMemberConfigurationOptions, cb: IMemberCallback) => { + var func = (o: IMemberConfigurationOptions, c: IMemberCallback) => { + c(o.intermediatePropertyValue + ' (async)'); + }; + + // do something asynchronous + setTimeout((): void => { + func(opts, cb); + }, 10); + }) + .forMember('prop', 'Async With Constant Value'); + + automapper.mapAsync(fromKey, toKey, objFrom, (result: any) => { + // assert + expect(result.prop).toEqual('Async With Constant Value'); + done(); + }); + }); + + it('should be able to map asynchronous using an asynchronous forMember in combination with a synchronous forMember mapping', (done: () => void) => { + // arrange + var objFrom = { prop1: 'prop1', prop2: 'prop2' }; + + var fromKey = 'async-forMember-'; + var toKey = 'valid-3'; + + // act + automapper + .createMap(fromKey, toKey) + .forMember('prop1', (opts: IMemberConfigurationOptions, cb: IMemberCallback) => { + var func = (o: IMemberConfigurationOptions, c: IMemberCallback) => { + c(o.intermediatePropertyValue + ' (async)'); + }; + + // do something asynchronous + setTimeout((): void => { + func(opts, cb); + }, 10); + }) + .forMember('prop2', (opts: IMemberConfigurationOptions): any => opts.intermediatePropertyValue); + + automapper.mapAsync(fromKey, toKey, objFrom, (result: any) => { + // assert + expect(result.prop1).toEqual(objFrom.prop1 + ' (async)'); + expect(result.prop2).toEqual(objFrom.prop2); + done(); + }); + }); + + it('should fail when mapping an asynchronous mapping using synchronous map function', () => { + // arrange + var objFrom = { prop: 'prop' }; + + var fromKey = 'async-forMember-'; + var toKey = 'invalid-1'; + + automapper + .createMap(fromKey, toKey) + .forMember('prop', (opts: IMemberConfigurationOptions, cb: IMemberCallback) => { + var func = (o: IMemberConfigurationOptions, c: IMemberCallback) => { + c(o.intermediatePropertyValue + ' (async)'); + } + + // do something asynchronous + setTimeout((): void => { + func(opts, cb); + }, 10); + }) + .forMember('prop', (opts: IMemberConfigurationOptions) => { + return opts.intermediatePropertyValue + ' (sync)'; + }); + + // act + try { + var objB = automapper.map(fromKey, toKey, objFrom); + } catch (e) { + // assert + expect(e.message).toEqual('Impossible to use asynchronous mapping using automapper.map(); use automapper.mapAsync() instead.'); + return; + } + + // assert + expect(null).fail('Expected error was not raised.'); + }); + + it('should be able to map asynchronous using forSourceMember', (done: () => void) => { + // arrange + var objFrom = { prop: 'prop' }; + + var fromKey = 'async-forSourceMember-'; + var toKey = 'valid-1'; + + automapper + .createMap(fromKey, toKey) + .forSourceMember('prop', (opts: ISourceMemberConfigurationOptions, cb: IMemberCallback) => { + var func = (o: ISourceMemberConfigurationOptions, c: IMemberCallback) => { + c('AsyncValue'); + }; + + // do something asynchronous + setTimeout((): void => { + func(opts, cb); + }, 10); + }); + + // act + automapper.mapAsync(fromKey, toKey, objFrom, (result: any) => { + // assert + expect(result.prop).toEqual('AsyncValue'); + done(); + }); + }); + + it('should be able to use convertUsing to map an object with a custom asynchronous type resolver function', (done: () => void) => { + var objA = { propA: 'propA' }; + + var fromKey = '{D1534A0F-6120-475E-B7E2-BF2489C58571}'; + var toKey = '{1896FF99-1A28-4FE6-800B-072D5616B02D}'; + + automapper + .createMap(fromKey, toKey) + .convertUsing((opts: IResolutionContext, cb: IMapCallback): void => { + var func = (o: IResolutionContext, c: IMapCallback) => { + var res = { propA: o.sourceValue.propA + ' (custom async mapped with resolution context)' }; + c(res); + }; + + // do something asynchronous + setTimeout((): void => { + func(opts, cb); + }, 10); + }); + + // act + automapper.mapAsync(fromKey, toKey, objA, (result: any) => { + // assert + expect(result.propA).toEqual(objA.propA + ' (custom async mapped with resolution context)'); + done(); + }); + }); + + it('should asynchronously map an array', (done: () => void) => { + // arrange + var arrA = [{ prop1: 'From A', prop2: 'From A too' }]; + + var fromKey = '{60D9DGH6-DSEC-48GF-9BAC-0805FCAF91B7}'; + var toKey = '{AC6D5B97-9AE3-BERT-ZB60-AZFEDZXE541A}'; + + automapper.createMap(fromKey, toKey) + .forMember('prop1', (opts: IMemberConfigurationOptions, cb: IMemberCallback) => { + var func = (o: IMemberConfigurationOptions, c: IMemberCallback) => { + c(o.intermediatePropertyValue); + }; + + // do something asynchronous + setTimeout((): void => { + func(opts, cb); + }, 10); + }); + // act + var arrB = automapper.mapAsync(fromKey, toKey, arrA, (result: any) => { + // assert + expect(result).toEqualData(arrA); + done(); + }); + }); + }); + + describe('AutoMapper', () => { + beforeEach(() => { + jasmine.addMatchers(ExtendJasmine.addCustomMatchers()); + }); + + it('should have a global automapper object', () => { + expect(automapper).not.toBeUndefined(); + expect(automapper).not.toBeNull(); + + expect(automapper.createMap).not.toBeUndefined(); + expect(automapper.createMap).not.toBeNull(); + expect(typeof automapper.createMap === 'function').toBeTruthy(); + + expect(automapper.map).not.toBeUndefined(); + expect(automapper.map).not.toBeNull(); + expect(typeof automapper.map === 'function').toBeTruthy(); + }); + + it('should return the Singleton instance when instantiating the Singleton directly', () => { + // arrange + var caught = false; + + // act + var mapper = new AutoMapper(); + expect(automapper).toBe(mapper); + }); + + it('should use created mapping profile', () => { + // arrange + var fromKey = '{5700E351-8D88-4327-A216-3CC94A308EDF}'; + var toKey = '{BB33A261-3CA9-48FC-85E6-2C269F73728D}'; + + automapper.createMap(fromKey, toKey); + + // act + automapper.map(fromKey, toKey, {}); + + // assert + }); + + it('should fail when using a non-existing mapping profile', () => { + // arrange + var caught = false; + + var fromKey = '{5AEFD48C-4472-41E7-BA7E-0977A864E116}'; + var toKey = '{568DCA5E-477E-4739-86B2-38BB237B8EF8}'; + + // act + try { + automapper.map(fromKey, toKey, {}); + } catch (e) { + caught = true; + + // assert + expect(e.message).toEqual('Could not find map object with a source of ' + fromKey + ' and a destination of ' + toKey); + } + + if (!caught) { + // assert + expect().fail('Using a non-existing mapping profile should result in an error.'); + } + }); + + it('should be able to use forAllMemberMappings', () => { + // arrange + var fromKey = '{5700E351-8D88-4327-A216-3CCBHJ808EDF}'; + var toKey = '{BB33A261-3CA9-48FC-85E6-2C269FDFT28D}'; + + var source = { prop1: 'prop1', prop2: 'prop2' }; + var suffix = ' [forAllMembers]'; + + automapper.createMap(fromKey, toKey) + .forMember('prop1', (opts: IMemberConfigurationOptions): any => opts.intermediatePropertyValue) + .forMember('prop2', (opts: IMemberConfigurationOptions): any => opts.intermediatePropertyValue) + .forAllMembers((destinationObject: any, + destinationPropertyName: string, + value: any): void => { + destinationObject[destinationPropertyName] = value + suffix; + }); + + // act + var destination = automapper.map(fromKey, toKey, source); + + // assert + expect(destination.prop1).toEqual(source.prop1 + suffix); + expect(destination.prop2).toEqual(source.prop2 + suffix); + }); + + it('should be able to use forAllMemberMappings when automapping', () => { + // arrange + var fromKey = '{5700E351-8D88-4327-A216-3CCBHJ808EDF}'; + var toKey = '{BB33A261-3CA9-48FC-85E6-2C269FDFT28D}'; + + var source = { prop1: 'prop1', prop2: 'prop2' }; + var suffix = ' [forAllMembers]'; + + automapper.createMap(fromKey, toKey) + .forAllMembers((destinationObject: any, + destinationPropertyName: string, + value: any): void => { + destinationObject[destinationPropertyName] = value + suffix; + }); + + // act + var destination = automapper.map(fromKey, toKey, source); + + // assert + expect(destination.prop1).toEqual(source.prop1 + suffix); + expect(destination.prop2).toEqual(source.prop2 + suffix); + }); + + it('should accept multiple forMember calls for the same destination property and overwrite with the last one specified', () => { + //arrange + var objA = { prop1: 'From A', prop2: 'From A too' }; + + var fromKey = '{7AC4134B-ECC1-464B-B144-5B9D8F5B568E}'; + var toKey = '{2BDE907C-1CE6-4CC5-A601-9A94CC665837}'; + + automapper + .createMap(fromKey, toKey) + .forMember('prop1', (opts: IMemberConfigurationOptions) => { opts.mapFrom('prop2'); }) + .forMember('prop1', (opts: IMemberConfigurationOptions) => { opts.ignore(); }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ prop2: objA.prop2 }); + }); + + it('should be able to ignore a source property using the forSourceMember function', () => { + // arrange + var objA = { prop1: 'From A', prop2: 'From A too' }; + + var fromKey = '{AD88481E-597B-4C1B-967B-3D700B8BAB0F}'; + var toKey = '{2A6714C4-784E-47D3-BBF4-6205834EC8D5}'; + + automapper + .createMap(fromKey, toKey) + .forSourceMember('prop1', (opts: ISourceMemberConfigurationOptions) => { opts.ignore(); }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ prop2: 'From A too' }); + }); + + it('should be able to custom map a source property using the forSourceMember function', () => { + // arrange + var objA = { prop1: 'From A', prop2: 'From A too' }; + + var fromKey = '{AD88481E-597B-4C1B-967B-3D700B8BAB0F}'; + var toKey = '{2A6714C4-784E-47D3-BBF4-6205834EC8D5}'; + + automapper + .createMap(fromKey, toKey) + .forSourceMember('prop1', (opts: ISourceMemberConfigurationOptions) => { return 'Yeah!'; }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ prop1: 'Yeah!', prop2: 'From A too' }); + }); + + it('should be able to ignore a source property already specified (by forMember) using the forSourceMember function', () => { + // arrange + var objA = { prop1: 'From A', prop2: 'From A too' }; + + var fromKey = '{AD88481E-597B-4C1B-967B-3D701B8CAB0A}'; + var toKey = '{2A6714C4-784E-47D3-BBF4-620583DEC86A}'; + + automapper + .createMap(fromKey, toKey) + .forMember('prop1', 12) + .forSourceMember('prop1', (opts: ISourceMemberConfigurationOptions) => { opts.ignore(); }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ prop2: 'From A too' }); + }); + + it('should fail when forSourceMember is used with anything else than a function', () => { + // arrange + var caught = false; + + var fromKey = '{5EE20DF9-84B3-4A6A-8C5D-37AEDC44BE87}'; + var toKey = '{986C959D-2E2E-41FA-9857-8EF519467AEB}'; + + try { + // act + automapper + .createMap(fromKey, toKey) + .forSourceMember('prop1', 12); + } catch (e) { + // assert + caught = true; + expect(e.message).toEqual('Configuration of forSourceMember has to be a function with one (sync) or two (async) options parameters.'); + } + + if (!caught) { + // assert + expect().fail('Using anything else than a function with forSourceMember should result in an error.'); + } + }); + + it('should be able to use forMember to map a source property to a destination property with a different name', () => { + //arrange + var objA = { prop1: 'From A', prop2: 'From A too' }; + + var fromKey = '{7AC4134B-ECC1-464B-B144-5B9D8F5B568E}'; + var toKey = '{2BDE907C-1CE6-4CC5-A601-9A94CC665837}'; + + automapper + .createMap(fromKey, toKey) + .forMember('prop', (opts: IMemberConfigurationOptions) => { opts.mapFrom('prop2'); }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ prop1: objA.prop1, prop: objA.prop2 }); + }); + + it('should use forAllMembers function for each mapped destination property when specified', () => { + // arrange + var objA = { prop1: 'From A', prop2: 'From A too' }; + + var fromKey = '{C4056539-FA86-4398-A10B-C41D3A791F26}'; + var toKey = '{01C64E8D-CDB5-4307-9011-0C7F1E70D115}'; + + var forAllMembersSpy = jasmine.createSpy('forAllMembersSpy').and.callFake((destinationObject: any, destinationProperty: string, value: any) => { + destinationObject[destinationProperty] = value; + }); + + automapper + .createMap(fromKey, toKey) + .forAllMembers(forAllMembersSpy); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(forAllMembersSpy).toHaveBeenCalled(); + expect(forAllMembersSpy.calls.count()).toBe(Object.keys(objB).length); + }); + + it('should be able to use forMember with a constant value', () => { + // arrange + var objA = { prop: 1 }; + + var fromKey = '{54E67626-B877-4824-82E6-01E9F411B78F}'; + var toKey = '{2D7FDB88-97E9-45EF-A111-C9CC9C188227}'; + + var constantResult = 2; + + automapper + .createMap(fromKey, toKey) + .forMember('prop', constantResult); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB.prop).toBe(constantResult); + }); + + it('should be able to use forMember with a function returning a constant value', () => { + // arrange + var objA = { prop: 1 }; + + var fromKey = '{74C12B56-1DD1-4EA0-A640-D1F814971124}'; + var toKey = '{BBC617B8-26C8-42A0-A204-45CC77073355}'; + + var constantResult = 3; + + automapper + .createMap(fromKey, toKey) + .forMember('prop', () => { return constantResult; }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB.prop).toBe(constantResult); + }); + + it('should be able to use forMember with a function using the source object', () => { + // arrange + var objA = { prop: { subProp: { value: 1 } } }; + + var fromKey = '{54E67626-B877-4824-82E6-01E9F411B78F}'; + var toKey = '{2D7FDB88-97E9-45EF-A111-C9CC9C188227}'; + + automapper + .createMap(fromKey, toKey) + .forMember('prop', (opts: IMemberConfigurationOptions) => { return opts.sourceObject[opts.sourcePropertyName].subProp.value * 2; }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB.prop).toBe(objA.prop.subProp.value * 2); + }); + + it('should be able to use forMember to ignore a property', () => { + // arrange + var objA = { prop: 1 }; + + var fromKey = '{76D26B33-888A-4DF7-ABDA-E5B99E944272}'; + var toKey = '{18192391-85FF-4729-9A08-5954FCFE3954}'; + + automapper + .createMap(fromKey, toKey) + .forMember('prop', (opts: IMemberConfigurationOptions) => { opts.ignore(); }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB.hasOwnProperty('prop')).not.toBeTruthy(); + }); + + it('should be able to use forMember to map a source property to a destination property with a different name', () => { + // arrange + var objA = { propDiff: 1 }; + + var fromKey = '{A317A36A-AD92-4346-A015-AE06FC862DB4}'; + var toKey = '{03B05E43-3028-44FD-909F-652E2DA5E607}'; + + automapper + .createMap(fromKey, toKey) + .forMember('prop', (opts: IMemberConfigurationOptions) => { opts.mapFrom('propDiff'); }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB.prop).toEqual(objA.propDiff); + }); + + it('should be able to use stack forMember calls to map a source property to a destination property using multiple mapping steps', () => { + // arrange + var birthdayString = '2000-01-01T00:00:00.000Z'; + var objA = { birthdayString: birthdayString }; + + var fromKey = '{564F1F57-FD4F-413C-A9D3-4B1C1333A20B}'; + var toKey = '{F9F45923-2D13-4EF1-9685-4883AD1D2F98}'; + + automapper + .createMap(fromKey, toKey) + .forMember('birthday', (opts: IMemberConfigurationOptions) => { opts.mapFrom('birthdayString'); }) + .forMember('birthday', (opts: IMemberConfigurationOptions) => { return new Date(opts.intermediatePropertyValue); }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB.birthday instanceof Date).toBeTruthy(); + expect(objB.birthday.toISOString()).toEqual('2000-01-01T00:00:00.000Z'); + }); + + it('should be able to use stack forMember calls to map a source property to a destination property using multiple mapping steps in any order', () => { + // arrange + var birthdayString = '2000-01-01T00:00:00.000Z'; + var objA = { birthdayString: birthdayString }; + + var fromKey = '{1609A9B5-6083-448B-8FD6-51DAD106B63D}'; + var toKey = '{47AF7D2D-A848-4C5B-904F-39402E2DCDD5}'; + + automapper + .createMap(fromKey, toKey) + .forMember('birthday', (opts: IMemberConfigurationOptions) => { return new Date(opts.intermediatePropertyValue); }) + .forMember('birthday', (opts: IMemberConfigurationOptions) => { opts.mapFrom('birthdayString'); }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB.birthday instanceof Date).toBeTruthy(); + expect(objB.birthday.toISOString()).toEqual('2000-01-01T00:00:00.000Z'); + }); + + it('should not map properties that are not an object\'s own properties', () => { + var objA = new ClassA(); + objA.propA = 'propA'; + + var fromKey = '{A317A36A-AD92-4346-A015-AE06FC862DB4}'; + var toKey = '{03B05E43-3028-44FD-909F-652E2DA5E607}'; + + automapper + .createMap(fromKey, toKey); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB.propA).toEqual(objA.propA); + }); + + it('should be able to use convertUsing to map an object with a custom type resolver function', () => { + var objA = { propA: 'propA' }; + + var fromKey = '{D1534A0F-6120-475E-B7E2-BF2489C58571}'; + var toKey = '{1896FF99-1A28-4FE6-800B-072D5616B02D}'; + + automapper + .createMap(fromKey, toKey) + .convertUsing(function(resolutionContext: IResolutionContext): any { + return { propA: resolutionContext.sourceValue.propA + ' (custom mapped with resolution context)' }; + }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB.propA).toEqual(objA.propA + ' (custom mapped with resolution context)'); + }); + + it('should be able to use convertUsing to map an object with a custom type resolver class', () => { + // arrange + var objA = { propA: 'propA' }; + + var fromKey = '{6E7F5757-1E55-4B55-BB86-44FF5B33DE2F}'; + var toKey = '{8521AE41-C3AF-4FCD-B7C7-A915C037D69E}'; + + automapper + .createMap(fromKey, toKey) + .convertUsing(CustomTypeConverterDefinition); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB.propA).toEqual(objA.propA + ' (convertUsing with a class definition)'); + }); + + it('should be able to use convertUsing to map an object with a custom type resolver instance', () => { + // arrange + // NOTE BL The CustomTypeConverter class definition is defined at the bottom, since TypeScript + // does not allow classes to be defined inline. + + var objA = { propA: 'propA' }; + + var fromKey = '{BDF3758C-B38E-4343-95B6-AE0F80C8B9C4}'; + var toKey = '{13DD7AE1-4177-4A80-933B-B60A55859E50}'; + + automapper + .createMap(fromKey, toKey) + .convertUsing(new CustomTypeConverterInstance()); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB.propA).toEqual(objA.propA + ' (convertUsing with a class instance)'); + }); + + it('should fail when directly using the type converter base class', () => { + // arrange + var caught = false; + var objA = { propA: 'propA' }; + + var fromKey = 'should fail when directly using '; + var toKey = 'the type converter base class'; + + automapper + .createMap(fromKey, toKey) + .convertUsing(TypeConverter); + + try { + // act + var objB = automapper.map(fromKey, toKey, objA); + } catch (e) { + // assert + caught = true; + expect(e.message).toEqual('The TypeConverter.convert method is abstract. Use a TypeConverter extension class instead.'); + } + + if (!caught) { + // assert + expect().fail('Using the type converter base class directly should fail.'); + } + }); + + it('should fail when convertUsing is used with a function not having exactly one (resolutionContext) parameter.', () => { + // arrange + var caught = false; + + var fromKey = '{1EF9AC11-BAA1-48DB-9C96-9DFC40E33BCA}'; + var toKey = '{C4DA81D3-9072-4140-BFA7-431C35C01F54}'; + + try { + // act + automapper + .createMap(fromKey, toKey) + .convertUsing(() => { + return {}; + }); + + //var objB = automapper.map(fromKey, toKey, objA); + } catch (e) { + // assert + caught = true; + expect(e.message).toEqual('The value provided for typeConverterClassOrFunction is invalid. ' + + 'Error: The function provided does not provide exactly one (resolutionContext) parameter.'); + } + + if (!caught) { + // assert + expect().fail('Using anything else than a function with forSourceMember should result in an error.'); + } + }); + + it('should be able to use convertToType to map a source object to a destination object which is an instance of a given class', () => { + //arrange + var objA = { ApiProperty: 'From A' }; + + + var fromKey = '{7AC4134B-ECC1-464B-B144-5C9D8F5B5A7E}'; + var toKey = '{2BDE907C-1CE6-4CC5-A601-9A94CA6C4737}'; + + automapper + .createMap(fromKey, toKey) + .forMember('property', (opts: IMemberConfigurationOptions) => { opts.mapFrom('ApiProperty'); }) + .convertToType(DemoToBusinessType); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB instanceof DemoToBusinessType).toBeTruthy(); + expect(objB.property).toEqual(objA.ApiProperty); + }); + + it('should be able to use a condition to map or ignore a property', () => { + // arrange + var objA = { prop: 1, prop2: 2 }; + + var fromKey = '{76D23B33-888A-4DF7-BEBE-E5B99E944272}'; + var toKey = '{18192191-85FE-4729-A980-5954FCFE3954}'; + + automapper + .createMap(fromKey, toKey) + .forMember('prop', (opts: IMemberConfigurationOptions) => { opts.condition((sourceObject: any) => sourceObject.prop === 0); }) + .forMember('prop2', (opts: IMemberConfigurationOptions) => { opts.condition((sourceObject: any) => sourceObject.prop2 === 2); }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB.hasOwnProperty('prop')).not.toBeTruthy(); + expect(objB.hasOwnProperty('prop2')).toBeTruthy(); + }); + + it('should be able to ignore all unmapped members using the ignoreAllNonExisting function', () => { + // arrange + var objA = { + propA: 'Prop A', + propB: 'Prop B', + propC: 'Prop C', + propD: 'Prop D' + }; + + var fromKey = '{AD88481E-597B-4C1C-9A7B-3D70DB8BCB0F}'; + var toKey = '{2A6614C4-784E-47D3-BBF4-6205834EA8D1}'; + + automapper + .createMap(fromKey, toKey) + .forMember('propA', (opts: IMemberConfigurationOptions) => opts.mapFrom('propA')) + .ignoreAllNonExisting(); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ propA: 'Prop A' }); + }); + + it('should be able to create a map and use it using class types', () => { + // arrange + var objA = new ClassA(); + objA.propA = 'Value'; + + // act + automapper.createMap(ClassA, ClassB); + var objB = automapper.map(ClassA, ClassB, objA); + + // assert + expect(objB instanceof ClassB).toBeTruthy(); + expect(objB).toEqualData({ propA: 'Value' }); + }); + + it('should throw an error when creating a map using class types and specifying a conflicting destination type', () => { + // arrange + var caught = false; + + // act + try { + automapper + .createMap(ClassA, ClassB) + .convertToType(ClassC); + } catch (e) { + caught = true; + // assert + expect(e.message).toEqual('Destination type class can only be set once.'); + } + + if (!caught) { + // assert + expect(null).fail('AutoMapper should throw an error when creating a map using class types and specifying a conflicting destination type.'); + } + }); + + it('should be able to use forMember to map a nested source property to a destination property', () => { + //arrange + var objA = { prop1: { propProp1: 'From A' }, prop2: 'From A too' }; + + var fromKey = '{7AC4134B-ECC1-464B-B144-5B9D8F5B568E}'; + var toKey = '{2BDE907C-1CE6-4CC5-A601-9A94CC665837}'; + + automapper + .createMap(fromKey, toKey) + .forMember('propFromNestedSource', (opts: IMemberConfigurationOptions) => { opts.mapFrom('prop1.propProp1'); }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ prop2: objA.prop2, propFromNestedSource: objA.prop1.propProp1 }); + }); + + it('should be able to stack forMember calls when mapping a nested source property to a destination property', () => { + //arrange + var objA = { prop1: { propProp1: 'From A' }, prop2: 'From A too' }; + var addition = ' - sure works!'; + + var fromKey = '{7AC4134B-ECC1-464B-B144-5B99CF5B558E}'; + var toKey = '{2BDE907C-1CE6-4CC5-56A1-9A94CC6658C7}'; + + automapper + .createMap(fromKey, toKey) + .forMember('propFromNestedSource', (opts: IMemberConfigurationOptions) => { opts.mapFrom('prop1.propProp1'); }) + .forMember('propFromNestedSource', (opts: IMemberConfigurationOptions) => { return opts.intermediatePropertyValue + addition; }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ prop2: objA.prop2, propFromNestedSource: objA.prop1.propProp1 + addition }); + }); + + it('should be able to stack forMember calls when mapping a nested source property to a destination property in any order', () => { + //arrange + var objA = { prop1: { propProp1: 'From A' }, prop2: 'From A too' }; + var addition = ' - sure works!'; + + var fromKey = '{7AC4134B-ECD1-46EB-B14A-5B9D8F5B5F8E}'; + var toKey = '{BBD6907C-ACE6-4FC8-A60D-1A943C66D83F}'; + + automapper + .createMap(fromKey, toKey) + .forMember('propFromNestedSource', (opts: IMemberConfigurationOptions) => { return opts.intermediatePropertyValue + addition; }) + .forMember('propFromNestedSource', (opts: IMemberConfigurationOptions) => { opts.mapFrom('prop1.propProp1'); }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ prop2: objA.prop2, propFromNestedSource: objA.prop1.propProp1 + addition }); + }); + + it('should be able to stack forMember mapFrom calls when mapping a nested source property to a destination property', () => { + //arrange + var objA = { prop1: { propProp1: 'From A', propProp2: { propProp2Prop: 'From A' } }, prop2: 'From A too' }; + var addition = ' - sure works!'; + + var fromKey = '{7AC4134B-ECD1-46EB-B14A-5B9D8F5B5F8E}'; + var toKey = '{BBD6907C-ACE6-4FC8-A60D-1A943C66D83F}'; + + automapper + .createMap(fromKey, toKey) + .forMember('propFromNestedSource', (opts: IMemberConfigurationOptions) => { return opts.intermediatePropertyValue + addition; }) + .forMember('propFromNestedSource', (opts: IMemberConfigurationOptions) => { opts.mapFrom('prop1.propProp2.propProp2Prop'); }) + .forMember('propFromNestedSource', (opts: IMemberConfigurationOptions) => { opts.mapFrom('prop1.propProp1'); }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ prop2: objA.prop2, propFromNestedSource: objA.prop1.propProp1 + addition }); + }); + + it('should be able to use forMember to map to a nested destination', () => { + //arrange + var objA = { prop1: { propProp1: 'From A', propProp2: { propProp2Prop: 'From A' } }, prop2: 'From A too' }; + var addition = ' - sure works!'; + + var fromKey = '{7AC4134B-ECD1-46EB-B14A-5B9D8F5B5F8E}'; + var toKey = '{BBD6907C-ACE6-4FC8-A60D-1A943C66D83F}'; + + automapper + .createMap(fromKey, toKey) + .forMember('nested.property', (opts: IMemberConfigurationOptions) => { return opts.intermediatePropertyValue + addition; }) + .forMember('nested.property', (opts: IMemberConfigurationOptions) => { opts.mapFrom('prop1.propProp2.propProp2Prop'); }) + .forMember('nested.property', (opts: IMemberConfigurationOptions) => { opts.mapFrom('prop1.propProp1'); }); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ prop2: objA.prop2, nested: { property: objA.prop1.propProp1 + addition }}); + }); + + it('should be able to use mapFrom to switch properties and ignore a property as well', () => { + // arrange + var objA = { prop1: 'From A', prop2: 'From A too', prop3: 'Also from A (really)' }; + + var fromKey = 'should be able to use mapFrom to switch '; + var toKey = 'properties and ignore a property as well'; + + // act + automapper + .createMap(fromKey, toKey) + .forMember('prop1', (opts: IMemberConfigurationOptions) => { opts.mapFrom('prop2'); }) + .forMember('prop2', (opts: IMemberConfigurationOptions) => { opts.mapFrom('prop1'); }) + .forSourceMember('prop3', (opts: ISourceMemberConfigurationOptions) => { opts.ignore(); }); + + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ prop1: objA.prop2, prop2: objA.prop1 }); + }); + + it('should be able to create a new property using a constant value', () => { + // arrange + var objA = { }; + + var fromKey = 'should be able to create a new property '; + var toKey = 'using a constant value'; + + // act + automapper + .createMap(fromKey, toKey) + .forMember('prop4', (opts: IMemberConfigurationOptions) => { return 12; }); + + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ prop4: 12 }); + }); + + it('should just return source object when no properties are created using null source object', () => { + // arrange + var objA: any = null; + + var fromKey = 'should just return source object when no '; + var toKey = 'properties created using null source object'; + + // act + automapper + .createMap(fromKey, toKey); + + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toBeNull(); + }); + + it('should be able to create a new property using a constant value (null source object)', () => { + // arrange + var objA: any = null; + + var fromKey = 'should be able to create a new property '; + var toKey = 'using a constant value (null source object)'; + + // act + automapper + .createMap(fromKey, toKey) + .forMember('prop4', (opts: IMemberConfigurationOptions) => { return 12; }); + + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData({ prop4: 12 }); + }); + }); + + it('should map a source object with empty nested objects', () => { + // arrange + var src: any = { + homeAddress: null /*{ + address1: '200 Main St', + address2: '200 Main St', + city: 'Los Angeles', + state: 'CA', + zip: '90000' + }*/, + businessAddress: { + address1: '200 Main St', + // address2: '200 Main St', + city: 'Los Angeles', + state: 'CA', + zip: '90000' + } + }; + + var fromKey = '{60E9DC56-D6E1-48FF-9BAC-0805FCAF91B7}'; + var toKey = '{AC6D5A97-9AEF-42C7-BD60-A5F3D17E541A}'; + + automapper + .createMap(fromKey, toKey) + // .forMember('homeAddress.address1', (opts: IMemberConfigurationOptions) => { opts.mapFrom('homeAddress.address1'); }) + .forMember('homeAddress.address2', (opts: IMemberConfigurationOptions) => { opts.mapFrom('homeAddress.address2'); }) + // .forMember('homeAddress.city', (opts: IMemberConfigurationOptions) => { opts.mapFrom('homeAddress.city'); }) + // .forMember('homeAddress.state', (opts: IMemberConfigurationOptions) => { opts.mapFrom('homeAddress.state'); }) + // .forMember('homeAddress.zip', (opts: IMemberConfigurationOptions) => { opts.mapFrom('homeAddress.zip'); }) + + .forMember('businessAddress.address1', (opts: IMemberConfigurationOptions) => { opts.mapFrom('businessAddress.address1'); }) + .forMember('businessAddress.address2', (opts: IMemberConfigurationOptions) => null) + .forMember('businessAddress.city', (opts: IMemberConfigurationOptions) => { opts.mapFrom('businessAddress.city'); }) + .forMember('businessAddress.state', (opts: IMemberConfigurationOptions) => { opts.mapFrom('businessAddress.state'); }) + .forMember('businessAddress.zip', (opts: IMemberConfigurationOptions) => { opts.mapFrom('businessAddress.zip'); }) + ; + + // act + var dst = automapper.map(fromKey, toKey, src); + + // assert + expect(dst).not.toBeNull(); + + expect(dst.homeAddress).toBeNull(); + + expect(dst.businessAddress.address1).toBe(src.businessAddress.address1); + expect(dst.businessAddress.address2).toBeUndefined(); + expect(dst.businessAddress.city).toBe(src.businessAddress.city); + expect(dst.businessAddress.state).toBe(src.businessAddress.state); + expect(dst.businessAddress.zip).toBe(src.businessAddress.zip); + }); + + describe('AutoMapper - Currying support', () => { + beforeEach(() => { + jasmine.addMatchers(ExtendJasmine.addCustomMatchers()); + }); + + it('should be able to use currying when calling createMap', () => { + // arrange + var fromKey = '{808D9D7F-AA89-4D07-917E-A528F055EE64}'; + var toKey1 = '{B364C0A0-9E24-4424-A569-A4C14101947C}'; + var toKey2 = '{1055CA5A-4FC4-44CB-B4D8-B004F43D8840}'; + + var source = { prop: 'Value' }; + + // act + var mapFromKeyCurry = automapper.createMap(fromKey); + + mapFromKeyCurry(toKey1) + .forSourceMember('prop', (opts: ISourceMemberConfigurationOptions) => { opts.ignore(); }); + + mapFromKeyCurry(toKey2); + + var result1 = automapper.map(fromKey, toKey1, source); + var result2 = automapper.map(fromKey, toKey2, source); + + // assert + expect(typeof mapFromKeyCurry === 'function').toBeTruthy(); + expect(result1.prop).toBeUndefined(); + expect(result2.prop).toEqual(source.prop); + }); + + it('should be able to use currying (one parameter) when calling map', () => { + // arrange + var fromKey = 'should be able to use currying (one parameter)'; + var toKey1 = 'when calling map (1)'; + var toKey2 = 'when calling map (2)'; + + var source = { prop: 'Value' }; + + // act + var createMapFromKeyCurry = automapper.createMap(fromKey); + + createMapFromKeyCurry(toKey1) + .forSourceMember('prop', (opts: ISourceMemberConfigurationOptions) => { opts.ignore(); }); + + createMapFromKeyCurry(toKey2); + + var result1MapCurry = automapper.map(fromKey); + var result2MapCurry = automapper.map(fromKey); + + var result1 = result1MapCurry(toKey1, source); + var result2 = result2MapCurry(toKey2, source); + + // assert + expect(typeof createMapFromKeyCurry === 'function').toBeTruthy(); + expect(typeof result1MapCurry === 'function').toBeTruthy(); + expect(typeof result2MapCurry === 'function').toBeTruthy(); + + expect(result1.prop).toBeUndefined(); + expect(result2.prop).toEqual(source.prop); + }); + + it('should be able to use currying when calling map', () => { + // arrange + var fromKey = '{FC18523B-5A7C-4193-B938-B6AA2EABB37A}'; + var toKey1 = '{609202F4-15F7-4512-9178-CFAF073800E1}'; + var toKey2 = '{85096AE2-92FB-43D7-8FC3-EC14DDC1DFDD}'; + + var source = { prop: 'Value' }; + + // act + var createMapFromKeyCurry = automapper.createMap(fromKey); + + createMapFromKeyCurry(toKey1) + .forSourceMember('prop', (opts: ISourceMemberConfigurationOptions) => { opts.ignore(); }); + + createMapFromKeyCurry(toKey2); + + var result1MapCurry = automapper.map(fromKey, toKey1); + var result2MapCurry = automapper.map(fromKey, toKey2); + + var result1 = result1MapCurry(source); + var result2 = result2MapCurry(source); + + // assert + expect(typeof createMapFromKeyCurry === 'function').toBeTruthy(); + expect(typeof result1MapCurry === 'function').toBeTruthy(); + expect(typeof result2MapCurry === 'function').toBeTruthy(); + + expect(result1.prop).toBeUndefined(); + expect(result2.prop).toEqual(source.prop); + }); + + it('should be able to use currying when calling mapAsync', (done: () => void) => { + // arrange + var fromKey = '{1CA8523C-5A7C-4193-B938-B6AA2EABB37A}'; + var toKey1 = '{409212FD-15E7-4512-9178-CFAF073800EG}'; + var toKey2 = '{85096AE2-92FA-43N7-8FA3-EC14DDC1DFDE}'; + + var source = { prop: 'Value' }; + + // act + var createMapFromKeyCurry = automapper.createMap(fromKey); + + createMapFromKeyCurry(toKey1) + .forSourceMember('prop', (opts: ISourceMemberConfigurationOptions, cb: IMemberCallback) => { cb('Constant Value 1'); }); + + createMapFromKeyCurry(toKey2) + .forMember('prop', (opts: IMemberConfigurationOptions, cb: IMemberCallback) => { cb('Constant Value 2'); }); + + var result1MapCurry = automapper.mapAsync(fromKey, toKey1); + var result2MapCurry = automapper.mapAsync(fromKey, toKey2); + + // assert + expect(typeof createMapFromKeyCurry === 'function').toBeTruthy(); + expect(typeof result1MapCurry === 'function').toBeTruthy(); + expect(typeof result2MapCurry === 'function').toBeTruthy(); + + var resCount = 0; + var result1 = result1MapCurry(source, (result: any) => { + // assert + expect(result.prop).toEqual('Constant Value 1'); + if (++resCount === 2) { + done(); + } + }); + + var result2 = result2MapCurry(source, (result: any) => { + // assert + expect(result.prop).toEqual('Constant Value 2'); + if (++resCount === 2) { + done(); + } + }); + }); + + it('should be able to use currying when calling mapAsync with one parameter', (done: () => void) => { + // arrange + var fromKey = '{1CA8523C-5AVC-4193-BS38-B6AA2EABB37A}'; + var toKey = '{409212FD-1527-4512-9178-CFAG073800EG}'; + + var source = { prop: 'Value' }; + + // act + automapper.createMap(fromKey, toKey) + .forSourceMember('prop', (opts: ISourceMemberConfigurationOptions, cb: IMemberCallback) => { cb('Constant Value'); }); + + var mapAsyncCurry = automapper.mapAsync(fromKey); + + // assert + expect(typeof mapAsyncCurry === 'function').toBeTruthy(); + + var result = mapAsyncCurry(toKey, source, (result: any) => { + // assert + expect(result.prop).toEqual('Constant Value'); + done(); + }); + }); + + it('should be able to use currying when calling mapAsync with two parameters', (done: () => void) => { + // arrange + var fromKey = '{1CA852SC-5AVC-4193-BS38-B6AA2KABB3LA}'; + var toKey = '{409212FD-1Q27-45G2-9178-CFAG073800EG}'; + + var source = { prop: 'Value' }; + + // act + automapper.createMap(fromKey, toKey) + .forMember('prop', (opts: IMemberConfigurationOptions, cb: IMemberCallback) => { cb('Constant Value'); }); + + var mapAsyncCurry = automapper.mapAsync(fromKey, toKey); + + // assert + expect(typeof mapAsyncCurry === 'function').toBeTruthy(); + + var result = mapAsyncCurry(source, (result: any) => { + // assert + expect(result.prop).toEqual('Constant Value'); + done(); + }); + }); + + it('should be able to use currying when calling mapAsync with three parameters', (done: () => void) => { + // NOTE BL 20151214 I wonder why anyone would like calling this one? Maybe this one will be removed in + // the future. Please get in touch if you need this one to stay in place... + + // arrange + var fromKey = '{1CA852SC-5AVC-ZZ93-BS38-B6AA2KABB3LA}'; + var toKey = '{409212FD-1Q27-45G2-91BB-CFAG0738WCEG}'; + + var source = { prop: 'Value' }; + + // act + automapper.createMap(fromKey, toKey) + .forMember('prop', (opts: IMemberConfigurationOptions, cb: IMemberCallback) => { cb('Constant Value'); }); + + var mapAsyncCurry = automapper.mapAsync(fromKey, toKey, source); + + // assert + expect(typeof mapAsyncCurry === 'function').toBeTruthy(); + + var result = mapAsyncCurry((result: any) => { + // assert + expect(result.prop).toEqual('Constant Value'); + done(); + }); + }); + + it('should fail when calling mapAsync without parameters', () => { + // arrange + + // act + try { + var mapAsyncCurry = (automapper).mapAsync(); + } catch (e) { + // assert + expect(e.message).toEqual('The mapAsync function expects between 1 and 4 parameters, you provided 0.'); + return; + } + + // assert + expect(null).fail('Expected error was not raised.'); + }); + + it('should fail when calling mapAsync with > 4 parameters', () => { + // arrange + + // act + try { + var mapAsyncCurry = (automapper).mapAsync(undefined, undefined, undefined, undefined, undefined); + } catch (e) { + // assert + expect(e.message).toEqual('The mapAsync function expects between 1 and 4 parameters, you provided 5.'); + return; + } + + // assert + expect(null).fail('Expected error was not raised.'); + }); + + + it('should fail when specifying < 2 parameters to the asynchronous map function', () => { + // arrange + + // act + try { + (new AsyncAutoMapper()).map(undefined); + } catch (e) { + // assert + expect(e.message).toEqual('The AsyncAutoMapper.map function expects between 2 and 5 parameters, you provided 1.'); + return; + } + + // assert + expect(null).fail('Expected error was not raised.'); + }); + + it('should fail when specifying > 5 parameters to the asynchronous map function', () => { + // arrange + + // act + try { + (new AsyncAutoMapper()).map(undefined, undefined, undefined, undefined, undefined, undefined); + } catch (e) { + // assert + expect(e.message).toEqual('The AsyncAutoMapper.map function expects between 2 and 5 parameters, you provided 6.'); + return; + } + + // assert + expect(null).fail('Expected error was not raised.'); + }); + }); + + describe('AutoMapper.initialize', () => { + beforeEach(() => { + jasmine.addMatchers(ExtendJasmine.addCustomMatchers()); + }); + + it('should use created mapping profile', () => { + // arrange + var fromKey = '{5700E351-8D88-A327-A216-3CC94A308EDE}'; + var toKey = '{BB33A261-3CA9-A8FC-85E6-2C269F73728C}'; + + automapper.initialize((config: IConfiguration) => { + config.createMap(fromKey, toKey); + }); + + // act + automapper.map(fromKey, toKey, {}); + + // assert + }); + + it('should be able to use a naming convention to convert Pascal case to camel case', () => { + automapper.initialize((config: IConfiguration) => { + config.addProfile(new PascalCaseToCamelCaseMappingProfile()); + }); + + const sourceKey = 'PascalCase'; + const destinationKey = 'CamelCase'; + + const sourceObject = { FullName: 'John Doe' }; + + automapper + .createMap(sourceKey, destinationKey) + .withProfile('PascalCaseToCamelCase'); + + var result = automapper.map(sourceKey, destinationKey, sourceObject); + + expect(result).toEqualData({ fullName: 'John Doe' }); + }); + + it('should be able to use a naming convention to convert camelCase to PascalCase', () => { + automapper.initialize((config: IConfiguration) => { + config.addProfile(new CamelCaseToPascalCaseMappingProfile()); + }); + + const sourceKey = 'CamelCase2'; + const destinationKey = 'PascalCase2'; + + const sourceObject = { fullName: 'John Doe' }; + + automapper + .createMap(sourceKey, destinationKey) + .withProfile('CamelCaseToPascalCase'); + + var result = automapper.map(sourceKey, destinationKey, sourceObject); + + expect(result).toEqualData({ FullName: 'John Doe' }); + }); + + it('should be able to use forMember besides using a profile', () => { + automapper.initialize((config: IConfiguration) => { + config.addProfile(new CamelCaseToPascalCaseMappingProfile()); + }); + + const sourceKey = 'CamelCase'; + const destinationKey = 'PascalCase'; + + const sourceObject = { fullName: 'John Doe', age: 20 }; + + automapper + .createMap(sourceKey, destinationKey) + .forMember('theAge', (opts: IMemberConfigurationOptions) => opts.mapFrom('age')) + .withProfile('CamelCaseToPascalCase'); + + var result = automapper.map(sourceKey, destinationKey, sourceObject); + + expect(result).toEqualData({ FullName: 'John Doe', theAge: sourceObject.age }); + }); + + it('should use profile when only profile properties are specified', () => { + automapper.initialize((config: IConfiguration) => { + config.addProfile(new ValidatedAgeMappingProfile2()); + }); + + const sourceKey = '{918D9D7F-AA89-4D07-917E-A528F07EEF42}'; + const destinationKey = '{908D9D6F-BA89-4D17-915E-A528E988EE64}'; + + const sourceObject = { fullName: 'John Doe', proclaimedAge: 21, ageOnId: 15 }; + + automapper + .createMap(sourceKey, destinationKey) + .withProfile('ValidatedAgeMappingProfile2'); + + var result = automapper.map(sourceKey, destinationKey, sourceObject); + + expect(result).toEqualData({ fullName: 'John Doe', age: sourceObject.ageOnId }); + expect(result instanceof Person).toBeTruthy(); + expect(result instanceof BeerBuyingYoungster).not.toBeTruthy(); + }); + + it('should fail when using a non-existimg profile', () => { + // arrange + var caught = false; + var profileName = 'Non-existing profile'; + const sourceKey = 'should fail when using '; + const destinationKey = 'a non-existimg profile'; + const sourceObject = { }; + + // act + try { + automapper + .createMap(sourceKey, destinationKey) + .withProfile(profileName); + var result = automapper.map(sourceKey, destinationKey, sourceObject); + } catch (e) { + caught = true; + + // assert + expect(e.message).toEqual('Could not find profile with profile name \'' + profileName + '\'.'); + } + + if (!caught) { + // assert + expect().fail('Using a non-existing mapping profile should result in an error.'); + } + }); + + it('should merge forMember calls when specifying the same destination property normally and using profile', () => { + automapper.initialize((config: IConfiguration) => { + config.addProfile(new ValidatedAgeMappingProfile()); + }); + + const sourceKey = '{808D9D7F-AA89-4D07-917E-A528F078E642}'; + const destinationKey = '{808D9D6F-BA89-4D17-915E-A528E178EE64}'; + + const sourceObject = { fullName: 'John Doe', proclaimedAge: 21, ageOnId: 15 }; + + automapper + .createMap(sourceKey, destinationKey) + .forMember('ageOnId', (opts: IMemberConfigurationOptions) => opts.ignore()) + .forMember('age', (opts: IMemberConfigurationOptions) => opts.mapFrom('proclaimedAge')) + .convertToType(BeerBuyingYoungster) + .withProfile('ValidatedAgeMappingProfile'); + + var result = automapper.map(sourceKey, destinationKey, sourceObject); + + expect(result).toEqualData({ fullName: 'John Doe', age: sourceObject.ageOnId }); + expect(result instanceof Person).toBeTruthy(); + expect(result instanceof BeerBuyingYoungster).not.toBeTruthy(); + }); + + it('should be able to use currying when calling initialize(cfg => cfg.createMap)', () => { + // arrange + var fromKey = '{808D9D7F-AA89-4D07-917E-A528F078EE64}'; + var toKey1 = '{B364C0A0-9E24-4424-A569-A4C14102147C}'; + var toKey2 = '{1055CA5A-4FC4-44CA-B4D8-B004F43D4440}'; + + var source = { prop: 'Value' }; + + // act + var mapFromKeyCurry: (destinationKey: string) => ICreateMapFluentFunctions; + + automapper.initialize((config: IConfiguration) => { + mapFromKeyCurry = config.createMap(fromKey); + + mapFromKeyCurry(toKey1) + .forSourceMember('prop', (opts: ISourceMemberConfigurationOptions) => { opts.ignore(); }); + + mapFromKeyCurry(toKey2); + }); + + var result1 = automapper.map(fromKey, toKey1, source); + var result2 = automapper.map(fromKey, toKey2, source); + + // assert + expect(typeof mapFromKeyCurry === 'function').toBeTruthy(); + expect(result1.prop).toBeUndefined(); + expect(result2.prop).toEqual(source.prop); + }); + + }); + + describe('AutoMapper', () => { + beforeEach(() => { + jasmine.addMatchers(ExtendJasmine.addCustomMatchers()); + }); + + it('should auto map matching properties', () => { + // arrange + var objA = { prop1: 'From A', prop2: 'From A too' }; + + var fromKey = '{7F5AF9AC-2E9E-4676-8BE1-3E72866B11E8}'; + var toKey = '{8089EBDC-3BBB-4988-95F2-683CC1AD23A3}'; + + automapper.createMap(fromKey, toKey); + + // act + var objB = automapper.map(fromKey, toKey, objA); + + // assert + expect(objB).toEqualData(objA); + }); + + it('should map an array', () => { + // arrange + var arrA = [{ prop1: 'From A', prop2: 'From A too' }]; + + var fromKey = '{60D9DB56-D6E1-48FF-9BAC-0805FCAF91B7}'; + var toKey = '{AC6D5B97-9AE3-4267-BD60-A5FED17E541A}'; + + automapper.createMap(fromKey, toKey); + + // act + var arrB = automapper.map(fromKey, toKey, arrA); + + // assert + expect(arrB).toEqualData(arrA); + }); + + it('should map an array and handle empty items', () => { + // arrange + var arrA = [{ prop1: 'From A', prop2: 'From A too' }, undefined]; + + var fromKey = '{60D9DB56-D6E1-48FF-9BAC-0805FCAF91B7}'; + var toKey = '{AC6D5B97-9AE3-4267-BD60-A5FED17E541A}'; + + automapper.createMap(fromKey, toKey); + + // act + var arrB = automapper.map(fromKey, toKey, arrA); + + // assert + expect(arrB).toEqualData(arrA); + }); + }); + + /** AutoMapper helper functions */ + class AutoMapperHelper { + public static getClassName(classType: new() => any): string { + if (classType && (classType).name) { + return (classType).name; + } + // source: http://stackoverflow.com/a/13914278/702357 + if (classType && classType.constructor) { + let className = classType.toString(); + if (className) { + // classType.toString() is "function classType (...) { ... }" + let matchParts = className.match(/function\s*(\w+)/); + if (matchParts && matchParts.length === 2) { + return matchParts[1]; + } + } + + // for browsers which have name property in the constructor + // of the object, such as chrome + if ((classType.constructor).name) { + return (classType.constructor).name; + } + + if (classType.constructor.toString()) { + var str = classType.constructor.toString(); + + if (str.charAt(0) === '[') { + // executed if the return of object.constructor.toString() is "[object objectClass]" + var arr = str.match(/\[\w+\s*(\w+)\]/); + } else { + // executed if the return of object.constructor.toString() is "function objectClass () {}" + // (IE and Firefox) + var arr = str.match(/function\s*(\w+)/); + } + + if (arr && arr.length === 2) { + return arr[1]; + } + } + } + + throw new Error(`Unable to extract class name from type '${classType}'`); + } + } + + class AssertConfigPropertiesProp { + prop: string = undefined; // TODO Wiki: properties are only available when initialized: http://stackoverflow.com/a/20534039/702357 + } + + class AssertConfigPropertiesProp2 { + prop2: string = undefined; + } + + class AssertConfigPropertiesPropProp2 { + prop: string = undefined; + prop2: string = undefined; + } + + class ClassA { + public propA: string; + } + + class ClassB { + public propA: string; + } + + class ClassC { + public propA: string; + } + + class DemoToBusinessType { + } + + class CustomTypeConverterInstance extends TypeConverter { + public convert(resolutionContext: IResolutionContext): any { + return { propA: resolutionContext.sourceValue.propA + ' (convertUsing with a class instance)' }; + } + } + + class CustomTypeConverterDefinition extends TypeConverter { + public convert(resolutionContext: IResolutionContext): any { + return { propA: resolutionContext.sourceValue.propA + ' (convertUsing with a class definition)' }; + } + } + + class PascalCaseToCamelCaseMappingProfile extends Profile { + public sourceMemberNamingConvention: INamingConvention; + public destinationMemberNamingConvention: INamingConvention; + + public profileName = 'PascalCaseToCamelCase'; + + public configure() { + this.sourceMemberNamingConvention = new PascalCaseNamingConvention(); + this.destinationMemberNamingConvention = new CamelCaseNamingConvention(); + + super.createMap('a', 'b'); + } + } + + class CamelCaseToPascalCaseMappingProfile extends Profile { + public sourceMemberNamingConvention: INamingConvention; + public destinationMemberNamingConvention: INamingConvention; + + public profileName = 'CamelCaseToPascalCase'; + + public configure() { + this.sourceMemberNamingConvention = new CamelCaseNamingConvention(); + this.destinationMemberNamingConvention = new PascalCaseNamingConvention(); + } + } + + class ValidatedAgeMappingProfile extends Profile { + public profileName = 'ValidatedAgeMappingProfile'; + + public configure() { + const sourceKey = '{808D9D7F-AA89-4D07-917E-A528F078E642}'; + const destinationKey = '{808D9D6F-BA89-4D17-915E-A528E178EE64}'; + + this.createMap(sourceKey, destinationKey) + .forMember('proclaimedAge', (opts: IMemberConfigurationOptions) => opts.ignore()) + .forMember('age', (opts: IMemberConfigurationOptions) => opts.mapFrom('ageOnId')) + .convertToType(Person); + } + } + + class ValidatedAgeMappingProfile2 extends Profile { + public profileName = 'ValidatedAgeMappingProfile2'; + + public configure() { + const sourceKey = '{918D9D7F-AA89-4D07-917E-A528F07EEF42}'; + const destinationKey = '{908D9D6F-BA89-4D17-915E-A528E988EE64}'; + + this.createMap(sourceKey, destinationKey) + .forMember('proclaimedAge', (opts: IMemberConfigurationOptions) => opts.ignore()) + .forMember('age', (opts: IMemberConfigurationOptions) => opts.mapFrom('ageOnId')) + .convertToType(Person); + } + } + + class Person { + fullName: string; + age: number; + } + + class BeerBuyingYoungster extends Person { + } + class ExtendJasmine { + public static addCustomMatchers(): jasmine.CustomMatcherFactories { + var customMatchers: jasmine.CustomMatcherFactories = { + /** toEqualData compares to data objects using property matching */ + toEqualData: (util: jasmine.MatchersUtil, customEqualityTesters: Array): any => { + return { + compare: function (actual: any, expected: any): jasmine.CustomMatcherResult { + var pass = ExtendJasmine.equalsData(actual, expected); + return { + pass: pass, + message: pass + ? 'Data sets do equal. Congratulations ;) !' + : 'Data sets do not equal: expected "' + JSON.stringify(expected) + '", actual "' + JSON.stringify(actual) + '".' + }; + } + }; + }, + "fail": (util: jasmine.MatchersUtil, customEqualityTesters: Array): any => { + return { + compare: function (actual: any, message: string): jasmine.CustomMatcherResult { + return { + pass: false, + message: message || 'Jasmine test failed. Please provide a fix.' + }; + } + } + } + }; + return customMatchers; + } + + public static equalsData(actual: any, expected: any): boolean { + var toClass = {}.toString; + + // check array. + var actualType = toClass.call(actual); + var expectedType = toClass.call(expected); + + if (actualType === '[object Array]') { + // check both are arrays + if (expectedType !== '[object Array]') { + return false; + } + + // check both have same length + if (expected.length !== actual.length) { + return false; + } + + for (var i = 0; i < actual.length; i++) { + // check each item in the array + if (!ExtendJasmine.equalsData(actual[i], expected[i])) + return false; + } + } + else if (actualType === '[object Object]') { + // check both are objects + if (expectedType !== '[object Object]') { + return false; + } + + // check each property in the object + for (var propertyName in expected) { + if (!expected.hasOwnProperty(propertyName)) { + continue; + } + + if (!actual.hasOwnProperty(propertyName)) { + return false; + } + + if (!ExtendJasmine.equalsData(actual[propertyName], expected[propertyName])) + return false; + } + } else { + var actualIsUndefined = typeof actual === 'undefined'; + var expectedIsUndefined = typeof expected === 'undefined'; + if (actualIsUndefined !== expectedIsUndefined) { + return false; + } + + return actual === expected; + } + + return true; + } + } +} \ No newline at end of file diff --git a/automapper-ts/automapper-ts.d.ts b/automapper-ts/automapper-ts.d.ts new file mode 100644 index 0000000000..b2bf17a966 --- /dev/null +++ b/automapper-ts/automapper-ts.d.ts @@ -0,0 +1,559 @@ +// Type definitions for automapper-ts +// Project: https://github.com/loedeman/AutoMapper +// Definitions by: Bert Loedeman +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +declare module AutoMapperJs { + /** + * AutoMapper implementation, for both creating maps and performing maps. Comparable usage and functionality to the original + * .NET AutoMapper library is the pursuit of this implementation. + */ + class AutoMapper { + /** + * Initializes the mapper with the supplied configuration. + * @param {(config: IConfiguration) => void} Configuration function to call. + */ + initialize(configFunction: (config: IConfiguration) => void): void; + + /** + * Create a createMap curry function which expects only a destination key. + * @param {string} sourceKey The map source key. + * @returns {(destinationKey: string) => ICreateMapFluentFunctions} + */ + createMap(sourceKey: string | (new() => any)): (destinationKey: string | (new() => any)) => ICreateMapFluentFunctions; + + /** + * Create a mapping profile. + * @param {string} sourceKey The map source key. + * @param {string} destinationKey The map destination key. + * @returns {Core.ICreateMapFluentFunctions} + */ + createMap(sourceKey: string | (new() => any), destinationKey: string | (new() => any)): ICreateMapFluentFunctions; + + /** + * Create a map curry function which expects a destination key and a source object. + * @param sourceKey Source key, for instance the source type name. + * @returns {(destinationKey: string, sourceObject: any) => any} + */ + map(sourceKey: string | (new() => any)): (destinationKey: string | (new() => any), sourceObject: any) => any; + + /** + * Create a map curry function which expects only a source object. + * @param sourceKey Source key, for instance the source type name. + * @param destinationKey Destination key, for instance the destination type name. + * @returns {(sourceObject: any) => any} + */ + map(sourceKey: string | (new() => any), destinationKey: string | (new() => any)): (sourceObject: any) => any; + + /** + * Execute a mapping from the source object to a new destination object with explicit mapping configuration and supplied mapping options (using createMap). + * @param sourceKey Source key, for instance the source type name. + * @param destinationKey Destination key, for instance the destination type name. + * @param sourceObject The source object to map. + * @returns {any} Destination object. + */ + map(sourceKey: string | (new() => any), destinationKey: string | (new() => any), sourceObject: any): any; + + /** + * Create a mapAsync curry function which expects a destination key, a source object and a callback function. + * @param sourceKey Source key, for instance the source type name. + * @returns {(destinationKey: string, sourceObject: any, callback: IMapCallback) => void} + */ + mapAsync(sourceKey: string | (new() => any)): (destinationKey: string | (new() => any), sourceObject: any, callback: IMapCallback) => void; + + /** + * Create a map curry function which expects only a source object and a callback function. + * @param sourceKey Source key, for instance the source type name. + * @param destinationKey Destination key, for instance the destination type name. + * @param sourceObject The source object to map. + * @returns {(callback: IMapCallback) => void} + */ + mapAsync(sourceKey: string | (new() => any), destinationKey: string | (new() => any), sourceObject: any): (callback: IMapCallback) => void; + + /** + * Create a map curry function which expects only a source object and a callback function. + * @param sourceKey Source key, for instance the source type name. + * @param destinationKey Destination key, for instance the destination type name. + * @returns {(sourceObject: any, callback: IMapCallback) => void} + */ + mapAsync(sourceKey: string | (new() => any), destinationKey: string | (new() => any)): (sourceObject: any, callback: IMapCallback) => void; + + /** + * Execute an asynchronous mapping from the source object to a new destination object with explicit mapping configuration and supplied mapping options (using createMap). + * @param sourceKey Source key, for instance the source type name. + * @param destinationKey Destination key, for instance the destination type name. + * @param sourceObject The source object to map. + * @param {IMapCallback} callback The callback to call when asynchronous mapping is complete. + */ + mapAsync(sourceKey: string | (new() => any), destinationKey: string | (new() => any), sourceObject: any, callback: IMapCallback): void; + + /** + * Validates mapping configuration by dry-running. Since JS does not + * fully support typing, it only checks if properties match on both + * sides. The function needs IMapping.sourceTypeClass and + * IMapping.destinationTypeClass to function. + * @param {boolean} strictMode Whether or not to fail when properties + * sourceTypeClass or destinationTypeClass + * are unavailable. + */ + assertConfigurationIsValid(strictMode?: boolean): void; + } + + class AsyncAutoMapper { + /* For Test Purposes Only */ + } + + /** + * Converts source type to destination type instead of normal member mapping + */ + class TypeConverter implements ITypeConverter { + /** + * Performs conversion from source to destination type. + * @param {IResolutionContext} resolutionContext Resolution context. + * @returns {any} Destination object. + */ + convert(resolutionContext: IResolutionContext): any; + } + + export class Profile implements IProfile { + /** Profile name */ + public profileName: string; + + /** Naming convention for source members */ + public sourceMemberNamingConvention: INamingConvention; + + /** Naming convention for destination members */ + public destinationMemberNamingConvention: INamingConvention; + + /** + * Create a createMap curry function which expects only a destination key. + * @param {string} sourceKey The map source key. + * @returns {(destinationKey: string) => ICreateMapFluentFunctions} + */ + protected createMap(sourceKey: string): (destinationKey: string) => ICreateMapFluentFunctions; + + /** + * Create a mapping profile. + * @param {string} sourceKey The map source key. + * @param {string} destinationKey The map destination key. + * @returns {Core.ICreateMapFluentFunctions} + */ + protected createMap(sourceKey: string, destinationKey: string): ICreateMapFluentFunctions; + + /** + * Implement this method in a derived class and call the CreateMap method to associate that map with this profile. + * Avoid calling the AutoMapper class / automapper instance from this method. + */ + public configure(): void; + } + + /** + * Defines the PascalCase naming convention strategy. + */ + class PascalCaseNamingConvention implements INamingConvention { + /** Regular expression on how to tokenize a member. */ + splittingExpression: RegExp; + + /** Character to separate on. */ + separatorCharacter: string; + + /** + * Transformation function called when this convention is the destination naming convention. + * @param {string[]} sourcePropertyNameParts Array containing tokenized source property name parts. + * @returns {string} Destination property name + */ + transformPropertyName(sourcePropertyNameParts: string[]): string; + } + + /** + * Defines the camelCase naming convention strategy. + */ + class CamelCaseNamingConvention implements INamingConvention { + /** Regular expression on how to tokenize a member. */ + splittingExpression: RegExp; + + /** Character to separate on. */ + separatorCharacter: string; + + /** + * Transformation function called when this convention is the destination naming convention. + * @param {string[]} sourcePropertyNameParts Array containing tokenized source property name parts. + * @returns {string} Destination property name + */ + transformPropertyName(sourcePropertyNameParts: string[]): string; + } + + + + interface IProperty { + name: string; + metadata: IPropertyMetadata; + level: number; + sourceMapping: boolean; + ignore: boolean; + async: boolean; + children?: IProperty[]; + destinations?: IProperty[]; + conversionValuesAndFunctions: any[]; + conditionFunction?: (sourceObject: any) => boolean; + } + + interface IPropertyMetadata { + mapping: IMapping; + root: IProperty; + parent: IProperty; + destinations: {[name: string]: IPropertyDestinationMetadata}; + destinationCount: number; + } + + interface IPropertyDestinationMetadata { + source: IProperty; + destination: IProperty; + } + + interface IMemberMappingMetaData { + destination: string; + source: string; + sourceMapping: boolean; + ignore: boolean; + async: boolean; + condition: (sourceObject: any) => boolean; + } + + /** + * Member mapping properties. + */ + interface IForMemberMapping { + /** The source member property name. */ + sourceProperty: string; + /** The destination member property name parts for nested property support (e.g. 'type.name'). */ + destinationProperty: string; + /** Source or destination mapping. */ + sourceMapping: boolean; + /** All mapping values and/or functions resulting from stacked for(Source)Member calls. */ + mappingValuesAndFunctions: Array; + /** Whether or not this destination property must be ignored. */ + ignore: boolean; + /** Whether or not this member mapping has an asynchronous mapping function. */ + async: boolean; + /** + * The object will only be mapped when the condition is met. + * @param {any} sourceObject The source object to check. + * @returns {boolean} + */ + conditionFunction: (sourceObject: any) => boolean; + } + + /** + * Interface for returning an object with available 'sub' functions to enable method chaining (e.g. automapper.createMap().forMember().forMember() ...) + */ + interface ICreateMapFluentFunctions { + /** + * Customize configuration for an individual destination member. + * @param sourceProperty The destination member property name. + * @param valueOrFunction The value or function to use for this individual member. + * @returns {IAutoMapperCreateMapChainingFunctions} + */ + forMember: (sourceProperty: string, valueOrFunction: any | + ((opts: IMemberConfigurationOptions) => any) | + ((opts: IMemberConfigurationOptions, cb: IMemberCallback) => void)) => ICreateMapFluentFunctions; + + /** + * Customize configuration for an individual source member. + * @param sourceProperty The source member property name. + * @param sourceMemberConfigFunction The function to use for this individual member. + * @returns {IAutoMapperCreateMapChainingFunctions} + */ + forSourceMember: (sourceProperty: string, + sourceMemberConfigFunction: ((opts: ISourceMemberConfigurationOptions) => any) | + ((opts: ISourceMemberConfigurationOptions, cb: IMemberCallback) => void) + ) => ICreateMapFluentFunctions; + + /** + * Customize configuration for all destination members. + * @param func The function to use for this individual member. + * @returns {IAutoMapperCreateMapChainingFunctions} + */ + forAllMembers: (func: (destinationObject: any, destinationPropertyName: string, value: any) => void) => ICreateMapFluentFunctions; + + /** + * Ignore all members not specified explicitly. + */ + ignoreAllNonExisting: () => ICreateMapFluentFunctions; + + /** + * Skip normal member mapping and convert using a custom type converter (instantiated during mapping). + * @param typeConverterClassOrFunction The converter class or function to use when converting. + */ + convertUsing: (typeConverterClassOrFunction: ((resolutionContext: IResolutionContext) => any) | + ((resolutionContext: IResolutionContext, callback: IMapCallback) => void) | + ITypeConverter | + (new() => ITypeConverter) + ) => void; + + /** + * Specify to which class type AutoMapper should convert. When specified, AutoMapper will create an instance of the given type, instead of returning a new object literal. + * @param typeClass The destination type class. + * @returns {IAutoMapperCreateMapChainingFunctions} + */ + convertToType: (typeClass: new () => any) => ICreateMapFluentFunctions; + + /** + * Specify which profile should be used when mapping. + * @param {string} profileName The profile name. + * @returns {IAutoMapperCreateMapChainingFunctions} + */ + withProfile: (profileName: string) => void; + } + + /** + * The mapping configuration for the current mapping keys/types. + */ + interface IMapping { + /** The mapping source key. */ + sourceKey: string; + + /** The mapping destination key. */ + destinationKey: string; + + /** The mappings for forAllMembers functions. */ + forAllMemberMappings: Array<(destinationObject: any, destinationPropertyName: string, value: any) => void>; + + properties: IProperty[]; + + /** + * Skip normal member mapping and convert using a type converter. + * @param resolutionContext Context information regarding resolution of a destination value + * @returns {any} Destination object. + */ + typeConverterFunction: ((resolutionContext: IResolutionContext) => any) | + ((resolutionContext: IResolutionContext, callback: IMapCallback) => void); + + /** The source type class to convert from. */ + sourceTypeClass: any; + + /** The destination type class to convert to. */ + destinationTypeClass: any; + + /** The profile used when mapping. */ + profile?: IProfile; + + /** Whether or not to ignore all properties not specified using createMap. */ + ignoreAllNonExisting?: boolean; + + /** Whether or not an mapping has to be asynchronous. */ + async: boolean; + + /* + * PERFORMANCE ENHANCEMENTS + */ + + /** + * Item mapping function to use. + */ + mapItemFunction: IMapItemFunction | IAsyncMapItemFunction; + } + + // export interface IMappingMapOptimized extends IMapping { + // final: boolean; + // forMemberMappingsArray: Array; + // } + + /** + * Context information regarding resolution of a destination value + */ + export interface IResolutionContext { + /** Source value */ + sourceValue: any; + + /** Destination value */ + destinationValue: any; + + /** Source property name */ + sourcePropertyName?: string; + + /** Destination property name */ + destinationPropertyName?: string; + + /** Index of current collection mapping */ + arrayIndex?: number; + } + + /** + * Configuration options for forMember mapping function. + */ + interface IMemberConfigurationOptions { + /** + * Map from a custom source property name. + * @param sourcePropertyName The source property to map. + */ + mapFrom: (sourcePropertyName: string) => void; + + /** + * When this configuration function is used, the (destination) property is ignored + * when mapping. + */ + ignore?: () => void; + + /** + * If specified, the property will only be mapped when the condition is fulfilled. + */ + condition: (predicate: ((sourceObject: any) => boolean)) => void; + + /** The source object to map. */ + sourceObject: any; + + /** The source property to map. */ + sourcePropertyName: string; + + /** + * The intermediate destination property value, used for stacking multiple for(Source)Member calls + * while elaborating the intermediate result. + */ + intermediatePropertyValue: any; + } + + /** + * Configuration options for forSourceMember mapping function. + */ + interface ISourceMemberConfigurationOptions { + /** + * When this configuration function is used, the source property is ignored + * when mapping. + */ + ignore: () => void; + } + + /** + * Member callback interface + */ + interface IMemberCallback { + /** + * Callback function to call when the async operation is executed. + * @param {any} callbackValue Callback value to be used as output for the for(Source)Member call. + */ + (callbackValue: any): void; + } + + /** + * Member callback interface + */ + interface IMapCallback { + /** + * Callback function to call when the async operation is executed. + * @param {any} result Callback value to be used as output for the mapAsync call. + */ + (result: any): void; + } + + /** + * Converts source type to destination type instead of normal member mapping + */ + export interface ITypeConverter { + /** + * Performs conversion from source to destination type. + * @param {IResolutionContext} resolutionContext Resolution context. + * @returns {any} Destination object. + */ + convert: (resolutionContext: IResolutionContext) => any; + } + + /** + * Defines a naming convention strategy. + */ + export interface INamingConvention { + /** Regular expression on how to tokenize a member. */ + splittingExpression: RegExp; + + /** Character to separate on. */ + separatorCharacter: string; + + /** + * Transformation function called when this convention is the destination naming convention. + * @param {string[]} sourcePropertyNameParts Array containing tokenized source property name parts. + * @returns {string} Destination property name + */ + transformPropertyName: (sourcePropertyNameParts: string[]) => string; + } + + /** + * Configuration for profile-specific maps. + */ + export interface IConfiguration { + /** + * Add an existing profile + * @param profile {IProfile} Profile to add. + */ + addProfile(profile: IProfile): void; + + /** + * Create a createMap curry function which expects only a destination key. + * @param {string} sourceKey The map source key. + * @returns {(destinationKey: string) => IAutoMapperCreateMapChainingFunctions} + */ + createMap?(sourceKey: string): (destinationKey: string) => ICreateMapFluentFunctions; + + /** + * Create a mapping profile. + * @param {string} sourceKey The map source key. + * @param {string} destinationKey The map destination key. + * @returns {Core.IAutoMapperCreateMapChainingFunctions} + */ + createMap?(sourceKey: string, destinationKey: string): ICreateMapFluentFunctions; + } + + /** + * Provides a named configuration for maps. Naming conventions become scoped per profile. + */ + export interface IProfile { + /** Profile name */ + profileName: string; + + /** Naming convention for source members */ + sourceMemberNamingConvention: INamingConvention; + + /** Naming convention for destination members */ + destinationMemberNamingConvention: INamingConvention; + + /** + * Implement this method in a derived class and call the CreateMap method to associate that map with this profile. + * Avoid calling the AutoMapper class / automapper instance from this method. + */ + configure: () => void; + } + + export interface IMapItemFunction { + (mapping: IMapping, sourceObject: any, destinationObject: any): any; + } + + export interface IAsyncMapItemFunction { + (mapping: IMapping, sourceObject: any, destinationObject: any, callback: IMapCallback): void; + } + + interface ICreateMapParameters { + mapping: IMapping; + destinationProperty: string; + conversionValueOrFunction: any; + sourceMapping: boolean; + fluentFunctions: ICreateMapFluentFunctions; + } + + interface IGetOrCreatePropertyParameters { + propertyNameParts: string[]; + mapping: IMapping; + parent?: IProperty; + propertyArray: IProperty[]; + destination?: string; + sourceMapping: boolean; + } + + interface ICreatePropertyParameters { + name: string; + mapping: IMapping; + parent: IProperty; + propertyArray: IProperty[]; + sourceMapping: boolean; + } +} + +declare var automapper: AutoMapperJs.AutoMapper; \ No newline at end of file From 6f000f4a2409b3f7737eb48896002f1970c75519 Mon Sep 17 00:00:00 2001 From: "Dmitry A. Efimenko" Date: Tue, 25 Oct 2016 07:17:34 -0700 Subject: [PATCH 045/111] add prompt() override returning promise (#12172) according to [docs](https://www.npmjs.com/package/inquirer#inquirerpromptquestions---promise) --- inquirer/inquirer.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/inquirer/inquirer.d.ts b/inquirer/inquirer.d.ts index 032740b31c..2abd6e6d53 100644 --- a/inquirer/inquirer.d.ts +++ b/inquirer/inquirer.d.ts @@ -33,6 +33,7 @@ declare module "inquirer" { * @return */ prompt(questions: Questions, cb?: (answers: Answers) => any): ui.Prompt; + prompt(questions: Questions): Promise; prompts: Prompts; Separator: objects.SeparatorStatic; ui: { From 9f18cfbe989d0a8299e0decd99f47e76db2901b8 Mon Sep 17 00:00:00 2001 From: Mohsen Azimi Date: Tue, 25 Oct 2016 07:22:20 -0700 Subject: [PATCH 046/111] Add stats to config (#12023) * Add stats to config Reference https://github.com/webpack/extract-text-webpack-plugin/issues/35#issuecomment-176689891 * Update webpack.d.ts --- webpack-dev-server/webpack-dev-server.d.ts | 2 +- webpack/webpack.d.ts | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/webpack-dev-server/webpack-dev-server.d.ts b/webpack-dev-server/webpack-dev-server.d.ts index 9abc2004eb..c58a44ff7f 100644 --- a/webpack-dev-server/webpack-dev-server.d.ts +++ b/webpack-dev-server/webpack-dev-server.d.ts @@ -29,7 +29,7 @@ declare module "webpack-dev-server" { watchOptions?: webpack.WatchOptions; publicPath: string; headers?: any; - stats?: webpack.compiler.StatsToJsonOptions | webpack.compiler.StatsToStringOptions; + stats?: webpack.compiler.StatsOptions| webpack.compiler.StatsToStringOptions; setup?(app: core.Express): void; } diff --git a/webpack/webpack.d.ts b/webpack/webpack.d.ts index 42dbc81e05..b53d44bfb8 100644 --- a/webpack/webpack.d.ts +++ b/webpack/webpack.d.ts @@ -63,6 +63,8 @@ declare module "webpack" { recordsOutputPath?: string; /** Add additional plugins to the compiler. */ plugins?: (Plugin|Function)[]; + /** Stats options for logging */ + stats?: compiler.StatsOptions; } interface Entry { @@ -482,12 +484,12 @@ declare module "webpack" { /** Returns true if there were warnings while compiling. */ hasWarnings(): boolean; /** Return information as json object */ - toJson(options?: StatsToJsonOptions): any; //TODO: type this + toJson(options?: StatsOptions): any; //TODO: type this /** Returns a formatted string of the result. */ toString(options?: StatsToStringOptions): string; } - interface StatsToJsonOptions { + interface StatsOptions { /** context directory for request shortening */ context?: boolean; /** add the hash of the compilation */ @@ -524,7 +526,7 @@ declare module "webpack" { assetsSort?: string; } - interface StatsToStringOptions extends StatsToJsonOptions { + interface StatsToStringOptions extends StatsOptions { /** With console colors */ colors?: boolean; } From dab1b23f46df7c93051894071f84c3fd269e28d2 Mon Sep 17 00:00:00 2001 From: Pavel Birukov Date: Tue, 25 Oct 2016 15:23:39 +0100 Subject: [PATCH 047/111] Add .observe() to Observable (which is added in 3.3.0) (#11973) --- kefir/kefir-tests.ts | 13 +++++++++++++ kefir/kefir.d.ts | 20 +++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/kefir/kefir-tests.ts b/kefir/kefir-tests.ts index 94300550b4..e706f51159 100644 --- a/kefir/kefir-tests.ts +++ b/kefir/kefir-tests.ts @@ -70,6 +70,19 @@ import { Observable, ObservablePool, Stream, Property, Event, Emitter } from 'ke Kefir.sequentially(1000, [1, 2]).log('my stream'); Kefir.sequentially(1000, [1, 2]).offLog('my stream'); Kefir.sequentially(1000, [1, 2]).toPromise().then((x: number) => console.log('fulfilled with:', x)); + Kefir.sequentially(1000, [1, 2]).observe({}); + Kefir.sequentially(1000, [1, 2]).observe({ + value: _ => {}, + error: _ => {}, + end: () => {}, + }); + Kefir.sequentially(1000, [1, 2]).observe(); + const subscription = Kefir.sequentially(1000, [1, 2]).observe( + _ => {}, + _ => {}, + () => {} + ); + if (!subscription.closed) subscription.unsubscribe(); } // Modify an observable diff --git a/kefir/kefir.d.ts b/kefir/kefir.d.ts index e726dba915..d2d32c92d8 100644 --- a/kefir/kefir.d.ts +++ b/kefir/kefir.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Kefir 3.2.0 +// Type definitions for Kefir 3.3.0 // Project: http://rpominov.github.io/kefir/ // Definitions by: Aya Morisawa // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -7,6 +7,17 @@ declare module "kefir" { + export interface Subscription { + unsubscribe(): void; + closed: boolean; // Actually, `readonly` but it's avaiable in tsc starting with 2.0.0 + } + + export interface Observer { + value?: (value: T) => void; + error?: (error: S) => void; + end?: () => void; + } + export interface Observable { // Subscribe / add side effects onValue(callback: (value: T) => void): void; @@ -22,6 +33,13 @@ declare module "kefir" { flatten(transformer?: (value: T) => U[]): Stream; toPromise(PromiseConstructor?: any): any; toESObservable(): any; + // This method is designed to replace all other methods for subscribing + observe(params: Observer): Subscription; + observe( + onValue?: (value: T) => void, + onError?: (error: S) => void, + onEnd?: () => void + ): Subscription; } export interface Stream extends Observable { From 55f61799509836ce672e7763ecc249942b029275 Mon Sep 17 00:00:00 2001 From: Sumit Date: Tue, 25 Oct 2016 15:48:44 +0100 Subject: [PATCH 048/111] Updating Quill definitions to 1.1.0. Added more interfaces from the Quill framework. Also changed top level namespace to Quill as requested by some users. (#12147) --- quill/quill-tests.ts | 17 +++--- quill/quill.d.ts | 123 ++++++++++++++++++++++++++++--------------- 2 files changed, 92 insertions(+), 48 deletions(-) diff --git a/quill/quill-tests.ts b/quill/quill-tests.ts index 172b5fd461..b642611a54 100644 --- a/quill/quill-tests.ts +++ b/quill/quill-tests.ts @@ -1,4 +1,4 @@ -/// +/// function test_quill() { var quillEditor = new Quill('#editor', { @@ -25,9 +25,14 @@ function test_enable() { quillEditor.enable(); } +function test_enable_false() { + let quillEditor = new Quill('#Editor'); + quillEditor.enable(false); +} + function test_getContents() { var quillEditor = new Quill('#editor'); - var delta: QuillJS.DeltaStatic = quillEditor.getContents(); + var delta: Quill.DeltaStatic = quillEditor.getContents(); } function test_getLength() { @@ -95,24 +100,24 @@ function test_insertEmbed() { function test_updateContents() { var quillEditor = new Quill('#editor'); - quillEditor.updateContents({ + quillEditor.updateContents(new Delta({ ops: [ { retain: 6 }, // Keep 'Hello ' { delete: 5 }, // 'World' is deleted { insert: 'Quill' }, // Insert 'Quill' { retain: 1, attributes: { bold: true } } // Apply bold to exclamation mark ] - }); + })); } function test_setContents() { var quillEditor = new Quill('#editor'); - quillEditor.setContents([ + quillEditor.setContents(new Delta({ ops: [ { insert: 'Hello ' }, { insert: 'World!', attributes: { bold: true } }, { insert: '\n' } - ]); + ]})); } function test_setText() { diff --git a/quill/quill.d.ts b/quill/quill.d.ts index 8bd99d9496..7fa3788a5a 100644 --- a/quill/quill.d.ts +++ b/quill/quill.d.ts @@ -1,17 +1,33 @@ -// Type definitions for Quill v1.0.3 +// Type definitions for Quill v1.1.0 // Project: http://quilljs.com // Definitions by: Sumit // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -declare namespace QuillJS { +declare namespace Quill { + + type Key = { key: string, shortKey?: boolean }; + type Sources = "api" | "user" | "silent"; + type Formats = { [key: string]: any }; + + export interface KeyboardStatic { + addBinding(key: Key, callback: (range: RangeStatic, context: any) => void): void; + addBinding(key: Key, context: any, callback: (range: RangeStatic, context: any) => void) : void; + } + + export interface ClipboardStatic { + addMatcher(selector: string, callback: (node: any, delta: DeltaStatic) => DeltaStatic) : void; + addMatcher(nodeType: number, callback: (node: any, delta: DeltaStatic) => DeltaStatic) : void; + dangerouslyPasteHTML(html: string, source?: Sources): void; + dangerouslyPasteHTML(index: number, html: string, source?: Sources): void; + } export interface QuillOptionsStatic { debug?: string, - modules?: { [key: string]: any }, + modules?: Formats, placeholder?: string, readOnly?: boolean, theme?: string, - formats?: string[] + formats?: string[] } export interface BoundsStatic { @@ -22,11 +38,26 @@ declare namespace QuillJS { } export interface DeltaStatic { + new (ops: Array) : DeltaStatic; + new (ops: any) : DeltaStatic; ops?: Array; - retain?: any, - delete?: any, - insert?: any, - attributes?: any + retain(length: number, attributes: any) : DeltaStatic; + delete(length: number) : DeltaStatic; + filter(predicate: any) : DeltaStatic; + forEach(predicate: any) : DeltaStatic; + insert(text: any, attributes: any): DeltaStatic; + map(predicate: any) : DeltaStatic; + partition(predicate: any) : DeltaStatic; + reduce(predicate: any, initial: number): DeltaStatic; + chop() : DeltaStatic; + length(): number; + slice(start: number, end: number): DeltaStatic; + compose(other: any): DeltaStatic; + concat(other: DeltaStatic): DeltaStatic; + diff(other: DeltaStatic, index: number) : DeltaStatic; + eachLine(predicate: any, newline: any) : DeltaStatic; + transform(other: any, priority: any) : DeltaStatic; + transformPosition(index: number, priority: any) : DeltaStatic; } export interface RangeStatic { @@ -35,62 +66,70 @@ declare namespace QuillJS { length: number; } - type sourceType = "api" | "user" | "silent"; - type formatsType = { [key: string]: any }; - - export interface QuillStatic { - new (container: string | Element, options?: QuillOptionsStatic): QuillStatic; - deleteText(start: number, end: number, source?: sourceType): void; + export interface Quill { + new (container: string | Element, options?: QuillOptionsStatic): Quill; + deleteText(index: number, length: number, source?: Sources): void; disable(): void; enable(enabled?: boolean): void; - getContents(start?: number, end?: number): DeltaStatic; + getContents(index?: number, length?: number): DeltaStatic; getLength(): number; - getText(start?: number, end?: number): string; - insertEmbed(index: number, type: string, url: string, source?: sourceType): void; - insertText(index: number, text: string, source?: sourceType): void; - insertText(index: number, text: string, format: string, value: string, source?: sourceType): void; - insertText(index: number, text: string, formats: formatsType, source?: sourceType): void; - pasteHTML(index: number, html: string, source?:sourceType): string; - pasteHTML(html:string, source?: sourceType): string; - setContents(delta: DeltaStatic, source?: sourceType): void; - setText(text: string, source?: sourceType): void; + getText(index?: number, length?: number): string; + insertEmbed(index: number, type: string, value: any, source?: Sources): void; + insertText(index: number, text: string, source?: Sources): DeltaStatic; + insertText(index: number, text: string, format: string, value: any, source?: Sources): DeltaStatic; + insertText(index: number, text: string, formats: Formats, source?: Sources): DeltaStatic; + /** + * @deprecated Use clipboard.dangerouslyPasteHTML(index: number, html: string, source: Sources) + */ + pasteHTML(index: number, html: string, source?: Sources): string; + /** + * @deprecated Use dangerouslyPasteHTML(html: string, source: Sources): void; + */ + pasteHTML(html: string, source?: Sources): string; + setContents(delta: DeltaStatic, source?: Sources): DeltaStatic; + setText(text: string, source?: Sources): DeltaStatic; update(source?: string): void; - updateContents(delta: DeltaStatic, source?: sourceType): void; + updateContents(delta: DeltaStatic, source?: Sources): DeltaStatic; - format(name: string, value: any, source?: sourceType): void; - formatLine(index: number, length: number, source?: sourceType): void; - formatLine(index: number, length: number, format: string, value: any, source?: sourceType): void; - formatLine(index: number, length: number, formats: formatsType, source?: sourceType): void; - formatText(index: number, length: number, source?: sourceType): void; - formatText(index: number, length: number, format: string, value: any, source?: sourceType): void; - formatText(index: number, length: number, formats: formatsType, source?: sourceType): void; - getFormat(range?: RangeStatic): formatsType; - getFormat(index: number, length?: number): formatsType; - removeFormat(index: Number, length: Number, source?: sourceType): void; + format(name: string, value: any, source?: Sources): DeltaStatic; + formatLine(index: number, length: number, source?: Sources): DeltaStatic; + formatLine(index: number, length: number, format: string, value: any, source?: Sources): DeltaStatic; + formatLine(index: number, length: number, formats: Formats, source?: Sources): DeltaStatic; + formatText(index: number, length: number, source?: Sources): DeltaStatic; + formatText(index: number, length: number, format: string, value: any, source?: Sources): DeltaStatic; + formatText(index: number, length: number, formats: Formats, source?: Sources): DeltaStatic; + getFormat(range?: RangeStatic): Formats; + getFormat(index: number, length?: number): Formats; + removeFormat(index: number, length: number, source?: Sources): void; blur(): void; focus(): void; getBounds(index: number, length?: number): BoundsStatic; getSelection(focus?: boolean): RangeStatic; hasFocus(): boolean; - setSelection(index: number, length: number, source?: sourceType): void; - setSelection(range: RangeStatic, source?: sourceType): void; + setSelection(index: number, length: number, source?: Sources): void; + setSelection(range: RangeStatic, source?: Sources): void; on(eventName: string, callback: ((delta: T, oldContents: T, source: string) => void) | - ((name: string, ...args: any[]) => void)): QuillStatic; - once(eventName: string, callback: (delta: DeltaStatic, source: string) => void): QuillStatic; - off(eventName: string, callback: (delta: DeltaStatic, source: string) => void): QuillStatic; + ((name: string, ...args: any[]) => void)): Quill; + once(eventName: string, callback: (delta: DeltaStatic, source: string) => void): Quill; + off(eventName: string, callback: (delta: DeltaStatic, source: string) => void): Quill; debug(level: string): void; import(path: string): any; register(path: string, def: any, suppressWarning?: boolean): void; - register(defs: formatsType, suppressWarning?: boolean): void; + register(defs: Formats, suppressWarning?: boolean): void; addContainer(className: string, refNode?: any): any; + addContainer(domNode: any, refNode?: any): any; getModule(name: string): any + + clipboard: ClipboardStatic; } } -declare var Quill: QuillJS.QuillStatic; +declare var Quill: Quill.Quill; + +declare var Delta: Quill.DeltaStatic; declare module "quill" { export = Quill; From d290d688b339e3609e77da9db008709e9051bb18 Mon Sep 17 00:00:00 2001 From: Duy Dao Date: Tue, 25 Oct 2016 16:54:01 +0200 Subject: [PATCH 049/111] Update redux-storage-decorator-filter to 1.1.6 (#12067) Added support for blacklist. --- redux-storage/redux-storage-tests.ts | 3 ++- redux-storage/redux-storage.d.ts | 25 +++++++++++++++---------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/redux-storage/redux-storage-tests.ts b/redux-storage/redux-storage-tests.ts index 484366c925..93cb732582 100644 --- a/redux-storage/redux-storage-tests.ts +++ b/redux-storage/redux-storage-tests.ts @@ -11,6 +11,7 @@ import createReactNativeAsyncStorageEngine from "redux-storage-engine-reactnativ interface TestState { a: number; b: string; + c: string; } function rootReducer(state: TestState, action: Action): TestState { @@ -19,7 +20,7 @@ function rootReducer(state: TestState, action: Action): TestState { const enhancedReducer = reducer(rootReducer, reduxStorageImmutableMerger); -const storageEngine = createEngine("test"); +const storageEngine = filter(createEngine("test"), ['a', 'b'], ['c']); const initialStateLoader = createLoader(storageEngine); diff --git a/redux-storage/redux-storage.d.ts b/redux-storage/redux-storage.d.ts index e9583d157b..3ff982c50b 100644 --- a/redux-storage/redux-storage.d.ts +++ b/redux-storage/redux-storage.d.ts @@ -26,7 +26,7 @@ declare module "redux-storage" { * Save * @param state */ - save(state: any): PromiseLike + save(state: any): PromiseLike; } export interface StateMerger { @@ -66,28 +66,33 @@ declare module "redux-storage" { declare module "redux-storage-decorator-filter" { import { StorageEngine } from "redux-storage"; - interface WhitelistArg { + interface FilterList { [key: number]: string | string[]; } /** * Filter decorator for redux-storage to only store a subset of the whole state tree. - * @param engine - * @param whitelist + * @param {StorageEngine} engine the redux storage engine + * @param {FilterList} [whitelist=[]] keys that will be stored. + * @param {FilterList} [blacklist=[]] keys that won't be stored. * @example + * import filter from 'redux-storage-decorator-filter'; * engine = filter(engine, [ - * 'simple-key', - * ['nested', 'key'], - * ['another', 'very', 'nested', 'key'] + * 'whitelisted-key', + * ['nested', 'key'], + * ['another', 'very', 'nested', 'key'] + * ], [ + * 'blacklisted-key', + * ['nested', 'blacklisted-key'] * ]); */ - export default function(engine: StorageEngine, whitelist?: WhitelistArg): StorageEngine; + export default function (engine: StorageEngine, whitelist?: FilterList, blacklist?: FilterList): StorageEngine; } declare module "redux-storage-engine-localstorage" { import { StorageEngine } from "redux-storage"; - export interface LocalStorageEngine extends StorageEngine {} + export interface LocalStorageEngine extends StorageEngine { } /** * Create local storage @@ -99,7 +104,7 @@ declare module "redux-storage-engine-localstorage" { declare module "redux-storage-engine-reactnativeasyncstorage" { import { StorageEngine } from "redux-storage"; - export interface ReactNativeAsyncStorageEngine extends StorageEngine {} + export interface ReactNativeAsyncStorageEngine extends StorageEngine { } /** * Create React Native Async Storage From b424d28ab14b2d54b52e7cc7aaeca34cd1dacc11 Mon Sep 17 00:00:00 2001 From: Chris Fisher Date: Wed, 26 Oct 2016 03:58:26 +1300 Subject: [PATCH 050/111] Update react-native.d.ts (#12050) * Update react-native.d.ts Added additional props to NavigationHeaderProps. * Update react-native.d.ts Fixed indentation. * Added more NavigationHeaderProps. Also updated type for NavigationHeaderStatic.Title. --- react-native/react-native.d.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/react-native/react-native.d.ts b/react-native/react-native.d.ts index f215fd3c8b..4cc5d47449 100644 --- a/react-native/react-native.d.ts +++ b/react-native/react-native.d.ts @@ -7502,11 +7502,16 @@ declare namespace __React { export interface NavigationHeaderProps { renderTitleComponent?(props: Object): JSX.Element + renderLeftComponent?(props: Object): JSX.Element + renderRightComponent?(props: Object): JSX.Element onNavigateBack(): void + style?: ViewStyle + viewProps?: any + statusBarHeight?: number | NavigationAnimatedValue } export interface NavigationHeaderStatic extends React.ComponentClass { - Title: JSX.Element + Title: () => JSX.ElementClass HEIGHT: number } From dbd5fbc59a3cfe084a06d80b591ed86987234159 Mon Sep 17 00:00:00 2001 From: Linda_pp Date: Wed, 26 Oct 2016 00:02:42 +0900 Subject: [PATCH 051/111] Add 'react-bytesize-icons' package (#12150) * Add 'react-bytesize-icons' package * Do not use 'import' in augumented module declaration * Remove non-module namespace --- .../react-bytesize-icons-tests.tsx | 10 ++ .../react-bytesize-icons.d.ts | 106 ++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 react-bytesize-icons/react-bytesize-icons-tests.tsx create mode 100644 react-bytesize-icons/react-bytesize-icons.d.ts diff --git a/react-bytesize-icons/react-bytesize-icons-tests.tsx b/react-bytesize-icons/react-bytesize-icons-tests.tsx new file mode 100644 index 0000000000..6247ee49d8 --- /dev/null +++ b/react-bytesize-icons/react-bytesize-icons-tests.tsx @@ -0,0 +1,10 @@ +/// +/// + +import * as React from 'react'; +import {render} from 'react-dom'; +import {Activity, External, Export} from 'react-bytesize-icons'; + +render(, document.getElementById('test')); +render(, document.getElementById('test')); +render(, document.getElementById('test')); diff --git a/react-bytesize-icons/react-bytesize-icons.d.ts b/react-bytesize-icons/react-bytesize-icons.d.ts new file mode 100644 index 0000000000..956ab90cd0 --- /dev/null +++ b/react-bytesize-icons/react-bytesize-icons.d.ts @@ -0,0 +1,106 @@ +// Type definitions for react-bytesize-icons 0.6.4 +// Project: https://github.com/abdelhai/react-bytesize-icons +// Definitions by: rhysd +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +declare module "react-bytesize-icons" { + export type StrokeLinejoin = "round" | "bevel" | "miter" | "inherit"; + export type StrokeLinecap = "round" | "butt" | "square" | "inherit"; + interface BytesizeIconsProps extends __React.Props { + width?: number; + height?: number; + strokeWidth?: string; + strokeLinejoin?: StrokeLinejoin; + strokeLinecap?: StrokeLinecap; + color?: string; + } + export class BytesizeIconComponent extends __React.Component {} + + export class Activity extends BytesizeIconComponent {} + export class Alert extends BytesizeIconComponent {} + export class Archive extends BytesizeIconComponent {} + export class ArrowBottom extends BytesizeIconComponent {} + export class ArrowLeft extends BytesizeIconComponent {} + export class ArrowRight extends BytesizeIconComponent {} + export class ArrowTop extends BytesizeIconComponent {} + export class Backwards extends BytesizeIconComponent {} + export class Ban extends BytesizeIconComponent {} + export class Bell extends BytesizeIconComponent {} + export class Bookmark extends BytesizeIconComponent {} + export class Camera extends BytesizeIconComponent {} + export class CaretBottom extends BytesizeIconComponent {} + export class CaretLeft extends BytesizeIconComponent {} + export class CaretRight extends BytesizeIconComponent {} + export class CaretTop extends BytesizeIconComponent {} + export class Cart extends BytesizeIconComponent {} + export class Checkmark extends BytesizeIconComponent {} + export class ChevronBottom extends BytesizeIconComponent {} + export class ChevronLeft extends BytesizeIconComponent {} + export class ChevronRight extends BytesizeIconComponent {} + export class ChevronTop extends BytesizeIconComponent {} + export class Clock extends BytesizeIconComponent {} + export class Close extends BytesizeIconComponent {} + export class Code extends BytesizeIconComponent {} + export class Compose extends BytesizeIconComponent {} + export class Creditcard extends BytesizeIconComponent {} + export class Download extends BytesizeIconComponent {} + export class Send extends BytesizeIconComponent {} + export class Edit extends BytesizeIconComponent {} + export class Eject extends BytesizeIconComponent {} + export class EllipsisHorizontal extends BytesizeIconComponent {} + export class EllipsisVertical extends BytesizeIconComponent {} + export class End extends BytesizeIconComponent {} + export class Export extends BytesizeIconComponent {} + export class External extends BytesizeIconComponent {} + export class Book extends BytesizeIconComponent {} + export class Calendar extends BytesizeIconComponent {} + export class Print extends BytesizeIconComponent {} + export class Eye extends BytesizeIconComponent {} + export class File extends BytesizeIconComponent {} + export class Fire extends BytesizeIconComponent {} + export class Flag extends BytesizeIconComponent {} + export class FolderOpen extends BytesizeIconComponent {} + export class Folder extends BytesizeIconComponent {} + export class Forwards extends BytesizeIconComponent {} + export class Gift extends BytesizeIconComponent {} + export class Github extends BytesizeIconComponent {} + export class Heart extends BytesizeIconComponent {} + export class Home extends BytesizeIconComponent {} + export class Import extends BytesizeIconComponent {} + export class Inbox extends BytesizeIconComponent {} + export class Info extends BytesizeIconComponent {} + export class Lightning extends BytesizeIconComponent {} + export class Link extends BytesizeIconComponent {} + export class Location extends BytesizeIconComponent {} + export class Lock extends BytesizeIconComponent {} + export class Mail extends BytesizeIconComponent {} + export class Menu extends BytesizeIconComponent {} + export class Message extends BytesizeIconComponent {} + export class Music extends BytesizeIconComponent {} + export class Mute extends BytesizeIconComponent {} + export class Options extends BytesizeIconComponent {} + export class Paperclip extends BytesizeIconComponent {} + export class Pause extends BytesizeIconComponent {} + export class Photo extends BytesizeIconComponent {} + export class Plus extends BytesizeIconComponent {} + export class Minus extends BytesizeIconComponent {} + export class Play extends BytesizeIconComponent {} + export class Portfolio extends BytesizeIconComponent {} + export class Reload extends BytesizeIconComponent {} + export class Reply extends BytesizeIconComponent {} + export class Search extends BytesizeIconComponent {} + export class Settings extends BytesizeIconComponent {} + export class Star extends BytesizeIconComponent {} + export class Start extends BytesizeIconComponent {} + export class Tag extends BytesizeIconComponent {} + export class Trash extends BytesizeIconComponent {} + export class Twitter extends BytesizeIconComponent {} + export class Unlock extends BytesizeIconComponent {} + export class Upload extends BytesizeIconComponent {} + export class User extends BytesizeIconComponent {} + export class Video extends BytesizeIconComponent {} + export class Volume extends BytesizeIconComponent {} + export class Work extends BytesizeIconComponent {} +} From 4e310dbcc077de71388f1370e1621f7fad7a4ff6 Mon Sep 17 00:00:00 2001 From: Xavier Stouder Date: Tue, 25 Oct 2016 17:08:41 +0200 Subject: [PATCH 052/111] Create xmldoc definitions (#12219) * Create xmldoc definitions * Fix implicit any --- xmldoc/xmldoc-tests.ts | 7 +++++++ xmldoc/xmldoc.d.ts | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 xmldoc/xmldoc-tests.ts create mode 100644 xmldoc/xmldoc.d.ts diff --git a/xmldoc/xmldoc-tests.ts b/xmldoc/xmldoc-tests.ts new file mode 100644 index 0000000000..4cc1f82c94 --- /dev/null +++ b/xmldoc/xmldoc-tests.ts @@ -0,0 +1,7 @@ +/// +/// + +import * as xmldoc from "xmldoc"; + +const doc = new xmldoc.XmlDocument("magic"); +console.log(doc.toString()); \ No newline at end of file diff --git a/xmldoc/xmldoc.d.ts b/xmldoc/xmldoc.d.ts new file mode 100644 index 0000000000..f9ae994e82 --- /dev/null +++ b/xmldoc/xmldoc.d.ts @@ -0,0 +1,33 @@ +// Type definitions for xmldoc 0.5.1 +// Project: https://www.npmjs.com/package/xmldoc +// Definitions by: Xavier Stouder +// Definitions: https://github.com/DefinitelyTyped/ + +declare module "xmldoc" { + export class XmlDocument { + constructor(xmlString: string); + + eachChild(func: (child: XmlElement, index?: number, array?: XmlElement[]) => void): void; + childNamed(name: string): XmlElement; + childrenNamed(name: string): XmlElement[]; + childWithAttribute(name: string, value?: string): XmlElement; + descendantWithPath(path: string): XmlElement; + valueWithPath(path: string): string; + toString(opts?: XmlOptions): string; + } + export class XmlElement { + eachChild(func: (child: XmlElement, index?: number, array?: XmlElement[]) => void): void; + childNamed(name: string): XmlElement; + childrenNamed(name: string): XmlElement[]; + childWithAttribute(name: string, value?: string): XmlElement; + descendantWithPath(path: string): XmlElement; + valueWithPath(path: string): string; + toString(opts?: XmlOptions): string; + } + + export interface XmlOptions { + compressed?: boolean; + trimmed?: boolean; + preserveWhitespace?: boolean; + } +} \ No newline at end of file From b6f6ba5f89cf1eaf295ca78a0ad74c4dab2457c1 Mon Sep 17 00:00:00 2001 From: Karol Janyst Date: Wed, 26 Oct 2016 00:29:19 +0900 Subject: [PATCH 053/111] Update definitions for react-fa (#12119) --- react-fa/react-fa-4.0.0.d.ts | 28 +++++++++++++++++++++++ react-fa/react-fa-tests.tsx | 22 +++++++++++++----- react-fa/react-fa.d.ts | 43 +++++++++++++++++++++--------------- 3 files changed, 70 insertions(+), 23 deletions(-) create mode 100644 react-fa/react-fa-4.0.0.d.ts diff --git a/react-fa/react-fa-4.0.0.d.ts b/react-fa/react-fa-4.0.0.d.ts new file mode 100644 index 0000000000..0b6b166a22 --- /dev/null +++ b/react-fa/react-fa-4.0.0.d.ts @@ -0,0 +1,28 @@ +// Type definitions for react-fa v4.0.0 +// Project: https://github.com/andreypopp/react-fa +// Definitions by: Frank Laub +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +declare module "react-fa" { + import { ComponentClass, Props } from 'react'; + + interface IconProps extends Props { + name: string; + className?: string; + size?: string; + spin?: boolean; + rotate?: string; + flip?: string; + fixedWidth?: boolean; + pulse?: boolean; + stack?: string; + inverse?: boolean; + } + + interface Icon extends ComponentClass { } + const Icon: Icon; + + export = Icon; +} diff --git a/react-fa/react-fa-tests.tsx b/react-fa/react-fa-tests.tsx index 778c6b16ac..2fa87a20dc 100644 --- a/react-fa/react-fa-tests.tsx +++ b/react-fa/react-fa-tests.tsx @@ -1,11 +1,23 @@ +// React Fa Test +// ================================================================================ /// /// -import * as React from "react"; -import { render } from 'react-dom'; -import Icon = require('react-fa'); +// Imports +// -------------------------------------------------------------------------------- +import * as React from "react" +import { render } from "react-dom" +import { Icon, IconStack } from "react-fa" render( - , - document.getElementById('main') + , + document.getElementById("main") +) + +render( + + + + , + document.getElementById("main") ) diff --git a/react-fa/react-fa.d.ts b/react-fa/react-fa.d.ts index 0b6b166a22..570a50893e 100644 --- a/react-fa/react-fa.d.ts +++ b/react-fa/react-fa.d.ts @@ -1,28 +1,35 @@ -// Type definitions for react-fa v4.0.0 +// Type definitions for react-fa v4.1.2 // Project: https://github.com/andreypopp/react-fa -// Definitions by: Frank Laub +// Definitions by: Frank Laub , Karol Janyst // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped /// declare module "react-fa" { - import { ComponentClass, Props } from 'react'; + import { Component, ClassAttributes } from "react"; - interface IconProps extends Props { - name: string; - className?: string; - size?: string; - spin?: boolean; - rotate?: string; - flip?: string; - fixedWidth?: boolean; - pulse?: boolean; - stack?: string; - inverse?: boolean; - } + type IconSize = "lg" | "2x" | "3x" | "4x" | "5x" - interface Icon extends ComponentClass { } - const Icon: Icon; + interface IconProps extends ClassAttributes { + name: string + className?: string + size?: IconSize + rotate?: "45" | "90" | "135" | "180" | "225" | "270" | "315" + flip?: "horizontal" | "vertical" + fixedWidth?: boolean + spin?: boolean + pulse?: boolean + stack?: "1x" | "2x" + inverse?: boolean + Component?: string | Function + } + export class Icon extends Component {} - export = Icon; + interface IconStackProps extends ClassAttributes { + className?: string + size?: IconSize + } + export class IconStack extends Component {} + + export default Icon } From 4cc7cbabf6dce8e5e684622d538db6241fbc0a7b Mon Sep 17 00:00:00 2001 From: Mike Deverell Date: Tue, 25 Oct 2016 11:35:40 -0400 Subject: [PATCH 054/111] [enzyme] state() with no props as an "S" (state type) return type (#12211) * clarify and fix 'options' object types; Hammer.Manager requires an EventTarget, not HTMLElement * fix RecognizerTuple type * `state()` with no props has an `S` (state type) return value --- enzyme/enzyme-tests.tsx | 2 +- enzyme/enzyme.d.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/enzyme/enzyme-tests.tsx b/enzyme/enzyme-tests.tsx index e5d56200cb..b87a759861 100644 --- a/enzyme/enzyme-tests.tsx +++ b/enzyme/enzyme-tests.tsx @@ -204,7 +204,7 @@ namespace ShallowWrapperTest { } function test_state() { - shallowWrapper.state(); + const state: MyComponentState = shallowWrapper.state(); shallowWrapper.state('key'); const tmp: String = shallowWrapper.state('key'); } diff --git a/enzyme/enzyme.d.ts b/enzyme/enzyme.d.ts index 5a53f8bf20..85a72127c1 100644 --- a/enzyme/enzyme.d.ts +++ b/enzyme/enzyme.d.ts @@ -204,8 +204,9 @@ declare module "enzyme" { * Returns the state hash for the root node of the wrapper. Optionally pass in a prop name and it will return just that value. * @param [key] */ - state(key?: string): any; - state(key?: string): T; + state(): S; + state(key: string): any; + state(key: string): T; /** * Returns the context hash for the root node of the wrapper. Optionally pass in a prop name and it will return just that value. From 54eb1c37f3c1a5dc9c8c09972849b7345e4a4b86 Mon Sep 17 00:00:00 2001 From: Ivo Stratev Date: Tue, 25 Oct 2016 18:37:04 +0300 Subject: [PATCH 055/111] Adding react-syntax-highlighter (#12165) --- .../react-syntax-highlighter-tests.tsx | 20 + .../react-syntax-highlighter.d.ts | 502 ++++++++++++++++++ 2 files changed, 522 insertions(+) create mode 100644 react-syntax-highlighter/react-syntax-highlighter-tests.tsx create mode 100644 react-syntax-highlighter/react-syntax-highlighter.d.ts diff --git a/react-syntax-highlighter/react-syntax-highlighter-tests.tsx b/react-syntax-highlighter/react-syntax-highlighter-tests.tsx new file mode 100644 index 0000000000..00a8cac6f7 --- /dev/null +++ b/react-syntax-highlighter/react-syntax-highlighter-tests.tsx @@ -0,0 +1,20 @@ +/// + +import * as React from 'react'; +import SyntaxHighlighter from 'react-syntax-highlighter'; +import { docco } from 'react-syntax-highlighter/dist/styles'; + +function highlighter(): JSX.Element { + const codeString: string = +`class CPP { + private year: number; + public constructor(private version: string) { + this.year = Number(version.match(/.+\d+$/)); + } + public version(): string { + return this.version; + } +} +`; + return {codeString}; +} \ No newline at end of file diff --git a/react-syntax-highlighter/react-syntax-highlighter.d.ts b/react-syntax-highlighter/react-syntax-highlighter.d.ts new file mode 100644 index 0000000000..127fe10b31 --- /dev/null +++ b/react-syntax-highlighter/react-syntax-highlighter.d.ts @@ -0,0 +1,502 @@ +// Type definitions for react-syntax-highlighter +// Project: https://github.com/conorhastings/react-syntax-highlighter +// Definitions by: Ivo Stratev +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +declare module 'react-syntax-highlighter' { + import SyntaxHighlighter from 'react-syntax-highlighter/dist/light'; + export default SyntaxHighlighter; +} + +declare module 'react-syntax-highlighter/dist/light' { + import * as React from 'react'; + + interface SyntaxHighlighterProps { + language?: string; + style?: any; + customStyle?: any; + codeTagProps?: HTMLElement; + useInlineStyles?: boolean; + showLineNumbers?: boolean; + startingLineNumber?: number; + lineNumberStyle?: any; + [spread: string]: any; + } + + export default class SyntaxHighlighter extends React.Component { + + } +} + +declare module 'react-syntax-highlighter/dist/styles' { + export { default as agate } from 'react-syntax-highlighter/dist/styles/agate'; + export { default as androidstudio } from 'react-syntax-highlighter/dist/styles/androidstudio'; + export { default as arduinoLight } from 'react-syntax-highlighter/dist/styles/arduino-light'; + export { default as arta } from 'react-syntax-highlighter/dist/styles/arta'; + export { default as ascetic } from 'react-syntax-highlighter/dist/styles/ascetic'; + export { default as atelierCaveDark } from 'react-syntax-highlighter/dist/styles/atelier-cave-dark'; + export { default as atelierCaveLight } from 'react-syntax-highlighter/dist/styles/atelier-cave-light'; + export { default as atelierDuneDark } from 'react-syntax-highlighter/dist/styles/atelier-dune-dark'; + export { default as atelierDuneLight } from 'react-syntax-highlighter/dist/styles/atelier-dune-light'; + export { default as atelierEstuaryDark } from 'react-syntax-highlighter/dist/styles/atelier-estuary-dark'; + export { default as atelierEstuaryLight } from 'react-syntax-highlighter/dist/styles/atelier-estuary-light'; + export { default as atelierForestDark } from 'react-syntax-highlighter/dist/styles/atelier-forest-dark'; + export { default as atelierForestLight } from 'react-syntax-highlighter/dist/styles/atelier-forest-light'; + export { default as atelierHeathDark } from 'react-syntax-highlighter/dist/styles/atelier-heath-dark'; + export { default as atelierHeathLight } from 'react-syntax-highlighter/dist/styles/atelier-heath-light'; + export { default as atelierLakesideDark } from 'react-syntax-highlighter/dist/styles/atelier-lakeside-dark'; + export { default as atelierLakesideLight } from 'react-syntax-highlighter/dist/styles/atelier-lakeside-light'; + export { default as atelierPlateauDark } from 'react-syntax-highlighter/dist/styles/atelier-plateau-dark'; + export { default as atelierPlateauLight } from 'react-syntax-highlighter/dist/styles/atelier-plateau-light'; + export { default as atelierSavannaDark } from 'react-syntax-highlighter/dist/styles/atelier-savanna-dark'; + export { default as atelierSavannaLight } from 'react-syntax-highlighter/dist/styles/atelier-savanna-light'; + export { default as atelierSeasideDark } from 'react-syntax-highlighter/dist/styles/atelier-seaside-dark'; + export { default as atelierSeasideLight } from 'react-syntax-highlighter/dist/styles/atelier-seaside-light'; + export { default as atelierSulphurpoolDark } from 'react-syntax-highlighter/dist/styles/atelier-sulphurpool-dark'; + export { default as atelierSulphurpoolLight } from 'react-syntax-highlighter/dist/styles/atelier-sulphurpool-light'; + export { default as atomOneDark } from 'react-syntax-highlighter/dist/styles/atom-one-dark'; + export { default as atomOneLight } from 'react-syntax-highlighter/dist/styles/atom-one-light'; + export { default as brownPaper } from 'react-syntax-highlighter/dist/styles/brown-paper'; + export { default as codepenEmbed } from 'react-syntax-highlighter/dist/styles/codepen-embed'; + export { default as colorBrewer } from 'react-syntax-highlighter/dist/styles/color-brewer'; + export { default as darcula } from 'react-syntax-highlighter/dist/styles/darcula'; + export { default as dark } from 'react-syntax-highlighter/dist/styles/dark'; + export { default as darkula } from 'react-syntax-highlighter/dist/styles/darkula'; + export { default as defaultStyle } from 'react-syntax-highlighter/dist/styles/default-style'; + export { default as docco } from 'react-syntax-highlighter/dist/styles/docco'; + export { default as dracula } from 'react-syntax-highlighter/dist/styles/dracula'; + export { default as far } from 'react-syntax-highlighter/dist/styles/far'; + export { default as foundation } from 'react-syntax-highlighter/dist/styles/foundation'; + export { default as githubGist } from 'react-syntax-highlighter/dist/styles/github-gist'; + export { default as github } from 'react-syntax-highlighter/dist/styles/github'; + export { default as googlecode } from 'react-syntax-highlighter/dist/styles/googlecode'; + export { default as grayscale } from 'react-syntax-highlighter/dist/styles/grayscale'; + export { default as gruvboxDark } from 'react-syntax-highlighter/dist/styles/gruvbox-dark'; + export { default as gruvboxLight } from 'react-syntax-highlighter/dist/styles/gruvbox-light'; + export { default as hopscotch } from 'react-syntax-highlighter/dist/styles/hopscotch'; + export { default as hybrid } from 'react-syntax-highlighter/dist/styles/hybrid'; + export { default as idea } from 'react-syntax-highlighter/dist/styles/idea'; + export { default as irBlack } from 'react-syntax-highlighter/dist/styles/ir-black'; + export { default as kimbieDark } from 'react-syntax-highlighter/dist/styles/kimbie.dark'; + export { default as kimbieLight } from 'react-syntax-highlighter/dist/styles/kimbie.light'; + export { default as magula } from 'react-syntax-highlighter/dist/styles/magula'; + export { default as monoBlue } from 'react-syntax-highlighter/dist/styles/mono-blue'; + export { default as monokaiSublime } from 'react-syntax-highlighter/dist/styles/monokai-sublime'; + export { default as monokai } from 'react-syntax-highlighter/dist/styles/monokai'; + export { default as obsidian } from 'react-syntax-highlighter/dist/styles/obsidian'; + export { default as ocean } from 'react-syntax-highlighter/dist/styles/ocean'; + export { default as paraisoDark } from 'react-syntax-highlighter/dist/styles/paraiso-dark'; + export { default as paraisoLight } from 'react-syntax-highlighter/dist/styles/paraiso-light'; + export { default as pojoaque } from 'react-syntax-highlighter/dist/styles/pojoaque'; + export { default as purebasic } from 'react-syntax-highlighter/dist/styles/purebasic'; + export { default as qtcreatorDark } from 'react-syntax-highlighter/dist/styles/qtcreator_dark'; + export { default as qtcreatorLight } from 'react-syntax-highlighter/dist/styles/qtcreator_light'; + export { default as railscasts } from 'react-syntax-highlighter/dist/styles/railscasts'; + export { default as rainbow } from 'react-syntax-highlighter/dist/styles/rainbow'; + export { default as schoolBook } from 'react-syntax-highlighter/dist/styles/school-book'; + export { default as solarizedDark } from 'react-syntax-highlighter/dist/styles/solarized-dark'; + export { default as solarizedLight } from 'react-syntax-highlighter/dist/styles/solarized-light'; + export { default as sunburst } from 'react-syntax-highlighter/dist/styles/sunburst'; + export { default as tomorrowNightBlue } from 'react-syntax-highlighter/dist/styles/tomorrow-night-blue'; + export { default as tomorrowNightBright } from 'react-syntax-highlighter/dist/styles/tomorrow-night-bright'; + export { default as tomorrowNightEighties } from 'react-syntax-highlighter/dist/styles/tomorrow-night-eighties'; + export { default as tomorrowNight } from 'react-syntax-highlighter/dist/styles/tomorrow-night'; + export { default as tomorrow } from 'react-syntax-highlighter/dist/styles/tomorrow'; + export { default as vs } from 'react-syntax-highlighter/dist/styles/vs'; + export { default as xcode } from 'react-syntax-highlighter/dist/styles/xcode'; + export { default as xt256 } from 'react-syntax-highlighter/dist/styles/xt256'; + export { default as zenburn } from 'react-syntax-highlighter/dist/styles/zenburn'; +} + +declare module 'react-syntax-highlighter/dist/styles/agate' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/androidstudio' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/arduino-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/arta' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/ascetic' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-cave-dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-cave-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-dune-dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-dune-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-estuary-dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-estuary-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-forest-dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-forest-light' { + const style: any; + export default style; +} + + +declare module 'react-syntax-highlighter/dist/styles/atelier-heath-dark' { + const style: any; + export default style; +} + + +declare module 'react-syntax-highlighter/dist/styles/atelier-heath-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-lakeside-dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-lakeside-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-plateau-dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-plateau-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-savanna-dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-savanna-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-seaside-dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-seaside-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-sulphurpool-dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atelier-sulphurpool-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atom-one-dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/atom-one-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/brown-paper' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/codepen-embed' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/color-brewer' { + const style: any; + export default style; +} + + +declare module 'react-syntax-highlighter/dist/styles/darcula' { + const style: any; + export default style; +} + + +declare module 'react-syntax-highlighter/dist/styles/dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/darkula' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/default-style' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/docco' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/dracula' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/far' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/foundation' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/github-gist' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/github' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/googlecode' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/grayscale' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/gruvbox-dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/gruvbox-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/hopscotch' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/hybrid' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/idea' { + const style: any; + export default style; +} + + +declare module 'react-syntax-highlighter/dist/styles/ir-black' { + const style: any; + export default style; +} + + +declare module 'react-syntax-highlighter/dist/styles/kimbie.dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/kimbie.light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/magula' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/mono-blue' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/monokai-sublime' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/monokai' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/obsidian' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/ocean' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/paraiso-dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/paraiso-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/pojoaque' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/purebasic' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/qtcreator_dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/qtcreator_light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/railscasts' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/rainbow' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/school-book' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/solarized-dark' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/solarized-light' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/sunburst' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/tomorrow-night-blue' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/tomorrow-night-bright' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/tomorrow-night-eighties' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/tomorrow-night' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/tomorrow' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/vs' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/xcode' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/xt256' { + const style: any; + export default style; +} + +declare module 'react-syntax-highlighter/dist/styles/zenburn' { + const style: any; + export default style; +} \ No newline at end of file From b62292ba07eb91922e1e64ceef81ed25bb215275 Mon Sep 17 00:00:00 2001 From: Ivo Stratev Date: Tue, 25 Oct 2016 18:37:25 +0300 Subject: [PATCH 056/111] Adding lowlight (#12164) --- lowlight/lowlight-tests.ts | 82 +++++++++++++++++++++++++++++++ lowlight/lowlight.d.ts | 99 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 lowlight/lowlight-tests.ts create mode 100644 lowlight/lowlight.d.ts diff --git a/lowlight/lowlight-tests.ts b/lowlight/lowlight-tests.ts new file mode 100644 index 0000000000..0160093785 --- /dev/null +++ b/lowlight/lowlight-tests.ts @@ -0,0 +1,82 @@ +/// + +import { highlight, highlightAuto, registerLanguage } from 'lowlight'; +import * as core from 'lowlight/lib/core'; + +function highlighter(hljs: any): any { + return { + aliases: ['cmake.in'], + case_insensitive: true, + keywords: { + keyword: + 'forall all exists exist only m M i e 1 2 3 4 5 6 7 8 9 0 - + * / \ % ! . , ; : | lim limsup liminf infinity not' + }, + contains: [ + { + className: 'variable', + begin: '(', end: ')' + }, + ] + }; +} + +registerLanguage('math', highlighter); + +console.log(highlight('typescript', +`class CPP { + private year: number; + public constructor(private version: string) { + this.year = Number(version.match(/.+\d+$/)); + } + + public version(): string { + return this.version; + } +} +` +)); + +console.info(highlightAuto( +`class CPP { + private year: number; + public constructor(private version: string) { + this.year = Number(version.match(/.+\d+$/)); + } + + public version(): string { + return this.version; + } +} +` +)); + +core.registerLanguage('math', highlighter); + +console.log(core.highlight('javascript', +`class CPP { + constructor(version) { + this.version = version; + this.year = Number(version.match(/.+\d+$/)); + } + + version(){ + return this.version; + } +} +` +, { prefix: 'core-' })); + + +console.info(core.highlightAuto( +`class CPP { + constructor(version) { + this.version = version; + this.year = Number(version.match(/.+\d+$/)); + } + + version(){ + return this.version; + } +} +` +, { prefix: 'core-', subset: ['purescript', 'javascript', 'typescript', 'coffeescript'] })); \ No newline at end of file diff --git a/lowlight/lowlight.d.ts b/lowlight/lowlight.d.ts new file mode 100644 index 0000000000..589c9b50fd --- /dev/null +++ b/lowlight/lowlight.d.ts @@ -0,0 +1,99 @@ +// Type definitions for lowlight +// Project: https://github.com/wooorm/lowlight +// Definitions by: Ivo Stratev +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare module 'lowlight' { + export { highlight, highlightAuto, registerLanguage } from 'lowlight/lib/core'; +} + +declare module 'lowlight/lib/core' { + export function highlight(language: string, value: string, options?: lowlight.HighlightOptions): lowlight.HighlightResult; + export function highlightAuto(value: string, options?: lowlight.HighlightAutoOptions): lowlight.HighlightAutoResult; + export function registerLanguage(name: string, syntax: Function): void; +} + +declare namespace lowlight { + namespace AST { + namespace Unist { + interface Data { + [index: string]: any; + } + + interface Position { + line: number; + column: number; + offset?: number; + } + + interface Location { + start: Position; + end: Position; + indent?: Array; + } + + export interface Node { + type: string; + data?: Data; + position?: Location; + } + + export interface Parent extends Node { + children: Array; + } + + export interface Text extends Node { + value: string; + } + } + + interface Properties { + [index: string]: any; + } + + export interface Root extends Unist.Parent { + type: 'root'; + } + + export interface Element extends Unist.Parent { + type: 'element'; + tagName: string; + properties: Properties; + } + + export interface Doctype extends Unist.Node { + type: 'doctype'; + name: string; + public?: string; + system?: string; + } + + export interface Comment extends Unist.Text { + type: 'comment'; + } + + export interface Text extends Unist.Text { + type: 'text'; + } + } + + type HastNode = AST.Root | AST.Element | AST.Doctype | AST.Comment | AST.Text; + + interface HighlightOptions { + prefix?: string; + } + + interface HighlightAutoOptions extends HighlightOptions { + subset?: Array; + } + + interface HighlightResult { + relevance: number; + language: string; + value: Array; + } + + interface HighlightAutoResult extends HighlightResult { + secondBest?: HighlightAutoResult; + } +} \ No newline at end of file From 87fef742c9e1eac7e6484e017cb03b8261549612 Mon Sep 17 00:00:00 2001 From: Nathan Dao Date: Tue, 25 Oct 2016 18:38:18 +0300 Subject: [PATCH 057/111] add support for Highcharts 5.0.0 update (#12170) * add support for Highcharts 5.0.0 update * add update return type * change redraw in update to optional --- highcharts/highcharts.d.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/highcharts/highcharts.d.ts b/highcharts/highcharts.d.ts index 7f2d28e99b..debb67ef48 100644 --- a/highcharts/highcharts.d.ts +++ b/highcharts/highcharts.d.ts @@ -5946,6 +5946,19 @@ declare namespace __Highcharts { * @since 2.0.5 */ showLoading(str?: string): void; + /** + * A generic function to update any element of the chart. Elements can be enabled and disabled, moved, re-styled, + * re-formatted etc. + * A special case is configuration objects that take arrays, for example xAxis, yAxis or series. For these collections, + * an id option is used to map the new option set to an existing object. If an existing object of the same id is not + * found, the first item is updated. So for example, running chart.update with a series item without an id, will cause + * the existing chart's first series to be updated. + * See also the responsive option set. Switching between responsive.rules basically runs chart.update under the hood. + * @param {ChartOptions} option A configuration object for the new chart options as defined in the options section of the API. + * @param [boolean] redraw Whether to redraw the chart. Defaults to true. + * @since 5.0.0 + */ + update(options: ChartOptions, redraw?: boolean): void; /** * This method is deprecated as of 2.0.1. Updating the chart position after a move operation is no longer necessary. * @since 1.2.5 From 65ec496d302f1d4a2709590134d9d4130b57e4eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Crist=C3=B3v=C3=A3o?= Date: Tue, 25 Oct 2016 16:39:02 +0100 Subject: [PATCH 058/111] added silly and verbose levels to winston (#12230) --- winston/winston-tests.ts | 6 ++++++ winston/winston.d.ts | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/winston/winston-tests.ts b/winston/winston-tests.ts index 60423f9fc8..dc1773875b 100644 --- a/winston/winston-tests.ts +++ b/winston/winston-tests.ts @@ -77,9 +77,15 @@ winston.exitOnError = bool; winston.log(str, str); winston.log(str, str, metadata); winston.log(str, str, metadata, metadata, metadata); +winston.silly(str); +winston.silly(str, metadata); +winston.silly(str, metadata, metadata, metadata); winston.debug(str); winston.debug(str, metadata); winston.debug(str, metadata, metadata, metadata); +winston.verbose(str); +winston.verbose(str, metadata); +winston.verbose(str, metadata, metadata, metadata); winston.info(str); winston.info(str, metadata); winston.info(str, metadata, metadata, metadata); diff --git a/winston/winston.d.ts b/winston/winston.d.ts index 762e69532f..deb00be187 100644 --- a/winston/winston.d.ts +++ b/winston/winston.d.ts @@ -26,7 +26,9 @@ declare module "winston" { export var log: LogMethod; + export var silly: LeveledLogMethod; export var debug: LeveledLogMethod; + export var verbose: LeveledLogMethod; export var info: LeveledLogMethod; export var warn: LeveledLogMethod; export var error: LeveledLogMethod; @@ -109,7 +111,9 @@ declare module "winston" { log: LogMethod; + silly: LeveledLogMethod; debug: LeveledLogMethod; + verbose: LeveledLogMethod; info: LeveledLogMethod; warn: LeveledLogMethod; error: LeveledLogMethod; From 003c965b31ab9c478937a7b6e56dfb74f94b5c47 Mon Sep 17 00:00:00 2001 From: Michael McKenzie Date: Tue, 25 Oct 2016 16:49:14 +0100 Subject: [PATCH 059/111] Update Settings definition (#12163) --- polymer/polymer.d.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/polymer/polymer.d.ts b/polymer/polymer.d.ts index 57135e54e1..47636265da 100644 --- a/polymer/polymer.d.ts +++ b/polymer/polymer.d.ts @@ -292,14 +292,17 @@ declare namespace polymer { } interface Settings { - - wantShadow:boolean; - hasShadow:boolean; - nativeShadow:boolean; - useShadow:boolean; - useNativeShadow:boolean; - useNativeImports:boolean; - useNativeCustomElements:boolean; + hasNativeCSSProperties: boolean + hasNativeImports: boolean + hasShadow: boolean + nativeShadow: boolean + useNativeCSSProperties: boolean + useNativeCustomElements: boolean + useNativeImports: boolean + useNativeShadow: boolean + usePolyfillProto: boolean + useShadow: boolean + wantShadow: boolean } interface PolymerStatic { From 8def457e061a90162dd857d3b23cebc3417f8ff8 Mon Sep 17 00:00:00 2001 From: Shivaraj kv Date: Wed, 26 Oct 2016 00:06:35 +0530 Subject: [PATCH 060/111] Replaced Object with {} --- fusioncharts/fusioncharts.d.ts | 48 +++++++++++++++++----------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/fusioncharts/fusioncharts.d.ts b/fusioncharts/fusioncharts.d.ts index 5e68eab97f..8af7589f07 100644 --- a/fusioncharts/fusioncharts.d.ts +++ b/fusioncharts/fusioncharts.d.ts @@ -46,11 +46,11 @@ declare namespace FusionCharts { dataFormat?: ChartDataFormats; - dataSource?: string | Object; + dataSource?: string | {}; - events?: Object; + events?: {}; - link?: Object; + link?: {}; showDataLoadingMessage?: boolean; @@ -142,17 +142,17 @@ declare namespace FusionCharts { } interface FusionCharts { - clone(overrides?: Object, argsOnly?: boolean): any; + clone(overrides?: {}, argsOnly?: boolean): any; isActive(): boolean; chartType(value?: string, options?: any): string; - addEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: Object) => void): void; + addEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: {}) => void): void; - removeEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: Object) => void): void; + removeEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: {}) => void): void; - configureLink(param: Object | any[], level?: number): void; + configureLink(param: {} | any[], level?: number): void; setChartAttribute(attributes: ChartObject | String, value?: string): void; @@ -160,13 +160,13 @@ declare namespace FusionCharts { getXMLData(): any; - setXMLData(data: string | Object): void; + setXMLData(data: string | {}): void; setXMLUrl(url: string): void; setChartDataUrl(url: string, format: ChartDataFormats): void; - setChartData(data: string | Object, format: ChartDataFormats): void; + setChartData(data: string | {}, format: ChartDataFormats): void; getChartData(format: ChartDataFormats): any; @@ -194,7 +194,7 @@ declare namespace FusionCharts { getXML(): any; - setDataXML(data: string | Object): void; + setDataXML(data: string | {}): void; setDataURL(url: string): void; @@ -206,7 +206,7 @@ declare namespace FusionCharts { slicePlotItem(index: number, slice: boolean): void; - centerLabel(labelText: string, options?: Object): void; + centerLabel(labelText: string, options?: {}): void; startingAngle(angle?: number, relative?: boolean): void; @@ -222,9 +222,9 @@ declare namespace FusionCharts { getViewEndIndex(): number; - print(options?: Object): void; + print(options?: {}): void; - exportChart(options?: Object): void; + exportChart(options?: {}): void; getSVGString(): string; @@ -234,7 +234,7 @@ declare namespace FusionCharts { getJSONData(): JSON; - setJSONData(data: string | Object): void; + setJSONData(data: string | {}): void; setJSONUrl(url: string): void; @@ -248,30 +248,30 @@ declare namespace FusionCharts { dispose(): void; - configure(options: Object): void; + configure(options: {}): void; - ref: Object; + ref: {}; } interface FusionChartStatic { - new (chartObject: ChartObject|Object): FusionCharts; + new (chartObject: ChartObject|{}): FusionCharts; (chartId: string): FusionCharts; getObjectReference(elementId: string): Element; - addEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: Object) => void): void; + addEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: {}) => void): void; - removeEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: Object) => void): void; + removeEventListener(type: string | string[], listener: (eventObject?: EventObject, eventArgs?: {}) => void): void; ready(callback: (fusionChartStatic?: FusionChartStatic) => any, context?: any): FusionChartStatic; - transcodeData(data: string | Object, source: ChartDataFormats, target: ChartDataFormats, advanced: boolean): any; + transcodeData(data: string | {}, source: ChartDataFormats, target: ChartDataFormats, advanced: boolean): any; - batchExport(options: Object): void; + batchExport(options: {}): void; - formatNumber(num: number, type?: string, config?: Object): Element; + formatNumber(num: number, type?: string, config?: {}): Element; setCurrentRenderer(name: string): void @@ -281,9 +281,9 @@ declare namespace FusionCharts { version: string[]; - items: Object; + items: {}; - options: Object; + options: {}; debugger:Debugger; From b4fccb09fcdaca007f4a43865c674a7b4162abe4 Mon Sep 17 00:00:00 2001 From: Michael McKenzie Date: Thu, 20 Oct 2016 17:25:17 +0100 Subject: [PATCH 061/111] adding RenderStatus to API --- polymer/polymer.d.ts | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/polymer/polymer.d.ts b/polymer/polymer.d.ts index 47636265da..24c1fcbc8f 100644 --- a/polymer/polymer.d.ts +++ b/polymer/polymer.d.ts @@ -7,7 +7,7 @@ declare namespace polymer { - type PropConstructorType = StringConstructor|ObjectConstructor|BooleanConstructor|NumberConstructor|DateConstructor|ArrayConstructor; + type PropConstructorType = StringConstructor | ObjectConstructor | BooleanConstructor | NumberConstructor | DateConstructor | ArrayConstructor; interface PropObjectType { type: PropConstructorType; @@ -305,15 +305,38 @@ declare namespace polymer { wantShadow: boolean } - interface PolymerStatic { + interface RenderStatus { + _afterNextRenderQueue: [Element, Function, any][]; + _callbacks: Function[]; + _ready: boolean; + _waitingNextRender: boolean; + _catchFirstRender(): void; + _flushNextRender(): void; + _flushRenderCallbacks(callbacks: [Element, Function, any][]): void; + _makeReady(): void; + _watchNextRender(): void; + afterNextRender(element: Element, fn: Function, args?: any): void; + hasRendered(): boolean; + whenReady(cb: Function): void; + } + + interface ImportStatus extends RenderStatus { + whenLoaded(cb: Function): void; + } + + interface PolymerStatic { Settings: Settings; - dom:DomApiStatic; + dom: DomApiStatic; - (prototype: Base|{new ():Base}):webcomponents.CustomElementConstructor; + (prototype: Base | { new (): Base }): webcomponents.CustomElementConstructor; - Class(prototype: Base|{new ():Base}):webcomponents.CustomElementConstructor; + Class(prototype: Base | { new (): Base }): webcomponents.CustomElementConstructor; + + RenderStatus: RenderStatus + + ImportStatus: ImportStatus } } From 58f16959cec5001d85271491a306dd3b7944db7d Mon Sep 17 00:00:00 2001 From: Michael McKenzie Date: Mon, 24 Oct 2016 14:31:27 +0100 Subject: [PATCH 062/111] add @deprecated comment to ImportStatus --- polymer/polymer.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/polymer/polymer.d.ts b/polymer/polymer.d.ts index 24c1fcbc8f..984bf024b8 100644 --- a/polymer/polymer.d.ts +++ b/polymer/polymer.d.ts @@ -336,6 +336,7 @@ declare namespace polymer { RenderStatus: RenderStatus + /** @deprecated */ ImportStatus: ImportStatus } } From 5ac33397a5a829a29ca9a2b15c60f4d4028343fa Mon Sep 17 00:00:00 2001 From: Michael McKenzie Date: Tue, 25 Oct 2016 15:19:58 +0100 Subject: [PATCH 063/111] remove private methods from Renderstatus --- polymer/polymer.d.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/polymer/polymer.d.ts b/polymer/polymer.d.ts index 984bf024b8..3d08e17111 100644 --- a/polymer/polymer.d.ts +++ b/polymer/polymer.d.ts @@ -306,16 +306,6 @@ declare namespace polymer { } interface RenderStatus { - _afterNextRenderQueue: [Element, Function, any][]; - _callbacks: Function[]; - _ready: boolean; - _waitingNextRender: boolean; - _catchFirstRender(): void; - _flushNextRender(): void; - _flushRenderCallbacks(callbacks: [Element, Function, any][]): void; - _makeReady(): void; - _watchNextRender(): void; - afterNextRender(element: Element, fn: Function, args?: any): void; hasRendered(): boolean; whenReady(cb: Function): void; From 31eb66a8ddb3870d008bc4259501049d8dedc8aa Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 26 Oct 2016 08:41:58 -0700 Subject: [PATCH 064/111] Improve README (#12133) --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7da7d1530b..c69d5135b5 100644 --- a/README.md +++ b/README.md @@ -149,14 +149,18 @@ and you may also add the `"jsx"` compiler option if your library needs it. DefinitelyTyped members routinely monitor for new PRs, though keep in mind that the number of other PRs may slow things down. +For a good example package, see [base64-js](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/types-2.0/base64-js). #### Common mistakes * First, follow advice from the [handbook](http://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html). * Formatting: Either use all tabs, or always use 4 spaces. Also, always use semicolons, and use egyptian braces. * `interface X {}`: An empty interface is essentially the `{}` type: it places no constraints on an object. -* `interface Foo { new(): Foo }`: +* `interface IFoo {}`: Don't add `I` to the front of an interface name. +* `interface Foo { new(): Foo; }`: This defines a type of objects that are new-able. You probably want `declare class Foo { constructor(); } +* `const Class: { new(): IClass; }`: + Prefer to use a class declaration `class Class { constructor(); }` instead of a new-able constant. * `namespace foo {}`: Do not add a namespace just so that the `import * as foo` syntax will work. If it is commonJs module with a single export, you should use the `import foo = require("foo")` syntax. @@ -194,7 +198,7 @@ Changes to the `master` branch are also manually merged into the `types-2.0` bra #### I'm writing a definition that depends on another definition. Should I use `` or an import? -If the module you're referencing is an written as an external module (uses `export`), use an import. +If the module you're referencing is an external module (uses `export`), use an import. If the module you're referenceing is an ambient module (uses `declare module`, or just declares globals), use ``. #### What do I do about older versions of typings? From 6685090e942ab78cc101b72a4472ec418a189f38 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 26 Oct 2016 08:42:23 -0700 Subject: [PATCH 065/111] Fix tsconfig in readme (#12107) --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c69d5135b5..8caef8c8e2 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,7 @@ The `Project` link does not have to be to GitHub, but prefer linking to a source "module": "commonjs", "target": "es6", "noImplicitAny": true, - "strictNullChecks": false, + "strictNullChecks": true, "baseUrl": "../", "typeRoots": [ "../" @@ -213,6 +213,10 @@ A `package.json` may be included for the sake of specifying dependencies. Here's We do not allow other fields, such as `"description"`, to be defined manually. Also, if you need to reference an older version of typings, you must do that by adding `"dependencies": { "@types/foo": "x.y.z" }` to the package.json. +#### I notice some `tsconfig.json` are missing `"noImplicitAny": true` or `"strictNullChecks": true`. + +Then they are wrong. You can help by submitting a pull request to fix them. + #### Definitions in types-2.0 seem written differently than in master. If you're targeting types-2.0, write it like the types-2.0 definitions. From 10685542728efb9dd1be9f6bbcc14c7451de2594 Mon Sep 17 00:00:00 2001 From: Andy Date: Wed, 26 Oct 2016 08:42:37 -0700 Subject: [PATCH 066/111] Write new pull request template (#12100) --- PULL_REQUEST_TEMPLATE.md | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 730bd78af2..053b2c3eae 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -1,8 +1,16 @@ -case 1. Add a new type definition. -- [ ] checked compilation succeeds with `--target es6` and `--noImplicitAny` options. -- [ ] has correct [naming convention](http://definitelytyped.org/guides/contributing.html#naming-the-file) -- [ ] has a [test file](http://definitelytyped.org/guides/contributing.html#tests) with the suffix of `-tests.ts` or `-tests.tsx`. +Please fill in this template. -case 2. Improvement to existing type definition. -- documentation or source code reference which provides context for the suggested changes. url http://api.jquery.com/html . - - it has been reviewed by a DefinitelyTyped member. +- [ ] Prefer to make your PR against the `types-2.0` branch. +- [ ] The package does not provide its own types, and you can not add them. +- [ ] Test the change in your own code. +- [ ] Follow the advice from the [readme](https://github.com/DefinitelyTyped/DefinitelyTyped#make-a-pull-request). +- [ ] Avoid [common mistakes](https://github.com/DefinitelyTyped/DefinitelyTyped#common-mistakes). + +If adding a new definition: +- [ ] If this is for an NPM package, match the name. If not, do not conflict with the name of an NPM package. +- [ ] Run `tsc` without errors. +- [ ] Include the required [files](https://github.com/DefinitelyTyped/DefinitelyTyped#create-a-new-package) and header. + +If changing an existing definition: +- [ ] Provide a URL to documentation or source code which provides context for the suggested changes: <> +- [ ] Increase the version number in the header if appropriate. From a37e6d24dcf6fbac1018317777fa5811eb6c8ddb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1nchez?= Date: Fri, 28 Oct 2016 07:13:03 -0600 Subject: [PATCH 067/111] Make callback arguments non optional per best practices on callback signatures (#12238) --- immutable/immutable.d.ts | 80 ++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/immutable/immutable.d.ts b/immutable/immutable.d.ts index 86f23bc6e3..f14986ee8d 100644 --- a/immutable/immutable.d.ts +++ b/immutable/immutable.d.ts @@ -258,11 +258,11 @@ declare namespace Immutable { * @see `Map#mergeWith` */ mergeWith( - merger: (previous?: T, next?: T, key?: number) => T, + merger: (previous: T, next: T, key: number) => T, ...iterables: Iterable.Indexed[] ): List; mergeWith( - merger: (previous?: T, next?: T, key?: number) => T, + merger: (previous: T, next: T, key: number) => T, ...iterables: Array[] ): List; @@ -276,11 +276,11 @@ declare namespace Immutable { * @see `Map#mergeDeepWith` */ mergeDeepWith( - merger: (previous?: T, next?: T, key?: number) => T, + merger: (previous: T, next: T, key: number) => T, ...iterables: Iterable.Indexed[] ): List; mergeDeepWith( - merger: (previous?: T, next?: T, key?: number) => T, + merger: (previous: T, next: T, key: number) => T, ...iterables: Array[] ): List; @@ -539,11 +539,11 @@ declare namespace Immutable { * */ mergeWith( - merger: (previous?: V, next?: V, key?: K) => V, + merger: (previous: V, next: V, key: K) => V, ...iterables: Iterable[] ): Map; mergeWith( - merger: (previous?: V, next?: V, key?: K) => V, + merger: (previous: V, next: V, key: K) => V, ...iterables: {[key: string]: V}[] ): Map; @@ -570,11 +570,11 @@ declare namespace Immutable { * */ mergeDeepWith( - merger: (previous?: V, next?: V, key?: K) => V, + merger: (previous: V, next: V, key: K) => V, ...iterables: Iterable[] ): Map; mergeDeepWith( - merger: (previous?: V, next?: V, key?: K) => V, + merger: (previous: V, next: V, key: K) => V, ...iterables: {[key: string]: V}[] ): Map; @@ -1457,7 +1457,7 @@ declare namespace Immutable { * */ mapKeys( - mapper: (key?: K, value?: V, iter?: this) => M, + mapper: (key: K, value: V, iter: this) => M, context?: any ): /*this*/Iterable.Keyed; @@ -1472,9 +1472,9 @@ declare namespace Immutable { */ mapEntries( mapper: ( - entry?: [K, V], - index?: number, - iter?: this + entry: [K, V], + index: number, + iter: this ) => [KM, VM], context?: any ): /*this*/Iterable.Keyed; @@ -1639,7 +1639,7 @@ declare namespace Immutable { * provided predicate function. Otherwise -1 is returned. */ findIndex( - predicate: (value?: T, index?: number, iter?: this) => boolean, + predicate: (value: T, index: number, iter: this) => boolean, context?: any ): number; @@ -1648,7 +1648,7 @@ declare namespace Immutable { * provided predicate function. Otherwise -1 is returned. */ findLastIndex( - predicate: (value?: T, index?: number, iter?: this) => boolean, + predicate: (value: T, index: number, iter: this) => boolean, context?: any ): number; } @@ -1969,7 +1969,7 @@ declare namespace Immutable { * */ map( - mapper: (value?: V, key?: K, iter?: this) => M, + mapper: (value: V, key: K, iter: this) => M, context?: any ): /*this*/Iterable; @@ -1982,7 +1982,7 @@ declare namespace Immutable { * */ filter( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any ): this; @@ -1995,7 +1995,7 @@ declare namespace Immutable { * */ filterNot( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any ): this; @@ -2031,7 +2031,7 @@ declare namespace Immutable { * */ sortBy( - comparatorValueMapper: (value?: V, key?: K, iter?: this) => C, + comparatorValueMapper: (value: V, key: K, iter: this) => C, comparator?: (valueA: C, valueB: C) => number ): this; @@ -2042,7 +2042,7 @@ declare namespace Immutable { * Note: This is always an eager operation. */ groupBy( - grouper: (value?: V, key?: K, iter?: this) => G, + grouper: (value: V, key: K, iter: this) => G, context?: any ): Seq.Keyed; @@ -2057,7 +2057,7 @@ declare namespace Immutable { * (including the last iteration which returned false). */ forEach( - sideEffect: (value?: V, key?: K, iter?: this) => any, + sideEffect: (value: V, key: K, iter: this) => any, context?: any ): number; @@ -2116,7 +2116,7 @@ declare namespace Immutable { * */ skipWhile( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any ): this; @@ -2130,7 +2130,7 @@ declare namespace Immutable { * */ skipUntil( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any ): this; @@ -2156,7 +2156,7 @@ declare namespace Immutable { * */ takeWhile( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any ): this; @@ -2169,7 +2169,7 @@ declare namespace Immutable { * */ takeUntil( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any ): this; @@ -2207,11 +2207,11 @@ declare namespace Immutable { * Similar to `iter.map(...).flatten(true)`. */ flatMap( - mapper: (value?: V, key?: K, iter?: this) => Iterable, + mapper: (value: V, key: K, iter: this) => Iterable, context?: any ): /*this*/Iterable; flatMap( - mapper: (value?: V, key?: K, iter?: this) => /*iterable-like*/any, + mapper: (value: V, key: K, iter: this) => /*iterable-like*/any, context?: any ): /*this*/Iterable; @@ -2228,7 +2228,7 @@ declare namespace Immutable { * @see `Array#reduce`. */ reduce( - reducer: (reduction?: R, value?: V, key?: K, iter?: this) => R, + reducer: (reduction: R, value: V, key: K, iter: this) => R, initialReduction?: R, context?: any ): R; @@ -2240,7 +2240,7 @@ declare namespace Immutable { * with `Array#reduceRight`. */ reduceRight( - reducer: (reduction?: R, value?: V, key?: K, iter?: this) => R, + reducer: (reduction: R, value: V, key: K, iter: this) => R, initialReduction?: R, context?: any ): R; @@ -2249,7 +2249,7 @@ declare namespace Immutable { * True if `predicate` returns true for all entries in the Iterable. */ every( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any ): boolean; @@ -2257,7 +2257,7 @@ declare namespace Immutable { * True if `predicate` returns true for any entry in the Iterable. */ some( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any ): boolean; @@ -2287,7 +2287,7 @@ declare namespace Immutable { */ count(): number; count( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any ): number; @@ -2298,7 +2298,7 @@ declare namespace Immutable { * Note: This is not a lazy operation. */ countBy( - grouper: (value?: V, key?: K, iter?: this) => G, + grouper: (value: V, key: K, iter: this) => G, context?: any ): Seq.Keyed; @@ -2309,7 +2309,7 @@ declare namespace Immutable { * Returns the first value for which the `predicate` returns true. */ find( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any, notSetValue?: V ): V; @@ -2320,7 +2320,7 @@ declare namespace Immutable { * Note: `predicate` will be called for each entry in reverse. */ findLast( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any, notSetValue?: V ): V; @@ -2329,7 +2329,7 @@ declare namespace Immutable { * Returns the first [key, value] entry for which the `predicate` returns true. */ findEntry( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any, notSetValue?: V ): [K, V]; @@ -2341,7 +2341,7 @@ declare namespace Immutable { * Note: `predicate` will be called for each entry in reverse. */ findLastEntry( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any, notSetValue?: V ): [K, V]; @@ -2350,7 +2350,7 @@ declare namespace Immutable { * Returns the key for which the `predicate` returns true. */ findKey( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any ): K; @@ -2360,7 +2360,7 @@ declare namespace Immutable { * Note: `predicate` will be called for each entry in reverse. */ findLastKey( - predicate: (value?: V, key?: K, iter?: this) => boolean, + predicate: (value: V, key: K, iter: this) => boolean, context?: any ): K; @@ -2399,7 +2399,7 @@ declare namespace Immutable { * */ maxBy( - comparatorValueMapper: (value?: V, key?: K, iter?: this) => C, + comparatorValueMapper: (value: V, key: K, iter: this) => C, comparator?: (valueA: C, valueB: C) => number ): V; @@ -2428,7 +2428,7 @@ declare namespace Immutable { * */ minBy( - comparatorValueMapper: (value?: V, key?: K, iter?: this) => C, + comparatorValueMapper: (value: V, key: K, iter: this) => C, comparator?: (valueA: C, valueB: C) => number ): V; From 5411d2e84a619b7a0aa493558fe8217ca06ceada Mon Sep 17 00:00:00 2001 From: Derek Louie Date: Fri, 28 Oct 2016 06:43:38 -0700 Subject: [PATCH 069/111] Adds the onCloseSuccess config to MdPanel and reveals absPosition enum (#12171) --- angular-material/angular-material.d.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/angular-material/angular-material.d.ts b/angular-material/angular-material.d.ts index da20af95fc..f100fd4d4b 100644 --- a/angular-material/angular-material.d.ts +++ b/angular-material/angular-material.d.ts @@ -339,6 +339,7 @@ declare namespace angular.material { onRemoving?: Function; onDomRemoved?: Function; origin?: string|JQuery|Element; + onCloseSuccess?: ((panel: IPanelRef, closeReason: string) => any); } interface IPanelRef { @@ -411,5 +412,15 @@ declare namespace angular.material { interceptorTypes: { CLOSE: string, }; + closeReasons: { + CLICK_OUTSIDE: string, + ESCAPE: string, + }; + absPosition: { + TOP: string, + RIGHT: string, + BOTTOM: string, + LEFT: string, + }; } } From 2ad9354d494da56f7d97a10ef1ad353b3656af35 Mon Sep 17 00:00:00 2001 From: PishangCode Date: Fri, 28 Oct 2016 21:44:12 +0800 Subject: [PATCH 070/111] added type definitions for node-billplz (#12041) * added type definitions for node-billplz * renamed folder node-billplz to billplz * renamed billplz-test.ts to billplz-tests.ts * update constructor type * update BillplzOptions interface * update create_bill test * change key to require * remove trailing comma * update callback type * update code pattern --- billplz/billplz-tests.ts | 46 +++++++++++++++++++++++ billplz/billplz.d.ts | 80 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 billplz/billplz-tests.ts create mode 100644 billplz/billplz.d.ts diff --git a/billplz/billplz-tests.ts b/billplz/billplz-tests.ts new file mode 100644 index 0000000000..4f0e4633a2 --- /dev/null +++ b/billplz/billplz-tests.ts @@ -0,0 +1,46 @@ +/// + +import * as Billplz from 'billplz'; + +const billplz = new Billplz({ + key: 'your-api-key', + endpoint: 'http://localhost/', + sandbox: true +}); + +// test create collection +billplz.create_collection({ + title: 'your-title' +}); + +// test create open collection +billplz.create_collectionOpen({ + title: 'your-title', + description: 'your-description', + amount: 100 +}); + +// test create bill +billplz.create_bill({ + collection_id: 'your-collection-id', + description: 'your-description', + email: 'your-email', + mobile: 12345, + name: 'your-name', + amount: 100, + callback_url: 'https://example.com/webhook/', + redirect_url: 'https://example.com/done', + due_at: '0000-00-00' +}); + +// test get bill +billplz.get_bill('your-bill-id'); + +// test delete bill +billplz.delete_bill('your-bill-id'); + +// test change collection status +billplz.change_collection_status('your-collection-id', 'status-here'); + +// test registration check +billplz.registration_check('your-bank-account-number'); diff --git a/billplz/billplz.d.ts b/billplz/billplz.d.ts new file mode 100644 index 0000000000..53355f280b --- /dev/null +++ b/billplz/billplz.d.ts @@ -0,0 +1,80 @@ +// Type definitions for billplz 1.0.2 +// Project: https://github.com/suhz/node-billplz +// Definitions by: Akim +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare module Billplz { + // api options type + interface BillplzOptions { + key: string; + endpoint?: string; + sandbox?: boolean; + } + + // collection type + interface CollectionArguments { + title: string; + } + + // open collection type + interface OpenCollectionArguments { + title: string; + description: string; + amount: number; + fixed_amount?: boolean; + fixed_quantity?: boolean; + payment_button?: string; + reference_1_label?: string + reference_2_label?: string; + email_link?: string; + tax?: number; + } + + // bill type + interface BillArguments { + collection_id: string; + email: string; + mobile: number; + name: string; + amount: number; + callback_url: string; + description: string; + due_at?: string; + redirect_url?: string; + deliver?: boolean; + reference_1_label?: string; + reference_1?: string; + reference_2_label?: string; + reference_2?: string; + } +} + +declare class Billplz { + // constructor + constructor(options: string | Billplz.BillplzOptions); + + // create_collection + create_collection(title: Billplz.CollectionArguments, callback?: (res: any, err: any) => void): void; + + // create collectionOpen + create_collectionOpen(args: Billplz.OpenCollectionArguments, callback?: (res: any, err: any) => void): void; + + // create bill + create_bill(args: Billplz.BillArguments, callback?: (res: any, err: any) => void): void; + + // get bill + get_bill(billId: string, callback?: (res: any, err: any) => void): void; + + // delete bill + delete_bill(billId: string, callback?: (res: any, err: any) => void): void; + + // change_collection status + change_collection_status(collectionId: string, status: string, callback?: (res: any, err: any) => void): void; + + // registration check + registration_check(bankAccountNumber: string, callback?: (res: any, err: any) => void): void; +} + +declare module "billplz" { + export = Billplz; +} From 38f3096f496105654c9e9e20551888e5bba2934a Mon Sep 17 00:00:00 2001 From: TonyYang Date: Fri, 28 Oct 2016 21:54:00 +0800 Subject: [PATCH 071/111] [node] Update events for child_process (#12260) * Update events for child_process * Add related tests --- node/node-tests.ts | 96 ++++++++++++++++++++++++++++++++++++++++++++++ node/node.d.ts | 52 +++++++++++++++++++++++++ 2 files changed, 148 insertions(+) diff --git a/node/node-tests.ts b/node/node-tests.ts index b11eb0526e..b0f724b8f4 100644 --- a/node/node-tests.ts +++ b/node/node-tests.ts @@ -1226,6 +1226,102 @@ namespace child_process_tests { childProcess.exec("echo test"); childProcess.spawnSync("echo test"); } + + { + let _cp: childProcess.ChildProcess; + let _boolean: boolean; + + _cp = _cp.addListener("close", (code, signal) => { + let _code: number = code; + let _signal: string = signal; + }) + _cp = _cp.addListener("disconnet", () => { }); + _cp = _cp.addListener("error", (err) => { + let _err: Error = err; + }) + _cp = _cp.addListener("exit", (code, signal) => { + let _code: number = code; + let _signal: string = signal; + }) + _cp = _cp.addListener("message", (message, sendHandle) => { + let _message: any = message; + let _sendHandle: net.Socket | net.Server = sendHandle; + }) + + _boolean = _cp.emit("close", () => { }); + _boolean = _cp.emit("disconnet", () => { }); + _boolean = _cp.emit("error", () => { }); + _boolean = _cp.emit("exit", () => { }); + _boolean = _cp.emit("message", () => { }); + + _cp = _cp.on("close", (code, signal) => { + let _code: number = code; + let _signal: string = signal; + }) + _cp = _cp.on("disconnet", () => { }); + _cp = _cp.on("error", (err) => { + let _err: Error = err; + }) + _cp = _cp.on("exit", (code, signal) => { + let _code: number = code; + let _signal: string = signal; + }) + _cp = _cp.on("message", (message, sendHandle) => { + let _message: any = message; + let _sendHandle: net.Socket | net.Server = sendHandle; + }) + + _cp = _cp.once("close", (code, signal) => { + let _code: number = code; + let _signal: string = signal; + }) + _cp = _cp.once("disconnet", () => { }); + _cp = _cp.once("error", (err) => { + let _err: Error = err; + }) + _cp = _cp.once("exit", (code, signal) => { + let _code: number = code; + let _signal: string = signal; + }) + _cp = _cp.once("message", (message, sendHandle) => { + let _message: any = message; + let _sendHandle: net.Socket | net.Server = sendHandle; + }) + + _cp = _cp.prependListener("close", (code, signal) => { + let _code: number = code; + let _signal: string = signal; + }) + _cp = _cp.prependListener("disconnet", () => { }); + _cp = _cp.prependListener("error", (err) => { + let _err: Error = err; + }) + _cp = _cp.prependListener("exit", (code, signal) => { + let _code: number = code; + let _signal: string = signal; + }) + _cp = _cp.prependListener("message", (message, sendHandle) => { + let _message: any = message; + let _sendHandle: net.Socket | net.Server = sendHandle; + }) + + _cp = _cp.prependOnceListener("close", (code, signal) => { + let _code: number = code; + let _signal: string = signal; + }) + _cp = _cp.prependOnceListener("disconnet", () => { }); + _cp = _cp.prependOnceListener("error", (err) => { + let _err: Error = err; + }) + _cp = _cp.prependOnceListener("exit", (code, signal) => { + let _code: number = code; + let _signal: string = signal; + }) + _cp = _cp.prependOnceListener("message", (message, sendHandle) => { + let _message: any = message; + let _sendHandle: net.Socket | net.Server = sendHandle; + }) + } } ////////////////////////////////////////////////////////////////////// diff --git a/node/node.d.ts b/node/node.d.ts index 1067e008c0..b14f18c5a6 100644 --- a/node/node.d.ts +++ b/node/node.d.ts @@ -1412,6 +1412,7 @@ declare module "vm" { declare module "child_process" { import * as events from "events"; import * as stream from "stream"; + import * as net from "net"; export interface ChildProcess extends events.EventEmitter { stdin: stream.Writable; @@ -1425,6 +1426,57 @@ declare module "child_process" { disconnect(): void; unref(): void; ref(): void; + + /** + * events.EventEmitter + * 1. close + * 2. disconnet + * 3. error + * 4. exit + * 5. message + **/ + + addListener(event: string, listener: Function): this; + addListener(event: "close", listener: (code: number, signal: string) => void): this; + addListener(event: "disconnet", listener: () => void): this; + addListener(event: "error", listener: (err: Error) => void): this; + addListener(event: "exit", listener: (code: number, signal: string) => void): this; + addListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; + + emit(event: string, ...args: any[]): boolean; + emit(event: "close", code: number, signal: string): boolean; + emit(event: "disconnet"): boolean; + emit(event: "error", err: Error): boolean; + emit(event: "exit", code: number, signal: string): boolean; + emit(event: "message", message: any, sendHandle: net.Socket | net.Server): boolean; + + on(event: string, listener: Function): this; + on(event: "close", listener: (code: number, signal: string) => void): this; + on(event: "disconnet", listener: () => void): this; + on(event: "error", listener: (err: Error) => void): this; + on(event: "exit", listener: (code: number, signal: string) => void): this; + on(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; + + once(event: string, listener: Function): this; + once(event: "close", listener: (code: number, signal: string) => void): this; + once(event: "disconnet", listener: () => void): this; + once(event: "error", listener: (err: Error) => void): this; + once(event: "exit", listener: (code: number, signal: string) => void): this; + once(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; + + prependListener(event: string, listener: Function): this; + prependListener(event: "close", listener: (code: number, signal: string) => void): this; + prependListener(event: "disconnet", listener: () => void): this; + prependListener(event: "error", listener: (err: Error) => void): this; + prependListener(event: "exit", listener: (code: number, signal: string) => void): this; + prependListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; + + prependOnceListener(event: string, listener: Function): this; + prependOnceListener(event: "close", listener: (code: number, signal: string) => void): this; + prependOnceListener(event: "disconnet", listener: () => void): this; + prependOnceListener(event: "error", listener: (err: Error) => void): this; + prependOnceListener(event: "exit", listener: (code: number, signal: string) => void): this; + prependOnceListener(event: "message", listener: (message: any, sendHandle: net.Socket | net.Server) => void): this; } export interface SpawnOptions { From 8791a14cc554925a0ab85eaf0ce3ba40662e9a2c Mon Sep 17 00:00:00 2001 From: TonyYang Date: Fri, 28 Oct 2016 21:54:20 +0800 Subject: [PATCH 072/111] [node] Update events for readline (#12261) * Update events for readline * update related tests --- node/node-tests.ts | 63 ++++++++++++++++++++++++++++++++++++++++++++ node/node.d.ts | 65 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) diff --git a/node/node-tests.ts b/node/node-tests.ts index b0f724b8f4..a21940cd7e 100644 --- a/node/node-tests.ts +++ b/node/node-tests.ts @@ -1200,6 +1200,69 @@ namespace readline_tests { readline.clearScreenDown(stream); } + + { + let _rl: readline.ReadLine; + let _boolean: boolean; + + _rl = _rl.addListener("close", () => { }); + _rl = _rl.addListener("line", (input) => { + let _input: any = input; + }) + _rl = _rl.addListener("pause", () => { }); + _rl = _rl.addListener("resume", () => { }); + _rl = _rl.addListener("SIGCONT", () => { }); + _rl = _rl.addListener("SIGINT", () => { }); + _rl = _rl.addListener("SIGTSTP", () => { }); + + _boolean = _rl.emit("close", () => { }); + _boolean = _rl.emit("line", () => { }); + _boolean = _rl.emit("pause", () => { }); + _boolean = _rl.emit("resume", () => { }); + _boolean = _rl.emit("SIGCONT", () => { }); + _boolean = _rl.emit("SIGINT", () => { }); + _boolean = _rl.emit("SIGTSTP", () => { }); + + _rl = _rl.on("close", () => { }); + _rl = _rl.on("line", (input) => { + let _input: any = input; + }) + _rl = _rl.on("pause", () => { }); + _rl = _rl.on("resume", () => { }); + _rl = _rl.on("SIGCONT", () => { }); + _rl = _rl.on("SIGINT", () => { }); + _rl = _rl.on("SIGTSTP", () => { }); + + _rl = _rl.once("close", () => { }); + _rl = _rl.once("line", (input) => { + let _input: any = input; + }) + _rl = _rl.once("pause", () => { }); + _rl = _rl.once("resume", () => { }); + _rl = _rl.once("SIGCONT", () => { }); + _rl = _rl.once("SIGINT", () => { }); + _rl = _rl.once("SIGTSTP", () => { }); + + _rl = _rl.prependListener("close", () => { }); + _rl = _rl.prependListener("line", (input) => { + let _input: any = input; + }) + _rl = _rl.prependListener("pause", () => { }); + _rl = _rl.prependListener("resume", () => { }); + _rl = _rl.prependListener("SIGCONT", () => { }); + _rl = _rl.prependListener("SIGINT", () => { }); + _rl = _rl.prependListener("SIGTSTP", () => { }); + + _rl = _rl.prependOnceListener("close", () => { }); + _rl = _rl.prependOnceListener("line", (input) => { + let _input: any = input; + }) + _rl = _rl.prependOnceListener("pause", () => { }); + _rl = _rl.prependOnceListener("resume", () => { }); + _rl = _rl.prependOnceListener("SIGCONT", () => { }); + _rl = _rl.prependOnceListener("SIGINT", () => { }); + _rl = _rl.prependOnceListener("SIGTSTP", () => { }); + } } //////////////////////////////////////////////////// diff --git a/node/node.d.ts b/node/node.d.ts index b14f18c5a6..ea7e913ea8 100644 --- a/node/node.d.ts +++ b/node/node.d.ts @@ -1348,6 +1348,71 @@ declare module "readline" { resume(): ReadLine; close(): void; write(data: string | Buffer, key?: Key): void; + + /** + * events.EventEmitter + * 1. close + * 2. line + * 3. pause + * 4. resume + * 5. SIGCONT + * 6. SIGINT + * 7. SIGTSTP + **/ + + addListener(event: string, listener: Function): this; + addListener(event: "close", listener: () => void): this; + addListener(event: "line", listener: (input: any) => void): this; + addListener(event: "pause", listener: () => void): this; + addListener(event: "resume", listener: () => void): this; + addListener(event: "SIGCONT", listener: () => void): this; + addListener(event: "SIGINT", listener: () => void): this; + addListener(event: "SIGTSTP", listener: () => void): this; + + emit(event: string, ...args: any[]): boolean; + emit(event: "close"): boolean; + emit(event: "line", input: any): boolean; + emit(event: "pause"): boolean; + emit(event: "resume"): boolean; + emit(event: "SIGCONT"): boolean; + emit(event: "SIGINT"): boolean; + emit(event: "SIGTSTP"): boolean; + + on(event: string, listener: Function): this; + on(event: "close", listener: () => void): this; + on(event: "line", listener: (input: any) => void): this; + on(event: "pause", listener: () => void): this; + on(event: "resume", listener: () => void): this; + on(event: "SIGCONT", listener: () => void): this; + on(event: "SIGINT", listener: () => void): this; + on(event: "SIGTSTP", listener: () => void): this; + + once(event: string, listener: Function): this; + once(event: "close", listener: () => void): this; + once(event: "line", listener: (input: any) => void): this; + once(event: "pause", listener: () => void): this; + once(event: "resume", listener: () => void): this; + once(event: "SIGCONT", listener: () => void): this; + once(event: "SIGINT", listener: () => void): this; + once(event: "SIGTSTP", listener: () => void): this; + + prependListener(event: string, listener: Function): this; + prependListener(event: "close", listener: () => void): this; + prependListener(event: "line", listener: (input: any) => void): this; + prependListener(event: "pause", listener: () => void): this; + prependListener(event: "resume", listener: () => void): this; + prependListener(event: "SIGCONT", listener: () => void): this; + prependListener(event: "SIGINT", listener: () => void): this; + prependListener(event: "SIGTSTP", listener: () => void): this; + + prependOnceListener(event: string, listener: Function): this; + prependOnceListener(event: "close", listener: () => void): this; + prependOnceListener(event: "line", listener: (input: any) => void): this; + prependOnceListener(event: "pause", listener: () => void): this; + prependOnceListener(event: "resume", listener: () => void): this; + prependOnceListener(event: "SIGCONT", listener: () => void): this; + prependOnceListener(event: "SIGINT", listener: () => void): this; + prependOnceListener(event: "SIGTSTP", listener: () => void): this; } export interface Completer { From 896f939be74ac31e376fe256f48edc23bebcabb6 Mon Sep 17 00:00:00 2001 From: TonyYang Date: Fri, 28 Oct 2016 21:55:20 +0800 Subject: [PATCH 073/111] [node] Update events for repl (#12262) * Update events for repl * Update related tests * Fix argument --- node/node-tests.ts | 31 +++++++++++++++++++++++++++++++ node/node.d.ts | 32 +++++++++++++++++++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/node/node-tests.ts b/node/node-tests.ts index a21940cd7e..b98b23ad69 100644 --- a/node/node-tests.ts +++ b/node/node-tests.ts @@ -22,6 +22,7 @@ import * as vm from "vm"; import * as string_decoder from "string_decoder"; import * as stream from "stream"; import * as timers from "timers"; +import * as repl from "repl"; // Specifically test buffer module regression. import {Buffer as ImportedBuffer, SlowBuffer as ImportedSlowBuffer} from "buffer"; @@ -1804,6 +1805,36 @@ namespace net_tests { } +///////////////////////////////////////////////////// +/// repl Tests : https://nodejs.org/api/repl.html /// +///////////////////////////////////////////////////// + +namespace repl_tests { + { + let _server: repl.REPLServer; + let _boolean: boolean; + let _ctx: any; + + _server = _server.addListener("exit", () => { }); + _server = _server.addListener("reset", () => { }); + + _boolean = _server.emit("exit", () => { }); + _boolean = _server.emit("reset", _ctx); + + _server = _server.on("exit", () => { }); + _server = _server.on("reset", () => { }); + + _server = _server.once("exit", () => { }); + _server = _server.once("reset", () => { }); + + _server = _server.prependListener("exit", () => { }); + _server = _server.prependListener("reset", () => { }); + + _server = _server.prependOnceListener("exit", () => { }); + _server = _server.prependOnceListener("reset", () => { }); + } +} + /***************************************************************************** * * * The following tests are the modules not mentioned in document but existed * diff --git a/node/node.d.ts b/node/node.d.ts index ea7e913ea8..fe56ba851a 100644 --- a/node/node.d.ts +++ b/node/node.d.ts @@ -1322,7 +1322,37 @@ declare module "repl" { export interface REPLServer extends readline.ReadLine { defineCommand(keyword: string, cmd: Function | { help: string, action: Function }): void; - displayPrompt(preserveCursor?: boolean): void + displayPrompt(preserveCursor?: boolean): void; + + /** + * events.EventEmitter + * 1. exit + * 2. reset + **/ + + addListener(event: string, listener: Function): this; + addListener(event: "exit", listener: () => void): this; + addListener(event: "reset", listener: Function): this; + + emit(event: string, ...args: any[]): boolean; + emit(event: "exit"): boolean; + emit(event: "reset", context: any): boolean; + + on(event: string, listener: Function): this; + on(event: "exit", listener: () => void): this; + on(event: "reset", listener: Function): this; + + once(event: string, listener: Function): this; + once(event: "exit", listener: () => void): this; + once(event: "reset", listener: Function): this; + + prependListener(event: string, listener: Function): this; + prependListener(event: "exit", listener: () => void): this; + prependListener(event: "reset", listener: Function): this; + + prependOnceListener(event: string, listener: Function): this; + prependOnceListener(event: "exit", listener: () => void): this; + prependOnceListener(event: "reset", listener: Function): this; } export function start(options: ReplOptions): REPLServer; From 0190982444ef670839deb3fde37a26c79dfce08e Mon Sep 17 00:00:00 2001 From: Edward Silverton Date: Fri, 28 Oct 2016 15:55:57 +0200 Subject: [PATCH 074/111] added setVRDisplay to VRControls and VREffect (#12008) * added setVRDisplay to VRControls and VREffect * return void --- threejs/three-vrcontrols.d.ts | 3 +++ threejs/three-vreffect.d.ts | 2 ++ 2 files changed, 5 insertions(+) diff --git a/threejs/three-vrcontrols.d.ts b/threejs/three-vrcontrols.d.ts index 1e0b018a6a..e1c9940cee 100644 --- a/threejs/three-vrcontrols.d.ts +++ b/threejs/three-vrcontrols.d.ts @@ -4,6 +4,7 @@ // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped /// +/// declare namespace THREE { export class VRControls { @@ -16,5 +17,7 @@ declare namespace THREE { zeroSensor(): void; scale: number; + + setVRDisplay(display: VRDisplay): void; } } diff --git a/threejs/three-vreffect.d.ts b/threejs/three-vreffect.d.ts index 1e1684cc67..93f5e28acb 100644 --- a/threejs/three-vreffect.d.ts +++ b/threejs/three-vreffect.d.ts @@ -4,6 +4,7 @@ // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped /// +/// declare namespace THREE { export class VREffect { @@ -15,6 +16,7 @@ declare namespace THREE { FovToNDCScaleOffset(fov: VRFov): VREffectOffset; FovPortToProjection(fov: VRFov, rightHanded: boolean, zNear: number, zFar: number): Matrix4; FovToProjection(fov: VRFov, rightHanded: boolean, zNear: number, zFar: number): Matrix4; + setVRDisplay(display: VRDisplay): void; } export interface VRFov{ From 94bd397fdaca6e705731f9cc3aa3c07091db92b3 Mon Sep 17 00:00:00 2001 From: Niels Kristian Hansen Skovmand Date: Fri, 28 Oct 2016 16:06:17 +0200 Subject: [PATCH 075/111] Removed typings for spotify-web-api-js because they are now integrated in the package. (#12145) --- .../spotify-web-api-js-tests.ts | 70 --- spotify-web-api-js/spotify-web-api-js.d.ts | 533 ------------------ 2 files changed, 603 deletions(-) delete mode 100644 spotify-web-api-js/spotify-web-api-js-tests.ts delete mode 100644 spotify-web-api-js/spotify-web-api-js.d.ts diff --git a/spotify-web-api-js/spotify-web-api-js-tests.ts b/spotify-web-api-js/spotify-web-api-js-tests.ts deleted file mode 100644 index 11fcf2b43b..0000000000 --- a/spotify-web-api-js/spotify-web-api-js-tests.ts +++ /dev/null @@ -1,70 +0,0 @@ -// Test for the type definitions for spotify-web-api-js -// Project: https://github.com/JMPerez/spotify-web-api-js -// Definitions by: Niels Kristian Hansen Skovmand -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -// This test-file assumes the following two d.ts files to be present. - -/// -/// - -var spotify = new SpotifyWebApi(); - -/** - * Tests getAlbums - */ -spotify.getAlbums(['1uw3ISK6Khq5xVWF1GWTjt', '5R8N32ocA6RqSxibt4W6x3'], { market: 'DK' }) -.then(results => { - results.albums.forEach(album => { - album.images.forEach(image => { - console.log('Image URL: ' + image.url.toUpperCase()); - }) - }); -}); - - - -/** - * Tests getAlbum with an error - */ -function albumSearchCallback(error: SpotifyWebApiJs.ErrorObject, results: SpotifyApi.SingleAlbumResponse) { - console.log(error.status.toString() + " - message is: " + error.statusText); -}; - -spotify.getAlbum('xxx1uw3ISK6Khq5xVWF1GWTjt', albumSearchCallback); - - - -/** - * Tests getCategories with a callback - */ -function trackSearchCallback(error: SpotifyWebApiJs.ErrorObject, results: SpotifyApi.TrackSearchResponse) { - console.log("Found a total of " + results.tracks.total + " tracks"); - var onlyExplicitTracks = results.tracks.items.filter(track => { - return track.explicit; - }); - onlyExplicitTracks.forEach(track => console.log(track.name)); -}; - -spotify.searchTracks("Love itself", {limit: 5, market: 'DK'}, trackSearchCallback); - - -/** - * Tests getting a users public profile - */ -spotify.getUser('physicaltunes') -.then(results => { - console.log(results.id.toUpperCase(), - 'Followers: ' + results.followers.total.toString()); -}); - - -/** - * Tests getting top tracks - */ -spotify.getArtistTopTracks('07QEuhtrNmmZ0zEcqE9SF6', 'DK') -.then(results => { - results.tracks.forEach(track => { - console.log(track.name, track.artists.shift().name); - }) -}); \ No newline at end of file diff --git a/spotify-web-api-js/spotify-web-api-js.d.ts b/spotify-web-api-js/spotify-web-api-js.d.ts deleted file mode 100644 index 817626199c..0000000000 --- a/spotify-web-api-js/spotify-web-api-js.d.ts +++ /dev/null @@ -1,533 +0,0 @@ -// Type definitions for spotify-web-api-js -// Project: https://github.com/JMPerez/spotify-web-api-js -// Definitions by: Niels Kristian Hansen Skovmand -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -/// - -/** - * Declare SpotifyWebApi variable, sincle that is the name of the function in spotify-web-api-js. - */ -declare var SpotifyWebApi: SpotifyWebApiJs.SpotifyWebApiJsStatic; - -declare namespace SpotifyWebApiJs { - /** - * An optional callback that receives 2 parameters. The first - * one is the error object (null if no error), and the second is the value if the request succeeded. - */ - interface ResultsCallback { - (error: ErrorObject, value: T) : any - } - - /** - * Describes the regular error object: https://developer.spotify.com/web-api/user-guide/#error-details - */ - interface ErrorObject { - status: number, - response: string, - statusText: string - } - - /** - * Describes the static side of SpotifyApi. Get a new instance of the SpotifyApi. - */ - interface SpotifyWebApiJsStatic { - new(): SpotifyApiJs; - } - - /** - * Describes an instance of SpotifyApi - */ - interface SpotifyApiJs { - /** - * Fetches a resource through a generic GET request. - * - * @param url The URL to be fetched - * @param callback An optional callback - */ - getGeneric(url: string, callback?: ResultsCallback) : Promise; - - /** - * Fetches information about the current user. - * See [Get Current User's Profile](https://developer.spotify.com/web-api/get-current-users-profile/) - * - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getMe(options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches current user's saved tracks. - * See [Get Current User's Saved Tracks](https://developer.spotify.com/web-api/get-users-saved-tracks/) - * - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getMySavedTracks(options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Adds a list of tracks to the current user's saved tracks. - * See [Save Tracks for Current User](https://developer.spotify.com/web-api/save-tracks-user/) - * - * @param trackIds The ids of the tracks. If you know their Spotify URI it is easy to find their track id (e.g. spotify:track:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - addToMySavedTracks(trackIds: string[], options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Remove a list of tracks from the current user's saved tracks. - * See [Remove Tracks for Current User](https://developer.spotify.com/web-api/remove-tracks-user/) - * - * @param trackIds The ids of the tracks. If you know their Spotify URI it is easy to find their track id (e.g. spotify:track:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - removeFromMySavedTracks(trackIds: string[], options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Checks if the current user's saved tracks contains a certain list of tracks. - * See [Check Current User's Saved Tracks](https://developer.spotify.com/web-api/check-users-saved-tracks/) on the Spotify Developer site for more information about the endpoint. - * - * @param trackIds The ids of the tracks. If you know their Spotify URI it is easy to find their track id (e.g. spotify:track:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - containsMySavedTracks(trackIds: string[], options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Adds the current user as a follower of one or more other Spotify users. - * See [Follow Artists or Users](https://developer.spotify.com/web-api/follow-artists-users/) on the Spotify Developer site for more information about the endpoint. - * - * @param userIds The ids of the users. If you know their Spotify URI it is easy to find their user id (e.g. spotify:user:) - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. one is the error object (null if no error), and the second is an empty value if the request succeeded. - */ - followUsers(userIds: string[], callback?: ResultsCallback) : Promise; - - /** - * Adds the current user as a follower of one or more artists. - * See [Follow Artists or Users](https://developer.spotify.com/web-api/follow-artists-users/) on the Spotify Developer site for more information about the endpoint. - * - * @param artistIds The ids of the artists. If you know their Spotify URI it is easy to find their artist id (e.g. spotify:artist:) - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. one is the error object (null if no error), and the second is an empty value if the request succeeded. - */ - followArtists(artistIds: string[], callback?: ResultsCallback) : Promise; - - /** - * Add the current user as a follower of one playlist. - * See [Follow a Playlist](https://developer.spotify.com/web-api/follow-playlist/) on the Spotify Developer site for more information about the endpoint. - * - * @param ownerId The id of the playlist owner. If you know the Spotify URI of the playlist, it is easy to find the owner's user id (e.g. spotify:user::playlist:xxxx) - * @param playlistId The id of the playlist. If you know the Spotify URI it is easy to find the playlist id (e.g. spotify:user:xxxx:playlist:) - * @param options A JSON object with options that can be passed. For instance, whether you want the playlist to be followed privately ({public: false}) - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - followPlaylist(ownerId: string, playlistId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Removes the current user as a follower of one or more other Spotify users. - * See [Unfollow Artists or Users](https://developer.spotify.com/web-api/unfollow-artists-users/) on the Spotify Developer site for more information about the endpoint. - * - * @param userIds The ids of the users. If you know their Spotify URI it is easy to find their user id (e.g. spotify:user:) - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - unfollowUsers(userIds: string[], callback?: ResultsCallback) : Promise; - - /** - * Removes the current user as a follower of one or more artists. - * See [Unfollow Artists or Users](https://developer.spotify.com/web-api/unfollow-artists-users/) on the Spotify Developer site for more information about the endpoint. - * - * @param artistIds The ids of the artists. If you know their Spotify URI it is easy to find their artist id (e.g. spotify:artist:) - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - unfollowArtists(artistIds: string[], callback?: ResultsCallback) : Promise; - - /** - * Remove the current user as a follower of one playlist. - * See [Unfollow a Playlist](https://developer.spotify.com/web-api/unfollow-playlist/) on the Spotify Developer site for more information about the endpoint. - * - * @param ownerId The id of the playlist owner. If you know the Spotify URI of the playlist, it is easy to find the owner's user id (e.g. spotify:user::playlist:xxxx) - * @param playlistId The id of the playlist. If you know the Spotify URI it is easy to find the playlist id (e.g. spotify:user:xxxx:playlist:) - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - unfollowPlaylist(ownerId: string, playlistId: string, callback?: ResultsCallback) : Promise; - - /** - * Checks to see if the current user is following one or more other Spotify users. - * See [Check if Current User Follows Users or Artists](https://developer.spotify.com/web-api/check-current-user-follows/) on the Spotify Developer site for more information about the endpoint. - * - * @param userIds The ids of the users. If you know their Spotify URI it is easy to find their user id (e.g. spotify:user:) - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - isFollowingUsers(userIds: string[], callback?: ResultsCallback) : Promise - - /** - * Checks to see if the current user is following one or more artists. - * See [Check if Current User Follows](https://developer.spotify.com/web-api/check-current-user-follows/) on the Spotify Developer site for more information about the endpoint. - * - * @param artistIds The ids of the artists. If you know their Spotify URI it is easy to find their artist id (e.g. spotify:artist:) - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - isFollowingArtists(artistIds: string[], callback?: ResultsCallback) : Promise; - - /** - * Check to see if one or more Spotify users are following a specified playlist. - * See [Check if Users Follow a Playlist](https://developer.spotify.com/web-api/check-user-following-playlist/) on the Spotify Developer site for more information about the endpoint. - * - * @param ownerId The id of the playlist owner. If you know the Spotify URI of the playlist, it is easy to find the owner's user id (e.g. spotify:user::playlist:xxxx) - * @param playlistId The id of the playlist. If you know the Spotify URI it is easy to find the playlist id (e.g. spotify:user:xxxx:playlist:) - * @param userIds The ids of the users. If you know their Spotify URI it is easy to find their user id (e.g. spotify:user:) - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - areFollowingPlaylist(ownerId: string, playlistId: string, userIds: string[], callback?: ResultsCallback) : Promise; - - /** - * Get the current user's followed artists. - * See [Get User's Followed Artists](https://developer.spotify.com/web-api/get-followed-artists/) on the Spotify Developer site for more information about the endpoint. - * - * @param options Options, being after and limit. - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getFollowedArtists(options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches information about a specific user. - * See [Get a User's Profile](https://developer.spotify.com/web-api/get-users-profile/) on the Spotify Developer site for more information about the endpoint. - * - * @param userId The id of the user. If you know the Spotify URI it is easy to find the id (e.g. spotify:user:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getUser(userId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches a list of the current user's playlists. - * See [Get a List of a User's Playlists](https://developer.spotify.com/web-api/get-list-users-playlists/) on the Spotify Developer site for more information about the endpoint. - * - * @param userId The id of the user. If you know the Spotify URI it is easy to find the id (e.g. spotify:user:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getUserPlaylists(userId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches a specific playlist. - * See [Get a Playlist](https://developer.spotify.com/web-api/get-playlist/) on the Spotify Developer site for more information about the endpoint. - * - * @param userId The id of the user. If you know the Spotify URI it is easy to find the user id (e.g. spotify:user::playlist:xxxx) - * @param playlistId The id of the playlist. If you know the Spotify URI it is easy to find the playlist id (e.g. spotify:user:xxxx:playlist:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getPlaylist(userId: string, playlistId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches the tracks from a specific playlist. - * See [Get a Playlist's Tracks](https://developer.spotify.com/web-api/get-playlists-tracks/) on the Spotify Developer site for more information about the endpoint. - * - * @param userId The id of the user. If you know the Spotify URI it is easy to find the user id (e.g. spotify:user::playlist:xxxx) - * @param playlistId The id of the playlist. If you know the Spotify URI it is easy to find the playlist id (e.g. spotify:user:xxxx:playlist:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getPlaylistTracks(userId: string, playlistId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Creates a playlist and stores it in the current user's library. - * See [Create a Playlist](https://developer.spotify.com/web-api/create-playlist/) on the Spotify Developer site for more information about the endpoint. - * - * @param userId The id of the user. You may want to user the "getMe" function to find out the id of the current logged in user - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - createPlaylist(userId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Change a playlist's name and public/private state - * See [Change a Playlist's Details](https://developer.spotify.com/web-api/change-playlist-details/) on the Spotify Developer site for more information about the endpoint. - * - * @param userId The id of the user. You may want to user the "getMe" function to find out the id of the current logged in user - * @param playlistId The id of the playlist. If you know the Spotify URI it is easy to find the playlist id (e.g. spotify:user:xxxx:playlist:) - * @param data A JSON object with the data to update. E.g. {name: 'A new name', public: true} - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - changePlaylistDetails(userId: string, playlistId: string, data: Object, callback?: ResultsCallback) : Promise; - - /** - * Add tracks to a playlist. - * See [Add Tracks to a Playlist](https://developer.spotify.com/web-api/add-tracks-to-playlist/) on the Spotify Developer site for more information about the endpoint. - * - * @param userId The id of the user. If you know the Spotify URI it is easy to find the user id (e.g. spotify:user::playlist:xxxx) - * @param playlistId The id of the playlist. If you know the Spotify URI it is easy to find the playlist id (e.g. spotify:user:xxxx:playlist:) - * @param uris An array of Spotify URIs for the tracks - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - addTracksToPlaylist(userId: string, playlistId: string, uris: string[], options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Replace the tracks of a playlist - * See [Replace a Playlist's Tracks](https://developer.spotify.com/web-api/replace-playlists-tracks/) on the Spotify Developer site for more information about the endpoint. - * - * @param userId The id of the user. If you know the Spotify URI it is easy to find the user id (e.g. spotify:user::playlist:xxxx) - * @param playlistId The id of the playlist. If you know the Spotify URI it is easy to find the playlist id (e.g. spotify:user:xxxx:playlist:) - * @param uris An array of Spotify URIs for the tracks - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - replaceTracksInPlaylist(userId: string, playlistId: string, uris: string[], callback?: ResultsCallback) : Promise; - - /** - * Reorder tracks in a playlist - * See [Reorder a Playlist’s Tracks](https://developer.spotify.com/web-api/reorder-playlists-tracks/) on the Spotify Developer site for more information about the endpoint. - * - * @param userId The id of the user. If you know the Spotify URI it is easy to find the user id (e.g. spotify:user::playlist:xxxx) - * @param playlistId The id of the playlist. If you know the Spotify URI it is easy to find the playlist id (e.g. spotify:user:xxxx:playlist:) - * @param rangeStart The position of the first track to be reordered. - * @param insertBefore The position where the tracks should be inserted. To reorder the tracks to the end of the playlist, simply set insert_before to the position after the last track. - * @param options An object with optional parameters (range_length, snapshot_id) - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - reorderTracksInPlaylist(userId: string, playlistId: string, rangeStart: number, insertBefore: number, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Remove tracks from a playlist - * See [Remove Tracks from a Playlist](https://developer.spotify.com/web-api/remove-tracks-playlist/) on the Spotify Developer site for more information about the endpoint. - * - * @param userId The id of the user. If you know the Spotify URI it is easy to find the user id (e.g. spotify:user::playlist:xxxx) - * @param playlistId The id of the playlist. If you know the Spotify URI it is easy to find the playlist id (e.g. spotify:user:xxxx:playlist:) - * @param uris An array of tracks to be removed. Each element of the array can be either a string, in which case it is treated as a URI, or an object containing the properties `uri` (which is a string) and `positions` (which is an array of integers). - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - removeTracksFromPlaylist(userId: string, playlistId: string, uris: Object[], callback?: ResultsCallback) : Promise; - - /** - * Remove tracks from a playlist, specifying a snapshot id. - * See [Remove Tracks from a Playlist](https://developer.spotify.com/web-api/remove-tracks-playlist/) on the Spotify Developer site for more information about the endpoint. - * - * @param userId The id of the user. If you know the Spotify URI it is easy to find the user id (e.g. spotify:user::playlist:xxxx) - * @param playlistId The id of the playlist. If you know the Spotify URI it is easy to find the playlist id (e.g. spotify:user:xxxx:playlist:) - * @param uris An array of tracks to be removed. Each element of the array can be either a string, in which case it is treated as a URI, or an object containing the properties `uri` (which is a string) and `positions` (which is an array of integers). - * @param snapshotId The playlist's snapshot ID against which you want to make the changes - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - removeTracksFromPlaylistWithSnapshotId(userId: string, playlistId: string, uris: Object[], snapshotId: string, callback?: ResultsCallback) : Promise; - - /** - * Remove tracks from a playlist, specifying the positions of the tracks to be removed. - * See [Remove Tracks from a Playlist](https://developer.spotify.com/web-api/remove-tracks-playlist/) on - * the Spotify Developer site for more information about the endpoint. - * @param userId The id of the user. If you know the Spotify URI it is easy - * to find the user id (e.g. spotify:user::playlist:xxxx) - * @param playlistId The id of the playlist. If you know the Spotify URI it is easy to find the playlist id (e.g. spotify:user:xxxx:playlist:) - * @param positions array of integers containing the positions of the tracks to remove from the playlist. - * @param snapshotId The playlist's snapshot ID against which you want to make the changes - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - removeTracksFromPlaylistInPositions(userId: string, playlistId: string, positions: number[], snapshotId: string, callback?: ResultsCallback) : Promise; - - /** - * Fetches an album from the Spotify catalog. - * See [Get an Album](https://developer.spotify.com/web-api/get-album/) on the Spotify Developer site for more information about the endpoint. - * - * @param albumId The id of the album. If you know the Spotify URI it is easy to find the album id (e.g. spotify:album:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getAlbum(albumId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches the tracks of an album from the Spotify catalog. - * See [Get an Album's Tracks](https://developer.spotify.com/web-api/get-albums-tracks/) on the Spotify Developer site for more information about the endpoint. - * - * @param albumId The id of the album. If you know the Spotify URI it is easy to find the album id (e.g. spotify:album:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getAlbumTracks(albumId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches multiple albums from the Spotify catalog. - * See [Get Several Albums](https://developer.spotify.com/web-api/get-several-albums/) on the Spotify Developer site for more information about the endpoint. - * - * @param albumIds The ids of the albums. If you know their Spotify URI it is easy to find their album id (e.g. spotify:album:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getAlbums(albumIds: string[], options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches a track from the Spotify catalog. - * See [Get a Track](https://developer.spotify.com/web-api/get-track/) on the Spotify Developer site for more information about the endpoint. - * - * @param trackId The id of the track. If you know the Spotify URI it is easy to find the track id (e.g. spotify:track:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getTrack(trackId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches multiple tracks from the Spotify catalog. - * See [Get Several Tracks](https://developer.spotify.com/web-api/get-several-tracks/) on - * the Spotify Developer site for more information about the endpoint. - * @param trackIds The ids of the tracks. If you know their Spotify URI it is easy to find their track id (e.g. spotify:track:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getTracks(trackIds: string[], options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches an artist from the Spotify catalog. - * See [Get an Artist](https://developer.spotify.com/web-api/get-artist/) on the Spotify Developer site for more information about the endpoint. - * - * @param artistId The id of the artist. If you know the Spotify URI it is easy to find the artist id (e.g. spotify:artist:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getArtist(artistId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches multiple artists from the Spotify catalog. - * See [Get Several Artists](https://developer.spotify.com/web-api/get-several-artists/) on the Spotify Developer site for more information about the endpoint. - * - * @param artistIds The ids of the artists. If you know their Spotify URI it is easy to find their artist id (e.g. spotify:artist:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getArtists(artistIds: string[], options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches the albums of an artist from the Spotify catalog. - * See [Get an Artist's Albums](https://developer.spotify.com/web-api/get-artists-albums/) on the Spotify Developer site for more information about the endpoint. - * - * @param artistId The id of the artist. If you know the Spotify URI it is easy to find the artist id (e.g. spotify:artist:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getArtistAlbums(artistId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches a list of top tracks of an artist from the Spotify catalog, for a specific country. - * See [Get an Artist's Top Tracks](https://developer.spotify.com/web-api/get-artists-top-tracks/) on the Spotify Developer site for more information about the endpoint. - * - * @param artistId The id of the artist. If you know the Spotify URI it is easy to find the artist id (e.g. spotify:artist:) - * @param countryId The id of the country (e.g. ES for Spain or US for United States) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getArtistTopTracks(artistId: string, countryId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches a list of artists related with a given one from the Spotify catalog. - * See [Get an Artist's Related Artists](https://developer.spotify.com/web-api/get-related-artists/) on the Spotify Developer site for more information about the endpoint. - * - * @param artistId The id of the artist. If you know the Spotify URI it is easy to find the artist id (e.g. spotify:artist:) - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getArtistRelatedArtists(artistId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches a list of Spotify featured playlists (shown, for example, on a Spotify player's "Browse" tab). - * See [Get a List of Featured Playlists](https://developer.spotify.com/web-api/get-list-featured-playlists/) on the Spotify Developer site for more information about the endpoint. - * - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getFeaturedPlaylists(options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches a list of new album releases featured in Spotify (shown, for example, on a Spotify player's "Browse" tab). - * See [Get a List of New Releases](https://developer.spotify.com/web-api/get-list-new-releases/) on the Spotify Developer site for more information about the endpoint. - * - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getNewReleases(options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Get a list of categories used to tag items in Spotify (on, for example, the Spotify player's "Browse" tab). - * See [Get a List of Categories](https://developer.spotify.com/web-api/get-list-categories/) on the Spotify Developer site for more information about the endpoint. - * - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getCategories(options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Get a single category used to tag items in Spotify (on, for example, the Spotify player's "Browse" tab). - * See [Get a Category](https://developer.spotify.com/web-api/get-category/) on the Spotify Developer site for more information about the endpoint. - * - * @param categoryId The id of the category. These can be found with the getCategories function - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getCategory(categoryId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Get a list of Spotify playlists tagged with a particular category. - * See [Get a Category's Playlists](https://developer.spotify.com/web-api/get-categorys-playlists/) on the Spotify Developer site for more information about the endpoint. - * - * @param categoryId The id of the category. These can be found with the getCategories function - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - getCategoryPlaylists(categoryId: string, options?: Object, callback?: ResultsCallback) : Promise; - - /** - * Fetches albums from the Spotify catalog according to a query. - * See [Search for an Item](https://developer.spotify.com/web-api/search-item/) on the Spotify Developer site for more information about the endpoint. - * - * @param query The search query - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - searchAlbums(query: string, options?: SpotifyApi.SearchForItemParameterObject, callback?: ResultsCallback) : Promise; - - /** - * Fetches artists from the Spotify catalog according to a query. - * See [Search for an Item](https://developer.spotify.com/web-api/search-item/) on the Spotify Developer site for more information about the endpoint. - * - * @param query The search query - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - searchArtists(query: string, options?: SpotifyApi.SearchForItemParameterObject, callback?: ResultsCallback) : Promise; - - /** - * Fetches tracks from the Spotify catalog according to a query. - * See [Search for an Item](https://developer.spotify.com/web-api/search-item/) on the Spotify Developer site for more information about the endpoint. - * - * @param query The search query - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - searchTracks(query: string, options?: SpotifyApi.SearchForItemParameterObject, callback?: ResultsCallback) : Promise; - - /** - * Fetches playlists from the Spotify catalog according to a query. - * See [Search for an Item](https://developer.spotify.com/web-api/search-item/) on the Spotify Developer site for more information about the endpoint. - * - * @param query The search query - * @param options A JSON object with options that can be passed - * @param callback An optional callback that receives 2 parameters. The first one is the error object (null if no error), and the second is the value if the request succeeded. - */ - searchPlaylists(query: string, options?: SpotifyApi.SearchForItemParameterObject, callback?: ResultsCallback) : Promise; - - /** - * Sets the access token to be used. - * See [the Authorization Guide](https://developer.spotify.com/web-api/authorization-guide/) on the Spotify Developer site for more information about obtaining an access token. - * - * @param accessToken The access token - */ - setAccessToken(accessToken: string) : void; - - /** - * Sets an implementation of Promises/A+ to be used. E.g. Q, when. - * See [Conformant Implementations](https://github.com/promises-aplus/promises-spec/blob/master/implementations.md) for a list of some available options - * - * @param promiseImplementation A Promises/A+ valid implementation - * @throws {Error} If the implementation being set doesn't conform with Promises/A+ - */ - setPromiseImplementation(promiseImplementation: Object) : void; - } -} From 45c5bcd85453cc195ed09a2e03c3f2e3d0fc4f39 Mon Sep 17 00:00:00 2001 From: Flarna Date: Fri, 28 Oct 2016 16:13:14 +0200 Subject: [PATCH 076/111] Add process.mainModule, improve NodeModule (#12257) * Add process.mainModule, improve NodeModule Add mainModule in process. See https://nodejs.org/dist/latest-v6.x/docs/api/process.html#process_process_mainmodule improve require.main see https://nodejs.org/dist/latest-v6.x/docs/api/modules.html#modules_accessing_the_main_module improve NodeModule see https://nodejs.org/dist/latest-v6.x/docs/api/modules.html#modules_module_children and https://nodejs.org/dist/latest-v6.x/docs/api/modules.html#modules_module_parent * Correct require.main and NodeModule --- node/node-4-tests.ts | 17 +++++++++++++++++ node/node-4.d.ts | 7 ++++--- node/node-tests.ts | 17 +++++++++++++++++ node/node.d.ts | 7 ++++--- 4 files changed, 42 insertions(+), 6 deletions(-) diff --git a/node/node-4-tests.ts b/node/node-4-tests.ts index 26e201c910..f21c3b58f8 100644 --- a/node/node-4-tests.ts +++ b/node/node-4-tests.ts @@ -24,6 +24,19 @@ import * as string_decoder from "string_decoder"; // Specifically test buffer module regression. import {Buffer as ImportedBuffer, SlowBuffer as ImportedSlowBuffer} from "buffer"; +////////////////////////////////////////////////////////// +/// Global Tests : https://nodejs.org/api/global.html /// +////////////////////////////////////////////////////////// +namespace global_tests { + { + let x: NodeModule; + let y: NodeModule; + x.children.push(y); + x.parent = require.main; + require.main = y; + } +} + ////////////////////////////////////////////////////////// /// Assert Tests : https://nodejs.org/api/assert.html /// ////////////////////////////////////////////////////////// @@ -922,6 +935,10 @@ namespace process_tests { var _p: NodeJS.Process = process; _p = p; } + { + var module: NodeModule; + module = process.mainModule; + } } /////////////////////////////////////////////////////////// diff --git a/node/node-4.d.ts b/node/node-4.d.ts index feee10f12d..bd6196d17c 100644 --- a/node/node-4.d.ts +++ b/node/node-4.d.ts @@ -52,7 +52,7 @@ interface NodeRequire extends NodeRequireFunction { resolve(id:string): string; cache: any; extensions: any; - main: any; + main: NodeModule; } declare var require: NodeRequire; @@ -63,8 +63,8 @@ interface NodeModule { id: string; filename: string; loaded: boolean; - parent: any; - children: any[]; + parent: NodeModule; + children: NodeModule[]; } declare var module: NodeModule; @@ -339,6 +339,7 @@ declare namespace NodeJS { title: string; arch: string; platform: string; + mainModule?: NodeModule; memoryUsage(): MemoryUsage; nextTick(callback: Function): void; umask(mask?: number): number; diff --git a/node/node-tests.ts b/node/node-tests.ts index b98b23ad69..0025505e67 100644 --- a/node/node-tests.ts +++ b/node/node-tests.ts @@ -27,6 +27,19 @@ import * as repl from "repl"; // Specifically test buffer module regression. import {Buffer as ImportedBuffer, SlowBuffer as ImportedSlowBuffer} from "buffer"; +////////////////////////////////////////////////////////// +/// Global Tests : https://nodejs.org/api/global.html /// +////////////////////////////////////////////////////////// +namespace global_tests { + { + let x: NodeModule; + let y: NodeModule; + x.children.push(y); + x.parent = require.main; + require.main = y; + } +} + ////////////////////////////////////////////////////////// /// Assert Tests : https://nodejs.org/api/assert.html /// ////////////////////////////////////////////////////////// @@ -1554,6 +1567,10 @@ namespace process_tests { { assert(process.argv[0] === process.argv0); } + { + var module: NodeModule; + module = process.mainModule; + } } /////////////////////////////////////////////////////////// diff --git a/node/node.d.ts b/node/node.d.ts index fe56ba851a..61132b9232 100644 --- a/node/node.d.ts +++ b/node/node.d.ts @@ -52,7 +52,7 @@ interface NodeRequire extends NodeRequireFunction { resolve(id: string): string; cache: any; extensions: any; - main: any; + main: NodeModule; } declare var require: NodeRequire; @@ -63,8 +63,8 @@ interface NodeModule { id: string; filename: string; loaded: boolean; - parent: any; - children: any[]; + parent: NodeModule; + children: NodeModule[]; } declare var module: NodeModule; @@ -372,6 +372,7 @@ declare namespace NodeJS { title: string; arch: string; platform: string; + mainModule?: NodeModule; memoryUsage(): MemoryUsage; nextTick(callback: Function, ...args: any[]): void; umask(mask?: number): number; From 7155ef2d2dced331b5e389363a4180957e76f95e Mon Sep 17 00:00:00 2001 From: Stefan Dobrev Date: Fri, 28 Oct 2016 17:15:24 +0300 Subject: [PATCH 077/111] [mocha] Add global run function (#12136) --- mocha/mocha.d.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mocha/mocha.d.ts b/mocha/mocha.d.ts index 5304f9333a..e512984ba4 100644 --- a/mocha/mocha.d.ts +++ b/mocha/mocha.d.ts @@ -42,6 +42,9 @@ declare var xit: Mocha.ITestDefinition; declare var test: Mocha.ITestDefinition; declare var specify: Mocha.ITestDefinition; +// Used with the --delay flag; see https://mochajs.org/#hooks +declare function run(): void; + interface MochaDone { (error?: any): any; } From 47221120dfa262f725ee96fe21523c32b56f2005 Mon Sep 17 00:00:00 2001 From: ToastHawaii Date: Fri, 28 Oct 2016 16:25:12 +0200 Subject: [PATCH 078/111] Create type definition for synaptic (#12185) * Create synaptic-tests.ts * Create synaptic.d.ts * Update synaptic.d.ts * Update synaptic.d.ts * Update synaptic-tests.ts * Update synaptic.d.ts * Update synaptic.d.ts Remove not needed public, change overloading to optional parameters, remove duplicate method. --- synaptic/synaptic-tests.ts | 522 ++++++++++++++++++++++++++++++ synaptic/synaptic.d.ts | 648 +++++++++++++++++++++++++++++++++++++ 2 files changed, 1170 insertions(+) create mode 100644 synaptic/synaptic-tests.ts create mode 100644 synaptic/synaptic.d.ts diff --git a/synaptic/synaptic-tests.ts b/synaptic/synaptic-tests.ts new file mode 100644 index 0000000000..2ffc60eafe --- /dev/null +++ b/synaptic/synaptic-tests.ts @@ -0,0 +1,522 @@ +/// + +// Neurons +// ======= +namespace NeuronTests { + // project + // ------- + var A = new Neuron(); + var B = new Neuron(); + A.project(B); // A now projects a connection to B + A.project(A); // Neurons can also self-connect + + // gate + // ---- + var A = new Neuron(); + var B = new Neuron(); + var connection = A.project(B); + + var C = new Neuron(); + C.gate(connection); // now C gates the connection between A and B + + // activate + // -------- + var A = new Neuron(); + var B = new Neuron(); + A.project(B); + + A.activate(0.5); // 0.5 + B.activate(); // 0.3244554645 + + // propagate + // --------- + var A = new Neuron(); + var B = new Neuron(); + A.project(B); + + var learningRate = .3; + + for (var i = 0; i < 20000; i++) { + // when A activates 1 + A.activate(1); + + // train B to activate 0 + B.activate(); + B.propagate(learningRate, 0); + } + + // test it + A.activate(1); + B.activate(); // 0.006540565760853365 + + // squashing function and bias + var A = new Neuron(); + A.squash = Neuron.squash.TANH; + A.bias = 1; +} + +// Layers +// ====== +namespace LayerTests { + // project + // ------- + var A = new Layer(5); + var B = new Layer(3); + A.project(B, Layer.connectionType.ALL_TO_ALL); // All the neurons in layer A now project a connection to all the neurons in layer B + A.project(A, Layer.connectionType.ONE_TO_ONE); + + // gate + // ---- + var A = new Layer(5); + var B = new Layer(3); + var connection = A.project(B); + + var C = new Layer(4); + C.gate(connection, Layer.gateType.INPUT); // now C gates the connection between A and B (input gate) + + // activate + // -------- + var A = new Layer(5); + var B = new Layer(3); + A.project(B); + + A.activate([1, 0, 1, 0, 1]); // [1,0,1,0,1] + B.activate(); // [0.3280457, 0.83243247, 0.5320423] + + // propagate + // --------- + var A = new Layer(5); + var B = new Layer(2); + A.project(B); + + var learningRate = .3; + + for (var i = 0; i < 20000; i++) { + // when A activates [1, 0, 1, 0, 1] + A.activate([1, 0, 1, 0, 1]); + + // train B to activate [0,0] + B.activate(); + B.propagate(learningRate, [0, 0]); + } + + // test it + A.activate([1, 0, 1, 0, 1]); + B.activate(); // [0.004606949693864496, 0.004606763721459169] + + // squashing function and bias + A.set({ + squash: Neuron.squash.TANH, + bias: 0 + }) + + // neurons + // ------- + A.neurons(); +} + +// Networks +// ======== + +namespace NetworkTests { + var inputLayer = new Layer(4); + var hiddenLayer = new Layer(6); + var outputLayer = new Layer(2); + + inputLayer.project(hiddenLayer); + hiddenLayer.project(outputLayer); + + var A = new Network({ + input: inputLayer, + hidden: [hiddenLayer], + output: outputLayer + }); + + var B = new Network({ + input: inputLayer, + hidden: [hiddenLayer], + output: outputLayer + }); + + // project + // ------- + A.project(B, Layer.connectionType.ALL_TO_ALL); + + // gate + // ---- + + var C = new Network({ + input: inputLayer, + hidden: [hiddenLayer], + output: outputLayer + }); + var connection = A.project(B); + C.gate(connection, Layer.gateType.INPUT); // now C's output layer gates the connection between A's output layer and B's input layer (input gate) + + // activate + // -------- + var inputLayer = new Layer(4); + var hiddenLayer = new Layer(6); + var outputLayer = new Layer(2); + + inputLayer.project(hiddenLayer); + hiddenLayer.project(outputLayer); + + var myNetwork = new Network({ + input: inputLayer, + hidden: [hiddenLayer], + output: outputLayer + }); + + myNetwork.activate([1, 0, 1, 0]); // [0.5200553602396137, 0.4792707231811006] + + // propagate + // --------- + // create the network + var inputLayer = new Layer(2); + var hiddenLayer = new Layer(3); + var outputLayer = new Layer(1); + + inputLayer.project(hiddenLayer); + hiddenLayer.project(outputLayer); + + var myNetwork = new Network({ + input: inputLayer, + hidden: [hiddenLayer], + output: outputLayer + }); + + // train the network + var learningRate = .3; + for (var i = 0; i < 20000; i++) { + // 0,0 => 0 + myNetwork.activate([0, 0]); + myNetwork.propagate(learningRate, [0]); + + // 0,1 => 1 + myNetwork.activate([0, 1]); + myNetwork.propagate(learningRate, [1]); + + // 1,0 => 1 + myNetwork.activate([1, 0]); + myNetwork.propagate(learningRate, [1]); + + // 1,1 => 0 + myNetwork.activate([1, 1]); + myNetwork.propagate(learningRate, [0]); + } + + // test the network + myNetwork.activate([0, 0]); // [0.015020775950893527] + myNetwork.activate([0, 1]); // [0.9815816381088985] + myNetwork.activate([1, 0]); // [0.9871822457132193] + myNetwork.activate([1, 1]); // [0.012950087641929467] + + // optimize + // -------- + + // extend + // ------ + + // toJSON/fromJSON + // --------------- + var exported = myNetwork.toJSON(); + var imported = Network.fromJSON(exported); + + // worker + // ------ + // training set + var learningRate = .3; + var trainingSet = [ + { + input: [0, 0], + output: [0] + }, + { + input: [0, 1], + output: [1] + }, + { + input: [1, 0], + output: [1] + }, + { + input: [1, 1], + output: [0] + }, + ]; + + // create a network + var inputLayer = new Layer(2); + var hiddenLayer = new Layer(3); + var outputLayer = new Layer(1); + + inputLayer.project(hiddenLayer); + hiddenLayer.project(outputLayer); + + var myNetwork = new Network({ + input: inputLayer, + hidden: [hiddenLayer], + output: outputLayer + }); + + // create a worker + var myWorker = myNetwork.worker(); + + // activate the network + function activateWorker(input: number[]) { + myWorker.postMessage({ + action: "activate", + input: input, + memoryBuffer: myNetwork.optimized.memory + }, [myNetwork.optimized.memory.buffer]); + } + + // backpropagate the network + function propagateWorker(target: number[]) { + myWorker.postMessage({ + action: "propagate", + target: target, + rate: learningRate, + memoryBuffer: myNetwork.optimized.memory + }, [myNetwork.optimized.memory.buffer]); + } + + // train the worker + myWorker.onmessage = function (e) { + // give control of the memory back to the network - this is mandatory! + myNetwork.optimized.ownership(e.data.memoryBuffer); + + if (e.data.action == "propagate") { + if (index >= 4) { + index = 0; + iterations++; + if (iterations % 100 == 0) { + var output00 = myNetwork.activate([0, 0]); + var output01 = myNetwork.activate([0, 1]); + var output10 = myNetwork.activate([1, 0]); + var output11 = myNetwork.activate([1, 1]); + + console.log("0,0 => ", output00); + console.log("0,1 => ", output01); + console.log("1,0 => ", output10); + console.log("1,1 => ", output11, "\n"); + } + } + + activateWorker(trainingSet[index].input); + } + + if (e.data.action == "activate") { + propagateWorker(trainingSet[index].output); + index++; + } + } + + // kick it + var index = 0; + var iterations = 0; + activateWorker(trainingSet[index].input); + + // standalone + // ---------- + var inputLayer = new Layer(4); + var hiddenLayer = new Layer(6); + var outputLayer = new Layer(2); + + inputLayer.project(hiddenLayer); + hiddenLayer.project(outputLayer); + + var myNetwork = new Network({ + input: inputLayer, + hidden: [hiddenLayer], + output: outputLayer + }); + + var standalone = myNetwork.standalone(); + + myNetwork.activate([1, 0, 1, 0]); // [0.5466397925108878, 0.5121246668637663] + standalone([1, 0, 1, 0]); // [0.5466397925108878, 0.5121246668637663] + + // clone + // ----- + var inputLayer = new Layer(4); + var hiddenLayer = new Layer(6); + var outputLayer = new Layer(2); + + inputLayer.project(hiddenLayer); + hiddenLayer.project(outputLayer); + + var myNetwork = new Network({ + input: inputLayer, + hidden: [hiddenLayer], + output: outputLayer + }); + + var clone = myNetwork.clone(); + + myNetwork.activate([1, 0, 1, 0]); // [0.5466397925108878, 0.5121246668637663] + clone.activate([1, 0, 1, 0]); // [0.5466397925108878, 0.5121246668637663] + + // neurons + // ------- + myNetwork.neurons(); + + // set + // --- + var inputLayer = new Layer(4); + var hiddenLayer = new Layer(6); + var outputLayer = new Layer(2); + + inputLayer.project(hiddenLayer); + hiddenLayer.project(outputLayer); + + var myNetwork = new Network(); + + myNetwork.set({ + input: inputLayer, + hidden: [hiddenLayer], + output: outputLayer + }); +} + +// Architect +// ========= +namespace ArchitectTests { + // Perceptron + // ---------- + var myPerceptron = new Architect.Perceptron(2, 3, 1); + + // LSTM + // ---- + var myLSTM = new Architect.LSTM(2, 6, 1); + + // Liquid + // ------ + var input = 2; + var pool = 20; + var output = 1; + var connections = 30; + var gates = 10; + + var myLiquidStateMachine = new Architect.Liquid(input, pool, output, connections, gates); + + // Hopfield + // -------- + var hopfield = new Architect.Hopfield(10) // create a network for 10-bit patterns + + // teach the network two different patterns + hopfield.learn([ + [0, 1, 0, 1, 0, 1, 0, 1, 0, 1], + [1, 1, 1, 1, 1, 0, 0, 0, 0, 0] + ]) + + // feed new patterns to the network and it will return the most similar to the ones it was trained to remember + hopfield.feed([0, 1, 0, 1, 0, 1, 0, 1, 1, 1]) // [0, 1, 0, 1, 0, 1, 0, 1, 0, 1] + hopfield.feed([1, 1, 1, 1, 1, 0, 0, 1, 0, 0]) // [1, 1, 1, 1, 1, 0, 0, 0, 0, 0] +} + +// Trainer +// ======= +namespace TrainerTests { + // train + // ----- + var myNetwork = new Architect.Perceptron(2, 2, 1) + var trainer = new Trainer(myNetwork) + + var trainingSet = [ + { + input: [0, 0], + output: [0] + }, + { + input: [0, 1], + output: [1] + }, + { + input: [1, 0], + output: [1] + }, + { + input: [1, 1], + output: [0] + }, + ] + + trainer.train(trainingSet); + + var traningOptions = { + rate: .1, + iterations: 20000, + error: .005, + shuffle: true, + log: 1000, + cost: Trainer.cost.CROSS_ENTROPY, + schedule: { + every: 500, // repeat this task every 500 iterations + do: function (data: Synaptic.Trainer.TrainingScheduleDoData) { + // custom log + console.log("error", data.error, "iterations", data.iterations, "rate", data.rate); + if (data.error > .5) + return true; // abort/stop training + } + } + }; + + trainer.train(trainingSet, traningOptions); + + // trainAsync + // ---------- + var trainer = new Trainer(myNetwork); + trainer.trainAsync(trainingSet, traningOptions) + .then((results: any) => console.log('done!', results)) + + var myNetwork = new Architect.Perceptron(2, 2, 1) + var trainer = new Trainer(myNetwork) + + var trainingSet = [ + { + input: [0, 0], + output: [0] + }, + { + input: [0, 1], + output: [1] + }, + { + input: [1, 0], + output: [1] + }, + { + input: [1, 1], + output: [0] + }, + ] + + trainer.trainAsync(trainingSet) + .then((results: any) => console.log('done!', results)) + + // test + // ---- + + // XOR + // --- + var trainer = new Trainer(myNetwork); + trainer.XOR(); // {error: 0.004999821588193305, iterations: 21333, time: 111} + + // DSR + // --- + trainer.DSR({ + targets: [2, 4], + distractors: [3, 5], + prompts: [0, 1], + length: 10 + }); + + // ERG + // --- + trainer.ERG(); + + // timingTask + // ---------- +} diff --git a/synaptic/synaptic.d.ts b/synaptic/synaptic.d.ts new file mode 100644 index 0000000000..767695a89e --- /dev/null +++ b/synaptic/synaptic.d.ts @@ -0,0 +1,648 @@ +// Type definitions for synaptic 1.0.8 +// Project: https://github.com/cazala/synaptic +// Definitions by: Markus Peloso +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare var Neuron: typeof Synaptic.Neuron; +declare var Layer: typeof Synaptic.Layer; +declare var Network: typeof Synaptic.Network; +declare var Architect: typeof Synaptic.Architect; +declare var Trainer: typeof Synaptic.Trainer; + +declare module "synaptic" { + export = Synaptic; +} + +declare namespace Synaptic { + namespace Neuron { + type SquashingFunction = (x: number, derivate: boolean) => number; + + namespace squash { + const LOGISTIC: SquashingFunction; + const TANH: SquashingFunction; + const IDENTITY: SquashingFunction; + const HLIM: SquashingFunction; + const ReLU: SquashingFunction; + } + + class Connection { + ID: number; + from: number; + to: number; + weight: number; + gain: number; + gater: Neuron; + + constructor(from: number, to: number, weight?: number); + + static uid(): number; + } + + var connection: typeof Connection; + } + + /** + * Neurons are the basic unit of the neural network. They can be connected together, or used to gate connections between other neurons. + */ + class Neuron { + /** + * By default, a neuron uses a Logistic Sigmoid as its squashing/activation function. + * @default LOGISTIC + */ + squash: Neuron.SquashingFunction; + + /** + * By default, a neuron uses a random bias. + * @default random + */ + bias: number; + + /** + * Neurons are the basic unit of the neural network. They can be connected together, or used to gate connections between other neurons. + */ + constructor(); + + /** + * A neuron can project a connection to another neuron. Neurons can also self-connect. + */ + project(neuron: Neuron, weight?: number): Neuron.Connection; + + /** + * A neuron can gate a connection between two neurons, or a neuron's self-connection. This allows you to create second order neural network architectures. + * @param connection + */ + gate(connection: Neuron.Connection): void; + + /** + * When a neuron activates, it computes its state from all its input connections and squashes it using its activation function, and returns the output (activation). + * @param activation You can provide the activation as a parameter (useful for neurons in the input layer. it has to be a float between 0 and 1). + */ + activate(activation?: number): number; + + /** + * After an activation, you can teach the neuron what should have been the correct output (a.k.a. train). This is done by backpropagating the error. + * @param learningRate a learning rate + * @param targetValue a target value (float between 0 and 1) + */ + propagate(learningRate: number, targetValue: number): void; + + /** + * Returns true or false whether the neuron is self-connected or not. + */ + selfconnected(): boolean; + + /** + * Returns true or false whether the neuron is connected to another neuron (parameter). + * @param neuron + */ + connected(neuron?: any): { result: any; connection: any } | boolean; + + /** + * Clears all the traces (the neuron forgets it's context, but the connections remain intact). + */ + clear(): void; + + /** + * All the connections are randomized and the traces are cleared. + */ + reset(): void; + + /** + * Hardcodes the behavior of the neuron into an optimized function. + */ + optimize(optimized?: any, layer?: any): { + memory: any; + neurons: any; + inputs: any; + outputs: any; + targets: any; + variables: any; + activation_sentences: any; + trace_sentences: any; + propagation_sentences: any; + layers: any; + }; + + static uid(): number; + + static quantity(): { neurons: number; connections: number; }; + } + + namespace Layer { + /** + * Types of connections. + */ + enum connectionType { + /** + * It connects every neuron from layer A, to every neuron in layer B. + */ + ALL_TO_ALL, + + /** + * It connects each neuron from layer A, to one neuron in layer B. Both layers must be the same size in order to work. + */ + ONE_TO_ONE, + + /** + * Useful only in self-connections. It connects every neuron from a layer to all the other neurons in that same layer, except with itself. If this connectionType is used in a connection between different layers, it produces the same result as ALL_TO_ALL. + */ + ALL_TO_ELSE + } + + /** + * Represents a connection from one layer to another, and keeps track of its weight and gain. + */ + class LayerConnection { + ID: number; + from: any; + to: any; + selfconnection: any; + type: any; + connections: any; + list: any; + size: any; + gatedfrom: any; + + static uid(): number; + } + + var connection: typeof LayerConnection; + + /** + * Types of gates. + */ + enum gateType { + /** + * If layer C is gating connections between layer A and B, all the neurons from C gate all the input connections to B. + */ + INPUT, + + /** + * If layer C is gating connections between layer A and B, all the neurons from C gate all the output connections from A. + */ + OUTPUT, + + /** + * If layer C is gating connections between layer A and B, each neuron from C gates one connection from A to B. This is useful for gating self-connected layers. To use this kind of gateType, A, B and C must be the same size. + */ + ONE_TO_ONE + } + + interface Options { + label?: any; + squash?: Neuron.SquashingFunction; + bias?: number; + } + } + + /** + * Normally you won't work with single neurons, but use Layers instead. A layer is basically an array of neurons, they can do pretty much the same things as neurons do, but it makes the programming process faster. + */ + class Layer { + size: number; + list: Neuron[]; + label: any; + connectedTo: any; + + /** + * Normally you won't work with single neurons, but use Layers instead. A layer is basically an array of neurons, they can do pretty much the same things as neurons do, but it makes the programming process faster. + * @param numberOfNeurons the number of neurons in that layer + */ + constructor(numberOfNeurons: number); + + /** + * A layer can project a connection to another layer. Layers can also self-connect. + * @param connectionType If not specified, the connection type is always Layer.connectionType.ALL_TO_ALL when connecting two different layers, and is Layer.connectionType.ONE_TO_ONE when connecting a layer to itself (ie myLayer.project(myLayer)). + */ + project(layer: Layer | Network, connectionType?: Layer.connectionType, weights?: any): Layer.LayerConnection; + + /** + * A layer can gate a connection between two other layers, or a layers's self-connection. + */ + gate(connection: Layer.LayerConnection, gateType: Layer.gateType): void; + + /** + * When a layer activates, it just activates all the neurons in that layer in order, and returns an array with the outputs. + * @param activation It accepts an array of activations as parameter (for input layers). + */ + activate(activation?: number[]): number[]; + + /** + * After an activation, you can teach the layer what should have been the correct output (a.k.a. train). This is done by backpropagating the error. + * @param learningRate A learning rate. + * @param targetValue A target value (array of floats between 0 and 1). + */ + propagate(learningRate: number, targetValue: number[]): void; + + /** + * True or false whether the whole layer is self-connected or not. + */ + selfconnected(): boolean; + + /** + * True of false whether the layer is connected to another layer (parameter) or not. + * @param layer + */ + connected(layer: any): any; + + /** + * Clears all the neurons in the layer. + */ + clear(): void; + + /** + * Resets all the neurons in the layer. + */ + reset(): void; + + /** + * Adds a neuron to the layer. + * @param neuron + */ + add(neuron: any): void; + + /** + * Set the squashing function and bias of all the neurons in a layer. + * @param options + */ + set(options: Layer.Options): this; + + /** + * Returns an array with all the neurons in the layer, in activation order. + */ + neurons(): Neuron[]; + } + + namespace Network { + interface Options { + input: Layer; + hidden: Layer[]; + output: Layer; + } + + interface Optimized { + memory: Float64Array; + ownership: (memoryBuffer: Float64Array) => void; + } + } + + /** + * Networks are basically an array of layers. They have an input layer, a number of hidden layers, and an output layer. + */ + class Network { + layer: Network.Options; + + optimized: Network.Optimized; + + /** + * Networks are basically an array of layers. They have an input layer, a number of hidden layers, and an output layer. + */ + constructor(options?: Network.Options); + /** + * A network can project a connection to another, or gate a connection between two others networks in the same way Layers do. + * @param [connectionType=Layer.connectionType.ALL_TO_ALL] + */ + project(otherNetwork: Network | Layer, connectionType?: Layer.connectionType, weights?: any): Layer.LayerConnection; + + /** + * A Network can gate a connection between two other Networks or Layers, or a Layers's self-connection. + * @param layerConnection + * @param gateType + */ + gate(layerConnection: Layer.LayerConnection, gateType: Layer.gateType): void; + + /** + * When a network is activated, an input must be provided to activate the input layer, then all the hidden layers are activated in order, and finally the output layer is activated and its activation is returned. + * @param activation + */ + activate(activation: number[]): number[]; + + /** + * You can provide a target value and a learning rate to a network and backpropagate the error from the output layer to all the hidden layers in reverse order until reaching the input layer. + * @param learningRate + * @param targetValue + */ + propagate(learningRate: number, targetValue: number[]): void; + + /** + * Networks can be stored as JSON's. + */ + toJSON(): string; + + /** + * Creates a static String to store the source code of the functions that are identical for all the workers (train, _trainSet, test). + * @returns Source code that can train a network inside a worker. + */ + static getWorkerSharedFunctions(): string; + + /** + * Rebuild a network that has been stored in a json using the method toJSON(). + */ + static fromJSON(exported: string): Network; + + /** + * The network can be converted into a WebWorker. This feature doesn't work in node.js, and it's not supported on every browser (it must support Blob). + * @returns Return a HTML5 WebWorker specialized on training the network stored in `memory`. Train based on the given dataSet and options. The worker returns the updated `memory` when done. + */ + worker(memory?: any, set?: any, options?: any): Worker; + + /** + * Export the topology into dot language which can be visualized as graphs using dot. + * @param edgeConnection + */ + toDot(edgeConnection?: any): { code: string; link: string }; + + /** + * The network can be exported to a single javascript Function. This can be useful when your network is already trained and you just need to use it, since the standalone functions is just one javascript function with an array and operations within, with no dependencies on Synaptic or any other library. + * @returns Returns a function that works as the activation of the network and can be used without depending on the library. + */ + standalone(): (inputs: number[]) => number[]; + + /** + * A network can be cloned to a completely new instance, with the same connections and traces. + * @returns Returns a copy of the network. + */ + clone(): Network; + + /** + * Return an array with all the neurons in the network, in activation order. + */ + neurons(): number[]; + + /** + * The method set(layers) receives an object with layers in the same format as the constructor of Network and sets them as the layers of the Network, this is useful when you are extending the Network class to create your own architectures. + */ + set(options: Network.Options): void; + + /** + * Returns number of inputs of the network. + */ + inputs(): number; + + /** + * Returns number of outputs of hte network. + */ + outputs(): number; + + setOptimize(optimize: any): void; + + /** + * Restores all the values from the optimized network the their respective objects in order to manipulate the network. + */ + restore(): any | void; + + /** + * Hardcodes the behaviour of the whole network into a single optimized function. + */ + optimize(): void; + + /** + * Clear all elegibility traces and extended elegibility traces (the network forgets its context, but not what was trained). + */ + clear(): void; + + /** + * Reset all weights and clear all traces (ends up like a new network). + */ + reset(): void; + } + + /** + * The Architect contains built-in architectures, ready to use. + */ + namespace Architect { + /** + * This architecture allows you to create multilayer perceptrons, also known as feed-forward neural networks. They consist of a sequence of layers, each fully connected to the next one. + */ + class Perceptron extends Network { + trainer: Trainer; + + /** + * This architecture allows you to create multilayer perceptrons, also known as feed-forward neural networks. They consist of a sequence of layers, each fully connected to the next one. + * @param numberOfNeurons You have to provide a minimum of 3 layers (input, hidden and output), but you can use as many hidden layers as you wish. + */ + constructor(...numberOfNeurons: number[]); + } + + /** + * The long short-term memory is an architecture well-suited to learn from experience to classify, process and predict time series when there are very long time lags of unknown size between important events. + */ + class LSTM extends Network { + trainer: Trainer; + + /** + * The long short-term memory is an architecture well-suited to learn from experience to classify, process and predict time series when there are very long time lags of unknown size between important events. + * @param numberOfNeurons To use this architecture you have to set at least one input layer, one memory block assembly (consisting of four layers: input gate, memory cell, forget gate and output gate), and an output layer. Also you can set many layers of memory blocks. + */ + constructor(...numberOfNeurons: number[]); + } + + /** + * The Liquid architecture allows you to create Liquid State Machines. In these networks, neurons are randomly connected to each other. The recurrent nature of the connections turns the time varying input into a spatio-temporal pattern of activations in the network nodes. + */ + class Liquid extends Network { + trainer: Trainer; + + /** + * The Liquid architecture allows you to create Liquid State Machines. In these networks, neurons are randomly connected to each other. The recurrent nature of the connections turns the time varying input into a spatio-temporal pattern of activations in the network nodes. + * @param input The size of the input layer. + * @param pool The size of the pool. + * @param output The size of the output layer. + * @param connections The number of random connections in the pool. + * @param gates The number of random gates among the connections. + */ + constructor(input: number, pool: number, output: number, connections: number, gates: number); + } + + /** + * The Hopfield architecture serves as content-addressable memory. They are trained to remember patterns and then when feeding new patterns to the network it returns the most similar one from the patterns it was trained to remember. + */ + class Hopfield extends Network { + /** + * The Hopfield architecture serves as content-addressable memory. They are trained to remember patterns and then when feeding new patterns to the network it returns the most similar one from the patterns it was trained to remember. + * @param patternSize Pattern size in bits. + */ + constructor(patternSize: number); + + /** + * Teach the network two different patterns. + * @param patterns + */ + learn(patterns: [number[], number[]]): any; + + /** + * Feed new patterns to the network and it will return the most similar to the ones it was trained to remember. + * @param pattern + */ + feed(pattern: number[]): number[]; + } + } + + namespace Trainer { + interface TrainingPair { + input: number[]; + output: number[]; + } + + type TrainingSet = TrainingPair[]; + + interface TrainingOptions { + /** + * Learning rate to train the network. It can be a static rate (just a number), dynamic (an array of numbers, which will transition from one to the next one according to the number of iterations) or a callback function: (iterations, error) => rate. + */ + rate?: number | number[] | ((iterations: number, error: number) => number); + + /** + * Maximum number of iterations. + */ + iterations?: number; + + /** + * Minimum error. + */ + error?: number; + + /** + * If true, the training set is shuffled after every iteration, this is useful for training data sequences which order is not meaningful to networks with context memory, like LSTM's. + */ + shuffle?: boolean; + + /** + * You can set what cost function to use for the training, there are three built-in cost functions (Trainer.cost.CROSS_ENTROPY, Trainer.cost.MSE and Trainer.cost.BINARY) to choose from cross-entropy or mean squared error. You can also use you own cost function(targetValues, outputValues). + */ + cost?: CostFunction; + + /** + * This commands the trainer to console.log the error and iterations every X number of iterations. + */ + log?: number; + + /** + * You can create custom scheduled tasks that will be executed every X number of iterations. It can be used to create custom logs, or to compute analytics based on the data passed to the task (data object includes error, iterations and the current learning rate). If the returned value of the task is true, the training will be aborted. This can be used to create special conditions to stop the training (i.e. if the error starts to increase). + */ + schedule?: TrainingScheduleOptions; + } + + interface TrainingScheduleDoData { + error: any; + + iterations: any; + + /** + * The current learning rate. + */ + rate: any; + } + + interface TrainingScheduleOptions { + every: number; + do: (data: TrainingScheduleDoData) => boolean | void; + } + + type CostFunction = (targetValues: number[], outputValues: number[]) => number; + + namespace cost { + const CROSS_ENTROPY: CostFunction; + const MSE: CostFunction; + const BINARY: CostFunction; + } + + interface TrainingResult { + error: number; + iterations: number; + time: number; + } + + interface XOROptions { + iterations?: number; + log?: number; + shuffle?: boolean; + cost?: CostFunction; + } + + interface DSROptions { + targets?: number[]; + distractors?: number[]; + prompts?: number[]; + length?: number; + success?: number; + iterations?: number; + rate?: number; + log?: number; + schedule?: TrainingScheduleOptions; + cost?: CostFunction; + } + + interface DSRTrainingResult { + error: number; + iterations: number; + time: number; + success: any; + } + + interface ERGOptions { + iterations?: number; + error?: number; + rate?: number; + log?: number; + cost?: CostFunction; + } + + interface ERGTrainingResult { + error: number; + iterations: number; + time: number; + test: any; + generate: any; + } + } + + /** + * The Trainer makes it easier to train any set to any network, no matter its architecture. The trainer also contains built-in tasks to test the performance of your network. + */ + class Trainer { + /** + * The Trainer makes it easier to train any set to any network, no matter its architecture. The trainer also contains built-in tasks to test the performance of your network. + * @param network + */ + constructor(network: Network); + + /** + * This method allows you to train any training set to a Network. + * @returns When the training is done this method returns an object with the error, the iterations, and the elapsed time of the training. + */ + train(trainingSet: Trainer.TrainingSet, trainingOptions?: Trainer.TrainingOptions): Trainer.TrainingResult; + + /** + * This method allows you to train any training set to a Network. + * @returns When the training is done this method returns an object with the error, the iterations, and the elapsed time of the training. + */ + trainAsync(trainingSet: Trainer.TrainingSet, trainingOptions?: Trainer.TrainingOptions): Promise; + + /** + * This method accepts the same arguments as train(dataSet, options). It will iterate over the dataSet, activating the network. + * @returns It returns the elapsed time and the error (by default, the MSE, but you can specify the cost function in the options, same way as in train()). + */ + test(trainingSet: Trainer.TrainingSet, trainingOptions?: Trainer.TrainingOptions): Trainer.TrainingResult; + + /** + * This method trains an XOR to the network, is useful when you are experimenting with different architectures and you want to test and compare their performances. + */ + XOR(options?: Trainer.XOROptions): Trainer.TrainingResult; + + /** + * This method trains the network to complete a Discrete Sequence Recall, which is a task for testing context memory in neural networks. + */ + DSR(options?: Trainer.DSROptions): Trainer.DSRTrainingResult; + + /** + * This method trains the network to pass an Embedded Reber Grammar test. + */ + ERG(options?: Trainer.ERGOptions): Trainer.ERGTrainingResult; + + /** + * This test challenges the network to complete a timing task. + */ + timingTask(options?: any): { train: any; test: any }; + } +} From b6bd0766d8416ef39dcfb872e63b226f56dcc722 Mon Sep 17 00:00:00 2001 From: Karol Janyst Date: Fri, 28 Oct 2016 23:35:07 +0900 Subject: [PATCH 079/111] Add definitions for reactcss (#12122) * Add definitions for react-css-transition-replace * Add definitions for reactcss * Change test header * Remove accidentally added other definitions * Remove yarn.lock from .gitignore --- reactcss/reactcss-tests.tsx | 29 +++++++++++++++++++++++++++++ reactcss/reactcss.d.ts | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 reactcss/reactcss-tests.tsx create mode 100644 reactcss/reactcss.d.ts diff --git a/reactcss/reactcss-tests.tsx b/reactcss/reactcss-tests.tsx new file mode 100644 index 0000000000..9435e3bbf5 --- /dev/null +++ b/reactcss/reactcss-tests.tsx @@ -0,0 +1,29 @@ +// ReactCSS Test +// ================================================================================ +/// +/// +/// + +// Imports +// -------------------------------------------------------------------------------- +import * as React from "react" +import { StatelessComponent } from "react" +import { render } from "react-dom" +import { default as reactCSS, hover, loop } from "reactcss" + +interface TestProps extends ReactCSS.HoverProps {} + +var styles: any = reactCSS({ + default : {}, + hover : {} +}, { hover : true }) + +var loopProps: ReactCSS.LoopableProps = loop(1, 10) + +var TestComponent: StatelessComponent +var Test = hover(TestComponent) + +render( + , + document.getElementById("main") +) diff --git a/reactcss/reactcss.d.ts b/reactcss/reactcss.d.ts new file mode 100644 index 0000000000..3d309adb78 --- /dev/null +++ b/reactcss/reactcss.d.ts @@ -0,0 +1,34 @@ +// Type definitions for ReactCSS v1.0.0 +// Project: http://reactcss.com/ +// Definitions by: Karol Janyst +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +declare namespace ReactCSS { + interface LoopableProps { + "first-child"?: boolean + "last-child"?: boolean + even?: boolean + odd?: boolean + [nthChild: string]: boolean + } + + interface HoverProps { + hover?: boolean + } + + interface Classes { + default: any + [scope: string]: any + } +} + +declare module "reactcss" { + import React = __React + + export type LoopableProps = ReactCSS.LoopableProps + export function hover(component: React.ComponentClass | React.StatelessComponent): React.ComponentClass + export function loop(i: number, length: number): ReactCSS.LoopableProps + export default function reactCSS (classes: ReactCSS.Classes, ...activations: Array): any +} From 2c6d2feff0f244ee13496674ff8ed399d3d31164 Mon Sep 17 00:00:00 2001 From: Hassan Abdel-Rahman Date: Fri, 28 Oct 2016 10:45:54 -0400 Subject: [PATCH 080/111] S3 (#12169) * updated bull typing * add copyObject to S3 --- aws-sdk/aws-sdk.d.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/aws-sdk/aws-sdk.d.ts b/aws-sdk/aws-sdk.d.ts index 6ed671ab8f..3fe8f65b0f 100644 --- a/aws-sdk/aws-sdk.d.ts +++ b/aws-sdk/aws-sdk.d.ts @@ -382,6 +382,7 @@ declare module "aws-sdk" { endpoint: Endpoint; getObject(params: s3.GetObjectRequest, callback?: (err: Error, data: any) => void): any; + copyObject(params: s3.CopyObjectRequest, callback?: (err: Error, data: any) => void): any; putObject(params: s3.PutObjectRequest, callback: (err: Error, data: any) => void): void; deleteObject(params: s3.DeleteObjectRequest, callback: (err: Error, data: any) => void): void; headObject(params: s3.HeadObjectRequest, callback: (err: Error, data: any) => void): void; @@ -2263,6 +2264,40 @@ declare module "aws-sdk" { WebsiteRedirectLocation?: string; } + export interface CopyObjectRequest { + Bucket: string; + CopySource: string; + Key: string; + ACL?: string; + CacheControl?: string; + ContentDisposition?: string; + ContentEncoding?: string; + ContentLanguage?: string; + ContentType?: string; + CopySourceIfMatch?: string; + CopySourceIfModifiedSince?: any; + CopySourceIfNoneMatch?: string; + CopySourceIfUnmodifiedSince?: any; + CopySourceSSECustomerAlgorithm?: string; + CopySourceSSECustomerKey?: any; + CopySourceSSECustomerKeyMD5?: string; + Expires?: any; + GrantFullControl?: string; + GrantRead?: string; + GrantReadACP?: string; + GrantWriteACP?: string; + Metadata?: { [key: string]: string; }; + MetadataDirective?: string; + RequestPayer?: string; + SSECustomerAlgorithm?: string; + SSECustomerKey?: any; + SSECustomerKeyMD5?: string; + SSEKMSKeyId?: string; + ServerSideEncryption?: string; + StorageClass?: string; + WebsiteRedirectLocation?: string; + } + export interface GetObjectRequest { Bucket: string; IfMatch?: string; From a8bd330e4b73caf6c386d1025531db19ac926351 Mon Sep 17 00:00:00 2001 From: ptrckc Date: Fri, 28 Oct 2016 10:33:09 -0500 Subject: [PATCH 081/111] Update Joi's ValidationOptions and AnySchema interfaces (#12102) * Update ValidationOptions and AnySchema interfaces * Update ValidationOptions and AnySchema interfaces * Remove `error` from global options See: https://github.com/hapijs/joi/issues/1012 * Remove `error` from global options See: https://github.com/hapijs/joi/issues/1012 --- joi/joi-tests.ts | 3 +++ joi/joi.d.ts | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/joi/joi-tests.ts b/joi/joi-tests.ts index 8d5463a7c0..c832b3eb05 100644 --- a/joi/joi-tests.ts +++ b/joi/joi-tests.ts @@ -58,6 +58,7 @@ validOpts = {stripUnknown: bool}; validOpts = {language: bool}; validOpts = {presence: str}; validOpts = {context: obj}; +validOpts = {noDefaults: bool}; // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- @@ -221,6 +222,8 @@ namespace common { anySchema = anySchema.empty(); anySchema = anySchema.empty(str); anySchema = anySchema.empty(anySchema); + + anySchema = anySchema.error(err); } // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- diff --git a/joi/joi.d.ts b/joi/joi.d.ts index 206c5778ca..a4a029f737 100644 --- a/joi/joi.d.ts +++ b/joi/joi.d.ts @@ -40,6 +40,10 @@ declare module 'joi' { * provides an external data set to be used in references */ context?: Object; + /** + * when true, do not apply default values. Defaults to false. + */ + noDefaults?: boolean; } export interface RenameOptions { @@ -287,6 +291,17 @@ declare module 'joi' { * @param schema - any object or joi schema to match. An undefined schema unsets that rule. */ empty(schema?: any) : T; + + /** + * Overrides the default joi error with a custom error if the rule fails where: + * @param err - the override error. + * + * Note that the provided error will be returned as-is, unmodified and undecorated + * with any of the normal joi error properties. If validation fails and another + * error is found before the error override, that error will be returned and the + * override will be ignored (unless the abortEarly option has been set to false). + */ + error?(err: Error): T; } export interface BooleanSchema extends AnySchema { From dc17e1a2474ca70754ecdc5737f07ecd2eba9fe6 Mon Sep 17 00:00:00 2001 From: TonyYang Date: Fri, 28 Oct 2016 23:40:38 +0800 Subject: [PATCH 082/111] [loadsh] Make method module definitions (#12220) * Define type for method modules * Update lodash-tests.ts --- lodash/lodash-tests.ts | 575 +++++++++++++ lodash/lodash.d.ts | 1829 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2404 insertions(+) diff --git a/lodash/lodash-tests.ts b/lodash/lodash-tests.ts index f0f958b0c8..11f0a52a42 100644 --- a/lodash/lodash-tests.ts +++ b/lodash/lodash-tests.ts @@ -11905,3 +11905,578 @@ result = <_.TemplateSettings>_.templateSettings; res1___ = _.partialRight(func4, "foo", true, 100); res____ = _.partialRight(func4, 42, "foo", true, 100); } + +/*************************** + * method_modules_tests * + ***************************/ + +import afterFunc = require("lodash.after"); +import aryFunc = require("lodash.ary"); +import assignFunc = require("lodash.assign"); +import assignInFunc = require("lodash.assignIn"); +import assignInWithFunc = require("lodash.assignInWith"); +import assignWithFunc = require("lodash.assignWith"); +import atFunc = require("lodash.at"); +import beforeFunc = require("lodash.before"); +import bindFunc = require("lodash.bind"); +import bindAllFunc = require("lodash.bindAll"); +import bindKeyFunc = require("lodash.bindKey"); +import castArrayFunc = require("lodash.castArray"); +import chainFunc = require("lodash.chain"); +import chunkFunc = require("lodash.chunk"); +import compactFunc = require("lodash.compact"); +import concatFunc = require("lodash.concat"); +import constantFunc = require("lodash.constant"); +import countByFunc = require("lodash.countBy"); +import createFunc = require("lodash.create"); +import curryFunc = require("lodash.curry"); +import curryRightFunc = require("lodash.curryRight"); +import debounceFunc = require("lodash.debounce"); +import defaultsFunc = require("lodash.defaults"); +import defaultsDeepFunc = require("lodash.defaultsDeep"); +import deferFunc = require("lodash.defer"); +import delayFunc = require("lodash.delay"); +import differenceFunc = require("lodash.difference"); +import differenceByFunc = require("lodash.differenceBy"); +import differenceWithFunc = require("lodash.differenceWith"); +import dropFunc = require("lodash.drop"); +import dropRightFunc = require("lodash.dropRight"); +import dropRightWhileFunc = require("lodash.dropRightWhile"); +import dropWhileFunc = require("lodash.dropWhile"); +import fillFunc = require("lodash.fill"); +import filterFunc = require("lodash.filter"); +import flatMapFunc = require("lodash.flatMap"); +import flattenFunc = require("lodash.flatten"); +import flattenDeepFunc = require("lodash.flattenDeep"); +import flattenDepthFunc = require("lodash.flattenDepth"); +import flipFunc = require("lodash.flip"); +import flowFunc = require("lodash.flow"); +import flowRightFunc = require("lodash.flowRight"); +import fromPairsFunc = require("lodash.fromPairs"); +import functionsFunc = require("lodash.functions"); +import functionsInFunc = require("lodash.functionsIn"); +import groupByFunc = require("lodash.groupBy"); +import initialFunc = require("lodash.initial"); +import intersectionFunc = require("lodash.intersection"); +import intersectionByFunc = require("lodash.intersectionBy"); +import intersectionWithFunc = require("lodash.intersectionWith"); +import invertFunc = require("lodash.invert"); +import invertByFunc = require("lodash.invertBy"); +import invokeMapFunc = require("lodash.invokeMap"); +import iterateeFunc = require("lodash.iteratee"); +import keyByFunc = require("lodash.keyBy"); +import keysFunc = require("lodash.keys"); +import keysInFunc = require("lodash.keysIn"); +import mapFunc = require("lodash.map"); +import mapKeysFunc = require("lodash.mapKeys"); +import mapValuesFunc = require("lodash.mapValues"); +import matchesFunc = require("lodash.matches"); +import matchesPropertyFunc = require("lodash.matchesProperty"); +import memoizeFunc = require("lodash.memoize"); +import mergeFunc = require("lodash.merge"); +import mergeWithFunc = require("lodash.mergeWith"); +import methodFunc = require("lodash.method"); +import methodOfFunc = require("lodash.methodOf"); +import mixinFunc = require("lodash.mixin"); +import negateFunc = require("lodash.negate"); +import nthArgFunc = require("lodash.nthArg"); +import omitFunc = require("lodash.omit"); +import omitByFunc = require("lodash.omitBy"); +import onceFunc = require("lodash.once"); +import orderByFunc = require("lodash.orderBy"); +import overFunc = require("lodash.over"); +import overArgsFunc = require("lodash.overArgs"); +import overEveryFunc = require("lodash.overEvery"); +import overSomeFunc = require("lodash.overSome"); +import partialFunc = require("lodash.partial"); +import partialRightFunc = require("lodash.partialRight"); +import partitionFunc = require("lodash.partition"); +import pickFunc = require("lodash.pick"); +import pickByFunc = require("lodash.pickBy"); +import propertyFunc = require("lodash.property"); +import propertyOfFunc = require("lodash.propertyOf"); +import pullFunc = require("lodash.pull"); +import pullAllFunc = require("lodash.pullAll"); +import pullAllByFunc = require("lodash.pullAllBy"); +import pullAtFunc = require("lodash.pullAt"); +import rangeFunc = require("lodash.range"); +import rangeRightFunc = require("lodash.rangeRight"); +import reargFunc = require("lodash.rearg"); +import rejectFunc = require("lodash.reject"); +import removeFunc = require("lodash.remove"); +import restFunc = require("lodash.rest"); +import reverseFunc = require("lodash.reverse"); +import sampleSizeFunc = require("lodash.sampleSize"); +import setFunc = require("lodash.set"); +import setWithFunc = require("lodash.setWith"); +import shuffleFunc = require("lodash.shuffle"); +import sliceFunc = require("lodash.slice"); +import sortByFunc = require("lodash.sortBy"); +import sortedUniqFunc = require("lodash.sortedUniq"); +import sortedUniqByFunc = require("lodash.sortedUniqBy"); +import splitFunc = require("lodash.split"); +import spreadFunc = require("lodash.spread"); +import tailFunc = require("lodash.tail"); +import takeFunc = require("lodash.take"); +import takeRightFunc = require("lodash.takeRight"); +import takeRightWhileFunc = require("lodash.takeRightWhile"); +import takeWhileFunc = require("lodash.takeWhile"); +import tapFunc = require("lodash.tap"); +import throttleFunc = require("lodash.throttle"); +import thruFunc = require("lodash.thru"); +import toArrayFunc = require("lodash.toArray"); +import toPairsFunc = require("lodash.toPairs"); +import toPairsInFunc = require("lodash.toPairsIn"); +import toPathFunc = require("lodash.toPath"); +import toPlainObjectFunc = require("lodash.toPlainObject"); +import transformFunc = require("lodash.transform"); +import unaryFunc = require("lodash.unary"); +import unionFunc = require("lodash.union"); +import unionByFunc = require("lodash.unionBy"); +import unionWithFunc = require("lodash.unionWith"); +import uniqFunc = require("lodash.uniq"); +import uniqByFunc = require("lodash.uniqBy"); +import uniqWithFunc = require("lodash.uniqWith"); +import unsetFunc = require("lodash.unset"); +import unzipFunc = require("lodash.unzip"); +import unzipWithFunc = require("lodash.unzipWith"); +import updateFunc = require("lodash.update"); +import valuesFunc = require("lodash.values"); +import valuesInFunc = require("lodash.valuesIn"); +import withoutFunc = require("lodash.without"); +import wordsFunc = require("lodash.words"); +import wrapFunc = require("lodash.wrap"); +import xorFunc = require("lodash.xor"); +import xorByFunc = require("lodash.xorBy"); +import xorWithFunc = require("lodash.xorWith"); +import zipFunc = require("lodash.zip"); +import zipObjectFunc = require("lodash.zipObject"); +import zipWithFunc = require("lodash.zipWith"); +import extendFunc = require("lodash.extend"); +import extendWithFunc = require("lodash.extendWith"); +import addFunc = require("lodash.add"); +import attemptFunc = require("lodash.attempt"); +import camelCaseFunc = require("lodash.camelCase"); +import capitalizeFunc = require("lodash.capitalize"); +import ceilFunc = require("lodash.ceil"); +import clampFunc = require("lodash.clamp"); +import cloneFunc = require("lodash.clone"); +import cloneDeepFunc = require("lodash.cloneDeep"); +import cloneDeepWithFunc = require("lodash.cloneDeepWith"); +import cloneWithFunc = require("lodash.cloneWith"); +import deburrFunc = require("lodash.deburr"); +import endsWithFunc = require("lodash.endsWith"); +import eqFunc = require("lodash.eq"); +import escapeFunc = require("lodash.escape"); +import escapeRegExpFunc = require("lodash.escapeRegExp"); +import everyFunc = require("lodash.every"); +import findFunc = require("lodash.find"); +import findIndexFunc = require("lodash.findIndex"); +import findKeyFunc = require("lodash.findKey"); +import findLastFunc = require("lodash.findLast"); +import findLastIndexFunc = require("lodash.findLastIndex"); +import findLastKeyFunc = require("lodash.findLastKey"); +import floorFunc = require("lodash.floor"); +import forEachFunc = require("lodash.forEach"); +import forEachRightFunc = require("lodash.forEachRight"); +import forInFunc = require("lodash.forIn"); +import forInRightFunc = require("lodash.forInRight"); +import forOwnFunc = require("lodash.forOwn"); +import forOwnRightFunc = require("lodash.forOwnRight"); +import getFunc = require("lodash.get"); +import gtFunc = require("lodash.gt"); +import gteFunc = require("lodash.gte"); +import hasFunc = require("lodash.has"); +import hasInFunc = require("lodash.hasIn"); +import headFunc = require("lodash.head"); +import identityFunc = require("lodash.identity"); +import includesFunc = require("lodash.includes"); +import indexOfFunc = require("lodash.indexOf"); +import inRangeFunc = require("lodash.inRange"); +import invokeFunc = require("lodash.invoke"); +import isArgumentsFunc = require("lodash.isArguments"); +import isArrayFunc = require("lodash.isArray"); +import isArrayBufferFunc = require("lodash.isArrayBuffer"); +import isArrayLikeFunc = require("lodash.isArrayLike"); +import isArrayLikeObjectFunc = require("lodash.isArrayLikeObject"); +import isBooleanFunc = require("lodash.isBoolean"); +import isBufferFunc = require("lodash.isBuffer"); +import isDateFunc = require("lodash.isDate"); +import isElementFunc = require("lodash.isElement"); +import isEmptyFunc = require("lodash.isEmpty"); +import isEqualFunc = require("lodash.isEqual"); +import isEqualWithFunc = require("lodash.isEqualWith"); +import isErrorFunc = require("lodash.isError"); +import isFiniteFunc = require("lodash.isFinite"); +import isFunctionFunc = require("lodash.isFunction"); +import isIntegerFunc = require("lodash.isInteger"); +import isLengthFunc = require("lodash.isLength"); +import isMapFunc = require("lodash.isMap"); +import isMatchFunc = require("lodash.isMatch"); +import isMatchWithFunc = require("lodash.isMatchWith"); +import isNaNFunc = require("lodash.isNaN"); +import isNativeFunc = require("lodash.isNative"); +import isNilFunc = require("lodash.isNil"); +import isNullFunc = require("lodash.isNull"); +import isNumberFunc = require("lodash.isNumber"); +import isObjectFunc = require("lodash.isObject"); +import isObjectLikeFunc = require("lodash.isObjectLike"); +import isPlainObjectFunc = require("lodash.isPlainObject"); +import isRegExpFunc = require("lodash.isRegExp"); +import isSafeIntegerFunc = require("lodash.isSafeInteger"); +import isSetFunc = require("lodash.isSet"); +import isStringFunc = require("lodash.isString"); +import isSymbolFunc = require("lodash.isSymbol"); +import isTypedArrayFunc = require("lodash.isTypedArray"); +import isUndefinedFunc = require("lodash.isUndefined"); +import isWeakMapFunc = require("lodash.isWeakMap"); +import isWeakSetFunc = require("lodash.isWeakSet"); +import joinFunc = require("lodash.join"); +import kebabCaseFunc = require("lodash.kebabCase"); +import lastFunc = require("lodash.last"); +import lastIndexOfFunc = require("lodash.lastIndexOf"); +import lowerCaseFunc = require("lodash.lowerCase"); +import lowerFirstFunc = require("lodash.lowerFirst"); +import ltFunc = require("lodash.lt"); +import lteFunc = require("lodash.lte"); +import maxFunc = require("lodash.max"); +import maxByFunc = require("lodash.maxBy"); +import meanFunc = require("lodash.mean"); +import minFunc = require("lodash.min"); +import minByFunc = require("lodash.minBy"); +import noConflictFunc = require("lodash.noConflict"); +import noopFunc = require("lodash.noop"); +import nowFunc = require("lodash.now"); +import padFunc = require("lodash.pad"); +import padEndFunc = require("lodash.padEnd"); +import padStartFunc = require("lodash.padStart"); +import parseIntFunc = require("lodash.parseInt"); +import randomFunc = require("lodash.random"); +import reduceFunc = require("lodash.reduce"); +import reduceRightFunc = require("lodash.reduceRight"); +import repeatFunc = require("lodash.repeat"); +import replaceFunc = require("lodash.replace"); +import resultFunc = require("lodash.result"); +import roundFunc = require("lodash.round"); +import runInContextFunc = require("lodash.runInContext"); +import sampleFunc = require("lodash.sample"); +import sizeFunc = require("lodash.size"); +import snakeCaseFunc = require("lodash.snakeCase"); +import someFunc = require("lodash.some"); +import sortedIndexFunc = require("lodash.sortedIndex"); +import sortedIndexByFunc = require("lodash.sortedIndexBy"); +import sortedIndexOfFunc = require("lodash.sortedIndexOf"); +import sortedLastIndexFunc = require("lodash.sortedLastIndex"); +import sortedLastIndexByFunc = require("lodash.sortedLastIndexBy"); +import sortedLastIndexOfFunc = require("lodash.sortedLastIndexOf"); +import startCaseFunc = require("lodash.startCase"); +import startsWithFunc = require("lodash.startsWith"); +import subtractFunc = require("lodash.subtract"); +import sumFunc = require("lodash.sum"); +import sumByFunc = require("lodash.sumBy"); +import templateFunc = require("lodash.template"); +import timesFunc = require("lodash.times"); +import toIntegerFunc = require("lodash.toInteger"); +import toLengthFunc = require("lodash.toLength"); +import toLowerFunc = require("lodash.toLower"); +import toNumberFunc = require("lodash.toNumber"); +import toSafeIntegerFunc = require("lodash.toSafeInteger"); +import toStringFunc = require("lodash.toString"); +import toUpperFunc = require("lodash.toUpper"); +import trimFunc = require("lodash.trim"); +import trimEndFunc = require("lodash.trimEnd"); +import trimStartFunc = require("lodash.trimStart"); +import truncateFunc = require("lodash.truncate"); +import unescapeFunc = require("lodash.unescape"); +import uniqueIdFunc = require("lodash.uniqueId"); +import upperCaseFunc = require("lodash.upperCase"); +import upperFirstFunc = require("lodash.upperFirst"); +import eachFunc = require("lodash.each"); +import eachRightFunc = require("lodash.eachRight"); +import firstFunc = require("lodash.first"); +namespace method_modules_tests { + _.after = afterFunc; + _.ary = aryFunc; + _.assign = assignFunc; + _.assignIn = assignInFunc; + _.assignInWith = assignInWithFunc; + _.assignWith = assignWithFunc; + _.at = atFunc; + _.before = beforeFunc; + _.bind = bindFunc; + _.bindAll = bindAllFunc; + _.bindKey = bindKeyFunc; + _.castArray = castArrayFunc; + _.chain = chainFunc; + _.chunk = chunkFunc; + _.compact = compactFunc; + _.concat = concatFunc; + _.constant = constantFunc; + _.countBy = countByFunc; + _.create = createFunc; + _.curry = curryFunc; + _.curryRight = curryRightFunc; + _.debounce = debounceFunc; + _.defaults = defaultsFunc; + _.defaultsDeep = defaultsDeepFunc; + _.defer = deferFunc; + _.delay = delayFunc; + _.difference = differenceFunc; + _.differenceBy = differenceByFunc; + _.differenceWith = differenceWithFunc; + _.drop = dropFunc; + _.dropRight = dropRightFunc; + _.dropRightWhile = dropRightWhileFunc; + _.dropWhile = dropWhileFunc; + _.fill = fillFunc; + _.filter = filterFunc; + _.flatMap = flatMapFunc; + _.flatten = flattenFunc; + _.flattenDeep = flattenDeepFunc; + _.flattenDepth = flattenDepthFunc; + _.flip = flipFunc; + _.flow = flowFunc; + _.flowRight = flowRightFunc; + _.fromPairs = fromPairsFunc; + _.functions = functionsFunc; + _.functionsIn = functionsInFunc; + _.groupBy = groupByFunc; + _.initial = initialFunc; + _.intersection = intersectionFunc; + _.intersectionBy = intersectionByFunc; + _.intersectionWith = intersectionWithFunc; + _.invert = invertFunc; + _.invertBy = invertByFunc; + _.invokeMap = invokeMapFunc; + _.iteratee = iterateeFunc; + _.keyBy = keyByFunc; + _.keys = keysFunc; + _.keysIn = keysInFunc; + _.map = mapFunc; + _.mapKeys = mapKeysFunc; + _.mapValues = mapValuesFunc; + _.matches = matchesFunc; + _.matchesProperty = matchesPropertyFunc; + _.memoize = memoizeFunc; + _.merge = mergeFunc; + _.mergeWith = mergeWithFunc; + _.method = methodFunc; + _.methodOf = methodOfFunc; + _.mixin = mixinFunc; + _.negate = negateFunc; + _.nthArg = nthArgFunc; + _.omit = omitFunc; + _.omitBy = omitByFunc; + _.once = onceFunc; + _.orderBy = orderByFunc; + _.over = overFunc; + _.overArgs = overArgsFunc; + _.overEvery = overEveryFunc; + _.overSome = overSomeFunc; + _.partial = partialFunc; + _.partialRight = partialRightFunc; + _.partition = partitionFunc; + _.pick = pickFunc; + _.pickBy = pickByFunc; + _.property = propertyFunc; + _.propertyOf = propertyOfFunc; + _.pull = pullFunc; + _.pullAll = pullAllFunc; + _.pullAllBy = pullAllByFunc; + _.pullAt = pullAtFunc; + _.range = rangeFunc; + _.rangeRight = rangeRightFunc; + _.rearg = reargFunc; + _.reject = rejectFunc; + _.remove = removeFunc; + _.rest = restFunc; + _.reverse = reverseFunc; + _.sampleSize = sampleSizeFunc; + _.set = setFunc; + _.setWith = setWithFunc; + _.shuffle = shuffleFunc; + _.slice = sliceFunc; + _.sortBy = sortByFunc; + _.sortedUniq = sortedUniqFunc; + _.sortedUniqBy = sortedUniqByFunc; + _.split = splitFunc; + _.spread = spreadFunc; + _.tail = tailFunc; + _.take = takeFunc; + _.takeRight = takeRightFunc; + _.takeRightWhile = takeRightWhileFunc; + _.takeWhile = takeWhileFunc; + _.tap = tapFunc; + _.throttle = throttleFunc; + _.thru = thruFunc; + _.toArray = toArrayFunc; + _.toPairs = toPairsFunc; + _.toPairsIn = toPairsInFunc; + _.toPath = toPathFunc; + _.toPlainObject = toPlainObjectFunc; + _.transform = transformFunc; + _.unary = unaryFunc; + _.union = unionFunc; + _.unionBy = unionByFunc; + _.unionWith = unionWithFunc; + _.uniq = uniqFunc; + _.uniqBy = uniqByFunc; + _.uniqWith = uniqWithFunc; + _.unset = unsetFunc; + _.unzip = unzipFunc; + _.unzipWith = unzipWithFunc; + _.update = updateFunc; + _.values = valuesFunc; + _.valuesIn = valuesInFunc; + _.without = withoutFunc; + _.words = wordsFunc; + _.wrap = wrapFunc; + _.xor = xorFunc; + _.xorBy = xorByFunc; + _.xorWith = xorWithFunc; + _.zip = zipFunc; + _.zipObject = zipObjectFunc; + _.zipWith = zipWithFunc; + _.extend = extendFunc; + _.extendWith = extendWithFunc; + _.add = addFunc; + _.attempt = attemptFunc; + _.camelCase = camelCaseFunc; + _.capitalize = capitalizeFunc; + _.ceil = ceilFunc; + _.clamp = clampFunc; + _.clone = cloneFunc; + _.cloneDeep = cloneDeepFunc; + _.cloneDeepWith = cloneDeepWithFunc; + _.cloneWith = cloneWithFunc; + _.deburr = deburrFunc; + _.endsWith = endsWithFunc; + _.eq = eqFunc; + _.escape = escapeFunc; + _.escapeRegExp = escapeRegExpFunc; + _.every = everyFunc; + _.find = findFunc; + _.findIndex = findIndexFunc; + _.findKey = findKeyFunc; + _.findLast = findLastFunc; + _.findLastIndex = findLastIndexFunc; + _.findLastKey = findLastKeyFunc; + _.floor = floorFunc; + _.forEach = forEachFunc; + _.forEachRight = forEachRightFunc; + _.forIn = forInFunc; + _.forInRight = forInRightFunc; + _.forOwn = forOwnFunc; + _.forOwnRight = forOwnRightFunc; + _.get = getFunc; + _.gt = gtFunc; + _.gte = gteFunc; + _.has = hasFunc; + _.hasIn = hasInFunc; + _.head = headFunc; + _.identity = identityFunc; + _.includes = includesFunc; + _.indexOf = indexOfFunc; + _.inRange = inRangeFunc; + _.invoke = invokeFunc; + _.isArguments = isArgumentsFunc; + _.isArray = isArrayFunc; + _.isArrayBuffer = isArrayBufferFunc; + _.isArrayLike = isArrayLikeFunc; + _.isArrayLikeObject = isArrayLikeObjectFunc; + _.isBoolean = isBooleanFunc; + _.isBuffer = isBufferFunc; + _.isDate = isDateFunc; + _.isElement = isElementFunc; + _.isEmpty = isEmptyFunc; + _.isEqual = isEqualFunc; + _.isEqualWith = isEqualWithFunc; + _.isError = isErrorFunc; + _.isFinite = isFiniteFunc; + _.isFunction = isFunctionFunc; + _.isInteger = isIntegerFunc; + _.isLength = isLengthFunc; + _.isMap = isMapFunc; + _.isMatch = isMatchFunc; + _.isMatchWith = isMatchWithFunc; + _.isNaN = isNaNFunc; + _.isNative = isNativeFunc; + _.isNil = isNilFunc; + _.isNull = isNullFunc; + _.isNumber = isNumberFunc; + _.isObject = isObjectFunc; + _.isObjectLike = isObjectLikeFunc; + _.isPlainObject = isPlainObjectFunc; + _.isRegExp = isRegExpFunc; + _.isSafeInteger = isSafeIntegerFunc; + _.isSet = isSetFunc; + _.isString = isStringFunc; + _.isSymbol = isSymbolFunc; + _.isTypedArray = isTypedArrayFunc; + _.isUndefined = isUndefinedFunc; + _.isWeakMap = isWeakMapFunc; + _.isWeakSet = isWeakSetFunc; + _.join = joinFunc; + _.kebabCase = kebabCaseFunc; + _.last = lastFunc; + _.lastIndexOf = lastIndexOfFunc; + _.lowerCase = lowerCaseFunc; + _.lowerFirst = lowerFirstFunc; + _.lt = ltFunc; + _.lte = lteFunc; + _.max = maxFunc; + _.maxBy = maxByFunc; + _.mean = meanFunc; + _.min = minFunc; + _.minBy = minByFunc; + _.noConflict = noConflictFunc; + _.noop = noopFunc; + _.now = nowFunc; + _.pad = padFunc; + _.padEnd = padEndFunc; + _.padStart = padStartFunc; + _.parseInt = parseIntFunc; + _.random = randomFunc; + _.reduce = reduceFunc; + _.reduceRight = reduceRightFunc; + _.repeat = repeatFunc; + _.replace = replaceFunc; + _.result = resultFunc; + _.round = roundFunc; + _.runInContext = runInContextFunc; + _.sample = sampleFunc; + _.size = sizeFunc; + _.snakeCase = snakeCaseFunc; + _.some = someFunc; + _.sortedIndex = sortedIndexFunc; + _.sortedIndexBy = sortedIndexByFunc; + _.sortedIndexOf = sortedIndexOfFunc; + _.sortedLastIndex = sortedLastIndexFunc; + _.sortedLastIndexBy = sortedLastIndexByFunc; + _.sortedLastIndexOf = sortedLastIndexOfFunc; + _.startCase = startCaseFunc; + _.startsWith = startsWithFunc; + _.subtract = subtractFunc; + _.sum = sumFunc; + _.sumBy = sumByFunc; + _.template = templateFunc; + _.times = timesFunc; + _.toInteger = toIntegerFunc; + _.toLength = toLengthFunc; + _.toLower = toLowerFunc; + _.toNumber = toNumberFunc; + _.toSafeInteger = toSafeIntegerFunc; + _.toString = toStringFunc; + _.toUpper = toUpperFunc; + _.trim = trimFunc; + _.trimEnd = trimEndFunc; + _.trimStart = trimStartFunc; + _.truncate = truncateFunc; + _.unescape = unescapeFunc; + _.uniqueId = uniqueIdFunc; + _.upperCase = upperCaseFunc; + _.upperFirst = upperFirstFunc; + _.each = eachFunc; + _.eachRight = eachRightFunc; + _.first = firstFunc; +} diff --git a/lodash/lodash.d.ts b/lodash/lodash.d.ts index 3305528a5e..961520e6c4 100644 --- a/lodash/lodash.d.ts +++ b/lodash/lodash.d.ts @@ -21031,6 +21031,1835 @@ declare module "lodash" { export = _; } +/************************************************* + * * + * The lodash method _.XXX exported as a module. * + * * + *************************************************/ + + +declare module "lodash.after" { + const after: typeof _.after; + export = after; +} + + +declare module "lodash.ary" { + const ary: typeof _.ary; + export = ary; +} + + +declare module "lodash.assign" { + const assign: typeof _.assign; + export = assign; +} + + +declare module "lodash.assignIn" { + const assignIn: typeof _.assignIn; + export = assignIn; +} + + +declare module "lodash.assignInWith" { + const assignInWith: typeof _.assignInWith; + export = assignInWith; +} + + +declare module "lodash.assignWith" { + const assignWith: typeof _.assignWith; + export = assignWith; +} + + +declare module "lodash.at" { + const at: typeof _.at; + export = at; +} + + +declare module "lodash.before" { + const before: typeof _.before; + export = before; +} + + +declare module "lodash.bind" { + const bind: typeof _.bind; + export = bind; +} + + +declare module "lodash.bindAll" { + const bindAll: typeof _.bindAll; + export = bindAll; +} + + +declare module "lodash.bindKey" { + const bindKey: typeof _.bindKey; + export = bindKey; +} + + +declare module "lodash.castArray" { + const castArray: typeof _.castArray; + export = castArray; +} + + +declare module "lodash.chain" { + const chain: typeof _.chain; + export = chain; +} + + +declare module "lodash.chunk" { + const chunk: typeof _.chunk; + export = chunk; +} + + +declare module "lodash.compact" { + const compact: typeof _.compact; + export = compact; +} + + +declare module "lodash.concat" { + const concat: typeof _.concat; + export = concat; +} + +/** +* uncoment it if definition exists +*/ +/* +declare module "lodash.cond" { + const cond: typeof _.cond; + export = cond; +} +*/ + +/** +* uncoment it if definition exists +*/ +/* +declare module "lodash.conforms" { + const conforms: typeof _.conforms; + export = conforms; +} +*/ + +declare module "lodash.constant" { + const constant: typeof _.constant; + export = constant; +} + + +declare module "lodash.countBy" { + const countBy: typeof _.countBy; + export = countBy; +} + + +declare module "lodash.create" { + const create: typeof _.create; + export = create; +} + + +declare module "lodash.curry" { + const curry: typeof _.curry; + export = curry; +} + + +declare module "lodash.curryRight" { + const curryRight: typeof _.curryRight; + export = curryRight; +} + + +declare module "lodash.debounce" { + const debounce: typeof _.debounce; + export = debounce; +} + + +declare module "lodash.defaults" { + const defaults: typeof _.defaults; + export = defaults; +} + + +declare module "lodash.defaultsDeep" { + const defaultsDeep: typeof _.defaultsDeep; + export = defaultsDeep; +} + + +declare module "lodash.defer" { + const defer: typeof _.defer; + export = defer; +} + + +declare module "lodash.delay" { + const delay: typeof _.delay; + export = delay; +} + + +declare module "lodash.difference" { + const difference: typeof _.difference; + export = difference; +} + + +declare module "lodash.differenceBy" { + const differenceBy: typeof _.differenceBy; + export = differenceBy; +} + + +declare module "lodash.differenceWith" { + const differenceWith: typeof _.differenceWith; + export = differenceWith; +} + + +declare module "lodash.drop" { + const drop: typeof _.drop; + export = drop; +} + + +declare module "lodash.dropRight" { + const dropRight: typeof _.dropRight; + export = dropRight; +} + + +declare module "lodash.dropRightWhile" { + const dropRightWhile: typeof _.dropRightWhile; + export = dropRightWhile; +} + + +declare module "lodash.dropWhile" { + const dropWhile: typeof _.dropWhile; + export = dropWhile; +} + + +declare module "lodash.fill" { + const fill: typeof _.fill; + export = fill; +} + + +declare module "lodash.filter" { + const filter: typeof _.filter; + export = filter; +} + + +declare module "lodash.flatMap" { + const flatMap: typeof _.flatMap; + export = flatMap; +} + +/** +* uncoment it if definition exists +*/ +/* +declare module "lodash.flatMapDeep" { + const flatMapDeep: typeof _.flatMapDeep; + export = flatMapDeep; +} +*/ +/** +* uncoment it if definition exists +*/ +/* +declare module "lodash.flatMapDepth" { + const flatMapDepth: typeof _.flatMapDepth; + export = flatMapDepth; +} +*/ + +declare module "lodash.flatten" { + const flatten: typeof _.flatten; + export = flatten; +} + + +declare module "lodash.flattenDeep" { + const flattenDeep: typeof _.flattenDeep; + export = flattenDeep; +} + +declare module "lodash.flattenDepth" { + const flattenDepth: typeof _.flattenDepth; + export = flattenDepth; +} + +declare module "lodash.flip" { + const flip: typeof _.flip; + export = flip; +} + + +declare module "lodash.flow" { + const flow: typeof _.flow; + export = flow; +} + + +declare module "lodash.flowRight" { + const flowRight: typeof _.flowRight; + export = flowRight; +} + + +declare module "lodash.fromPairs" { + const fromPairs: typeof _.fromPairs; + export = fromPairs; +} + + +declare module "lodash.functions" { + const functions: typeof _.functions; + export = functions; +} + + +declare module "lodash.functionsIn" { + const functionsIn: typeof _.functionsIn; + export = functionsIn; +} + + +declare module "lodash.groupBy" { + const groupBy: typeof _.groupBy; + export = groupBy; +} + + +declare module "lodash.initial" { + const initial: typeof _.initial; + export = initial; +} + + +declare module "lodash.intersection" { + const intersection: typeof _.intersection; + export = intersection; +} + + +declare module "lodash.intersectionBy" { + const intersectionBy: typeof _.intersectionBy; + export = intersectionBy; +} + + +declare module "lodash.intersectionWith" { + const intersectionWith: typeof _.intersectionWith; + export = intersectionWith; +} + + +declare module "lodash.invert" { + const invert: typeof _.invert; + export = invert; +} + + +declare module "lodash.invertBy" { + const invertBy: typeof _.invertBy; + export = invertBy; +} + + +declare module "lodash.invokeMap" { + const invokeMap: typeof _.invokeMap; + export = invokeMap; +} + + +declare module "lodash.iteratee" { + const iteratee: typeof _.iteratee; + export = iteratee; +} + + +declare module "lodash.keyBy" { + const keyBy: typeof _.keyBy; + export = keyBy; +} + + +declare module "lodash.keys" { + const keys: typeof _.keys; + export = keys; +} + + +declare module "lodash.keysIn" { + const keysIn: typeof _.keysIn; + export = keysIn; +} + + +declare module "lodash.map" { + const map: typeof _.map; + export = map; +} + + +declare module "lodash.mapKeys" { + const mapKeys: typeof _.mapKeys; + export = mapKeys; +} + + +declare module "lodash.mapValues" { + const mapValues: typeof _.mapValues; + export = mapValues; +} + + +declare module "lodash.matches" { + const matches: typeof _.matches; + export = matches; +} + + +declare module "lodash.matchesProperty" { + const matchesProperty: typeof _.matchesProperty; + export = matchesProperty; +} + + +declare module "lodash.memoize" { + const memoize: typeof _.memoize; + export = memoize; +} + + +declare module "lodash.merge" { + const merge: typeof _.merge; + export = merge; +} + + +declare module "lodash.mergeWith" { + const mergeWith: typeof _.mergeWith; + export = mergeWith; +} + + +declare module "lodash.method" { + const method: typeof _.method; + export = method; +} + + +declare module "lodash.methodOf" { + const methodOf: typeof _.methodOf; + export = methodOf; +} + + +declare module "lodash.mixin" { + const mixin: typeof _.mixin; + export = mixin; +} + + +declare module "lodash.negate" { + const negate: typeof _.negate; + export = negate; +} + + +declare module "lodash.nthArg" { + const nthArg: typeof _.nthArg; + export = nthArg; +} + + +declare module "lodash.omit" { + const omit: typeof _.omit; + export = omit; +} + + +declare module "lodash.omitBy" { + const omitBy: typeof _.omitBy; + export = omitBy; +} + + +declare module "lodash.once" { + const once: typeof _.once; + export = once; +} + + +declare module "lodash.orderBy" { + const orderBy: typeof _.orderBy; + export = orderBy; +} + + +declare module "lodash.over" { + const over: typeof _.over; + export = over; +} + + +declare module "lodash.overArgs" { + const overArgs: typeof _.overArgs; + export = overArgs; +} + + +declare module "lodash.overEvery" { + const overEvery: typeof _.overEvery; + export = overEvery; +} + + +declare module "lodash.overSome" { + const overSome: typeof _.overSome; + export = overSome; +} + + +declare module "lodash.partial" { + const partial: typeof _.partial; + export = partial; +} + + +declare module "lodash.partialRight" { + const partialRight: typeof _.partialRight; + export = partialRight; +} + + +declare module "lodash.partition" { + const partition: typeof _.partition; + export = partition; +} + + +declare module "lodash.pick" { + const pick: typeof _.pick; + export = pick; +} + + +declare module "lodash.pickBy" { + const pickBy: typeof _.pickBy; + export = pickBy; +} + + +declare module "lodash.property" { + const property: typeof _.property; + export = property; +} + + +declare module "lodash.propertyOf" { + const propertyOf: typeof _.propertyOf; + export = propertyOf; +} + + +declare module "lodash.pull" { + const pull: typeof _.pull; + export = pull; +} + + +declare module "lodash.pullAll" { + const pullAll: typeof _.pullAll; + export = pullAll; +} + + +declare module "lodash.pullAllBy" { + const pullAllBy: typeof _.pullAllBy; + export = pullAllBy; +} + +/** +* uncoment it if definition exists +*/ +/* +declare module "lodash.pullAllWith" { + const pullAllWith: typeof _.pullAllWith; + export = pullAllWith; +} +*/ + +declare module "lodash.pullAt" { + const pullAt: typeof _.pullAt; + export = pullAt; +} + + +declare module "lodash.range" { + const range: typeof _.range; + export = range; +} + + +declare module "lodash.rangeRight" { + const rangeRight: typeof _.rangeRight; + export = rangeRight; +} + + +declare module "lodash.rearg" { + const rearg: typeof _.rearg; + export = rearg; +} + + +declare module "lodash.reject" { + const reject: typeof _.reject; + export = reject; +} + + +declare module "lodash.remove" { + const remove: typeof _.remove; + export = remove; +} + + +declare module "lodash.rest" { + const rest: typeof _.rest; + export = rest; +} + + +declare module "lodash.reverse" { + const reverse: typeof _.reverse; + export = reverse; +} + + +declare module "lodash.sampleSize" { + const sampleSize: typeof _.sampleSize; + export = sampleSize; +} + + +declare module "lodash.set" { + const set: typeof _.set; + export = set; +} + + +declare module "lodash.setWith" { + const setWith: typeof _.setWith; + export = setWith; +} + + +declare module "lodash.shuffle" { + const shuffle: typeof _.shuffle; + export = shuffle; +} + + +declare module "lodash.slice" { + const slice: typeof _.slice; + export = slice; +} + + +declare module "lodash.sortBy" { + const sortBy: typeof _.sortBy; + export = sortBy; +} + + +declare module "lodash.sortedUniq" { + const sortedUniq: typeof _.sortedUniq; + export = sortedUniq; +} + + +declare module "lodash.sortedUniqBy" { + const sortedUniqBy: typeof _.sortedUniqBy; + export = sortedUniqBy; +} + + +declare module "lodash.split" { + const split: typeof _.split; + export = split; +} + + +declare module "lodash.spread" { + const spread: typeof _.spread; + export = spread; +} + + +declare module "lodash.tail" { + const tail: typeof _.tail; + export = tail; +} + + +declare module "lodash.take" { + const take: typeof _.take; + export = take; +} + + +declare module "lodash.takeRight" { + const takeRight: typeof _.takeRight; + export = takeRight; +} + + +declare module "lodash.takeRightWhile" { + const takeRightWhile: typeof _.takeRightWhile; + export = takeRightWhile; +} + + +declare module "lodash.takeWhile" { + const takeWhile: typeof _.takeWhile; + export = takeWhile; +} + + +declare module "lodash.tap" { + const tap: typeof _.tap; + export = tap; +} + + +declare module "lodash.throttle" { + const throttle: typeof _.throttle; + export = throttle; +} + + +declare module "lodash.thru" { + const thru: typeof _.thru; + export = thru; +} + + +declare module "lodash.toArray" { + const toArray: typeof _.toArray; + export = toArray; +} + + +declare module "lodash.toPairs" { + const toPairs: typeof _.toPairs; + export = toPairs; +} + + +declare module "lodash.toPairsIn" { + const toPairsIn: typeof _.toPairsIn; + export = toPairsIn; +} + + +declare module "lodash.toPath" { + const toPath: typeof _.toPath; + export = toPath; +} + + +declare module "lodash.toPlainObject" { + const toPlainObject: typeof _.toPlainObject; + export = toPlainObject; +} + + +declare module "lodash.transform" { + const transform: typeof _.transform; + export = transform; +} + + +declare module "lodash.unary" { + const unary: typeof _.unary; + export = unary; +} + + +declare module "lodash.union" { + const union: typeof _.union; + export = union; +} + + +declare module "lodash.unionBy" { + const unionBy: typeof _.unionBy; + export = unionBy; +} + + +declare module "lodash.unionWith" { + const unionWith: typeof _.unionWith; + export = unionWith; +} + + +declare module "lodash.uniq" { + const uniq: typeof _.uniq; + export = uniq; +} + + +declare module "lodash.uniqBy" { + const uniqBy: typeof _.uniqBy; + export = uniqBy; +} + + +declare module "lodash.uniqWith" { + const uniqWith: typeof _.uniqWith; + export = uniqWith; +} + + +declare module "lodash.unset" { + const unset: typeof _.unset; + export = unset; +} + + +declare module "lodash.unzip" { + const unzip: typeof _.unzip; + export = unzip; +} + + +declare module "lodash.unzipWith" { + const unzipWith: typeof _.unzipWith; + export = unzipWith; +} + + +declare module "lodash.update" { + const update: typeof _.update; + export = update; +} + +/** +* uncoment it if definition exists +*/ +/* +declare module "lodash.updateWith" { + const updateWith: typeof _.updateWith; + export = updateWith; +} +*/ + +declare module "lodash.values" { + const values: typeof _.values; + export = values; +} + + +declare module "lodash.valuesIn" { + const valuesIn: typeof _.valuesIn; + export = valuesIn; +} + + +declare module "lodash.without" { + const without: typeof _.without; + export = without; +} + + +declare module "lodash.words" { + const words: typeof _.words; + export = words; +} + + +declare module "lodash.wrap" { + const wrap: typeof _.wrap; + export = wrap; +} + + +declare module "lodash.xor" { + const xor: typeof _.xor; + export = xor; +} + + +declare module "lodash.xorBy" { + const xorBy: typeof _.xorBy; + export = xorBy; +} + + +declare module "lodash.xorWith" { + const xorWith: typeof _.xorWith; + export = xorWith; +} + + +declare module "lodash.zip" { + const zip: typeof _.zip; + export = zip; +} + + +declare module "lodash.zipObject" { + const zipObject: typeof _.zipObject; + export = zipObject; +} + +/** +* uncoment it if definition exists +*/ +/* +declare module "lodash.zipObjectDeep" { + const zipObjectDeep: typeof _.zipObjectDeep; + export = zipObjectDeep; +} +*/ + + +declare module "lodash.zipWith" { + const zipWith: typeof _.zipWith; + export = zipWith; +} + +/** +* uncoment it if definition exists +*/ +/* +declare module "lodash.entries" { + const entries: typeof _.entries; + export = entries; +} +*/ +/** +* uncoment it if definition exists +*/ +/* +declare module "lodash.entriesIn" { + const entriesIn: typeof _.entriesIn; + export = entriesIn; +} +*/ + + +declare module "lodash.extend" { + const extend: typeof _.extend; + export = extend; +} + + +declare module "lodash.extendWith" { + const extendWith: typeof _.extendWith; + export = extendWith; +} + + +declare module "lodash.add" { + const add: typeof _.add; + export = add; +} + + +declare module "lodash.attempt" { + const attempt: typeof _.attempt; + export = attempt; +} + + +declare module "lodash.camelCase" { + const camelCase: typeof _.camelCase; + export = camelCase; +} + + +declare module "lodash.capitalize" { + const capitalize: typeof _.capitalize; + export = capitalize; +} + + +declare module "lodash.ceil" { + const ceil: typeof _.ceil; + export = ceil; +} + + +declare module "lodash.clamp" { + const clamp: typeof _.clamp; + export = clamp; +} + + +declare module "lodash.clone" { + const clone: typeof _.clone; + export = clone; +} + + +declare module "lodash.cloneDeep" { + const cloneDeep: typeof _.cloneDeep; + export = cloneDeep; +} + + +declare module "lodash.cloneDeepWith" { + const cloneDeepWith: typeof _.cloneDeepWith; + export = cloneDeepWith; +} + + +declare module "lodash.cloneWith" { + const cloneWith: typeof _.cloneWith; + export = cloneWith; +} + + +declare module "lodash.deburr" { + const deburr: typeof _.deburr; + export = deburr; +} + +/** +* uncoment it if definition exists +*/ +/* +declare module "lodash.divide" { + const divide: typeof _.divide; + export = divide; +} +*/ + +declare module "lodash.endsWith" { + const endsWith: typeof _.endsWith; + export = endsWith; +} + + +declare module "lodash.eq" { + const eq: typeof _.eq; + export = eq; +} + + +declare module "lodash.escape" { + const escape: typeof _.escape; + export = escape; +} + + +declare module "lodash.escapeRegExp" { + const escapeRegExp: typeof _.escapeRegExp; + export = escapeRegExp; +} + + +declare module "lodash.every" { + const every: typeof _.every; + export = every; +} + + +declare module "lodash.find" { + const find: typeof _.find; + export = find; +} + + +declare module "lodash.findIndex" { + const findIndex: typeof _.findIndex; + export = findIndex; +} + + +declare module "lodash.findKey" { + const findKey: typeof _.findKey; + export = findKey; +} + + +declare module "lodash.findLast" { + const findLast: typeof _.findLast; + export = findLast; +} + + +declare module "lodash.findLastIndex" { + const findLastIndex: typeof _.findLastIndex; + export = findLastIndex; +} + + +declare module "lodash.findLastKey" { + const findLastKey: typeof _.findLastKey; + export = findLastKey; +} + + +declare module "lodash.floor" { + const floor: typeof _.floor; + export = floor; +} + + +declare module "lodash.forEach" { + const forEach: typeof _.forEach; + export = forEach; +} + + +declare module "lodash.forEachRight" { + const forEachRight: typeof _.forEachRight; + export = forEachRight; +} + + +declare module "lodash.forIn" { + const forIn: typeof _.forIn; + export = forIn; +} + + +declare module "lodash.forInRight" { + const forInRight: typeof _.forInRight; + export = forInRight; +} + + +declare module "lodash.forOwn" { + const forOwn: typeof _.forOwn; + export = forOwn; +} + + +declare module "lodash.forOwnRight" { + const forOwnRight: typeof _.forOwnRight; + export = forOwnRight; +} + + +declare module "lodash.get" { + const get: typeof _.get; + export = get; +} + + +declare module "lodash.gt" { + const gt: typeof _.gt; + export = gt; +} + + +declare module "lodash.gte" { + const gte: typeof _.gte; + export = gte; +} + + +declare module "lodash.has" { + const has: typeof _.has; + export = has; +} + + +declare module "lodash.hasIn" { + const hasIn: typeof _.hasIn; + export = hasIn; +} + + +declare module "lodash.head" { + const head: typeof _.head; + export = head; +} + + +declare module "lodash.identity" { + const identity: typeof _.identity; + export = identity; +} + + +declare module "lodash.includes" { + const includes: typeof _.includes; + export = includes; +} + + +declare module "lodash.indexOf" { + const indexOf: typeof _.indexOf; + export = indexOf; +} + + +declare module "lodash.inRange" { + const inRange: typeof _.inRange; + export = inRange; +} + + +declare module "lodash.invoke" { + const invoke: typeof _.invoke; + export = invoke; +} + + +declare module "lodash.isArguments" { + const isArguments: typeof _.isArguments; + export = isArguments; +} + + +declare module "lodash.isArray" { + const isArray: typeof _.isArray; + export = isArray; +} + + +declare module "lodash.isArrayBuffer" { + const isArrayBuffer: typeof _.isArrayBuffer; + export = isArrayBuffer; +} + + +declare module "lodash.isArrayLike" { + const isArrayLike: typeof _.isArrayLike; + export = isArrayLike; +} + + +declare module "lodash.isArrayLikeObject" { + const isArrayLikeObject: typeof _.isArrayLikeObject; + export = isArrayLikeObject; +} + + +declare module "lodash.isBoolean" { + const isBoolean: typeof _.isBoolean; + export = isBoolean; +} + + +declare module "lodash.isBuffer" { + const isBuffer: typeof _.isBuffer; + export = isBuffer; +} + + +declare module "lodash.isDate" { + const isDate: typeof _.isDate; + export = isDate; +} + + +declare module "lodash.isElement" { + const isElement: typeof _.isElement; + export = isElement; +} + + +declare module "lodash.isEmpty" { + const isEmpty: typeof _.isEmpty; + export = isEmpty; +} + + +declare module "lodash.isEqual" { + const isEqual: typeof _.isEqual; + export = isEqual; +} + + +declare module "lodash.isEqualWith" { + const isEqualWith: typeof _.isEqualWith; + export = isEqualWith; +} + + +declare module "lodash.isError" { + const isError: typeof _.isError; + export = isError; +} + + +declare module "lodash.isFinite" { + const isFinite: typeof _.isFinite; + export = isFinite; +} + + +declare module "lodash.isFunction" { + const isFunction: typeof _.isFunction; + export = isFunction; +} + + +declare module "lodash.isInteger" { + const isInteger: typeof _.isInteger; + export = isInteger; +} + + +declare module "lodash.isLength" { + const isLength: typeof _.isLength; + export = isLength; +} + + +declare module "lodash.isMap" { + const isMap: typeof _.isMap; + export = isMap; +} + + +declare module "lodash.isMatch" { + const isMatch: typeof _.isMatch; + export = isMatch; +} + + +declare module "lodash.isMatchWith" { + const isMatchWith: typeof _.isMatchWith; + export = isMatchWith; +} + + +declare module "lodash.isNaN" { + const isNaN: typeof _.isNaN; + export = isNaN; +} + + +declare module "lodash.isNative" { + const isNative: typeof _.isNative; + export = isNative; +} + + +declare module "lodash.isNil" { + const isNil: typeof _.isNil; + export = isNil; +} + + +declare module "lodash.isNull" { + const isNull: typeof _.isNull; + export = isNull; +} + + +declare module "lodash.isNumber" { + const isNumber: typeof _.isNumber; + export = isNumber; +} + + +declare module "lodash.isObject" { + const isObject: typeof _.isObject; + export = isObject; +} + + +declare module "lodash.isObjectLike" { + const isObjectLike: typeof _.isObjectLike; + export = isObjectLike; +} + + +declare module "lodash.isPlainObject" { + const isPlainObject: typeof _.isPlainObject; + export = isPlainObject; +} + + +declare module "lodash.isRegExp" { + const isRegExp: typeof _.isRegExp; + export = isRegExp; +} + + +declare module "lodash.isSafeInteger" { + const isSafeInteger: typeof _.isSafeInteger; + export = isSafeInteger; +} + + +declare module "lodash.isSet" { + const isSet: typeof _.isSet; + export = isSet; +} + + +declare module "lodash.isString" { + const isString: typeof _.isString; + export = isString; +} + + +declare module "lodash.isSymbol" { + const isSymbol: typeof _.isSymbol; + export = isSymbol; +} + + +declare module "lodash.isTypedArray" { + const isTypedArray: typeof _.isTypedArray; + export = isTypedArray; +} + + +declare module "lodash.isUndefined" { + const isUndefined: typeof _.isUndefined; + export = isUndefined; +} + + +declare module "lodash.isWeakMap" { + const isWeakMap: typeof _.isWeakMap; + export = isWeakMap; +} + + +declare module "lodash.isWeakSet" { + const isWeakSet: typeof _.isWeakSet; + export = isWeakSet; +} + + +declare module "lodash.join" { + const join: typeof _.join; + export = join; +} + + +declare module "lodash.kebabCase" { + const kebabCase: typeof _.kebabCase; + export = kebabCase; +} + + +declare module "lodash.last" { + const last: typeof _.last; + export = last; +} + + +declare module "lodash.lastIndexOf" { + const lastIndexOf: typeof _.lastIndexOf; + export = lastIndexOf; +} + + +declare module "lodash.lowerCase" { + const lowerCase: typeof _.lowerCase; + export = lowerCase; +} + + +declare module "lodash.lowerFirst" { + const lowerFirst: typeof _.lowerFirst; + export = lowerFirst; +} + + +declare module "lodash.lt" { + const lt: typeof _.lt; + export = lt; +} + + +declare module "lodash.lte" { + const lte: typeof _.lte; + export = lte; +} + + +declare module "lodash.max" { + const max: typeof _.max; + export = max; +} + + +declare module "lodash.maxBy" { + const maxBy: typeof _.maxBy; + export = maxBy; +} + + +declare module "lodash.mean" { + const mean: typeof _.mean; + export = mean; +} + +/** +* uncoment it if definition exists +*/ +/* +declare module "lodash.meanBy" { + const meanBy: typeof _.meanBy; + export = meanBy; +} +*/ + +declare module "lodash.min" { + const min: typeof _.min; + export = min; +} + + +declare module "lodash.minBy" { + const minBy: typeof _.minBy; + export = minBy; +} + +/** +* uncoment it if definition exists +*/ +/* +declare module "lodash.multiply" { + const multiply: typeof _.multiply; + export = multiply; +} +*/ + +/** +* uncoment it if definition exists +*/ +/* +declare module "lodash.nth" { + const nth: typeof _.nth; + export = nth; +} +*/ + +declare module "lodash.noConflict" { + const noConflict: typeof _.noConflict; + export = noConflict; +} + + +declare module "lodash.noop" { + const noop: typeof _.noop; + export = noop; +} + + +declare module "lodash.now" { + const now: typeof _.now; + export = now; +} + + +declare module "lodash.pad" { + const pad: typeof _.pad; + export = pad; +} + + +declare module "lodash.padEnd" { + const padEnd: typeof _.padEnd; + export = padEnd; +} + + +declare module "lodash.padStart" { + const padStart: typeof _.padStart; + export = padStart; +} + + +declare module "lodash.parseInt" { + const parseInt: typeof _.parseInt; + export = parseInt; +} + + +declare module "lodash.random" { + const random: typeof _.random; + export = random; +} + + +declare module "lodash.reduce" { + const reduce: typeof _.reduce; + export = reduce; +} + + +declare module "lodash.reduceRight" { + const reduceRight: typeof _.reduceRight; + export = reduceRight; +} + + +declare module "lodash.repeat" { + const repeat: typeof _.repeat; + export = repeat; +} + + +declare module "lodash.replace" { + const replace: typeof _.replace; + export = replace; +} + + +declare module "lodash.result" { + const result: typeof _.result; + export = result; +} + + +declare module "lodash.round" { + const round: typeof _.round; + export = round; +} + + +declare module "lodash.runInContext" { + const runInContext: typeof _.runInContext; + export = runInContext; +} + + +declare module "lodash.sample" { + const sample: typeof _.sample; + export = sample; +} + + +declare module "lodash.size" { + const size: typeof _.size; + export = size; +} + + +declare module "lodash.snakeCase" { + const snakeCase: typeof _.snakeCase; + export = snakeCase; +} + + +declare module "lodash.some" { + const some: typeof _.some; + export = some; +} + + +declare module "lodash.sortedIndex" { + const sortedIndex: typeof _.sortedIndex; + export = sortedIndex; +} + + +declare module "lodash.sortedIndexBy" { + const sortedIndexBy: typeof _.sortedIndexBy; + export = sortedIndexBy; +} + + +declare module "lodash.sortedIndexOf" { + const sortedIndexOf: typeof _.sortedIndexOf; + export = sortedIndexOf; +} + + +declare module "lodash.sortedLastIndex" { + const sortedLastIndex: typeof _.sortedLastIndex; + export = sortedLastIndex; +} + + +declare module "lodash.sortedLastIndexBy" { + const sortedLastIndexBy: typeof _.sortedLastIndexBy; + export = sortedLastIndexBy; +} + + +declare module "lodash.sortedLastIndexOf" { + const sortedLastIndexOf: typeof _.sortedLastIndexOf; + export = sortedLastIndexOf; +} + + +declare module "lodash.startCase" { + const startCase: typeof _.startCase; + export = startCase; +} + + +declare module "lodash.startsWith" { + const startsWith: typeof _.startsWith; + export = startsWith; +} + + +declare module "lodash.subtract" { + const subtract: typeof _.subtract; + export = subtract; +} + + +declare module "lodash.sum" { + const sum: typeof _.sum; + export = sum; +} + + +declare module "lodash.sumBy" { + const sumBy: typeof _.sumBy; + export = sumBy; +} + + +declare module "lodash.template" { + const template: typeof _.template; + export = template; +} + + +declare module "lodash.times" { + const times: typeof _.times; + export = times; +} + + +declare module "lodash.toInteger" { + const toInteger: typeof _.toInteger; + export = toInteger; +} + + +declare module "lodash.toLength" { + const toLength: typeof _.toLength; + export = toLength; +} + + +declare module "lodash.toLower" { + const toLower: typeof _.toLower; + export = toLower; +} + + +declare module "lodash.toNumber" { + const toNumber: typeof _.toNumber; + export = toNumber; +} + + +declare module "lodash.toSafeInteger" { + const toSafeInteger: typeof _.toSafeInteger; + export = toSafeInteger; +} + + +declare module "lodash.toString" { + const toString: typeof _.toString; + export = toString; +} + + +declare module "lodash.toUpper" { + const toUpper: typeof _.toUpper; + export = toUpper; +} + + +declare module "lodash.trim" { + const trim: typeof _.trim; + export = trim; +} + + +declare module "lodash.trimEnd" { + const trimEnd: typeof _.trimEnd; + export = trimEnd; +} + + +declare module "lodash.trimStart" { + const trimStart: typeof _.trimStart; + export = trimStart; +} + + +declare module "lodash.truncate" { + const truncate: typeof _.truncate; + export = truncate; +} + + +declare module "lodash.unescape" { + const unescape: typeof _.unescape; + export = unescape; +} + + +declare module "lodash.uniqueId" { + const uniqueId: typeof _.uniqueId; + export = uniqueId; +} + + +declare module "lodash.upperCase" { + const upperCase: typeof _.upperCase; + export = upperCase; +} + + +declare module "lodash.upperFirst" { + const upperFirst: typeof _.upperFirst; + export = upperFirst; +} + + +declare module "lodash.each" { + const each: typeof _.each; + export = each; +} + + +declare module "lodash.eachRight" { + const eachRight: typeof _.eachRight; + export = eachRight; +} + + +declare module "lodash.first" { + const first: typeof _.first; + export = first; +} + // Backward compatibility with --target es5 interface Set {} interface Map {} From 0ad40bb042ea5253673fab5e8a85da14f79d41ae Mon Sep 17 00:00:00 2001 From: TonyYang Date: Fri, 28 Oct 2016 23:54:55 +0800 Subject: [PATCH 083/111] [joi] Correct the validate function (#12306) * Correct the validate function * I lookup source code to correct validate func * Find the correct type assert for validate * According to new definition, to update tests * Delete redundant function * Enhance test completeness * Fix the error --- joi/joi-tests.ts | 75 ++++++++++++++++++++++++++++++++---------------- joi/joi.d.ts | 15 ++++++++-- 2 files changed, 63 insertions(+), 27 deletions(-) diff --git a/joi/joi-tests.ts b/joi/joi-tests.ts index c832b3eb05..7002a3872c 100644 --- a/joi/joi-tests.ts +++ b/joi/joi-tests.ts @@ -759,30 +759,57 @@ schema = Joi.lazy(() => schema) // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- -Joi.validate(value, obj); -Joi.validate(value, schema); -Joi.validate(value, schema, validOpts); -Joi.validate(value, schema, validOpts, (err, value) => { - x = value; - str = err.message; - str = err.details[0].path; - str = err.details[0].message; - str = err.details[0].type; -}); -Joi.validate(value, schema, (err, value) => { - x = value; - str = err.message; - str = err.details[0].path; - str = err.details[0].message; - str = err.details[0].type; -}); -// variant -Joi.validate(num, schema, validOpts, (err, value) => { - num = value; -}); +namespace validate_tests { + { + Joi.validate(value, obj); + Joi.validate(value, schema); + Joi.validate(value, schema, validOpts); + Joi.validate(value, schema, validOpts, (err, value) => { + x = value; + str = err.message; + str = err.details[0].path; + str = err.details[0].message; + str = err.details[0].type; + }); + Joi.validate(value, schema, (err, value) => { + x = value; + str = err.message; + str = err.details[0].path; + str = err.details[0].message; + str = err.details[0].type; + }); + // variant + Joi.validate(num, schema, validOpts, (err, value) => { + num = value; + }); + + // plain opts + Joi.validate(value, {}); + } + + { + let value = { username: 'example', password: 'example' }; + let schema = Joi.object().keys({ + username: Joi.string().max(255).required(), + password: Joi.string().regex(/^[a-zA-Z0-9]{3,255}$/).required(), + }); + let returnValue: Joi.ValidationResult; + + returnValue = Joi.validate(value); + value = Joi.validate(value, (err, value) => value); + + returnValue = Joi.validate(value, schema); + returnValue = Joi.validate(value, obj); + value = Joi.validate(value, obj, (err, value) => value); + value = Joi.validate(value, schema, (err, value) => value); + + returnValue = Joi.validate(value, schema, validOpts); + returnValue = Joi.validate(value, obj, validOpts); + value = Joi.validate(value, obj, validOpts, (err, value) => value); + value = Joi.validate(value, schema, validOpts, (err, value) => value); + } +} -// plain opts -Joi.validate(value, {}); // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- @@ -856,4 +883,4 @@ schema = Joi.raw(); schema = Joi.raw(bool); schema = Joi.empty(); schema = Joi.empty(str); -schema = Joi.empty(anySchema); \ No newline at end of file +schema = Joi.empty(anySchema); diff --git a/joi/joi.d.ts b/joi/joi.d.ts index a4a029f737..9a7d73cbbf 100644 --- a/joi/joi.d.ts +++ b/joi/joi.d.ts @@ -842,9 +842,18 @@ declare module 'joi' { /** * Validates a value using the given schema and options. */ - export function validate(value: T, schema: Schema, callback: (err: ValidationError, value: T) => void): void; - export function validate(value: T, schema: Object, callback: (err: ValidationError, value: T) => void): void; - export function validate(value: T, schema: Object, options?: ValidationOptions, callback?: (err: ValidationError, value: T) => void): ValidationResult; + export function validate(value: T): ValidationResult; + export function validate(value: T, callback: (err: ValidationError, value: T) => R): R; + + export function validate(value: T, schema: Schema): ValidationResult; + export function validate(value: T, schema: Object): ValidationResult; + export function validate(value: T, schema: Schema, callback: (err: ValidationError, value: T) => R): R; + export function validate(value: T, schema: Object, callback: (err: ValidationError, value: T) => R): R; + + export function validate(value: T, schema: Schema, options: ValidationOptions): ValidationResult; + export function validate(value: T, schema: Object, options: ValidationOptions): ValidationResult; + export function validate(value: T, schema: Schema, options: ValidationOptions, callback: (err: ValidationError, value: T) => R): R; + export function validate(value: T, schema: Object, options: ValidationOptions, callback: (err: ValidationError, value: T) => R): R; /** * Converts literal schema definition to joi schema object (or returns the same back if already a joi schema object). From 54d1d6f8edf12d0b5a549cb32b116e9bf9e72af0 Mon Sep 17 00:00:00 2001 From: Caleb Meredith Date: Fri, 28 Oct 2016 11:55:16 -0400 Subject: [PATCH 084/111] Expose AST types (#12143) * Expose AST types /cc @TonyPythoneer * Update graphql.d.ts --- graphql/graphql.d.ts | 114 ++++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 66 deletions(-) diff --git a/graphql/graphql.d.ts b/graphql/graphql.d.ts index 9413195d72..570fbe3a2f 100644 --- a/graphql/graphql.d.ts +++ b/graphql/graphql.d.ts @@ -85,26 +85,7 @@ declare module "graphql" { // Parse and operate on GraphQL language source files. - export { - Source, - getLocation, - - // Parse - parse, - parseValue, - parseType, - - // Print - print, - - // Visit - visit, - visitInParallel, - visitWithTypeInfo, - Kind, - TokenKind, - BREAK, - } from 'graphql/language'; + export * from 'graphql/language'; // Execute GraphQL queries. @@ -254,6 +235,7 @@ declare module "graphql/language" { } declare module "graphql/language/index" { + export * from 'graphql/language/ast'; export { getLocation } from 'graphql/language/location'; import * as Kind from 'graphql/language/kinds'; export { Kind }; @@ -271,7 +253,7 @@ declare module "graphql/language/ast" { * Contains a range of UTF-8 character offsets and token references that * identify the region of the source from which the AST derived. */ - type Location = { + export type Location = { /** * The character offset at which this Node begins. @@ -303,7 +285,7 @@ declare module "graphql/language/ast" { * Represents a range of characters represented by a lexical token * within a Source. */ - type Token = { + export type Token = { /** * The kind of Token. @@ -366,7 +348,7 @@ declare module "graphql/language/ast" { /** * The list of all possible AST node types. */ - type Node = Name + export type Node = Name | Document | OperationDefinition | VariableDefinition @@ -405,7 +387,7 @@ declare module "graphql/language/ast" { // Name - type Name = { + export type Name = { kind: 'Name'; loc?: Location; value: string; @@ -413,17 +395,17 @@ declare module "graphql/language/ast" { // Document - type Document = { + export type Document = { kind: 'Document'; loc?: Location; definitions: Array; } - type Definition = OperationDefinition + export type Definition = OperationDefinition | FragmentDefinition | TypeSystemDefinition // experimental non-spec addition. - type OperationDefinition = { + export type OperationDefinition = { kind: 'OperationDefinition'; loc?: Location; operation: OperationType; @@ -434,9 +416,9 @@ declare module "graphql/language/ast" { } // Note: subscription is an experimental non-spec addition. - type OperationType = 'query' | 'mutation' | 'subscription'; + export type OperationType = 'query' | 'mutation' | 'subscription'; - type VariableDefinition = { + export type VariableDefinition = { kind: 'VariableDefinition'; loc?: Location; variable: Variable; @@ -444,23 +426,23 @@ declare module "graphql/language/ast" { defaultValue?: Value; } - type Variable = { + export type Variable = { kind: 'Variable'; loc?: Location; name: Name; } - type SelectionSet = { + export type SelectionSet = { kind: 'SelectionSet'; loc?: Location; selections: Array; } - type Selection = Field + export type Selection = Field | FragmentSpread | InlineFragment - type Field = { + export type Field = { kind: 'Field'; loc?: Location; alias?: Name; @@ -470,7 +452,7 @@ declare module "graphql/language/ast" { selectionSet?: SelectionSet; } - type Argument = { + export type Argument = { kind: 'Argument'; loc?: Location; name: Name; @@ -480,14 +462,14 @@ declare module "graphql/language/ast" { // Fragments - type FragmentSpread = { + export type FragmentSpread = { kind: 'FragmentSpread'; loc?: Location; name: Name; directives?: Array; } - type InlineFragment = { + export type InlineFragment = { kind: 'InlineFragment'; loc?: Location; typeCondition?: NamedType; @@ -495,7 +477,7 @@ declare module "graphql/language/ast" { selectionSet: SelectionSet; } - type FragmentDefinition = { + export type FragmentDefinition = { kind: 'FragmentDefinition'; loc?: Location; name: Name; @@ -507,7 +489,7 @@ declare module "graphql/language/ast" { // Values - type Value = Variable + export type Value = Variable | IntValue | FloatValue | StringValue @@ -516,49 +498,49 @@ declare module "graphql/language/ast" { | ListValue | ObjectValue - type IntValue = { + export type IntValue = { kind: 'IntValue'; loc?: Location; value: string; } - type FloatValue = { + export type FloatValue = { kind: 'FloatValue'; loc?: Location; value: string; } - type StringValue = { + export type StringValue = { kind: 'StringValue'; loc?: Location; value: string; } - type BooleanValue = { + export type BooleanValue = { kind: 'BooleanValue'; loc?: Location; value: boolean; } - type EnumValue = { + export type EnumValue = { kind: 'EnumValue'; loc?: Location; value: string; } - type ListValue = { + export type ListValue = { kind: 'ListValue'; loc?: Location; values: Array; } - type ObjectValue = { + export type ObjectValue = { kind: 'ObjectValue'; loc?: Location; fields: Array; } - type ObjectField = { + export type ObjectField = { kind: 'ObjectField'; loc?: Location; name: Name; @@ -568,7 +550,7 @@ declare module "graphql/language/ast" { // Directives - type Directive = { + export type Directive = { kind: 'Directive'; loc?: Location; name: Name; @@ -578,23 +560,23 @@ declare module "graphql/language/ast" { // Type Reference - type Type = NamedType + export type Type = NamedType | ListType | NonNullType - type NamedType = { + export type NamedType = { kind: 'NamedType'; loc?: Location; name: Name; }; - type ListType = { + export type ListType = { kind: 'ListType'; loc?: Location; type: Type; } - type NonNullType = { + export type NonNullType = { kind: 'NonNullType'; loc?: Location; type: NamedType | ListType; @@ -602,40 +584,40 @@ declare module "graphql/language/ast" { // Type System Definition - type TypeSystemDefinition = SchemaDefinition + export type TypeSystemDefinition = SchemaDefinition | TypeDefinition | TypeExtensionDefinition | DirectiveDefinition - type SchemaDefinition = { + export type SchemaDefinition = { kind: 'SchemaDefinition'; loc?: Location; directives: Array; operationTypes: Array; } - type OperationTypeDefinition = { + export type OperationTypeDefinition = { kind: 'OperationTypeDefinition'; loc?: Location; operation: OperationType; type: NamedType; } - type TypeDefinition = ScalarTypeDefinition + export type TypeDefinition = ScalarTypeDefinition | ObjectTypeDefinition | InterfaceTypeDefinition | UnionTypeDefinition | EnumTypeDefinition | InputObjectTypeDefinition - type ScalarTypeDefinition = { + export type ScalarTypeDefinition = { kind: 'ScalarTypeDefinition'; loc?: Location; name: Name; directives?: Array; } - type ObjectTypeDefinition = { + export type ObjectTypeDefinition = { kind: 'ObjectTypeDefinition'; loc?: Location; name: Name; @@ -644,7 +626,7 @@ declare module "graphql/language/ast" { fields: Array; } - type FieldDefinition = { + export type FieldDefinition = { kind: 'FieldDefinition'; loc?: Location; name: Name; @@ -653,7 +635,7 @@ declare module "graphql/language/ast" { directives?: Array; } - type InputValueDefinition = { + export type InputValueDefinition = { kind: 'InputValueDefinition'; loc?: Location; name: Name; @@ -662,7 +644,7 @@ declare module "graphql/language/ast" { directives?: Array; } - type InterfaceTypeDefinition = { + export type InterfaceTypeDefinition = { kind: 'InterfaceTypeDefinition'; loc?: Location; name: Name; @@ -670,7 +652,7 @@ declare module "graphql/language/ast" { fields: Array; } - type UnionTypeDefinition = { + export type UnionTypeDefinition = { kind: 'UnionTypeDefinition'; loc?: Location; name: Name; @@ -678,7 +660,7 @@ declare module "graphql/language/ast" { types: Array; } - type EnumTypeDefinition = { + export type EnumTypeDefinition = { kind: 'EnumTypeDefinition'; loc?: Location; name: Name; @@ -686,14 +668,14 @@ declare module "graphql/language/ast" { values: Array; } - type EnumValueDefinition = { + export type EnumValueDefinition = { kind: 'EnumValueDefinition'; loc?: Location; name: Name; directives?: Array; } - type InputObjectTypeDefinition = { + export type InputObjectTypeDefinition = { kind: 'InputObjectTypeDefinition'; loc?: Location; name: Name; @@ -701,13 +683,13 @@ declare module "graphql/language/ast" { fields: Array; } - type TypeExtensionDefinition = { + export type TypeExtensionDefinition = { kind: 'TypeExtensionDefinition'; loc?: Location; definition: ObjectTypeDefinition; } - type DirectiveDefinition = { + export type DirectiveDefinition = { kind: 'DirectiveDefinition'; loc?: Location; name: Name; From 0b4ef9b4120472447623cc31aba54692df28f310 Mon Sep 17 00:00:00 2001 From: Karl-Aksel Puulmann Date: Fri, 28 Oct 2016 18:56:10 +0300 Subject: [PATCH 085/111] Bump toastr version to 2.1.3 (#12311) Adds support for escapeHtml, see https://github.com/CodeSeven/toastr/blob/master/CHANGELOG.md#new-features-1 --- toastr/toastr.d.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/toastr/toastr.d.ts b/toastr/toastr.d.ts index e921bfbd7b..33a739f52e 100644 --- a/toastr/toastr.d.ts +++ b/toastr/toastr.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Toastr 2.1.1 +// Type definitions for Toastr 2.1.3 // Project: https://github.com/CodeSeven/toastr // Definitions by: Boris Yankov // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -130,9 +130,13 @@ interface ToastrOptions { */ onclick?: () => void; /** - * Set if toastr should parse containing html + * Set if toastr should parse containing html **/ allowHtml?: boolean; + /** + * Set if toastr should escape html + **/ + escapeHtml?: boolean; } interface ToastrDisplayMethod { From ad261d041d385a0c64854ff7027715bd50fcd75b Mon Sep 17 00:00:00 2001 From: Caleb Meredith Date: Fri, 28 Oct 2016 12:01:37 -0400 Subject: [PATCH 086/111] Expose structural GraphQL types (#12142) * Expose structural GraphQL types https://github.com/DefinitelyTyped/DefinitelyTyped/pull/12078, but on the `master` branch. /cc @TonyPythoneer, @zhengbli * Update graphql.d.ts --- graphql/graphql.d.ts | 178 ++++++++++++------------------------------- 1 file changed, 47 insertions(+), 131 deletions(-) diff --git a/graphql/graphql.d.ts b/graphql/graphql.d.ts index 570fbe3a2f..c7310ab3cc 100644 --- a/graphql/graphql.d.ts +++ b/graphql/graphql.d.ts @@ -19,69 +19,7 @@ declare module "graphql" { // Create and operate on GraphQL type definitions and schema. - export { - GraphQLSchema, - - // Definitions - GraphQLScalarType, - GraphQLObjectType, - GraphQLInterfaceType, - GraphQLUnionType, - GraphQLEnumType, - GraphQLInputObjectType, - GraphQLList, - GraphQLNonNull, - GraphQLDirective, - - // "Enum" of Type Kinds - TypeKind, - - // "Enum" of Directive Locations - DirectiveLocation, - - // Scalars - GraphQLInt, - GraphQLFloat, - GraphQLString, - GraphQLBoolean, - GraphQLID, - - // Built-in Directives defined by the Spec - specifiedDirectives, - GraphQLIncludeDirective, - GraphQLSkipDirective, - GraphQLDeprecatedDirective, - - // Constant Deprecation Reason - DEFAULT_DEPRECATION_REASON, - - // Meta-field definitions. - SchemaMetaFieldDef, - TypeMetaFieldDef, - TypeNameMetaFieldDef, - - // GraphQL Types for introspection. - __Schema, - __Directive, - __DirectiveLocation, - __Type, - __Field, - __InputValue, - __EnumValue, - __TypeKind, - - // Predicates - isType, - isInputType, - isOutputType, - isLeafType, - isCompositeType, - isAbstractType, - - // Un-modifiers - getNullableType, - getNamedType, - } from 'graphql/type'; + export * from 'graphql/type'; // Parse and operate on GraphQL language source files. @@ -994,29 +932,7 @@ declare module "graphql/type/index" { // GraphQL Schema definition export { GraphQLSchema } from 'graphql/type/schema'; - export { - // Predicates - isType, - isInputType, - isOutputType, - isLeafType, - isCompositeType, - isAbstractType, - - // Un-modifiers - getNullableType, - getNamedType, - - // Definitions - GraphQLScalarType, - GraphQLObjectType, - GraphQLInterfaceType, - GraphQLUnionType, - GraphQLEnumType, - GraphQLInputObjectType, - GraphQLList, - GraphQLNonNull, - } from 'graphql/type/definition'; + export * from 'graphql/type/definition'; export { // "Enum" of Directive Locations @@ -1078,7 +994,7 @@ declare module "graphql/type/definition" { /** * These are all of the possible kinds of types. */ - type GraphQLType = + export type GraphQLType = GraphQLScalarType | GraphQLObjectType | GraphQLInterfaceType | @@ -1088,12 +1004,12 @@ declare module "graphql/type/definition" { GraphQLList | GraphQLNonNull; - function isType(type: any): boolean; + export function isType(type: any): type is GraphQLType; /** * These types may be used as input types for arguments and directives. */ - type GraphQLInputType = + export type GraphQLInputType = GraphQLScalarType | GraphQLEnumType | GraphQLInputObjectType | @@ -1105,12 +1021,12 @@ declare module "graphql/type/definition" { GraphQLList >; - function isInputType(type: GraphQLType): boolean; + export function isInputType(type: GraphQLType): type is GraphQLInputType; /** * These types may be used as output types as the result of fields. */ - type GraphQLOutputType = + export type GraphQLOutputType = GraphQLScalarType | GraphQLObjectType | GraphQLInterfaceType | @@ -1126,40 +1042,40 @@ declare module "graphql/type/definition" { GraphQLList >; - function isOutputType(type: GraphQLType): boolean; + export function isOutputType(type: GraphQLType): type is GraphQLOutputType; /** * These types may describe types which may be leaf values. */ - type GraphQLLeafType = + export type GraphQLLeafType = GraphQLScalarType | GraphQLEnumType; - function isLeafType(type: GraphQLType): boolean; + export function isLeafType(type: GraphQLType): type is GraphQLLeafType; /** * These types may describe the parent context of a selection set. */ - type GraphQLCompositeType = + export type GraphQLCompositeType = GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType; - function isCompositeType(type: GraphQLType): boolean; + export function isCompositeType(type: GraphQLType): type is GraphQLCompositeType; /** * These types may describe the parent context of a selection set. */ - type GraphQLAbstractType = + export type GraphQLAbstractType = GraphQLInterfaceType | GraphQLUnionType; - function isAbstractType(type: GraphQLType): boolean; + export function isAbstractType(type: GraphQLType): type is GraphQLAbstractType; /** * These types can all accept null as a value. */ - type GraphQLNullableType = + export type GraphQLNullableType = GraphQLScalarType | GraphQLObjectType | GraphQLInterfaceType | @@ -1168,14 +1084,14 @@ declare module "graphql/type/definition" { GraphQLInputObjectType | GraphQLList; - function getNullableType( + export function getNullableType( type: T ): (T & GraphQLNullableType); /** * These named types do not include modifiers like List or NonNull. */ - type GraphQLNamedType = + export type GraphQLNamedType = GraphQLScalarType | GraphQLObjectType | GraphQLInterfaceType | @@ -1183,7 +1099,7 @@ declare module "graphql/type/definition" { GraphQLEnumType | GraphQLInputObjectType; - function getNamedType(type: GraphQLType): GraphQLNamedType + export function getNamedType(type: GraphQLType): GraphQLNamedType /** * Used while defining GraphQL types to allow for circular references in @@ -1225,7 +1141,7 @@ declare module "graphql/type/definition" { toString(): string; } - interface GraphQLScalarTypeConfig { + export interface GraphQLScalarTypeConfig { name: string; description?: string; serialize: (value: any) => TInternal; @@ -1283,7 +1199,7 @@ declare module "graphql/type/definition" { // - interface GraphQLObjectTypeConfig { + export interface GraphQLObjectTypeConfig { name: string; interfaces?: Thunk>; fields: Thunk>; @@ -1291,26 +1207,26 @@ declare module "graphql/type/definition" { description?: string } - type GraphQLTypeResolveFn = ( + export type GraphQLTypeResolveFn = ( value: any, context: any, info: GraphQLResolveInfo ) => GraphQLObjectType; - type GraphQLIsTypeOfFn = ( + export type GraphQLIsTypeOfFn = ( source: any, context: any, info: GraphQLResolveInfo ) => boolean; - type GraphQLFieldResolveFn = ( + export type GraphQLFieldResolveFn = ( source: TSource, args: { [argName: string]: any }, context: any, info: GraphQLResolveInfo ) => any; - interface GraphQLResolveInfo { + export interface GraphQLResolveInfo { fieldName: string; fieldASTs: Array; returnType: GraphQLOutputType; @@ -1323,7 +1239,7 @@ declare module "graphql/type/definition" { variableValues: { [variableName: string]: any }; } - interface GraphQLFieldConfig { + export interface GraphQLFieldConfig { type: GraphQLOutputType; args?: GraphQLFieldConfigArgumentMap; resolve?: GraphQLFieldResolveFn; @@ -1331,21 +1247,21 @@ declare module "graphql/type/definition" { description?: string; } - interface GraphQLFieldConfigArgumentMap { + export interface GraphQLFieldConfigArgumentMap { [argName: string]: GraphQLArgumentConfig; } - interface GraphQLArgumentConfig { + export interface GraphQLArgumentConfig { type: GraphQLInputType; defaultValue?: any; description?: string; } - interface GraphQLFieldConfigMap { + export interface GraphQLFieldConfigMap { [fieldName: string]: GraphQLFieldConfig; } - interface GraphQLFieldDefinition { + export interface GraphQLFieldDefinition { name: string; description: string; type: GraphQLOutputType; @@ -1355,14 +1271,14 @@ declare module "graphql/type/definition" { deprecationReason: string; } - interface GraphQLArgument { + export interface GraphQLArgument { name: string; type: GraphQLInputType; defaultValue?: any; description?: string; } - interface GraphQLFieldDefinitionMap { + export interface GraphQLFieldDefinitionMap { [fieldName: string]: GraphQLFieldDefinition; } @@ -1396,7 +1312,7 @@ declare module "graphql/type/definition" { toString(): string; } - interface GraphQLInterfaceTypeConfig { + export interface GraphQLInterfaceTypeConfig { name: string, fields: Thunk>, /** @@ -1443,7 +1359,7 @@ declare module "graphql/type/definition" { toString(): string; } - interface GraphQLUnionTypeConfig { + export interface GraphQLUnionTypeConfig { name: string, types: Thunk>, /** @@ -1488,23 +1404,23 @@ declare module "graphql/type/definition" { toString(): string; } - interface GraphQLEnumTypeConfig { + export interface GraphQLEnumTypeConfig { name: string; values: GraphQLEnumValueConfigMap; description?: string; } - interface GraphQLEnumValueConfigMap { + export interface GraphQLEnumValueConfigMap { [valueName: string]: GraphQLEnumValueConfig; } - interface GraphQLEnumValueConfig { + export interface GraphQLEnumValueConfig { value?: any; deprecationReason?: string; description?: string; } - interface GraphQLEnumValueDefinition { + export interface GraphQLEnumValueDefinition { name: string; description: string; deprecationReason: string; @@ -1534,36 +1450,36 @@ declare module "graphql/type/definition" { class GraphQLInputObjectType { name: string; description: string; - constructor(config: InputObjectConfig); - getFields(): InputObjectFieldMap; + constructor(config: GraphQLInputObjectTypeConfig); + getFields(): GraphQLInputFieldDefinitionMap; toString(): string; } - interface InputObjectConfig { + export interface GraphQLInputObjectTypeConfig { name: string; - fields: Thunk; + fields: Thunk; description?: string; } - interface InputObjectFieldConfig { + export interface GraphQLInputFieldConfig { type: GraphQLInputType; defaultValue?: any; description?: string; } - interface InputObjectConfigFieldMap { - [fieldName: string]: InputObjectFieldConfig; + export interface GraphQLInputFieldConfigMap { + [fieldName: string]: GraphQLInputFieldConfig; } - interface InputObjectField { + export interface GraphQLInputFieldDefinition { name: string; type: GraphQLInputType; defaultValue?: any; description?: string; } - interface InputObjectFieldMap { - [fieldName: string]: InputObjectField; + export interface GraphQLInputFieldDefinitionMap { + [fieldName: string]: GraphQLInputFieldDefinition; } /** From 44be13ae844ec0721109542d5902e41438d72855 Mon Sep 17 00:00:00 2001 From: Tsvetomir Tsonev Date: Fri, 28 Oct 2016 19:10:07 +0300 Subject: [PATCH 087/111] feat: update Kendo UI definitions to 2016.3.1028 (#12316) --- kendo-ui/kendo-ui.d.ts | 176 ++++++++++++++++++++++++++--------------- 1 file changed, 111 insertions(+), 65 deletions(-) diff --git a/kendo-ui/kendo-ui.d.ts b/kendo-ui/kendo-ui.d.ts index ac6022ecd4..429bc00c12 100644 --- a/kendo-ui/kendo-ui.d.ts +++ b/kendo-ui/kendo-ui.d.ts @@ -1,4 +1,4 @@ -// Type definitions for Kendo UI Professional v2016.3.914 +// Type definitions for Kendo UI Professional v2016.3.1028 // Project: http://www.telerik.com/kendo-ui // Definitions by: Telerik // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -1112,7 +1112,7 @@ declare namespace kendo.data { } interface DataSourceFilterItem extends DataSourceFilter { - operator?: string; + operator?: string|Function; field?: string; value?: any; } @@ -1245,6 +1245,7 @@ declare namespace kendo.data { type?: string; change? (e: DataSourceChangeEvent): void; error?(e: DataSourceErrorEvent): void; + push?(e: DataSourcePushEvent): void; sync?(e: DataSourceEvent): void; requestStart?(e: DataSourceRequestStartEvent): void; requestEnd?(e: DataSourceRequestEndEvent): void; @@ -1274,6 +1275,12 @@ declare namespace kendo.data { node?: any; } + interface DataSourcePushEvent extends DataSourceEvent { + items?: DataSourceItemOrGroup[]; + type?: string; + + } + interface DataSourceErrorEvent extends DataSourceEvent { xhr: JQueryXHR; status: string; @@ -1480,6 +1487,7 @@ declare namespace kendo.mobile { statusBarStyle?: string; transition?: string; useNativeScrolling?: boolean; + init?(e: ApplicationEvent): void; } interface ApplicationEvent { @@ -1538,7 +1546,7 @@ declare namespace kendo.ui { static extend(proto: Object): AgendaView; } - class Alert extends kendo.ui.Widget { + class Alert extends kendo.ui.Dialog { static fn: Alert; @@ -2043,12 +2051,13 @@ declare namespace kendo.ui { } - class Confirm extends kendo.ui.Widget { + class Confirm extends kendo.ui.Dialog { static fn: Confirm; options: ConfirmOptions; + result: JQueryPromise; element: JQuery; wrapper: JQuery; @@ -2809,66 +2818,95 @@ declare namespace kendo.ui { } interface EditorMessages { - bold?: string; - italic?: string; - underline?: string; - strikethrough?: string; - superscript?: string; - subscript?: string; - justifyCenter?: string; - justifyLeft?: string; - justifyRight?: string; - justifyFull?: string; - insertUnorderedList?: string; - insertOrderedList?: string; - indent?: string; - outdent?: string; - createLink?: string; - unlink?: string; - insertImage?: string; - insertFile?: string; - insertHtml?: string; - viewHtml?: string; - fontName?: string; - fontNameInherit?: string; - fontSize?: string; - fontSizeInherit?: string; - formatBlock?: string; - formatting?: string; - foreColor?: string; - backColor?: string; - style?: string; - emptyFolder?: string; - uploadFile?: string; - editAreaTitle?: string; - orderBy?: string; - orderBySize?: string; - orderByName?: string; - invalidFileType?: string; - deleteFile?: string; - overwriteFile?: string; - directoryNotFound?: string; - imageWebAddress?: string; - imageAltText?: string; - imageWidth?: string; - imageHeight?: string; - fileWebAddress?: string; - fileTitle?: string; - linkWebAddress?: string; - linkText?: string; - linkToolTip?: string; - linkOpenInNewWindow?: string; - dialogUpdate?: string; - dialogInsert?: string; - dialogCancel?: string; - createTable?: string; - createTableHint?: string; + accessibilityTab?: string; addColumnLeft?: string; addColumnRight?: string; addRowAbove?: string; addRowBelow?: string; - deleteRow?: string; + alignCenter?: string; + alignCenterBottom?: string; + alignCenterMiddle?: string; + alignCenterTop?: string; + alignLeft?: string; + alignLeftBottom?: string; + alignLeftMiddle?: string; + alignLeftTop?: string; + alignRemove?: string; + alignRight?: string; + alignRightBottom?: string; + alignRightMiddle?: string; + alignRightTop?: string; + alignment?: string; + associateCellsWithHeaders?: string; + backColor?: string; + background?: string; + bold?: string; + border?: string; + style?: string; + caption?: string; + cellMargin?: string; + cellPadding?: string; + cellSpacing?: string; + cellTab?: string; + cleanFormatting?: string; + collapseBorders?: string; + columns?: string; + createLink?: string; + createTable?: string; + createTableHint?: string; + cssClass?: string; deleteColumn?: string; + deleteRow?: string; + dialogCancel?: string; + dialogInsert?: string; + dialogOk?: string; + dialogUpdate?: string; + editAreaTitle?: string; + fileTitle?: string; + fileWebAddress?: string; + fontName?: string; + fontNameInherit?: string; + fontSize?: string; + fontSizeInherit?: string; + foreColor?: string; + formatBlock?: string; + formatting?: string; + height?: string; + id?: string; + imageAltText?: string; + imageHeight?: string; + imageWebAddress?: string; + imageWidth?: string; + indent?: string; + insertFile?: string; + insertHtml?: string; + insertImage?: string; + insertOrderedList?: string; + insertUnorderedList?: string; + italic?: string; + justifyCenter?: string; + justifyFull?: string; + justifyLeft?: string; + justifyRight?: string; + linkOpenInNewWindow?: string; + linkText?: string; + linkToolTip?: string; + linkWebAddress?: string; + outdent?: string; + print?: string; + rows?: string; + selectAllCells?: string; + strikethrough?: string; + subscript?: string; + summary?: string; + superscript?: string; + tableTab?: string; + tableWizard?: string; + underline?: string; + unlink?: string; + viewHtml?: string; + width?: string; + wrapText?: string; } interface EditorPasteCleanup { @@ -5141,12 +5179,13 @@ declare namespace kendo.ui { } - class Prompt extends kendo.ui.Widget { + class Prompt extends kendo.ui.Dialog { static fn: Prompt; options: PromptOptions; + result: JQueryPromise; element: JQuery; wrapper: JQuery; @@ -5542,6 +5581,7 @@ declare namespace kendo.ui { minorTimeHeaderTemplate?: string|Function; selected?: boolean; selectedDateFormat?: string; + selectedShortDateFormat?: string; showWorkHours?: boolean; slotTemplate?: string|Function; startTime?: Date; @@ -6068,6 +6108,7 @@ declare namespace kendo.ui { comparerType?: string; dataType?: string; from?: string; + showButton?: boolean; to?: string; allowNulls?: boolean; messageTemplate?: string; @@ -6102,6 +6143,7 @@ declare namespace kendo.ui { cells?: SpreadsheetSheetRowCell[]; height?: number; index?: number; + type?: string; } interface SpreadsheetSheetSortColumn { @@ -7291,7 +7333,7 @@ declare namespace kendo.ui { destroy(): void; disable(): void; enable(enable?: boolean): void; - getFiles(): void; + getFiles(): any; removeAllFiles(): void; removeFile(): void; removeFileByUid(): void; @@ -7470,6 +7512,8 @@ declare namespace kendo.ui { content(content?: string): kendo.ui.Window; content(content?: JQuery): kendo.ui.Window; destroy(): void; + isMaximized(): boolean; + isMinimized(): boolean; maximize(): kendo.ui.Window; minimize(): kendo.ui.Window; open(): kendo.ui.Window; @@ -11017,7 +11061,6 @@ declare namespace kendo.dataviz.ui { autoBind?: boolean; axisDefaults?: ChartAxisDefaults; categoryAxis?: ChartCategoryAxisItem[]; - valueAxis?: ChartValueAxisItem[]; chartArea?: ChartChartArea; dataSource?: any|any|kendo.data.DataSource; legend?: ChartLegend; @@ -11033,6 +11076,7 @@ declare namespace kendo.dataviz.ui { title?: ChartTitle; tooltip?: ChartTooltip; transitions?: boolean; + valueAxis?: ChartValueAxisItem[]; xAxis?: ChartXAxisItem[]; yAxis?: ChartYAxisItem[]; zoomable?: boolean|ChartZoomable; @@ -16928,7 +16972,7 @@ declare namespace kendo { function bind(element: Element, viewModel: any, namespace?: any): void; function bind(element: Element, viewModel: kendo.data.ObservableObject, namespace?: any): void; function observableHierarchy(array: any): void; - function confirm(text: string): void; + function confirm(text: string): JQueryPromise; function culture(culture: string): void; function destroy(element: string): void; function destroy(element: JQuery): void; @@ -16939,7 +16983,7 @@ declare namespace kendo { function parseFloat(value: string, culture?: string): number; function parseInt(value: string, culture?: string): number; function parseColor(color: string, noerror: boolean): kendo.Color; - function prompt(text: string, defaultValue: string): void; + function prompt(text: string, defaultValue: string): JQueryPromise; function proxyModelSetters(): void; function proxyModelSetters(data: kendo.data.Model): void; function resize(element: string, force: boolean): void; @@ -16947,7 +16991,7 @@ declare namespace kendo { function resize(element: Element, force: boolean): void; function saveAs(options: any): void; function stringify(value: any): string; - function throttle(fn: Function, timeout: number): void; + function throttle(fn: Function, timeout: number): Function; function touchScroller(element: string): void; function touchScroller(element: JQuery): void; function touchScroller(element: Element): void; @@ -17032,6 +17076,8 @@ declare namespace kendo.spreadsheet { clear(options?: any): void; clearFilter(indices: any): void; clearFilter(indices: number): void; + editor(): string; + editor(value?: string): void; enable(): boolean; enable(value?: boolean): void; fillFrom(srcRange: Range, direction?: number): void; From c9999d4e97f660ea35c20f87506d4ee8074666f8 Mon Sep 17 00:00:00 2001 From: Tom Davidson Date: Tue, 1 Nov 2016 06:12:53 -0600 Subject: [PATCH 088/111] promises on putObject (#11923) --- aws-sdk/aws-sdk.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-sdk/aws-sdk.d.ts b/aws-sdk/aws-sdk.d.ts index 3fe8f65b0f..f484c5fdac 100644 --- a/aws-sdk/aws-sdk.d.ts +++ b/aws-sdk/aws-sdk.d.ts @@ -382,8 +382,8 @@ declare module "aws-sdk" { endpoint: Endpoint; getObject(params: s3.GetObjectRequest, callback?: (err: Error, data: any) => void): any; + putObject(params: s3.PutObjectRequest, callback?: (err: Error, data: any) => void): any; copyObject(params: s3.CopyObjectRequest, callback?: (err: Error, data: any) => void): any; - putObject(params: s3.PutObjectRequest, callback: (err: Error, data: any) => void): void; deleteObject(params: s3.DeleteObjectRequest, callback: (err: Error, data: any) => void): void; headObject(params: s3.HeadObjectRequest, callback: (err: Error, data: any) => void): void; getSignedUrl(operation: string, params: any): string; @@ -660,7 +660,7 @@ declare module "aws-sdk" { export interface DescribeStackResourcesParams { StackName?: string; // must specify either StackName or PhysicalResourceId - LogicalResourceId?: string; + LogicalResourceId?: string; PhysicalResourceId?: string; // must specify either StackName or PhysicalResourceId } From 300ed0bb42cf6f9894d7b9ad9e9b543097bd502e Mon Sep 17 00:00:00 2001 From: Till Wolff Date: Tue, 1 Nov 2016 13:19:32 +0100 Subject: [PATCH 089/111] added missing type for ReactSelectProps.value (#11964) --- react-select/react-select.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/react-select/react-select.d.ts b/react-select/react-select.d.ts index 8011122fed..c50d5f6883 100644 --- a/react-select/react-select.d.ts +++ b/react-select/react-select.d.ts @@ -298,7 +298,7 @@ declare namespace ReactSelect { /** * initial field value */ - value?: Option | Option[] | string | string[] | number | number[]; + value?: Option | Option[] | string | string[] | number | number[] | boolean; /** * the option property to use for the value * @default "value" From 0ad4edb4e86a936e4462a02f616730068d4de29d Mon Sep 17 00:00:00 2001 From: Fenying Date: Tue, 1 Nov 2016 20:25:56 +0800 Subject: [PATCH 090/111] Improvement to definitions of module async. (#12180) * Updated module async. 1. Added Dictionary for the collection APIs. 2. Fixed incorrected callback definition for some collection APIs. * Simplify some definitions of module async. * Fixed the callback type of async.someLimit. --- async/async-tests.ts | 354 +++++++++++++++++++++++++++++++++++++++++++ async/async.d.ts | 134 +++++++++------- 2 files changed, 431 insertions(+), 57 deletions(-) diff --git a/async/async-tests.ts b/async/async-tests.ts index 63640cecf6..67df5bae09 100644 --- a/async/async-tests.ts +++ b/async/async-tests.ts @@ -435,3 +435,357 @@ async.dir(function (name, callback) { callback(null, { hello: name }); }, 1000); }, "world"); + +// each + +async.each({ + "a": 1, + "b": 2 +}, function(val: number, next: ErrorCallback): void { + + setTimeout(function(): void { + + console.log(`async.each: ${val}`); + + next(); + + }, 500); + +}, function(err?: Error): void { + + console.log("async.each: done."); + +}); + +async.eachSeries({ + "a": 1, + "b": 2 +}, function(val: number, next: ErrorCallback): void { + + setTimeout(function(): void { + + console.log(`async.eachSeries: ${val}`); + + next(); + + }, 500); + +}, function(err?: Error): void { + + console.log("async.eachSeries: done."); + +}); + +async.eachLimit({ + "a": 1, + "b": 2, + "c": 3, + "d": 4, + "e": 5, + "f": 6 +}, 2, function(val: number, next: ErrorCallback): void { + + setTimeout(function(): void { + + console.log(`async.eachLimit: ${val}`); + + next(); + + }, 500); + +}, function(err?: Error): void { + + console.log("async.eachLimit: done."); + +}); + +// forEachOf/eachOf + +async.eachOf({ + "a": 1, + "b": 2 +}, function(val: number, key: string, next: ErrorCallback): void { + + setTimeout(function(): void { + + console.log(`async.forEachOf/eachOf: ${key} = ${val}`); + + next(); + + }, 500); + +}, function(err?: Error): void { + + console.log("async.forEachOf/eachOf: done."); + +}); + +async.forEachOfSeries({ + "a": 1, + "b": 2 +}, function(val: number, key: string, next: ErrorCallback): void { + + setTimeout(function(): void { + + console.log(`async.forEachOfSeries: ${key} = ${val}`); + + next(); + + }, 500); + +}, function(err?: Error): void { + + console.log("async.forEachOfSeries: done."); + +}); + +async.forEachOfLimit({ + "a": 1, + "b": 2, + "c": 3, + "d": 4, + "e": 5, + "f": 6 +}, 2, function(val: number, key: string, next: ErrorCallback): void { + + setTimeout(function(): void { + + console.log(`async.forEachOfLimit: ${key} = ${val}`); + + next(); + + }, 500); + +}, function(err?: Error): void { + + console.log("async.forEachOfLimit: done."); + +}); + +// map + +async.map({ + "a": 1, + "b": 2, + "c": 3 +}, function(val: number, next: AsyncResultCallback): void { + + setTimeout(function(): void { + + console.log(`async.map: ${val}`); + + next(null, val.toString()); + + }, 500); + +}, function(err: Error, results: string[]): void { + + console.log("async.map: done with results", results); + +}); + +async.mapSeries({ + "a": 1, + "b": 2, + "c": 3 +}, function(val: number, next: AsyncResultCallback): void { + + setTimeout(function(): void { + + console.log(`async.mapSeries: ${val}`); + + next(null, val.toString()); + + }, 500); + +}, function(err: Error, results: string[]): void { + + console.log("async.mapSeries: done with results", results); + +}); + +async.mapLimit({ + "a": 1, + "b": 2, + "c": 3, + "d": 4, + "e": 5, + "f": 6 +}, 2, function(val: number, next: AsyncResultCallback): void { + + setTimeout(function(): void { + + console.log(`async.mapLimit: ${val}`); + + next(null, val.toString()); + + }, 500); + +}, function(err: Error, results: string[]): void { + + console.log("async.mapLimit: done with results", results); + +}); + +// mapValues + +async.mapValues({ + "a": 1, + "b": 2, + "c": 3 +}, function(val: number, key: string, next: AsyncResultCallback): void { + + setTimeout(function(): void { + + console.log(`async.mapValues: ${key} = ${val}`); + + next(null, val.toString()); + + }, 500); + +}, function(err: Error, results: string[]): void { + + console.log("async.mapValues: done with results", results); + +}); + +async.mapValuesSeries({ + "a": 1, + "b": 2, + "c": 3 +}, function(val: number, key: string, next: AsyncResultCallback): void { + + setTimeout(function(): void { + + console.log(`async.mapValuesSeries: ${key} = ${val}`); + + next(null, val.toString()); + + }, 500); + +}, function(err: Error, results: string[]): void { + + console.log("async.mapValuesSeries: done with results", results); + +}); + +// filter/select/reject + +async.filter({ + "a": 1, + "b": 2, + "c": 3 +}, function(val: number, next: AsyncBooleanResultCallback): void { + + setTimeout(function(): void { + + console.log(`async.filter/select: ${val}`); + + next(null, val % 2 === 0); + + }, 500); + +}, function(err: Error, results: number[]): void { + + console.log("async.filter/select: done with results", results); + +}); + +async.reject({ + "a": 1, + "b": 2, + "c": 3 +}, function(val: number, next: AsyncBooleanResultCallback): void { + + setTimeout(function(): void { + + console.log(`async.reject: ${val}`); + + next(null, val % 2 === 0); + + }, 500); + +}, function(err: Error, results: number[]): void { + + console.log("async.reject: done with results", results); + +}); + +// concat + +async.concat({ + "a": "1", + "b": "2", + "c": "3" +}, function(item: string, next: AsyncResultCallback): void { + + console.log(`async.concat: ${item}`); + + next(null, [item, item, item]); + +}, function(err: Error, results: string[]) { + + console.log("async.concat: done with results", results); + +}); + +// detect/find + +async.detect({ + "a": 1, + "b": 2, + "c": 3 +}, function(item: number, next: AsyncBooleanResultCallback): void { + + console.log(`async.detect/find: ${item}`); + + next(null, item > 1); + +}, function(err: Error, result: number) { + + if (err) { + + console.log(err); + + } else { + + console.log("async.detect/find: done with result", result); + } + +}); + +// every/all + +async.every({ + "a": 1, + "b": 2, + "c": 3 +}, function(item: number, next: AsyncBooleanResultCallback): void { + + console.log(`async.every/all: ${item}`); + + next(null, item > 0); + +}, function(err: Error, result: boolean) { + + console.log("async.every/all: done with result", result); + +}); + +// some/any + +async.some({ + "a": 1, + "b": 2, + "c": 3 +}, function(item: number, next: AsyncBooleanResultCallback): void { + + console.log(`async.some/any: ${item}`); + + next(null, item > 2); + +}, function(err: Error, result: boolean) { + + console.log("async.some/any: done with result", result); + +}); diff --git a/async/async.d.ts b/async/async.d.ts index 96da35c1ea..8b564fbd80 100644 --- a/async/async.d.ts +++ b/async/async.d.ts @@ -1,11 +1,13 @@ // Type definitions for Async 2.0.1 // Project: https://github.com/caolan/async -// Definitions by: Boris Yankov , Arseniy Maximov , Joe Herman +// Definitions by: Boris Yankov , Arseniy Maximov , Joe Herman , Angus Fenying // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped interface Dictionary { [key: string]: T; } interface ErrorCallback { (err?: Error): void; } +interface AsyncWaterfallCallback { (err: Error, ...args: any[]): void; } +interface AsyncBooleanResultCallback { (err: Error, truthValue: boolean): void; } interface AsyncResultCallback { (err: Error, result: T): void; } interface AsyncResultArrayCallback { (err: Error, results: T[]): void; } interface AsyncResultObjectCallback { (err: Error, results: Dictionary): void; } @@ -15,7 +17,7 @@ interface AsyncIterator { (item: T, callback: ErrorCallback): void; } interface AsyncForEachOfIterator { (item: T, key: number|string, callback: ErrorCallback): void; } interface AsyncResultIterator { (item: T, callback: AsyncResultCallback): void; } interface AsyncMemoIterator { (memo: R, item: T, callback: AsyncResultCallback): void; } -interface AsyncBooleanIterator { (item: T, callback: (err: string, truthValue: boolean) => void): void; } +interface AsyncBooleanIterator { (item: T, callback: AsyncBooleanResultCallback): void; } interface AsyncWorker { (task: T, callback: ErrorCallback): void; } interface AsyncVoidFunction { (callback: ErrorCallback): void; } @@ -89,52 +91,74 @@ interface Async { // Collections each(arr: T[], iterator: AsyncIterator, callback?: ErrorCallback): void; - eachSeries(arr: T[], iterator: AsyncIterator, callback?: ErrorCallback): void; + each(arr: Dictionary, iterator: AsyncIterator, callback?: ErrorCallback): void; + eachSeries: typeof async.each; eachLimit(arr: T[], limit: number, iterator: AsyncIterator, callback?: ErrorCallback): void; - forEachOf(obj: any, iterator: (item: any, key: string|number, callback?: ErrorCallback) => void, callback: ErrorCallback): void; + eachLimit(arr: Dictionary, limit: number, iterator: AsyncIterator, callback?: ErrorCallback): void; + forEach: typeof async.each; + forEachSeries: typeof async.each; + forEachLimit: typeof async.eachLimit; forEachOf(obj: T[], iterator: AsyncForEachOfIterator, callback?: ErrorCallback): void; - forEachOfSeries(obj: any, iterator: (item: any, key: string|number, callback?: ErrorCallback) => void, callback: ErrorCallback): void; - forEachOfSeries(obj: T[], iterator: AsyncForEachOfIterator, callback?: ErrorCallback): void; - forEachOfLimit(obj: any, limit: number, iterator: (item: any, key: string|number, callback?: ErrorCallback) => void, callback: ErrorCallback): void; + forEachOf(obj: Dictionary, iterator: AsyncForEachOfIterator, callback?: ErrorCallback): void; + forEachOfSeries: typeof async.forEachOf; forEachOfLimit(obj: T[], limit: number, iterator: AsyncForEachOfIterator, callback?: ErrorCallback): void; - map(arr: T[], iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): any; - mapSeries(arr: T[], iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): any; - mapLimit(arr: T[], limit: number, iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): any; - mapValuesLimit(obj: {[name: string]: T}, limit: number, iteratee: (value: string, key: T, callback: AsyncResultCallback) => void, callback: AsyncResultCallback): void; - mapValues(obj: {[name: string]: T}, iteratee: (value: string, key: T, callback: AsyncResultCallback) => void, callback: AsyncResultCallback): void; + forEachOfLimit(obj: Dictionary, limit: number, iterator: AsyncForEachOfIterator, callback?: ErrorCallback): void; + eachOf: typeof async.forEachOf; + eachOfSeries: typeof async.forEachOf; + eachOfLimit: typeof async.forEachOfLimit; + map(arr: T[], iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): void; + map(arr: Dictionary, iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): void; + mapSeries: typeof async.map; + mapLimit(arr: T[], limit: number, iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): void; + mapLimit(arr: Dictionary, limit: number, iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): void; + mapValuesLimit(obj: Dictionary, limit: number, iteratee: (value: T, key: string, callback: AsyncResultCallback) => void, callback: AsyncResultCallback): void; + mapValues(obj: Dictionary, iteratee: (value: T, key: string, callback: AsyncResultCallback) => void, callback: AsyncResultCallback): void; mapValuesSeries: typeof async.mapValues; - filter(arr: T[], iterator: AsyncBooleanIterator, callback?: AsyncResultArrayCallback): any; - select(arr: T[], iterator: AsyncBooleanIterator, callback?: AsyncResultArrayCallback): any; - filterSeries(arr: T[], iterator: AsyncBooleanIterator, callback?: AsyncResultArrayCallback): any; - selectSeries(arr: T[], iterator: AsyncBooleanIterator, callback?: AsyncResultArrayCallback): any; - filterLimit(arr: T[], limit: number, iterator: AsyncBooleanIterator, callback?: AsyncResultArrayCallback): any; - selectLimit(arr: T[], limit: number, iterator: AsyncBooleanIterator, callback?: AsyncResultArrayCallback): any; - reject(arr: T[], iterator: AsyncBooleanIterator, callback?: AsyncResultArrayCallback): any; - rejectSeries(arr: T[], iterator: AsyncBooleanIterator, callback?: AsyncResultArrayCallback): any; - rejectLimit(arr: T[], limit: number, iterator: AsyncBooleanIterator, callback?: AsyncResultArrayCallback): any; - reduce(arr: T[], memo: R, iterator: AsyncMemoIterator, callback?: AsyncResultCallback): any; - inject(arr: T[], memo: R, iterator: AsyncMemoIterator, callback?: AsyncResultCallback): any; - foldl(arr: T[], memo: R, iterator: AsyncMemoIterator, callback?: AsyncResultCallback): any; - reduceRight(arr: T[], memo: R, iterator: AsyncMemoIterator, callback: AsyncResultCallback): any; - foldr(arr: T[], memo: R, iterator: AsyncMemoIterator, callback: AsyncResultCallback): any; - detect(arr: T[], iterator: AsyncBooleanIterator, callback?: AsyncResultCallback): any; + filter(arr: T[], iterator: AsyncBooleanIterator, callback?: AsyncResultArrayCallback): void; + filter(arr: Dictionary, iterator: AsyncBooleanIterator, callback?: AsyncResultArrayCallback): void; + filterSeries: typeof async.filter; + filterLimit(arr: T[], limit: number, iterator: AsyncBooleanIterator, callback?: AsyncResultArrayCallback): void; + filterLimit(arr: Dictionary, limit: number, iterator: AsyncBooleanIterator, callback?: AsyncResultArrayCallback): void; + select: typeof async.filter; + selectSeries: typeof async.filter; + selectLimit: typeof async.filterLimit; + reject: typeof async.filter; + rejectSeries: typeof async.filter; + rejectLimit: typeof async.filterLimit; + reduce(arr: T[], memo: R, iterator: AsyncMemoIterator, callback?: AsyncResultCallback): void; + inject: typeof async.reduce; + foldl: typeof async.reduce; + reduceRight: typeof async.reduce; + foldr: typeof async.reduce; + detect(arr: T[], iterator: AsyncBooleanIterator, callback?: AsyncResultCallback): void; + detect(arr: Dictionary, iterator: AsyncBooleanIterator, callback?: AsyncResultCallback): void; + detectSeries: typeof async.detect; + detectLimit(arr: T[], limit: number, iterator: AsyncBooleanIterator, callback?: AsyncResultCallback): void; + detectLimit(arr: Dictionary, limit: number, iterator: AsyncBooleanIterator, callback?: AsyncResultCallback): void; find: typeof async.detect; - detectSeries(arr: T[], iterator: AsyncBooleanIterator, callback?: AsyncResultCallback): any; - findSeries: typeof async.detectSeries; - detectLimit(arr: T[], limit: number, iterator: AsyncBooleanIterator, callback?: AsyncResultCallback): any; + findSeries: typeof async.detect; findLimit: typeof async.detectLimit; - sortBy(arr: T[], iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): any; - some(arr: T[], iterator: AsyncBooleanIterator, callback?: (result: boolean) => void): any; - someLimit(arr: T[], limit: number, iterator: AsyncBooleanIterator, callback?: (result: boolean) => void): any; - anyLimit: typeof async.someLimit; - someSeries(arr: T[], iterator: AsyncBooleanIterator, callback?: (result: boolean) => void): any; + sortBy(arr: T[], iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): void; + some(arr: T[], iterator: AsyncBooleanIterator, callback?: AsyncBooleanResultCallback): void; + some(arr: Dictionary, iterator: AsyncBooleanIterator, callback?: AsyncBooleanResultCallback): void; + someSeries: typeof async.some; + someLimit(arr: T[], limit: number, iterator: AsyncBooleanIterator, callback?: AsyncBooleanResultCallback): void; + someLimit(arr: Dictionary, limit: number, iterator: AsyncBooleanIterator, callback?: AsyncBooleanResultCallback): void; + any: typeof async.some; anySeries: typeof async.someSeries; - any(arr: T[], iterator: AsyncBooleanIterator, callback?: (result: boolean) => void): any; - every(arr: T[], iterator: AsyncBooleanIterator, callback?: (result: boolean) => any): any; - everyLimit(arr: T[], limit: number, iterator: AsyncBooleanIterator, callback?: (result: boolean) => any): any; - all(arr: T[], iterator: AsyncBooleanIterator, callback?: (result: boolean) => any): any; - concat(arr: T[], iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): any; - concatSeries(arr: T[], iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): any; + anyLimit: typeof async.someLimit; + every(arr: T[], iterator: AsyncBooleanIterator, callback?: AsyncBooleanResultCallback): void; + every(arr: Dictionary, iterator: AsyncBooleanIterator, callback?: AsyncBooleanResultCallback): void; + everySeries: typeof async.every; + everyLimit(arr: T[], limit: number, iterator: AsyncBooleanIterator, callback?: AsyncBooleanResultCallback): void; + everyLimit(arr: Dictionary, limit: number, iterator: AsyncBooleanIterator, callback?: AsyncBooleanResultCallback): void; + all: typeof async.every; + allSeries: typeof async.every; + allLimit: typeof async.everyLimit; + + concat(arr: T[], iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): void; + concat(arr: Dictionary, iterator: AsyncResultIterator, callback?: AsyncResultArrayCallback): void; + concatSeries: typeof async.concat; // Control Flow series(tasks: AsyncFunction[], callback?: AsyncResultArrayCallback): void; @@ -143,14 +167,14 @@ interface Async { parallel(tasks: Dictionary>, callback?: AsyncResultObjectCallback): void; parallelLimit(tasks: Array>, limit: number, callback?: AsyncResultArrayCallback): void; parallelLimit(tasks: Dictionary>, limit: number, callback?: AsyncResultObjectCallback): void; - whilst(test: () => boolean, fn: AsyncVoidFunction, callback: (err: any) => void): void; - doWhilst(fn: AsyncVoidFunction, test: () => boolean, callback: (err: any) => void): void; - until(test: () => boolean, fn: AsyncVoidFunction, callback: (err: any) => void): void; - doUntil(fn: AsyncVoidFunction, test: () => boolean, callback: (err: any) => void): void; - during(test: (testCallback : (error: Error, truth: boolean) => void) => void, fn: AsyncVoidFunction, callback: (err: any) => void): void; - doDuring(fn: AsyncVoidFunction, test: (testCallback: (error: Error, truth: boolean) => void) => void, callback: (err: any) => void): void; - forever(next: (errCallback : (err: Error) => void) => void, errBack: (err: Error) => void) : void; - waterfall(tasks: Function[], callback?: (err: Error, results?: any) => void): void; + whilst(test: () => boolean, fn: AsyncVoidFunction, callback: ErrorCallback): void; + doWhilst(fn: AsyncVoidFunction, test: () => boolean, callback: ErrorCallback): void; + until(test: () => boolean, fn: AsyncVoidFunction, callback: ErrorCallback): void; + doUntil(fn: AsyncVoidFunction, test: () => boolean, callback: ErrorCallback): void; + during(test: (testCallback : AsyncBooleanResultCallback) => void, fn: AsyncVoidFunction, callback: ErrorCallback): void; + doDuring(fn: AsyncVoidFunction, test: (testCallback: AsyncBooleanResultCallback) => void, callback: ErrorCallback): void; + forever(next: (next : ErrorCallback) => void, errBack: ErrorCallback) : void; + waterfall(tasks: Function[], callback?: AsyncResultCallback): void; compose(...fns: Function[]): Function; seq(...fns: Function[]): Function; applyEach(fns: Function[], argsAndCallback: any[]): void; // applyEach(fns, args..., callback). TS does not support ... for a middle argument. Callback is optional. @@ -158,19 +182,15 @@ interface Async { queue(worker: AsyncWorker, concurrency?: number): AsyncQueue; priorityQueue(worker: AsyncWorker, concurrency: number): AsyncPriorityQueue; cargo(worker : (tasks: any[], callback : ErrorCallback) => void, payload? : number) : AsyncCargo; - auto(tasks: any, concurrency?: number, callback?: (error: Error, results: any) => void): void; - autoInject(tasks: any, callback?: (error: Error, results: any) => void): void; - retry(opts: number, task: (callback : AsyncResultCallback, results: any) => void, callback: (error: Error, results: any) => void): void; - retry(opts: { times: number, interval: number|((retryCount: number) => number) }, task: (callback: AsyncResultCallback, results : any) => void, callback: (error: Error, results: any) => void): void; + auto(tasks: any, concurrency?: number, callback?: AsyncResultCallback): void; + autoInject(tasks: any, callback?: AsyncResultCallback): void; + retry(opts: number, task: (callback : AsyncResultCallback, results: any) => void, callback: AsyncResultCallback): void; + retry(opts: { times: number, interval: number|((retryCount: number) => number) }, task: (callback: AsyncResultCallback, results : any) => void, callback: AsyncResultCallback): void; retryable(opts: number | {times: number, interval: number}, task: AsyncFunction): AsyncFunction; apply(fn: Function, ...arguments: any[]): AsyncFunction; nextTick(callback: Function, ...args: any[]): void; setImmediate: typeof async.nextTick; - allLimit(arr: T[], limit: number, iteratee: AsyncBooleanIterator, cb?: (result: boolean) => any) : any; - everySeries(arr: T[], iteratee: AsyncBooleanIterator, cb?: (result: boolean) => any) : any - allSeries: typeof async.everySeries; - reflect(fn: AsyncFunction) : (callback: (err: void, result: {error?: Error, value?: T}) => void) => void; reflectAll(tasks: AsyncFunction[]): ((callback: (err: void, result: {error?: Error, value?: T}) => void) => void)[]; From a8ecb3be1dfaf898cd95bdf40529ade758781365 Mon Sep 17 00:00:00 2001 From: "Dmitry A. Efimenko" Date: Tue, 1 Nov 2016 05:41:02 -0700 Subject: [PATCH 091/111] inquirer - make sure methods don't conflict (#12247) * add prompt() override returning promise according to [docs](https://www.npmjs.com/package/inquirer#inquirerpromptquestions---promise) * made sure there won't be conflicts * Revert "made sure there won't be conflicts" This reverts commit 0281989a3826e2b57fcd4e355d899ebd11604153. * Revert "add prompt() override returning promise" This reverts commit b5094ce38d78fc40c59653926711de2b297105cf. * resolve method conflicts --- inquirer/inquirer.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inquirer/inquirer.d.ts b/inquirer/inquirer.d.ts index 2abd6e6d53..c0f45a58ba 100644 --- a/inquirer/inquirer.d.ts +++ b/inquirer/inquirer.d.ts @@ -32,7 +32,7 @@ declare module "inquirer" { * @param cb Callback being passed the user answers * @return */ - prompt(questions: Questions, cb?: (answers: Answers) => any): ui.Prompt; + prompt(questions: Questions, cb: (answers: Answers) => any): ui.Prompt; prompt(questions: Questions): Promise; prompts: Prompts; Separator: objects.SeparatorStatic; From 0b5e88ac7064beb23f379bd4837e0b20356810a6 Mon Sep 17 00:00:00 2001 From: Georgii Dolzhykov Date: Tue, 1 Nov 2016 14:49:50 +0200 Subject: [PATCH 092/111] angularjs: as a shortcut, directives can be defined with just the linking function (#12144) See https://docs.angularjs.org/api/ng/service/$compile "You can either return a Directive Definition Object (see below) that defines the directive properties, or just the postLink function (all other properties will have the default values)." --- angularjs/angular-tests.ts | 21 +++++++++++++++++++-- angularjs/angular.d.ts | 7 +++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/angularjs/angular-tests.ts b/angularjs/angular-tests.ts index 6b5e5580a7..0b0314b7d6 100644 --- a/angularjs/angular-tests.ts +++ b/angularjs/angular-tests.ts @@ -192,8 +192,25 @@ mod.controller({ MyCtrl2: function() {}, MyCtrl3: ['$fooService', function($fooService: any) { }] }); -mod.directive('name', function ($scope: ng.IScope) { }) -mod.directive('name', ['$scope', function ($scope: ng.IScope) { }]) +mod.directive('myDirectiveA', ($rootScope: ng.IRootScopeService) => { + return (scope, el, attrs) => { + let foo = 'none'; + el.click(e => { + foo = e.type; + $rootScope.$apply(); + }); + scope.$watch(() => foo, () => el.text(foo)); + }; +}); +mod.directive('myDirectiveB', ['$rootScope', function ($rootScope: ng.IRootScopeService) { + return { + link(scope, el, attrs) { + el.click(e => { + el.hide(); + }); + } + }; +}]); mod.directive({ myFooDir: () => ({ template: 'my-foo-dir.tpl.html' diff --git a/angularjs/angular.d.ts b/angularjs/angular.d.ts index 0e3e1b214e..b16438bdcb 100644 --- a/angularjs/angular.d.ts +++ b/angularjs/angular.d.ts @@ -1770,7 +1770,7 @@ declare namespace angular { /////////////////////////////////////////////////////////////////////////// interface IDirectiveFactory { - (...args: any[]): IDirective; + (...args: any[]): IDirective | IDirectiveLinkFn; } interface IDirectiveLinkFn { @@ -1778,8 +1778,8 @@ declare namespace angular { scope: IScope, instanceElement: JQuery, instanceAttributes: IAttributes, - controller: {}, - transclude: ITranscludeFunction + controller?: IController | IController[] | {[key: string]: IController}, + transclude?: ITranscludeFunction ): void; } @@ -1807,7 +1807,6 @@ declare namespace angular { controller?: string | Injectable; controllerAs?: string; /** - * @deprecated * Deprecation warning: although bindings for non-ES6 class controllers are currently bound to this before * the controller constructor is called, this use is now deprecated. Please place initialization code that * relies upon bindings inside a $onInit method on the controller, instead. From 3827cbea3f48b526ba9f6d86582b92d1e2594950 Mon Sep 17 00:00:00 2001 From: sqwk Date: Tue, 1 Nov 2016 14:26:33 +0100 Subject: [PATCH 093/111] Add Preliminary Tests --- paper/paper-tests.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/paper/paper-tests.ts b/paper/paper-tests.ts index 8e011255a2..48a82524d8 100644 --- a/paper/paper-tests.ts +++ b/paper/paper-tests.ts @@ -1 +1,38 @@ /// + +import paper = require('paper'); + +var canvas = document.createElement('canvas') + +paper.setup(canvas); + +// Circle +var path = paper.Path.Circle({ + center: [80, 50], + radius: 35, + fillColor: 'red' +}); + +// Dotted Line Tool +var dottedLinePath: paper.Path; +var dottedLineTool = new paper.Tool(); + +dottedLineTool.onMouseDown = function(event: any) { + new paper.Layer().activate(); + dottedLinePath = new paper.Path(); + dottedLinePath.strokeColor = '#00'; + dottedLinePath.strokeWidth = 2; + dottedLinePath.dashArray = [5, 8]; + dottedLinePath.strokeCap = 'round'; + dottedLinePath.strokeJoin = 'round'; + dottedLinePath.add(event.point); +}; + +dottedLineTool.onMouseDrag = function(event: any) { + dottedLinePath.add(event.point); +}; + +dottedLineTool.onMouseUp = function(event: any) { + dottedLinePath.smooth(); + dottedLinePath.simplify(); +}; From eaaf036c78f7e15959fa21ba1b028f830f4871ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isidro=20Mart=C3=ADnez?= Date: Tue, 1 Nov 2016 07:34:57 -0600 Subject: [PATCH 094/111] add supported types by jQuery selector (#11967) Actually jQuery supports multiple selector types see: http://api.jquery.com/jquery --- angular-protractor/angular-protractor.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/angular-protractor/angular-protractor.d.ts b/angular-protractor/angular-protractor.d.ts index d33eeddace..b05eda4a13 100644 --- a/angular-protractor/angular-protractor.d.ts +++ b/angular-protractor/angular-protractor.d.ts @@ -1829,8 +1829,8 @@ declare namespace protractor { function wrapDriver(webdriver: webdriver.WebDriver, opt_baseUrl?: string, opt_rootElement?: string): Protractor; } -interface cssSelectorHelper { - (cssLocator: string): protractor.ElementFinder; +interface selectorHelper { + (cssLocator: string | Function | HTMLElement | Document | Array): protractor.ElementFinder; } interface cssArraySelectorHelper { @@ -1841,7 +1841,7 @@ declare var browser: protractor.IBrowser; declare var by: protractor.IProtractorLocatorStrategy; declare var By: protractor.IProtractorLocatorStrategy; declare var element: protractor.Element; -declare var $: cssSelectorHelper; +declare var $: selectorHelper; declare var $$: cssArraySelectorHelper; declare module 'protractor' { From 769e7894540064a33ef43c3f420d0bf4092820f4 Mon Sep 17 00:00:00 2001 From: Leo Rudberg Date: Tue, 1 Nov 2016 10:00:44 -0400 Subject: [PATCH 095/111] Fix ordering of Server.listen definitions (#12399) The version of `Server.listen` that takes a `ListenOptions` as the first argument should come before the versions that take `any` as the first argument. For example, even if a `ListenOptions` object is given, VSCode will assume it is `any` in its helper text. I find that not as preferable for type-safety reasons ( avoid all `any`s ;) ). --- node/node.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node/node.d.ts b/node/node.d.ts index 61132b9232..1766a854a3 100644 --- a/node/node.d.ts +++ b/node/node.d.ts @@ -1933,9 +1933,9 @@ declare module "net" { listen(port: number, listeningListener?: Function): Server; listen(path: string, backlog?: number, listeningListener?: Function): Server; listen(path: string, listeningListener?: Function): Server; + listen(options: ListenOptions, listeningListener?: Function): Server; listen(handle: any, backlog?: number, listeningListener?: Function): Server; listen(handle: any, listeningListener?: Function): Server; - listen(options: ListenOptions, listeningListener?: Function): Server; close(callback?: Function): Server; address(): { port: number; family: string; address: string; }; getConnections(cb: (error: Error, count: number) => void): void; From 423675cf5f904cf5d9bfd17b8f9f33a5a37b710a Mon Sep 17 00:00:00 2001 From: Linda_pp Date: Wed, 2 Nov 2016 22:40:01 +0900 Subject: [PATCH 096/111] New reference path for 'electron' directory (#12396) --- .../electron-devtools-installer-tests.ts | 4 ++-- electron-json-storage/electron-json-storage-tests.ts | 2 +- electron-notifications/electron-notifications.d.ts | 4 ++-- electron-notify/electron-notify.d.ts | 4 ++-- electron-window-state/electron-window-state.d.ts | 2 +- menubar/menubar.d.ts | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/electron-devtools-installer/electron-devtools-installer-tests.ts b/electron-devtools-installer/electron-devtools-installer-tests.ts index daf19a1daf..fd2ea2cc1e 100644 --- a/electron-devtools-installer/electron-devtools-installer-tests.ts +++ b/electron-devtools-installer/electron-devtools-installer-tests.ts @@ -1,4 +1,4 @@ -/// +/// /// import installExtension, { @@ -17,4 +17,4 @@ installExtension(ANGULARJS_BATARANG); installExtension(VUEJS_DEVTOOLS); installExtension(REDUX_DEVTOOLS); installExtension(REACT_PERF); -installExtension('abcdefghijkl'); \ No newline at end of file +installExtension('abcdefghijkl'); diff --git a/electron-json-storage/electron-json-storage-tests.ts b/electron-json-storage/electron-json-storage-tests.ts index 3a0c43bce1..8f75d5908b 100644 --- a/electron-json-storage/electron-json-storage-tests.ts +++ b/electron-json-storage/electron-json-storage-tests.ts @@ -1,4 +1,4 @@ -/// +/// /// import electron = require('electron'); diff --git a/electron-notifications/electron-notifications.d.ts b/electron-notifications/electron-notifications.d.ts index 5cbb655246..e0235d6e63 100644 --- a/electron-notifications/electron-notifications.d.ts +++ b/electron-notifications/electron-notifications.d.ts @@ -3,7 +3,7 @@ // Definitions by: Daniel Pereira // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -/// +/// declare namespace ElectronNotifications { @@ -38,4 +38,4 @@ declare namespace ElectronNotifications { /** A node module for sending notifications in electron applications */ declare module 'electron-notifications' { export function notify(title: string, data?: ElectronNotifications.NotifierOptions): ElectronNotifications.NotificationWindow; -} \ No newline at end of file +} diff --git a/electron-notify/electron-notify.d.ts b/electron-notify/electron-notify.d.ts index b29efa0e50..316ee79e4d 100644 --- a/electron-notify/electron-notify.d.ts +++ b/electron-notify/electron-notify.d.ts @@ -3,7 +3,7 @@ // Definitions by: Daniel Pereira // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -/// +/// /** Nice and simple notifications for electron apps */ declare module 'electron-notify' { @@ -61,4 +61,4 @@ declare module 'electron-notify' { export function setTemplatePath(path: string): void; -} \ No newline at end of file +} diff --git a/electron-window-state/electron-window-state.d.ts b/electron-window-state/electron-window-state.d.ts index dfcb297e4f..45fce5edaf 100644 --- a/electron-window-state/electron-window-state.d.ts +++ b/electron-window-state/electron-window-state.d.ts @@ -3,7 +3,7 @@ // Definitions by: rhysd // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -/// +/// declare namespace ElectronWindowState { interface WindowState { diff --git a/menubar/menubar.d.ts b/menubar/menubar.d.ts index 678207fb78..bb20201bfc 100644 --- a/menubar/menubar.d.ts +++ b/menubar/menubar.d.ts @@ -3,7 +3,7 @@ // Definitions by: rhysd // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -/// +/// /// declare namespace Menubar { From a9a732cb4d68d2fb46313a3ab07114c9bddb03b8 Mon Sep 17 00:00:00 2001 From: John Vilk Date: Wed, 2 Nov 2016 10:33:27 -0400 Subject: [PATCH 097/111] [Node] errno is a number, not a string. (#11890) --- node/node-tests.ts | 2 +- node/node.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/node/node-tests.ts b/node/node-tests.ts index 0025505e67..99a728ab92 100644 --- a/node/node-tests.ts +++ b/node/node-tests.ts @@ -179,7 +179,7 @@ namespace fs_tests { } { - var errno: string; + var errno: number; fs.readFile('testfile', (err, data) => { if (err && err.errno) { errno = err.errno; diff --git a/node/node.d.ts b/node/node.d.ts index 1766a854a3..9abffa79e3 100644 --- a/node/node.d.ts +++ b/node/node.d.ts @@ -233,7 +233,7 @@ declare var Buffer: { ************************************************/ declare namespace NodeJS { export interface ErrnoException extends Error { - errno?: string; + errno?: number; code?: string; path?: string; syscall?: string; From 323168508789eeaade1984d184cc5088f7787149 Mon Sep 17 00:00:00 2001 From: TonyYang Date: Wed, 2 Nov 2016 22:39:31 +0800 Subject: [PATCH 098/111] Add a method (#12430) --- mongodb/mongodb.d.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mongodb/mongodb.d.ts b/mongodb/mongodb.d.ts index 8254701033..b64868b93f 100644 --- a/mongodb/mongodb.d.ts +++ b/mongodb/mongodb.d.ts @@ -428,6 +428,8 @@ declare module "mongodb" { getTimestamp(): Date; // Returns the ObjectID id as a 24 byte hex string representation toHexString(): string; + // Returns the ObjectID id as a 24 byte hex string representation + toString(): string; } // Class documentation : http://mongodb.github.io/node-mongodb-native/2.1/api/Binary.html From baadc0b1309dbd75b25bac04bbee67976e2fbd17 Mon Sep 17 00:00:00 2001 From: TANAKA Koichi Date: Thu, 3 Nov 2016 00:21:54 +0900 Subject: [PATCH 099/111] Add prompt sync (#12412) * Add definition for prompt-sync * Add definition for prompt-sync-history --- .../prompt-sync-history-tests.ts | 12 +++ prompt-sync-history/prompt-sync-history.d.ts | 15 ++++ prompt-sync/prompt-sync-tests.ts | 55 ++++++++++++++ prompt-sync/prompt-sync.d.ts | 75 +++++++++++++++++++ 4 files changed, 157 insertions(+) create mode 100644 prompt-sync-history/prompt-sync-history-tests.ts create mode 100644 prompt-sync-history/prompt-sync-history.d.ts create mode 100644 prompt-sync/prompt-sync-tests.ts create mode 100644 prompt-sync/prompt-sync.d.ts diff --git a/prompt-sync-history/prompt-sync-history-tests.ts b/prompt-sync-history/prompt-sync-history-tests.ts new file mode 100644 index 0000000000..2132f8166f --- /dev/null +++ b/prompt-sync-history/prompt-sync-history-tests.ts @@ -0,0 +1,12 @@ +/// +/// +'use strict'; + +import * as promptHistory from 'prompt-sync-history'; +import * as PromptSync from 'prompt-sync'; + +let history:PromptSync.History; + +history = promptHistory(); +history = promptHistory('/path/to/file'); +history = promptHistory(null, 1000); diff --git a/prompt-sync-history/prompt-sync-history.d.ts b/prompt-sync-history/prompt-sync-history.d.ts new file mode 100644 index 0000000000..6b343fbb51 --- /dev/null +++ b/prompt-sync-history/prompt-sync-history.d.ts @@ -0,0 +1,15 @@ +// Type definitions for prompt-sync-history 1.0.1 +// Project: https://github.com/davidmarkclements/prompt-sync-history +// Definitions by: TANAKA Koichi +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +/// + +declare module 'prompt-sync-history' { + import {History} from 'prompt-sync'; + + namespace history {} + function history(file?:string, max?:number): History; + + export = history; +} diff --git a/prompt-sync/prompt-sync-tests.ts b/prompt-sync/prompt-sync-tests.ts new file mode 100644 index 0000000000..fbe2e120e7 --- /dev/null +++ b/prompt-sync/prompt-sync-tests.ts @@ -0,0 +1,55 @@ +/// +'use strict'; + +import * as promptSync from 'prompt-sync'; + +declare const history: promptSync.History; + +let prompt: promptSync.Prompt; + +// without config +prompt = promptSync(); + +// with config +prompt = promptSync({ + history: history, + sigint: false, + autocomplete: (input:string) => [input] +}); + +// with empty config +prompt = promptSync({}); + +let name:string = prompt('Enter name: '); +let nickname:string = prompt({ask: 'Enter nickname: ', value: 'N/A'}); +let gender:string = prompt('Enter gender: ', { autocomplete: complete(['male', 'female']) }); +let age:string = prompt('Enter age: ', '18', { echo: '*' }); +let password:string = prompt.hide('Enter password: '); +let anotherPassword:string = prompt('Enter another password: ', { echo: '', value: '*password*'}); + +function complete(commands: string[]) { + return function (str: string) { + const ret:string[] = []; + for (let i=0; i< commands.length; i++) { + if (commands[i].indexOf(str) == 0) + ret.push(commands[i]); + } + return ret; + }; +} + +// History interface +let bool: boolean; + +bool = history.atStart(); +bool = history.atPenultimate(); +bool = history.pastEnd(); +bool = history.atEnd(); + +let str: string; +str = history.prev(); +str = history.next(); + +history.reset(); +history.push('aaa'); +history.save(); diff --git a/prompt-sync/prompt-sync.d.ts b/prompt-sync/prompt-sync.d.ts new file mode 100644 index 0000000000..3b997c93ca --- /dev/null +++ b/prompt-sync/prompt-sync.d.ts @@ -0,0 +1,75 @@ +// Type definitions for prompt-sync 4.1.4 +// Project: https://github.com/0x00A/prompt-sync +// Definitions by: TANAKA Koichi +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +declare module 'prompt-sync' { + namespace PromptSync { + export interface Prompt { + + (opts: Option): string; + (ask: string): string; + (ask: string, opts: Option): string; + (ask: string, value: string): string; + /** + * prompt -- sync function for reading user input from stdin + * @param {String} ask opening question/statement to prompt for + * @param {String} value initial value for the prompt + * @param {Object} opts { + * echo: set to a character to be echoed, default is '*'. Use '' for no echo + * value: {String} initial value for the prompt + * ask: {String} opening question/statement to prompt for, does not override ask param + * autocomplete: {StringArray} function({String}) + * } + * + * @returns {string} Returns the string input or (if sigint === false) + * null if user terminates with a ^C + */ + (ask: string, value: string, opts: Option): string; + + hide(ask: string): string; + } + + export interface Option { + ask?: string; + echo?: string; + autocomplete?: AutoCompleteFunction; + value?: string; + } + + export interface Config { + sigint?: boolean; + autocomplete?: AutoCompleteFunction; + history?: History; + } + + export interface History { + atStart(): boolean; + atPenultimate(): boolean; + pastEnd(): boolean; + atEnd(): boolean; + prev(): string; + next(): string; + reset(): void; + push(str: string): void; + save(): void; + } + + export interface AutoCompleteFunction { + (input: string): string[]; + } + } + + /** + * create -- sync function for reading user input from stdin + * @param {Object} config { + * sigint: {Boolean} exit on ^C + * autocomplete: {StringArray} function({String}) + * history: {String} a history control object (see `prompt-sync-history`) + * } + * @returns {Function} prompt function + */ + function PromptSync(config?: PromptSync.Config): PromptSync.Prompt; + + export = PromptSync; +} From db8a22f4417fdb8a21bbe4393fe00f917b63ec3b Mon Sep 17 00:00:00 2001 From: bluepichu Date: Wed, 2 Nov 2016 17:44:27 -0400 Subject: [PATCH 100/111] pixi.js - Fix "hex2string" bug --- pixi.js/pixi.js-tests.ts | 2 +- pixi.js/pixi.js.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pixi.js/pixi.js-tests.ts b/pixi.js/pixi.js-tests.ts index ac50d9d955..1e6a88ff3b 100644 --- a/pixi.js/pixi.js-tests.ts +++ b/pixi.js/pixi.js-tests.ts @@ -274,7 +274,7 @@ namespace basics { // draw a circle, set the lineStyle to zero so the circle doesn't have an outline this.graphics.lineStyle(0); - this.graphics.beginFill(0xFFFF0B, 0.5); + this.graphics.beginFill(PIXI.utils.hex2string(0xFFFF0B), 0.5); this.graphics.drawCircle(470, 90, 60); this.graphics.endFill(); diff --git a/pixi.js/pixi.js.d.ts b/pixi.js/pixi.js.d.ts index d8e6bf86d7..3de0f3f296 100644 --- a/pixi.js/pixi.js.d.ts +++ b/pixi.js/pixi.js.d.ts @@ -1103,7 +1103,7 @@ declare namespace PIXI { static uuid(): number; static hex2rgb(hex: number, out?: number[]): number[]; - static hex2String(hex: number): string; + static hex2string(hex: number): string; static rgb2hex(rgb: Number[]): number; static canUseNewCanvasBlendModel(): boolean; static getNextPowerOfTwo(number: number): number; From ccf944ff703b6580f1155ad07367c60a43557382 Mon Sep 17 00:00:00 2001 From: bluepichu Date: Wed, 2 Nov 2016 17:53:35 -0400 Subject: [PATCH 101/111] Replace hex2string test with a legal use --- pixi.js/pixi.js-tests.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pixi.js/pixi.js-tests.ts b/pixi.js/pixi.js-tests.ts index 1e6a88ff3b..f54da3fb00 100644 --- a/pixi.js/pixi.js-tests.ts +++ b/pixi.js/pixi.js-tests.ts @@ -274,7 +274,7 @@ namespace basics { // draw a circle, set the lineStyle to zero so the circle doesn't have an outline this.graphics.lineStyle(0); - this.graphics.beginFill(PIXI.utils.hex2string(0xFFFF0B), 0.5); + this.graphics.beginFill(0xFFFF0B, 0.5); this.graphics.drawCircle(470, 90, 60); this.graphics.endFill(); @@ -461,7 +461,7 @@ namespace basics { var style: PIXI.TextStyle = { font: '36px Arial bold italic', - fill: '#F7EDCA', + fill: PIXI.utils.hex2string(0xF7EDCA), stroke: '#4a1850', strokeThickness: 5, dropShadow: true, From 3779c195edad61e684430f53273f2aaf665ab1fe Mon Sep 17 00:00:00 2001 From: James Dowell Date: Thu, 3 Nov 2016 10:22:04 +0000 Subject: [PATCH 102/111] Update AjvOptions - multipleOfPrecision property Updating the AjvOptions - multipleOfPrecision property to allow boolean or number. Precision is specified as a number while the value defaults to false (i.e. disabled) Link to PR which added the multipleOfPrecision option: https://github.com/epoberezkin/ajv/commit/5f2cc30449d81a7d10148567f3f1ed038b00718e --- ajv/ajv.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ajv/ajv.d.ts b/ajv/ajv.d.ts index d8bfd56ef3..304fba2512 100644 --- a/ajv/ajv.d.ts +++ b/ajv/ajv.d.ts @@ -82,7 +82,7 @@ declare module "ajv" { passContext?: boolean; loopRequired?: number; ownProperties?: boolean; - multipleOfPrecision?: boolean; + multipleOfPrecision?: boolean | number; errorDataPath?: string, messages?: boolean; beautify?: boolean; From f080b63646be89a2466028ebdbaac80a7e0abc08 Mon Sep 17 00:00:00 2001 From: Andy Date: Thu, 3 Nov 2016 09:34:43 -0700 Subject: [PATCH 103/111] Remove the `github-electron` directory, as its contents have already been moved to `electron` (#12300) --- github-electron/electron.d.ts | 8 -------- github-electron/github-electron.d.ts | 8 -------- 2 files changed, 16 deletions(-) delete mode 100644 github-electron/electron.d.ts delete mode 100644 github-electron/github-electron.d.ts diff --git a/github-electron/electron.d.ts b/github-electron/electron.d.ts deleted file mode 100644 index 585c9e4668..0000000000 --- a/github-electron/electron.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Type definitions for electron 1.3.3 -// Project: https://github.com/electron-userland/electron-prebuilt -// Definitions by: rhysd -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -/// - -// this file will be removed. diff --git a/github-electron/github-electron.d.ts b/github-electron/github-electron.d.ts deleted file mode 100644 index ccb5b5b843..0000000000 --- a/github-electron/github-electron.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -// Type definitions for Electron v1.4.2 -// Project: http://electron.atom.io/ -// Definitions by: jedmao , rhysd , Milan Burda -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped - -/// - -// this file will be removed. From 5c443dc6d175da96b5d7ee970071ebca2ce2cf4c Mon Sep 17 00:00:00 2001 From: goleon Date: Fri, 4 Nov 2016 00:52:13 +0400 Subject: [PATCH 104/111] * Use native mouse event in originalEvent propery * Added DomUtil declaration * Added Class declaration (think about generics) * Evented class inherited from Class --- leaflet/leaflet.d.ts | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/leaflet/leaflet.d.ts b/leaflet/leaflet.d.ts index 38872edcb1..6b0a8990d8 100644 --- a/leaflet/leaflet.d.ts +++ b/leaflet/leaflet.d.ts @@ -5,7 +5,42 @@ /// +type NativeMouseEvent = MouseEvent; + declare namespace L { + export class Class { + static extend(props:any):any/* how to return constructor of self extended type ? */; + static include(props:any):any /* how to return self extended type ? */; + static mergeOptions(props:any): any /* how to return self extended type ? */; + static addInitHook(initHookFn: ()=> void): any/* how to return self extended type ? */; + } + + export class DomUtil { + static get(id: string|HTMLElement): HTMLElement; + static getStyle(el: HTMLElement, styleAttrib: string): string; + static create(tagName: String, className?: String, container?: HTMLElement): HTMLElement; + static remove(el: HTMLElement):void; + static empty(el: HTMLElement):void; + static toFront(el: HTMLElement):void; + static toBack(el: HTMLElement):void; + static hasClass(el: HTMLElement, name: String): Boolean; + static addClass(el: HTMLElement, name: String):void; + static removeClass(el: HTMLElement, name: String):void; + static setClass(el: HTMLElement, name: String):void; + static getClass(el: HTMLElement): String; + static setOpacity(el: HTMLElement, opacity: Number); + static testProp(props: String[]): String|boolean/*=false*/; + static setTransform(el: HTMLElement, offset: Point, scale?: Number); + static setPosition(el: HTMLElement, position: Point):void; + static getPosition(el: HTMLElement): Point + static disableTextSelection(): void + static enableTextSelection(): void + static disableImageDrag(): void + static enableImageDrag(): void + static preventOutline(el: HTMLElement): void + static restoreOutline(): void + } + export interface CRS { latLngToPoint(latlng: LatLng, zoom: number): Point; latLngToPoint(latlng: LatLngLiteral, zoom: number): Point; @@ -211,7 +246,7 @@ declare namespace L { * with an object (e.g. the user clicks on the map, causing the map to fire * 'click' event). */ - export interface Evented { + export interface Evented extends Class { /** * Adds a listener function (fn) to a particular event type of the object. * You can optionally specify the context of the listener (object the this @@ -1125,7 +1160,7 @@ declare namespace L { latlng: LatLng; layerPoint: Point; containerPoint: Point; - originalEvent: MouseEvent; // how can I reference the global MouseEvent? + originalEvent: NativeMouseEvent; } export interface LocationEvent extends Event { From 3a1606d0519f838de2166d91687ae3ec8eabd37b Mon Sep 17 00:00:00 2001 From: goleon Date: Fri, 4 Nov 2016 01:06:53 +0400 Subject: [PATCH 105/111] fix return type for DomUtil --- leaflet/leaflet.d.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/leaflet/leaflet.d.ts b/leaflet/leaflet.d.ts index 6b0a8990d8..f9fb91d4c9 100644 --- a/leaflet/leaflet.d.ts +++ b/leaflet/leaflet.d.ts @@ -28,9 +28,9 @@ declare namespace L { static removeClass(el: HTMLElement, name: String):void; static setClass(el: HTMLElement, name: String):void; static getClass(el: HTMLElement): String; - static setOpacity(el: HTMLElement, opacity: Number); + static setOpacity(el: HTMLElement, opacity: Number):void; static testProp(props: String[]): String|boolean/*=false*/; - static setTransform(el: HTMLElement, offset: Point, scale?: Number); + static setTransform(el: HTMLElement, offset: Point, scale?: Number):void; static setPosition(el: HTMLElement, position: Point):void; static getPosition(el: HTMLElement): Point static disableTextSelection(): void From 08bbc012f2f126662bf3751ccd87e5758f7f375f Mon Sep 17 00:00:00 2001 From: gatsbimantico Date: Fri, 4 Nov 2016 08:14:32 +0100 Subject: [PATCH 106/111] Updated header Updated header with info about Project and Definitions --- gapi.analytics/gapi.analytics.d.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gapi.analytics/gapi.analytics.d.ts b/gapi.analytics/gapi.analytics.d.ts index da9b81cb68..dc49ffd617 100644 --- a/gapi.analytics/gapi.analytics.d.ts +++ b/gapi.analytics/gapi.analytics.d.ts @@ -1,4 +1,7 @@ // Type definitions for Google Analytics API +// Project: https://developers.google.com/analytics/devguides/reporting/core/v4/ +// Definitions by: César Costas +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped /// From e7772769fab8c206449ce9673cac417370330aa9 Mon Sep 17 00:00:00 2001 From: DJ_Middle Date: Sun, 6 Nov 2016 04:38:31 +0900 Subject: [PATCH 107/111] Added isEmpty function definition (#12500) --- validator/validator-tests.ts | 4 ++++ validator/validator.d.ts | 14 +++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/validator/validator-tests.ts b/validator/validator-tests.ts index abe3e41a2d..0dba730288 100644 --- a/validator/validator-tests.ts +++ b/validator/validator-tests.ts @@ -27,6 +27,7 @@ import isDateFunc = require('validator/lib/isDate'); import isDecimalFunc = require('validator/lib/isDecimal'); import isDivisibleByFunc = require('validator/lib/isDivisibleBy'); import isEmailFunc = require('validator/lib/isEmail'); +import isEmptyFunc = require('validator/lib/isEmpty'); import isFQDNFunc = require('validator/lib/isFQDN'); import isFloatFunc = require('validator/lib/isFloat'); import isFullWidthFunc = require('validator/lib/isFullWidth'); @@ -126,6 +127,9 @@ namespace import_tests { let _isEmail = validator.isEmail; _isEmail = isEmailFunc; + let _isEmpty = validator.isEmpty; + _isEmpty = isEmptyFunc; + let _isFQDN = validator.isFQDN; _isFQDN = isFQDNFunc; diff --git a/validator/validator.d.ts b/validator/validator.d.ts index 4cf18650f0..ad91c01204 100644 --- a/validator/validator.d.ts +++ b/validator/validator.d.ts @@ -7,7 +7,7 @@ declare namespace ValidatorJS { type AlphaLocale = "ar" | "ar-AE" | "ar-BH" | "ar-DZ" | "ar-EG" | "ar-IQ" | "ar-JO" | "ar-KW" | "ar-LB" | "ar-LY" | "ar-MA" | "ar-QA" | "ar-QM" | "ar-SA" | "ar-SD" | "ar-SY" | "ar-TN" | "ar-YE" | "cs-CZ" | "de-DE" | "en-AU" | "en-GB" | "en-HK" | "en-IN" | "en-NZ" | "en-US" | "en-ZA" | "en-ZM" | "es-ES" | "fr-FR" | "hu-HU" | "nl-NL" | "pl-PL" | "pt-BR" | "pt-PT" | "ru-RU" | "sr-RS" | "sr-RS@latin" | "tr-TR"; type AlphanumericLocale = "ar" | "ar-AE" | "ar-BH" | "ar-DZ" | "ar-EG" | "ar-IQ" | "ar-JO" | "ar-KW" | "ar-LB" | "ar-LY" | "ar-MA" | "ar-QA" | "ar-QM" | "ar-SA" | "ar-SD" | "ar-SY" | "ar-TN" | "ar-YE" | "cs-CZ" | "de-DE" | "en-AU" | "en-GB" | "en-HK" | "en-IN" | "en-NZ" | "en-US" | "en-ZA" | "en-ZM" | "es-ES" | "fr-FR" | "fr-BE" | "hu-HU" | "nl-BE" | "nl-NL" | "pl-PL" | "pt-BR" | "pt-PT" | "ru-RU" | "sr-RS" | "sr-RS@latin" | "tr-TR"; type MobilePhoneLocale = "ar-DZ" | "ar-SA" | "ar-SY" | "cs-CZ" | "de-DE" | "da-DK" | "el-GR" | "en-AU" | "en-GB" | "en-HK" | "en-IN" | "en-NZ" | "en-US" | "en-CA" | "en-ZA" | "en-ZM" | "es-ES" | "fi-FI" | "fr-FR" | "hu-HU" | "it-IT" | "ja-JP" | "ms-MY" | "nb-NO" | "nn-NO" | "pl-PL" | "pt-PT" | "ru-RU" | "sr-RS" | "tr-TR" | "vi-VN" | "zh-CN" | "zh-TW" - + interface ValidatorStatic { // ************** @@ -72,6 +72,9 @@ declare namespace ValidatorJS { // check if the string is an email. isEmail(str: string, options?: IsEmailOptions): boolean; + // check if the string has a length of zero. + isEmpty(str: string): boolean; + // check if the string is a fully qualified domain name (e.g. domain.com). isFQDN(str: string, options?: IsFQDNOptions): boolean; @@ -213,9 +216,9 @@ declare namespace ValidatorJS { // remove characters that do not appear in the whitelist. The characters are used in a RegExp and so you will // need to escape some chars, e.g. whitelist(input, '\\[\\]'). whitelist(input: string, chars: string): string; - + toString(input: any | any[]): string; - + version: string; // ************** @@ -407,6 +410,11 @@ declare module "validator/lib/isEmail" { export = isEmail; } +declare module "validator/lib/isEmpty" { + const isEmpty: typeof validator.isEmpty; + export = isEmpty; +} + declare module "validator/lib/isFQDN" { const isFQDN: typeof validator.isFQDN; export = isFQDN; From 5483214f02eb5e13ffb45fddd044203b8d33cc72 Mon Sep 17 00:00:00 2001 From: Dave Alden Date: Sun, 6 Nov 2016 14:16:13 +0000 Subject: [PATCH 108/111] Update for cordova.plugins.diagnostic@3.3.0 --- .../cordova.plugins.diagnostic-tests.ts | 24 ++++++++++ .../cordova.plugins.diagnostic.d.ts | 46 ++++++++++++++++++- 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/cordova.plugins.diagnostic/cordova.plugins.diagnostic-tests.ts b/cordova.plugins.diagnostic/cordova.plugins.diagnostic-tests.ts index e95c973171..47ce7a108a 100644 --- a/cordova.plugins.diagnostic/cordova.plugins.diagnostic-tests.ts +++ b/cordova.plugins.diagnostic/cordova.plugins.diagnostic-tests.ts @@ -507,4 +507,28 @@ cordova.plugins.diagnostic.getBackgroundRefreshStatus(function(status){ } }, function(error){ console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.requestBluetoothAuthorization(function(){ + console.log("Bluetooth authorization requested"); +}, function(error){ + console.error(error); +}); + +cordova.plugins.diagnostic.isMotionAvailable(function(available){ + console.log("Motion tracking is " + (available ? "available" : "not available") + " on this device"); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.isMotionRequestOutcomeAvailable(function(available){ + console.log("Motion tracking request outcome is " + (available ? "available" : "not available") + " on this device"); +}, function(error){ + console.error("The following error occurred: "+error); +}); + +cordova.plugins.diagnostic.requestAndCheckMotionAuthorization(function(status){ + console.log("Motion authorization is " +status); +}, function(error){ + console.error(error); }); \ No newline at end of file diff --git a/cordova.plugins.diagnostic/cordova.plugins.diagnostic.d.ts b/cordova.plugins.diagnostic/cordova.plugins.diagnostic.d.ts index 0fcca3b1ca..cbb7adac8f 100644 --- a/cordova.plugins.diagnostic/cordova.plugins.diagnostic.d.ts +++ b/cordova.plugins.diagnostic/cordova.plugins.diagnostic.d.ts @@ -1,4 +1,4 @@ -// Type definitions for cordova.plugins.diagnostic v3.2.2 +// Type definitions for cordova.plugins.diagnostic v3.3.0 // Project: https://github.com/dpa99c/cordova-diagnostic-plugin // Definitions by: Dave Alden // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped @@ -686,6 +686,50 @@ interface Diagnostic { successCallback: (status: string) => void, errorCallback: (error: string) => void ) => void; + + /** + * iOS ONLY + * Requests Bluetooth authorization for the application. + * @param successCallback + * @param errorCallback + */ + requestBluetoothAuthorization?: ( + successCallback: () => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Checks if motion tracking is available on the current device. + * @param successCallback + * @param errorCallback + */ + isMotionAvailable?: ( + successCallback: (available: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Checks if it's possible to determine the outcome of a motion authorization request on the current device. + * @param successCallback + * @param errorCallback + */ + isMotionRequestOutcomeAvailable?: ( + successCallback: (available: boolean) => void, + errorCallback: (error: string) => void + ) => void; + + /** + * iOS ONLY + * Requests and checks motion authorization for the application. + * @param successCallback + * @param errorCallback + */ + requestAndCheckMotionAuthorization?: ( + successCallback: (status: string) => void, + errorCallback: (error: string) => void + ) => void; } interface CordovaPlugins { From 121ddf1be68def3f5dc245eacd0d0471eac590b0 Mon Sep 17 00:00:00 2001 From: Will Munn Date: Sun, 6 Nov 2016 15:42:16 +0000 Subject: [PATCH 109/111] Needle (#12108) * Derive type of response in callback from nodes IncomingMessage * Allow any request header name --- needle/needle-tests.ts | 8 +- needle/needle.d.ts | 168 ++++++++++++++++++++--------------------- 2 files changed, 85 insertions(+), 91 deletions(-) diff --git a/needle/needle-tests.ts b/needle/needle-tests.ts index 106d46a716..6b4d991a93 100644 --- a/needle/needle-tests.ts +++ b/needle/needle-tests.ts @@ -1,12 +1,12 @@ /// - -import needle = require("needle"); +import * as needle from "needle"; function Usage() { // using callback needle.get('http://ifconfig.me/all.json', function (error, response) { if (!error) console.log(response.body.ip_addr); // JSON decoding magic. :) + console.log(response.statusCode); }); // using streams @@ -15,7 +15,9 @@ function Usage() { } function ResponsePipeline() { - needle.get('http://stackoverflow.com/feeds', { compressed: true }, function (err, resp) { + needle.get('http://stackoverflow.com/feeds', { compressed: true, headers: { + Authorization: 'bearer 12dsfgsdgsgq' + } }, function (err, resp) { console.log(resp.body); // this little guy won't be a Gzipped binary blob // but a nice object containing all the latest entries }); diff --git a/needle/needle.d.ts b/needle/needle.d.ts index 449368e185..8e23024072 100644 --- a/needle/needle.d.ts +++ b/needle/needle.d.ts @@ -5,95 +5,87 @@ /// -declare namespace Needle { - interface ReadableStream extends NodeJS.ReadableStream { - } - - interface Callback { - (error: Error, response: any, body: any): void; - } - - interface RequestOptions { - timeout?: number; - follow?: number; - follow_max?: number; - multipart?: boolean; - proxy?: string; - agent?: string; - headers?: HttpHeaderOptions; - auth?: string; // auto | digest | basic (default) - json?: boolean; - - // These properties are overwritten by those in the 'headers' field - compressed?: boolean; - cookies?: { [name: string]: any; }; - // Overwritten if present in the URI - username?: string; - password?: string; - } - - interface ResponseOptions { - decode?: boolean; - parse?: boolean; - output?: any; - } - - interface HttpHeaderOptions { - cookies?: { [name: string]: any; }; - compressed?: boolean; - accept?: string; - connection?: string; - user_agent?: string; - - // Overwritten if present in the URI - username?: string; - password?: string; - } - - interface TLSOptions { - pfx?: any; - key?: any; - passphrase?: string; - cert?: any; - ca?: any; - ciphers?: any; - rejectUnauthorized?: boolean; - secureProtocol?: any; - } - - interface NeedleOptions extends RequestOptions, ResponseOptions, HttpHeaderOptions, TLSOptions { - } - - interface NeedleStatic { - defaults(options?: any): void; - - head(url: string): ReadableStream; - head(url: string, callback?: Callback): ReadableStream; - head(url: string, options?: RequestOptions, callback?: Callback): ReadableStream; - - get(url: string): ReadableStream; - get(url: string, callback?: Callback): ReadableStream; - get(url: string, options?: RequestOptions, callback?: Callback): ReadableStream; - - post(url: string, data: any): ReadableStream; - post(url: string, data: any, callback?: Callback): ReadableStream; - post(url: string, data: any, options?: RequestOptions, callback?: Callback): ReadableStream; - - put(url: string, data: any): ReadableStream; - put(url: string, data: any, callback?: Callback): ReadableStream; - put(url: string, data: any, options?: RequestOptions, callback?: Callback): ReadableStream; - - delete(url: string, data: any): ReadableStream; - delete(url: string, data: any, callback?: Callback): ReadableStream; - delete(url: string, data: any, options?: RequestOptions, callback?: Callback): ReadableStream; - - request(method: string, url: string, data: any): ReadableStream; - request(method: string, url: string, data: any, callback?: Callback): ReadableStream; - request(method: string, url: string, data: any, options?: RequestOptions, callback?: Callback): ReadableStream; - } -} - declare module "needle" { + import * as http from 'http'; + import * as Buffer from 'buffer'; + module Needle { + interface NeedleResponse extends http.IncomingMessage { + body: any; + raw: Buffer; + bytes: number; + } + interface ReadableStream extends NodeJS.ReadableStream { + } + + interface Callback { + (error: Error, response: NeedleResponse, body: any): void; + } + + interface RequestOptions { + timeout?: number; + follow?: number; + follow_max?: number; + multipart?: boolean; + proxy?: string; + agent?: string; + headers?: Object; + auth?: string; // auto | digest | basic (default) + json?: boolean; + + // These properties are overwritten by those in the 'headers' field + compressed?: boolean; + cookies?: { [name: string]: any; }; + // Overwritten if present in the URI + username?: string; + password?: string; + } + + interface ResponseOptions { + decode?: boolean; + parse?: boolean; + output?: any; + } + + interface TLSOptions { + pfx?: any; + key?: any; + passphrase?: string; + cert?: any; + ca?: any; + ciphers?: any; + rejectUnauthorized?: boolean; + secureProtocol?: any; + } + + interface NeedleStatic { + defaults(options?: any): void; + + head(url: string): ReadableStream; + head(url: string, callback?: Callback): ReadableStream; + head(url: string, options?: RequestOptions, callback?: Callback): ReadableStream; + + get(url: string): ReadableStream; + get(url: string, callback?: Callback): ReadableStream; + get(url: string, options?: RequestOptions, callback?: Callback): ReadableStream; + + post(url: string, data: any): ReadableStream; + post(url: string, data: any, callback?: Callback): ReadableStream; + post(url: string, data: any, options?: RequestOptions, callback?: Callback): ReadableStream; + + put(url: string, data: any): ReadableStream; + put(url: string, data: any, callback?: Callback): ReadableStream; + put(url: string, data: any, options?: RequestOptions, callback?: Callback): ReadableStream; + + delete(url: string, data: any): ReadableStream; + delete(url: string, data: any, callback?: Callback): ReadableStream; + delete(url: string, data: any, options?: RequestOptions, callback?: Callback): ReadableStream; + + request(method: string, url: string, data: any): ReadableStream; + request(method: string, url: string, data: any, callback?: Callback): ReadableStream; + request(method: string, url: string, data: any, options?: RequestOptions, callback?: Callback): ReadableStream; + } + } + var needle: Needle.NeedleStatic; export = needle; } From a2ba29a47afdf748894c2493d23802197f3d6907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Guillot?= Date: Mon, 7 Nov 2016 16:13:35 +0100 Subject: [PATCH 110/111] Missing prop 'shouldUpdatePosition' on Overlay component (#11606) --- react-bootstrap/react-bootstrap.d.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/react-bootstrap/react-bootstrap.d.ts b/react-bootstrap/react-bootstrap.d.ts index c39efed388..6b8dd29784 100644 --- a/react-bootstrap/react-bootstrap.d.ts +++ b/react-bootstrap/react-bootstrap.d.ts @@ -423,6 +423,7 @@ declare namespace ReactBootstrap { rootClose?: boolean; show?: boolean; target?: Function; + shouldUpdatePosition?: boolean; } class Overlay extends React.Component { } From 28b5b2683ccb98d3bc398a1bc548a270fc39b1de Mon Sep 17 00:00:00 2001 From: goleon Date: Mon, 7 Nov 2016 21:29:11 +0400 Subject: [PATCH 111/111] leaflet.d.ts: split signature DomUtil#get to 2 overloaded --- leaflet/leaflet.d.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/leaflet/leaflet.d.ts b/leaflet/leaflet.d.ts index f9fb91d4c9..ee2483b752 100644 --- a/leaflet/leaflet.d.ts +++ b/leaflet/leaflet.d.ts @@ -16,7 +16,8 @@ declare namespace L { } export class DomUtil { - static get(id: string|HTMLElement): HTMLElement; + static get(id: string): HTMLElement; + static get(id: HTMLElement): HTMLElement; static getStyle(el: HTMLElement, styleAttrib: string): string; static create(tagName: String, className?: String, container?: HTMLElement): HTMLElement; static remove(el: HTMLElement):void;