Skip to content

Commit

Permalink
Improve typings for various functions (foundryvtt#12862)
Browse files Browse the repository at this point in the history
  • Loading branch information
OmegaRogue authored and nikolaj-a committed Jan 14, 2024
1 parent 725d19b commit 0c72b12
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 59 deletions.
11 changes: 0 additions & 11 deletions src/module/scene/document.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,17 +146,6 @@ interface ScenePF2e extends Scene {
readonly tiles: foundry.abstract.EmbeddedCollection<TileDocumentPF2e<this>>;

get sheet(): SceneConfigPF2e<this>;

createEmbeddedDocuments(
embeddedName: "Token",
data: PreCreate<foundry.documents.TokenSource>[],
context?: DocumentModificationContext<this>,
): Promise<TokenDocumentPF2e<this>[]>;
createEmbeddedDocuments(
embeddedName: string,
data: object[],
context?: DocumentModificationContext<this>,
): Promise<foundry.abstract.Document[]>;
}

// Added as debounced method
Expand Down
2 changes: 2 additions & 0 deletions types/foundry/client/core/hooks.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ declare global {
// Sequence of hooks called on world load
type HookParamsInit = HookParameters<"init", never>;
type HookParamsSetup = HookParameters<"setup", never>;
type HookParamsI18nInit = HookParameters<"i18nInit", never>;
type HookParamsCanvasInit = HookParameters<"canvasInit", [DrawnCanvas]>;
type HookParamsCanvasReady = HookParameters<"canvasReady", [DrawnCanvas]>;
type HookParamsReady = HookParameters<"ready", never>;
Expand Down Expand Up @@ -60,6 +61,7 @@ declare global {
static on(...args: HookParamsSetup): number;
static on(...args: HookParamsInit): number;
static on(...args: HookParamsReady): number;
static on(...args: HookParamsI18nInit): number;
static on(...args: HookParamsCanvasInit): number;
static on(...args: HookParamsCanvasReady): number;
static on(...args: HookParamsClose<CombatTrackerConfig, "CombatTrackerConfig">): number;
Expand Down
82 changes: 51 additions & 31 deletions types/foundry/client/data/documents/scene.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import type { NoteSource, TokenSource } from "../../../common/documents/module.d.ts";
import type { ClientBaseScene } from "./client-base-mixes.d.ts";

declare global {
Expand Down Expand Up @@ -155,74 +156,83 @@ declare global {

update(data: Record<string, unknown>, options?: SceneUpdateContext): Promise<this>;

createEmbeddedDocuments(
embeddedName: "Note",
data: PreCreate<NoteSource>[],
context?: SceneEmbeddedModificationContext<this>,
): Promise<CollectionValue<this["notes"]>[]>;
createEmbeddedDocuments(
embeddedName: "Token",
data: PreCreate<TokenSource>[],
context?: SceneEmbeddedModificationContext<this>,
): Promise<CollectionValue<this["tokens"]>[]>;
createEmbeddedDocuments(
embeddedName: SceneEmbeddedName,
data: Record<string, unknown>[],
context?: SceneEmbeddedModificationContext<this>,
): Promise<
| CollectionValue<this["drawings"]>[]
| CollectionValue<this["lights"]>[]
| CollectionValue<this["notes"]>[]
| CollectionValue<this["sounds"]>[]
| CollectionValue<this["tiles"]>[]
| CollectionValue<this["tokens"]>[]
| CollectionValue<this["tokens"]>[]
| CollectionValue<this["walls"]>[]
>;

updateEmbeddedDocuments(
embeddedName: "Token",
updateData: EmbeddedDocumentUpdateData[],
options?: SceneTokenModificationContext<this>,
context?: SceneTokenModificationContext<this>,
): Promise<CollectionValue<this["tokens"]>[]>;
updateEmbeddedDocuments(
embeddedName: "AmbientLight",
updateData: EmbeddedDocumentUpdateData[],
options?: SceneEmbeddedModificationContext<this>,
context?: SceneEmbeddedModificationContext<this>,
): Promise<CollectionValue<this["lights"]>[]>;
updateEmbeddedDocuments(
embeddedName: "AmbientSound",
updateData: EmbeddedDocumentUpdateData[],
options?: SceneEmbeddedModificationContext<this>,
context?: SceneEmbeddedModificationContext<this>,
): Promise<CollectionValue<this["sounds"]>[]>;
updateEmbeddedDocuments(
embeddedName: "Drawing",
updateData: EmbeddedDocumentUpdateData[],
options?: SceneEmbeddedModificationContext<this>,
context?: SceneEmbeddedModificationContext<this>,
): Promise<CollectionValue<this["drawings"]>[]>;
updateEmbeddedDocuments(
embeddedName: "MeasuredTemplate",
updateData: EmbeddedDocumentUpdateData[],
options?: SceneEmbeddedModificationContext<this>,
context?: SceneEmbeddedModificationContext<this>,
): Promise<CollectionValue<this["tokens"]>[]>;
updateEmbeddedDocuments(
embeddedName: "Note",
updateData: EmbeddedDocumentUpdateData[],
options?: SceneEmbeddedModificationContext<this>,
context?: SceneEmbeddedModificationContext<this>,
): Promise<CollectionValue<this["notes"]>[]>;
updateEmbeddedDocuments(
embeddedName: "Tile",
updateData: EmbeddedDocumentUpdateData[],
options?: SceneEmbeddedModificationContext<this>,
context?: SceneEmbeddedModificationContext<this>,
): Promise<CollectionValue<this["tiles"]>[]>;
updateEmbeddedDocuments(
embeddedName: "Wall",
updateData: EmbeddedDocumentUpdateData[],
options?: SceneEmbeddedModificationContext<this>,
context?: SceneEmbeddedModificationContext<this>,
): Promise<CollectionValue<this["walls"]>[]>;
updateEmbeddedDocuments(
embeddedName:
| "Token"
| "AmbientLight"
| "AmbientSound"
| "Drawing"
| "MeasuredTemplate"
| "Note"
| "Tile"
| "Wall",
updateData:
| EmbeddedDocumentUpdateData[]
| EmbeddedDocumentUpdateData[]
| EmbeddedDocumentUpdateData[]
| EmbeddedDocumentUpdateData[]
| EmbeddedDocumentUpdateData[]
| EmbeddedDocumentUpdateData[]
| EmbeddedDocumentUpdateData[]
| EmbeddedDocumentUpdateData[],
options?: SceneEmbeddedModificationContext<this>,
embeddedName: SceneEmbeddedName,
updateData: EmbeddedDocumentUpdateData[],
context?: SceneEmbeddedModificationContext<this>,
): Promise<
| CollectionValue<this["tokens"]>[]
| CollectionValue<this["lights"]>[]
| CollectionValue<this["sounds"]>[]
| CollectionValue<this["drawings"]>[]
| CollectionValue<this["tokens"]>[]
| CollectionValue<this["lights"]>[]
| CollectionValue<this["notes"]>[]
| CollectionValue<this["sounds"]>[]
| CollectionValue<this["tiles"]>[]
| CollectionValue<this["tokens"]>[]
| CollectionValue<this["tokens"]>[]
| CollectionValue<this["walls"]>[]
>;
}
Expand Down Expand Up @@ -262,3 +272,13 @@ declare global {
maxR: number;
}
}

type SceneEmbeddedName =
| "AmbientLight"
| "AmbientSound"
| "Drawing"
| "MeasuredTemplate"
| "Note"
| "Tile"
| "Token"
| "Wall";
2 changes: 1 addition & 1 deletion types/foundry/client/pixi/board.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ declare global {
* @param origin Point to display Ping at
* @param options Additional options to configure how the ping is drawn.
*/
ping(origin: Point, options: Record<string, unknown>): Promise<boolean>;
ping(origin: Point, options?: Record<string, unknown>): Promise<boolean>;

/**
* Create a BlurFilter instance and register it to the array for updates when the zoom level changes.
Expand Down
15 changes: 11 additions & 4 deletions types/foundry/client/pixi/canvas-layer/grid-layer.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,22 +56,24 @@ declare global {
* Measure the grid-wise distance between two point coordinates.
* @param origin The origin point
* @param target The target point
* @param [options] Additional options which modify the measurement
* @return The measured distance between these points
*
* @example
* let distance = canvas.grid.measureDistance({x: 1000, y: 1000}, {x: 2000, y: 2000});
*/
measureDistance(origin: Point, target: Point): number;
measureDistance(origin: Point, target: Point, options?: MeasureDistancesOptions): number;

/**
* Measure the distance traveled over an array of distance segments.
* @param segments An array of measured segments
* @param options Additional options which modify the measurement
* @param segments An array of measured segments
* @param [options] Additional options which modify the measurement
*/
measureDistances(segments: Segment[], options?: Record<string, unknown>): number[];
measureDistances(segments: Segment[], options?: MeasureDistancesOptions): number[];

/* -------------------------------------------- */
/* Grid Highlighting Methods */

/* -------------------------------------------- */

/**
Expand Down Expand Up @@ -121,6 +123,11 @@ declare global {
gridColor?: string | null;
gridAlpha?: number | null;
}

interface MeasureDistancesOptions {
/** Return the distance in grid increments rather than the co-ordinate distance. */
gridSpaces?: boolean;
}
}

interface GridLayerOptions extends CanvasLayerOptions {
Expand Down
23 changes: 12 additions & 11 deletions types/foundry/common/primitives/set.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ declare interface Set<T> {
* the index of iteration, and the set being tested.
* @returns {boolean} Does every element in the set satisfy the test criterion?
*/
every<U extends T = T>(test: (value: T) => value is U): this is Set<U>;
every(test: (value: T) => boolean): boolean;
every<U extends T = T>(test: (value: T, index: number, set: Set<T>) => value is U): this is Set<U>;
every(test: (value: T, index: number, set: Set<T>) => boolean): boolean;

/**
* Filter this set to create a subset of elements which satisfy a certain test criterion.
Expand All @@ -82,17 +82,17 @@ declare interface Set<T> {
* the index of iteration, and the set being filtered.
* @returns {Set} A new Set containing only elements which satisfy the test criterion.
*/
filter<U extends T = T>(test: (value: T) => value is U): Set<U>;
filter(test: (value: T) => boolean): Set<T>;
filter<U extends T = T>(test: (value: T, index: number, set: Set<T>) => value is U): Set<U>;
filter(test: (value: T, index: number, set: Set<T>) => boolean): Set<T>;

/**
* Find the first element in this set which satisfies a certain test criterion.
* @see Array#find
* @param test The test criterion to apply. Positional arguments are the value,
* the index of iteration, and the set being searched.
* @returns The first element in the set which satisfies the test criterion, or undefined.
* @param test The test criterion to apply. Positional arguments are the value, the index of iteration, and the set being searched.
* @returns The first element in the set which satisfies the test criterion, or undefined.
*/
find<U extends T = T>(test: (value: U) => boolean): T | undefined;
find<U extends T = T>(test: (value: T, index: number, obj: Set<T>) => value is U): U | undefined;
find(test: (value: T, index: number, obj: Set<T>) => boolean): T | undefined;

/**
* Create a new Set where every element is modified by a provided transformation function.
Expand All @@ -101,7 +101,7 @@ declare interface Set<T> {
* and the set being transformed.
* @returns A new Set of equal size containing transformed elements.
*/
map<U>(transfor: (value: T) => U): Set<U>;
map<U>(transform: (value: T, index: number, set: Set<T>) => U): Set<U>;

/**
* Create a new Set with elements that are filtered and transformed by a provided reducer function.
Expand All @@ -111,7 +111,8 @@ declare interface Set<T> {
* @param accumulator The initial value of the returned accumulator.
* @returns The final value of the accumulator.
*/
reduce<U>(evaluator: (accumlator: U, value: T) => U, initial: U): U;
reduce<U>(reducer: (previousValue: U, currentValue: T, currentIndex: number, set: Set<T>) => U, accumulator: U): U;
reduce(reducer: (previousValue: T, currentValue: T, currentIndex: number, set: Set<T>) => T, accumulator: T): T;

/**
* Test whether any element in this Set satisfies a certain test criterion.
Expand All @@ -120,5 +121,5 @@ declare interface Set<T> {
* being tested.
* @returns Does any element in the set satisfy the test criterion?
*/
some(test: (value: T) => boolean): boolean;
some(test: (value: T, index: number, set: Set<T>) => boolean): boolean;
}
2 changes: 1 addition & 1 deletion types/foundry/common/utils/collection.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ declare interface Collection<V>
* @param transformer The transformation function to apply to each entry value
* @return An Array of transformed values
*/
map<T>(transformer: (value: V) => T): T[];
map<T>(transformer: (value: V, index: number, collection: this) => T): T[];

/**
* Reduce the Collection by applying an evaluator function and accumulating entries
Expand Down

0 comments on commit 0c72b12

Please sign in to comment.