Repository: League-of-Foundry-Developers/foundry-vtt-types
Pull request #2909 (2024-11-02 14:51:22)

Fix errors that have crept in


Patch:
diff --git a/package-lock.json b/package-lock.json
index 597fd7ea6..4fabc2b0f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1512,6 +1512,22 @@
         }
       }
     },
+    "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
+      "version": "9.0.5",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=16 || 14 >=14.17"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
     "node_modules/@typescript-eslint/utils": {
       "version": "8.12.2",
       "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz",
@@ -2103,7 +2119,8 @@
     "node_modules/concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
-      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+      "license": "MIT"
     },
     "node_modules/cross-spawn": {
       "version": "7.0.3",
@@ -2803,6 +2820,7 @@
       "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
       "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
+      "license": "MIT",
       "dependencies": {
         "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
@@ -2813,6 +2831,7 @@
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
       "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
       "dev": true,
+      "license": "ISC",
       "dependencies": {
         "brace-expansion": "^1.1.7"
       },
@@ -3080,7 +3099,8 @@
     "node_modules/fs.realpath": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
-      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+      "license": "ISC"
     },
     "node_modules/fsevents": {
       "version": "2.3.3",
@@ -3207,25 +3227,6 @@
         "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
       }
     },
-    "node_modules/glob": {
-      "version": "7.2.3",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
-      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
-      "dependencies": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.1.1",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      },
-      "engines": {
-        "node": "*"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
     "node_modules/glob-parent": {
       "version": "6.0.2",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
@@ -3238,26 +3239,6 @@
         "node": ">=10.13.0"
       }
     },
-    "node_modules/glob/node_modules/brace-expansion": {
-      "version": "1.1.11",
-      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
-      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
-      "dependencies": {
-        "balanced-match": "^1.0.0",
-        "concat-map": "0.0.1"
-      }
-    },
-    "node_modules/glob/node_modules/minimatch": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
-      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
-      "dependencies": {
-        "brace-expansion": "^1.1.7"
-      },
-      "engines": {
-        "node": "*"
-      }
-    },
     "node_modules/globals": {
       "version": "13.24.0",
       "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
@@ -3475,6 +3456,8 @@
       "version": "1.0.6",
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
       "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+      "license": "ISC",
       "dependencies": {
         "once": "^1.3.0",
         "wrappy": "1"
@@ -3483,7 +3466,8 @@
     "node_modules/inherits": {
       "version": "2.0.4",
       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
-      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+      "license": "ISC"
     },
     "node_modules/internal-slot": {
       "version": "1.0.7",
@@ -4228,22 +4212,6 @@
         "url": "https://github.com/sponsors/sindresorhus"
       }
     },
-    "node_modules/minimatch": {
-      "version": "9.0.5",
-      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
-      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
-      "dev": true,
-      "license": "ISC",
-      "dependencies": {
-        "brace-expansion": "^2.0.1"
-      },
-      "engines": {
-        "node": ">=16 || 14 >=14.17"
-      },
-      "funding": {
-        "url": "https://github.com/sponsors/isaacs"
-      }
-    },
     "node_modules/minimist": {
       "version": "1.2.8",
       "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
@@ -4406,6 +4374,7 @@
       "version": "1.4.0",
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
       "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+      "license": "ISC",
       "dependencies": {
         "wrappy": "1"
       }
@@ -4544,6 +4513,49 @@
         "npm": ">5"
       }
     },
+    "node_modules/patch-package/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/patch-package/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/patch-package/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/patch-package/node_modules/rimraf": {
       "version": "2.7.1",
       "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
@@ -4578,6 +4590,7 @@
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
       "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+      "license": "MIT",
       "engines": {
         "node": ">=0.10.0"
       }
@@ -5052,6 +5065,52 @@
         "url": "https://github.com/sponsors/isaacs"
       }
     },
+    "node_modules/rimraf/node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/rimraf/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/rimraf/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
     "node_modules/rollup": {
       "version": "4.24.3",
       "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.3.tgz",
@@ -6092,7 +6151,8 @@
     "node_modules/wrappy": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
-      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+      "license": "ISC"
     },
     "node_modules/ws": {
       "version": "8.11.0",
diff --git a/src/foundry/client-esm/canvas/sources/base-effect-source.d.mts b/src/foundry/client-esm/canvas/sources/base-effect-source.d.mts
index 8a227c15a..4ea04f286 100644
--- a/src/foundry/client-esm/canvas/sources/base-effect-source.d.mts
+++ b/src/foundry/client-esm/canvas/sources/base-effect-source.d.mts
@@ -209,6 +209,8 @@ declare class BaseEffectSource<
 }
 
 declare namespace BaseEffectSource {
+  type AnyConstructor = typeof AnyBaseEffectSource;
+
   interface BaseEffectSourceOptions {
     /**
      * An optional PlaceableObject which is responsible for this source
@@ -220,6 +222,7 @@ declare namespace BaseEffectSource {
      */
     sourceId?: string | undefined;
   }
+
   interface BaseEffectSourceData {
     /**
      * The x-coordinate of the source location
@@ -240,4 +243,8 @@ declare namespace BaseEffectSource {
   }
 }
 
+declare abstract class AnyBaseEffectSource extends BaseEffectSource<any, any> {
+  constructor(arg0: never, ...args: never[]);
+}
+
 export default BaseEffectSource;
diff --git a/src/foundry/client-esm/canvas/sources/point-effect-source.d.mts b/src/foundry/client-esm/canvas/sources/point-effect-source.d.mts
index 06316ad5c..8596ab9c5 100644
--- a/src/foundry/client-esm/canvas/sources/point-effect-source.d.mts
+++ b/src/foundry/client-esm/canvas/sources/point-effect-source.d.mts
@@ -59,11 +59,13 @@ declare class PointEffectSource {
  * TODO - documentation required about what a PointEffectSource is.
  * @privateRemarks the TODO is from foundry, update this class whenever the comments are done
  */
-declare function PointEffectSourceMixin<BaseClass extends typeof BaseEffectSource<any, any>>(
+declare function PointEffectSourceMixin<BaseClass extends BaseEffectSource.AnyConstructor>(
   Base: BaseClass,
 ): Mixin<typeof PointEffectSource, BaseClass>;
 
 declare namespace PointEffectSourceMixin {
+  type AnyMixed = ReturnType<typeof PointEffectSourceMixin<BaseEffectSource.AnyConstructor>>;
+
   interface PointEffectSourceData extends BaseEffectSource.BaseEffectSourceData {
     /**
      * The radius of the source
diff --git a/src/foundry/client-esm/canvas/sources/point-vision-source.d.mts b/src/foundry/client-esm/canvas/sources/point-vision-source.d.mts
index fc7561a2b..3ad52368c 100644
--- a/src/foundry/client-esm/canvas/sources/point-vision-source.d.mts
+++ b/src/foundry/client-esm/canvas/sources/point-vision-source.d.mts
@@ -4,9 +4,9 @@ import type PointEffectSourceMixin from "./point-effect-source.d.mts";
 /**
  * A specialized subclass of RenderedEffectSource which represents a source of point-based vision.
  */
-declare class PointVisionSource<SourceData extends PointVisionSource.VisionSourceData> extends PointEffectSourceMixin(
-  RenderedEffectSource,
-)<SourceData> {
+declare class PointVisionSource<
+  SourceData extends PointVisionSource.VisionSourceData = PointVisionSource.VisionSourceData,
+> extends PointEffectSourceMixin(RenderedEffectSource)<SourceData> {
   /** @defaultValue `"sight"` */
   static override sourceType: string;
 
@@ -173,26 +173,32 @@ declare namespace PointVisionSource {
      * The amount of contrast
      */
     contrast: number;
+
     /**
      * Strength of the attenuation between bright, dim, and dark
      */
     attenuation: number;
+
     /**
      * The amount of color saturation
      */
     saturation: number;
+
     /**
      * The vision brightness.
      */
     brightness: number;
+
     /**
      * The vision mode.
      */
     visionMode: string;
+
     /**
      * The range of light perception.
      */
     lightRadius: number;
+
     /**
      * Is this vision source blinded?
      */
diff --git a/src/foundry/client-esm/canvas/sources/rendered-effect-source.d.mts b/src/foundry/client-esm/canvas/sources/rendered-effect-source.d.mts
index a6f8c197b..0787aaea7 100644
--- a/src/foundry/client-esm/canvas/sources/rendered-effect-source.d.mts
+++ b/src/foundry/client-esm/canvas/sources/rendered-effect-source.d.mts
@@ -207,6 +207,8 @@ declare class RenderedEffectSource<
 }
 
 declare namespace RenderedEffectSource {
+  type Any = RenderedEffectSource<any, any, any>;
+
   interface RenderedEffectSourceData extends BaseEffectSource.BaseEffectSourceData {
     /**
      * An animation configuration for the source
diff --git a/src/foundry/client/apps/form.d.mts b/src/foundry/client/apps/form.d.mts
index 0e9a41e79..21df2ea87 100644
--- a/src/foundry/client/apps/form.d.mts
+++ b/src/foundry/client/apps/form.d.mts
@@ -406,7 +406,7 @@ declare global {
       initialContent?: string,
     ): Promise<Editor | EditorView>;
 
-    override _render(force?: boolean, options?: Application.RenderOptions<Options>): Promise<void>;
+    protected override _render(force?: boolean, options?: Application.RenderOptions<Options>): Promise<void>;
 
     protected override _renderOuter(): Promise<JQuery<HTMLElement>>;
 
diff --git a/src/foundry/client/config.d.mts b/src/foundry/client/config.d.mts
index a4e4d1200..75b37ae4f 100644
--- a/src/foundry/client/config.d.mts
+++ b/src/foundry/client/config.d.mts
@@ -2,6 +2,7 @@ import type { GetKey, HandleEmptyObject, InterfaceToObject } from "../../types/h
 import type * as CONST from "../common/constants.d.mts";
 import type { StatusEffect } from "./data/documents/token.d.mts";
 import type { DataModel, Document } from "../common/abstract/module.d.mts";
+import type PointLightSource from "../client-esm/canvas/sources/point-light-source.d.mts";
 
 declare global {
   namespace CONFIG {
@@ -2707,7 +2708,10 @@ declare global {
       }
 
       type LightAnimationFunction = (
-        this: PointSource,
+        // `this` is technically not a `PointLightSource`.
+        // Instead it is `foundry.canvas.sources.PointLightSource.prototype`.
+        // However differentiating this would be a lot of work for little gain as nothing critical happens in the constructor.
+        this: PointLightSource,
         dt: number,
         properties?: { speed?: number; intensity?: number; reverse?: false },
       ) => void;
diff --git a/src/foundry/client/data/documents/playlist-sound.d.mts b/src/foundry/client/data/documents/playlist-sound.d.mts
index 872bbb885..46f6edc8d 100644
--- a/src/foundry/client/data/documents/playlist-sound.d.mts
+++ b/src/foundry/client/data/documents/playlist-sound.d.mts
@@ -1,4 +1,5 @@
 import type { InexactPartial } from "../../../../types/utils.d.mts";
+import type Sound from "../../../client-esm/audio/sound.d.mts";
 import type Document from "../../../common/abstract/document.d.mts";
 import type { DocumentDatabaseOperations } from "../../../common/abstract/document.d.mts";
 
diff --git a/src/foundry/client/hooks.d.mts b/src/foundry/client/hooks.d.mts
index e63570e56..d1f6cf910 100644
--- a/src/foundry/client/hooks.d.mts
+++ b/src/foundry/client/hooks.d.mts
@@ -4,10 +4,11 @@ import type Document from "../common/abstract/document.d.mts";
 import type { EffectChangeData } from "../common/documents/_types.d.mts";
 import type { ProseMirrorDropDown } from "../common/prosemirror/menu.d.mts";
 import type { DropData } from "./data/abstract/client-document.d.mts";
-import type { OccludableObject } from "./pixi/placeables/primary-canvas-objects/occludable-object.d.mts";
 
 // eslint-disable-next-line import/no-named-as-default
 import type ProseMirrorMenu from "../common/prosemirror/menu.d.mts";
+import type PointVisionSource from "../client-esm/canvas/sources/point-vision-source.d.mts";
+import type RenderedEffectSource from "../client-esm/canvas/sources/rendered-effect-source.d.mts";
 
 declare global {
   /**
@@ -440,7 +441,7 @@ declare global {
        * @param sources - The collection of current vision sources
        * @remarks This is called by {@link Hooks.call}.
        */
-      initializeVisionSources: (sources: Collection<VisionSource>) => void;
+      initializeVisionSources: (sources: Collection<PointVisionSource.Any>) => void;
 
       /**
        * A hook event that fires when the LightingLayer is refreshed.
@@ -741,14 +742,6 @@ declare global {
         data: object,
       ) => boolean | void;
 
-      /** PrimaryCanvasObject */
-
-      /**
-       * A hook event that fires when the occlusion of an OccludableObject refreshed.
-       * @param object - The boject whose occlusion is refreshed
-       */
-      refreshOcclusion: (object: OccludableObject) => void;
-
       /** Specific implementations of GetEntryContext */
 
       /**
@@ -1055,12 +1048,12 @@ declare global {
 
     /**
      * A hook event that fires after RenderedPointSource shaders have initialized.
-     * @param source  - The RenderedPointSource being initialized.
+     * @param source - The RenderedEffectSource instance being initialized
      * @typeParam RPS - the type of the RenderedPointSource
      * @remarks The name for this hook is dynamically created by wrapping the type name of the shader in `initialize` and `Shaders`.
      * @remarks This is called by {@link Hooks.callAll}.
      */
-    type InitializeRenderedPointSourceShaders<RPS extends RenderedPointSource = RenderedPointSource> = (
+    type InitializeRenderedPointSourceShaders<RPS extends RenderedEffectSource.Any = RenderedEffectSource.Any> = (
       source: RPS,
     ) => void;
 
diff --git a/src/foundry/client/pixi/core/shapes/source-polygon.d.mts b/src/foundry/client/pixi/core/shapes/source-polygon.d.mts
index 2ae5cea80..f4e96b8fe 100644
--- a/src/foundry/client/pixi/core/shapes/source-polygon.d.mts
+++ b/src/foundry/client/pixi/core/shapes/source-polygon.d.mts
@@ -1,4 +1,5 @@
 import type { ConstructorOf } from "../../../../../types/utils.d.mts";
+import type PointEffectSourceMixin from "../../../../client-esm/canvas/sources/point-effect-source.d.mts";
 
 declare global {
   interface PointSourcePolygonConfig {
@@ -27,7 +28,7 @@ declare global {
     debug?: boolean;
 
     /** The object (if any) that spawned this polygon. */
-    source?: PointSource;
+    source?: PointEffectSourceMixin.AnyMixed;
 
     /** Limiting polygon boundary shapes */
     boundaryShapes?: Array<PIXI.Rectangle | PIXI.Circle | PIXI.Polygon>;
diff --git a/src/foundry/client/pixi/groups/primary.d.mts b/src/foundry/client/pixi/groups/primary.d.mts
index 68c59e424..bca47e8d1 100644
--- a/src/foundry/client/pixi/groups/primary.d.mts
+++ b/src/foundry/client/pixi/groups/primary.d.mts
@@ -93,17 +93,17 @@ declare global {
     /**
      * The collection of PrimaryDrawingContainer objects which are rendered in the Scene.
      */
-    drawings: Collection<DrawingShape>;
+    drawings: Collection<PrimaryGraphics>;
 
     /**
      * The collection of SpriteMesh objects which are rendered in the Scene.
      */
-    tokens: Collection<TokenMesh>;
+    tokens: Collection<PrimarySpriteMesh>;
 
     /**
      * The collection of SpriteMesh objects which are rendered in the Scene.
      */
-    tiles: Collection<PrimarySpriteMesh | TileSprite>;
+    tiles: Collection<PrimarySpriteMesh>;
 
     /**
      * The ambience filter which is applying post-processing effects.
diff --git a/src/foundry/client/pixi/layers/grid/layer.d.mts b/src/foundry/client/pixi/layers/grid/layer.d.mts
index 6223872ce..ae3a0ea91 100644
--- a/src/foundry/client/pixi/layers/grid/layer.d.mts
+++ b/src/foundry/client/pixi/layers/grid/layer.d.mts
@@ -1,4 +1,5 @@
 import type { InexactPartial } from "../../../../../types/utils.d.mts";
+import type BaseGrid from "../../../../common/grid/base.d.mts";
 
 declare global {
   /**
diff --git a/src/foundry/client/pixi/placeables/drawing.d.mts b/src/foundry/client/pixi/placeables/drawing.d.mts
index bd829543e..1d6b05d3a 100644
--- a/src/foundry/client/pixi/placeables/drawing.d.mts
+++ b/src/foundry/client/pixi/placeables/drawing.d.mts
@@ -66,7 +66,7 @@ declare global {
      * The primary drawing shape
      * @defaultValue `null`
      */
-    shape: DrawingShape;
+    shape: PrimaryGraphics | PIXI.Graphics;
 
     static override embeddedName: "Drawing";
 
@@ -104,7 +104,7 @@ declare global {
      */
     static readonly SHAPE_TYPES: (typeof foundry.data.ShapeData)["TYPES"];
 
-    override get bounds(): Rectangle;
+    override get bounds(): PIXI.Rectangle;
 
     override get center(): PIXI.Point;
 
diff --git a/src/foundry/client/pixi/placeables/note.d.mts b/src/foundry/client/pixi/placeables/note.d.mts
index f1c0fb788..aa0ec8227 100644
--- a/src/foundry/client/pixi/placeables/note.d.mts
+++ b/src/foundry/client/pixi/placeables/note.d.mts
@@ -43,7 +43,7 @@ declare global {
       refreshText: RenderFlag<Partial<Note.RenderFlags>>;
     };
 
-    override get bounds(): Rectangle;
+    override get bounds(): PIXI.Rectangle;
 
     /**
      * The associated JournalEntry which is described by this note
diff --git a/src/foundry/client/pixi/placeables/primary-canvas-objects/drawing-shape.d.mts b/src/foundry/client/pixi/placeables/primary-canvas-objects/drawing-shape.d.mts
deleted file mode 100644
index 2792da329..000000000
--- a/src/foundry/client/pixi/placeables/primary-canvas-objects/drawing-shape.d.mts
+++ /dev/null
@@ -1,143 +0,0 @@
-import type { Document } from "../../../../common/abstract/module.d.mts";
-
-declare global {
-  /**
-   * A special subclass of PIXI.Container used to represent a Drawing in the PrimaryCanvasGroup.
-   */
-  class DrawingShape extends PrimaryCanvasObjectMixin(PIXI.Graphics) {
-    /**
-     * Sorting values to deal with ties.
-     */
-    static PRIMARY_SORT_ORDER: number;
-
-    /**
-     * @defaultValue
-     * ```js
-     * return foundry.utils.mergeObject(super.defaultData, {
-     *      shape: {
-     *          type: "",
-     *          width: 0,
-     *          height: 0,
-     *          radius: null,
-     *          points: []
-     *      },
-     *      bezierFactor: 0,
-     *      fillType: 0,
-     *      fillColor: 0x7C7C7C,
-     *      fillAlpha: 0.5,
-     *      strokeWidth: 8,
-     *      strokeColor: 0xFFFFFF,
-     *      strokeAlpha: 1,
-     *      text: "New Text",
-     *      fontFamily: "Signika",
-     *      fontSize: 48,
-     *      textColor: 0xFFFFFF,
-     *      textAlpha: 1
-     * })
-     * ```
-     */
-    static override get defaultData(): DrawingShape.PrimaryCanvasObjectDrawingShapeData;
-
-    override refresh(): void;
-
-    override setPosition(): void;
-
-    protected override _getCanvasDocumentData(data: Document.Any): unknown;
-
-    /**
-     * Draw rectangular shapes.
-     */
-    protected _drawRectangle(): void;
-
-    /**
-     * Draw ellipsoid shapes.
-     */
-    protected _drawEllipse(): void;
-
-    /**
-     * Draw polygonal shapes.
-     */
-    protected _drawPolygon(): void;
-
-    /**
-     * Draw freehand shapes with bezier spline smoothing.
-     */
-    protected _drawFreehand(): void;
-  }
-
-  namespace DrawingShape {
-    interface PrimaryCanvasObjectDrawingShapeData extends PrimaryCanvasObjectData {
-      /** The shape */
-      shape: object;
-
-      /** The x-coordinate of the PCO location */
-      x: number;
-
-      /** The y-coordinate of the PCO location */
-      y: number;
-
-      /** The z-index of the PCO */
-      z: number;
-
-      /** The bezier factor */
-      bezierFactor: number;
-
-      /** The fill type */
-      fillType: number;
-
-      /** The fill color */
-      fillColor: number;
-
-      /** The fill alpha */
-      fillAlpha: number;
-
-      /** The stroke width */
-      strokeWidth: number;
-
-      /** The stroke color */
-      strokeColor: number;
-
-      /** The stroke alpha */
-      strokeAlpha: number;
-
-      /** The text */
-      text: string;
-
-      /** The text font family */
-      fontFamily: string;
-
-      /** The font size */
-      fontSize: number;
-
-      /** The text color */
-      textColor: number;
-
-      /** The text alpha */
-      textAlpha: number;
-
-      /** The rotation of this PCO */
-      rotation: number;
-
-      /** The PCO is hidden? */
-      hidden: boolean;
-
-      /** The elevation of the PCO */
-      elevation: number;
-
-      /** The sort key that resolves ties among the same elevation */
-      sort: number;
-
-      /** The PCO is considered as a roof? */
-      roof: boolean;
-
-      /** The PCO is considered as overhead? */
-      overhead: boolean;
-
-      /** The occlusion object for this PCO */
-      occlusion: object;
-
-      /** The data texture values */
-      texture: PIXI.RenderTexture;
-    }
-  }
-}
diff --git a/src/foundry/client/pixi/placeables/primary-canvas-objects/index.d.mts b/src/foundry/client/pixi/placeables/primary-canvas-objects/index.d.mts
index b01650649..b45bd30cb 100644
--- a/src/foundry/client/pixi/placeables/primary-canvas-objects/index.d.mts
+++ b/src/foundry/client/pixi/placeables/primary-canvas-objects/index.d.mts
@@ -1,8 +1,4 @@
-import "./drawing-shape.d.mts";
-import "./occludable-object.d.mts";
 import "./primary-canvas-object.d.mts";
 import "./primary-graphics.d.mts";
 import "./primary-occludable-object.d.mts";
 import "./primary-sprite-mesh.d.mts";
-import "./tile-mesh.d.mts";
-import "./token-mesh.d.mts";
diff --git a/src/foundry/client/pixi/placeables/primary-canvas-objects/occludable-object.d.mts b/src/foundry/client/pixi/placeables/primary-canvas-objects/occludable-object.d.mts
deleted file mode 100644
index 87766d8e3..000000000
--- a/src/foundry/client/pixi/placeables/primary-canvas-objects/occludable-object.d.mts
+++ /dev/null
@@ -1,175 +0,0 @@
-import type { Mixin } from "../../../../../types/utils.d.mts";
-import type { OCCLUSION_MODES } from "../../../../common/constants.d.mts";
-
-declare class OccludableObject {
-  /** @privateRemarks All mixin classses should accept anything for its constructor. */
-  constructor(...args: any[]);
-
-  /**
-   * @defaultValue
-   * ```js
-   * return foundry.utils.mergeObject(super.defaultData, {
-   *    roof: false,
-   *    occlusion: {
-   *        mode: CONST.OCCLUSION_MODES.NONE,
-   *        alpha: 0,
-   *        radius: null
-   *    }
-   * })
-   * ```
-   */
-  static get defaultData(): OccludableObjectData;
-
-  /**
-   * Contains :
-   * - the bounds of the texture data
-   * - the cached mapping of non-transparent pixels (if roof)
-   * - the filtered render texture (if roof)
-   */
-  protected _textureData: {
-    minX: number;
-    minY: number;
-    maxX: number;
-    maxY: number;
-    pixels: Uint8Array;
-    texture: PIXI.RenderTexture;
-  };
-
-  /**
-   * A flag which tracks whether the primary canvas object is currently in an occluded state.
-   * @defaultValue `false`
-   */
-  occluded: boolean;
-
-  /**
-   * Force or cancel the rendering of the PCO depth. If undefined, the underlying logic decide.
-   * @defaultValue `false`
-   */
-  forceRenderDepth: boolean;
-
-  /**
-   * Is this occludable object... occludable?
-   */
-  get isOccludable(): boolean;
-
-  /**
-   * Should this PCO render its depth?
-   */
-  get shouldRenderDepth(): boolean;
-
-  /**
-   * Debounce assignment of the PCO occluded state to avoid cases like animated token movement which can rapidly
-   * change PCO appearance.
-   * Uses a 50ms debounce threshold.
-   */
-  debounceSetOcclusion: (occluded: boolean) => void;
-
-  /**
-   * Compute and returns the normal and occlusion alpha for this occludable object.
-   */
-  protected _getOcclusionAlpha(): { alphaNormal: number; alphaOccluded: number };
-
-  /**
-   * Refresh the appearance of the occlusion state for tiles which are affected by a Token beneath them.
-   */
-  refreshOcclusion(): void;
-
-  /**
-   * Render the depth of this primary canvas object.
-   */
-  renderDepthData(renderer: PIXI.Renderer): void;
-
-  /**
-   * Process the PCO texture :
-   * Use the texture to create a cached mapping of pixel alpha for this Tile with real base texture size.
-   * Cache the bounding box of non-transparent pixels for the un-rotated shape.
-   */
-  updateTextureData(): { minX: number; minY: number; maxX: number; maxY: number; pixels: Uint8Array | undefined };
-
-  /**
-   * Test whether a specific Token occludes this PCO.
-   * Occlusion is tested against 9 points, the center, the four corners-, and the four cardinal directions
-   * @param token   - The Token to test
-   * @param options - Additional options that affect testing
-   * @returns Is the Token occluded by the PCO?
-   */
-  testOcclusion(
-    token: Token,
-    options?: {
-      /** Test corners of the hit-box in addition to the token center? */
-      corners?: boolean;
-    },
-  ): boolean;
-
-  /**
-   * Test whether the PCO pixel data contains a specific point in canvas space
-   * @param alphaThreshold - Value from which the pixel is taken into account, in the range [0, 1].
-   *                         (default: `0.75`)
-   */
-  containsPixel(x: number, y: number, alphaThreshold?: number): boolean;
-
-  /**
-   * Get alpha value at specific canvas coordinate.
-   * @returns The alpha value (-1 if outside of the bounds) or null if no mesh or texture is present.
-   */
-  getPixelAlpha(x: number, y: number): number | null;
-
-  /**
-   * Get PCO alpha map texture coordinate with canvas coordinate
-   * @param testX - Canvas x coordinate.
-   * @param testY - Canvas y coordinate.
-   * @returns The texture `{x, y}` coordinates, or null if not able to do the conversion.
-   */
-  protected _getTextureCoordinate(testX: number, testY: number): { x: number; y: number } | null;
-
-  /**
-   * Compute the alpha-based bounding box for the tile, including an angle of rotation.
-   * @internal
-   */
-  protected _getAlphaBounds(): PIXI.Rectangle;
-
-  /**
-   * @deprecated since v11, will be removed in v13
-   * @remarks "PrimaryCanvasObject#renderOcclusion is deprecated in favor of PrimaryCanvasObject#renderDepth"
-   */
-  renderOcclusion(renderer: PIXI.Renderer): void;
-}
-
-declare global {
-  interface OccludableObjectData extends PrimaryCanvasObjectData {
-    /**
-     * The PCO is considered as a roof?
-     * @defaultValue false
-     */
-    roof: boolean;
-
-    /** The occlusion object for this PCO */
-    occlusion: {
-      /** @defaultValue `CONST.OCCLUSION_MODES.NONE` */
-      mode: OCCLUSION_MODES;
-      /** @defaultValue `0` */
-      alpha: number;
-      /** @defaultValue `null` */
-      radius: number | null;
-    };
-  }
-
-  /**
-   * A mixin which decorates a DisplayObject with depth and/or occlusion properties.
-   * @param DisplayObject - The parent DisplayObject class being mixed
-   * @returns A DisplayObject subclass mixed with OccludableObject features
-   */
-  // It's vaguely nonsensical that OccludableObjectMixin extends PrimaryCanvasObjectMixin because PrimaryCanvasObjectMixin's first parameter is incompatible.
-  // It mostly works at runtime because the defaults will be used.
-  function OccludableObjectMixin<BaseClass extends OccludableObjectMixin.BaseClass>(
-    DisplayObject: BaseClass,
-  ): Mixin<typeof OccludableObject, Mixin<PrimaryCanvasObjectMixin.MixinClass, BaseClass>>;
-
-  namespace OccludableObjectMixin {
-    interface BaseClass extends SpriteMeshClass {
-      new (texture: PIXI.Texture): SpriteMesh;
-    }
-  }
-}
-
-type SpriteMeshClass = typeof SpriteMesh;
diff --git a/src/foundry/client/pixi/placeables/primary-canvas-objects/tile-mesh.d.mts b/src/foundry/client/pixi/placeables/primary-canvas-objects/tile-mesh.d.mts
deleted file mode 100644
index 17f9e9866..000000000
--- a/src/foundry/client/pixi/placeables/primary-canvas-objects/tile-mesh.d.mts
+++ /dev/null
@@ -1,52 +0,0 @@
-import type Document from "../../../../common/abstract/document.d.mts";
-
-declare global {
-  /**
-   * A SpriteMesh which visualizes a Tile object in the PrimaryCanvasGroup.
-   */
-  class TileMesh extends OccludableObjectMixin(SpriteMesh) {
-    override refresh(): void;
-
-    override setPosition(x: number, y: number): void;
-
-    override updateBounds(): void;
-
-    protected override _getCanvasDocumentData(data: Document.Any): unknown;
-  }
-
-  /**
-   * A special case subclass of PIXI.TilingSprite which is used in cases where the tile texture needs to repeat.
-   * This should eventually be refactored in favor of a more generalized TilingMesh.
-   * FIXME: Workaround until we have our custom TilingMesh class.
-   */
-  // @ts-expect-error There's some property mismatches on Foundry's end but this class is going away in v12 anyways
-  class TileSprite extends OccludableObjectMixin(PIXI.TilingSprite) {
-    constructor(...args: any[]);
-
-    override setShaderClass(): void;
-
-    override renderDepthData(): void;
-
-    /**
-     * @remarks Always returns false
-     */
-    override get isOccludable(): boolean;
-
-    /**
-     * @remarks Always returns false
-     */
-    override get shouldRenderDepth(): boolean;
-
-    override shader: PIXI.MeshMaterial;
-
-    /**
-     * @remarks Monkey patch copied from TileMesh.refresh()
-     */
-    override refresh(): void;
-
-    /**
-     * @remarks Monkey patch copied from TileMesh.setPosition()
-     */
-    override setPosition(): void;
-  }
-}
diff --git a/src/foundry/client/pixi/placeables/primary-canvas-objects/token-mesh.d.mts b/src/foundry/client/pixi/placeables/primary-canvas-objects/token-mesh.d.mts
deleted file mode 100644
index f8fe821f5..000000000
--- a/src/foundry/client/pixi/placeables/primary-canvas-objects/token-mesh.d.mts
+++ /dev/null
@@ -1,62 +0,0 @@
-export {};
-
-type Color = number;
-
-declare global {
-  /**
-   * A SpriteMesh which visualizes a Token object in the PrimaryCanvasGroup.
-   */
-  class TokenMesh extends OccludableObjectMixin(SpriteMesh) {
-    /**
-     * Sorting values to deal with ties.
-     * @defaultValue `750`
-     */
-    static PRIMARY_SORT_ORDER: number;
-
-    static override get defaultData(): TokenMesh.Data;
-
-    override refresh(): void;
-
-    override setPosition(x: number, y: number): void;
-
-    override updateBounds(): void;
-
-    protected override _getTextureCoordinate(testX: number, testY: number): { x: number; y: number } | null;
-
-    /**
-     * Get the attributes for this TokenMesh which configure the display of this TokenMesh and are compatible
-     * with CanvasAnimation.
-     */
-    getDisplayAttributes(): TokenMeshDisplayAttributes;
-  }
-
-  namespace TokenMesh {
-    type Data = {
-      /**
-       * Is this TokenMesh rotation locked?
-       * @defaultValue `false`
-       */
-      lockRotation: boolean;
-    } & ReturnType<typeof OccludableObjectMixin<typeof SpriteMesh>>["defaultData"];
-  }
-
-  interface TokenMeshDisplayAttributes {
-    x: number;
-
-    y: number;
-
-    width: number;
-
-    height: number;
-
-    alpha: number;
-
-    rotation: number;
-
-    scaleX: number;
-
-    scaleY: number;
-
-    tint: Color;
-  }
-}
diff --git a/src/foundry/client/pixi/placeables/sound.d.mts b/src/foundry/client/pixi/placeables/sound.d.mts
index c65aef639..d32586ef0 100644
--- a/src/foundry/client/pixi/placeables/sound.d.mts
+++ b/src/foundry/client/pixi/placeables/sound.d.mts
@@ -1,3 +1,4 @@
+import type Sound from "../../../client-esm/audio/sound.d.mts";
 import type { ConfiguredObjectClassOrDefault } from "../../config.d.mts";
 
 declare global {
@@ -76,7 +77,7 @@ declare global {
      */
     get isAudible(): boolean;
 
-    override get bounds(): Rectangle;
+    override get bounds(): PIXI.Rectangle;
 
     /**
      * The named identified for the source object associated with this ambient sound
diff --git a/src/foundry/client/pixi/placeables/template.d.mts b/src/foundry/client/pixi/placeables/template.d.mts
index 20914d6b5..29e801a86 100644
--- a/src/foundry/client/pixi/placeables/template.d.mts
+++ b/src/foundry/client/pixi/placeables/template.d.mts
@@ -100,7 +100,7 @@ declare global {
       refreshText: RenderFlag<Partial<MeasuredTemplate.RenderFlags>>;
     };
 
-    override get bounds(): Rectangle;
+    override get bounds(): PIXI.Rectangle;
 
     /**
      * A convenience accessor for the border color as a numeric hex code
diff --git a/src/foundry/client/pixi/placeables/tile.d.mts b/src/foundry/client/pixi/placeables/tile.d.mts
index b85d3a295..4534c2dd5 100644
--- a/src/foundry/client/pixi/placeables/tile.d.mts
+++ b/src/foundry/client/pixi/placeables/tile.d.mts
@@ -137,7 +137,7 @@ declare global {
      */
     get aspectRatio(): number;
 
-    override get bounds(): Rectangle;
+    override get bounds(): PIXI.Rectangle;
 
     /**
      * The HTML source element for the primary Tile texture
diff --git a/src/foundry/client/pixi/placeables/token.d.mts b/src/foundry/client/pixi/placeables/token.d.mts
index 2c181cadd..45f335b32 100644
--- a/src/foundry/client/pixi/placeables/token.d.mts
+++ b/src/foundry/client/pixi/placeables/token.d.mts
@@ -289,7 +289,7 @@ declare global {
     /**
      * A reference to the SpriteMesh which displays this Token in the PrimaryCanvasGroup.
      */
-    mesh: TokenMesh;
+    mesh: PrimarySpriteMesh;
 
     /**
      * A reference to the VisionSource object which defines this vision source area of effect
@@ -336,7 +336,7 @@ declare global {
      */
     readonly name: string;
 
-    override get bounds(): Rectangle;
+    override get bounds(): PIXI.Rectangle;
 
     /**
      * Translate the token's grid width into a pixel width based on the canvas size
@@ -608,11 +608,12 @@ declare global {
          */
         movementSpeed: number;
 
-        /** The animation starting attributes if different from those cached. */
-        a0: TokenMeshDisplayAttributes;
-
-        /** The placeable need hover/un-hover emulation. */
-        hoverInOut: TokenMeshDisplayAttributes;
+        /**
+         * The animation starting attributes if different from those cached.
+         *
+         * @deprecated since v12, will be removed in v14
+         */
+        a0: unknown;
       },
     ): Promise<void>;
 
@@ -809,12 +810,6 @@ declare global {
      * @remarks "Token#refreshHUD is deprecated in favor of token.renderFlags.set()"
      */
     refreshHUD(options?: Token.ObjectHUD): void;
-
-    /**
-     * @deprecated since 11, will be removed in v13
-     * @remarks `"Token#getDisplayAttributes is deprecated in favor of TokenMesh#getDisplayAttributes"`
-     */
-    getDisplayAttributes(): this["mesh"]["getDisplayAttributes"];
   }
 
   /**
diff --git a/src/foundry/common/primitives/array.d.mts b/src/foundry/common/primitives/array.d.mts
index 16d2315fe..ed3bb8d37 100644
--- a/src/foundry/common/primitives/array.d.mts
+++ b/src/foundry/common/primitives/array.d.mts
@@ -1,4 +1,4 @@
-export {};
+import type { OverlapsWith } from "../../../types/helperTypes.d.mts";
 
 declare global {
   namespace Array {
@@ -17,7 +17,7 @@ declare global {
      * @param other - Some other array against which to test equality
      * @returns Are the two arrays element-wise equal?
      */
-    equals(other: T[]): boolean;
+    equals<O>(other: OverlapsWith<O, T>[]): boolean;
 
     /**
      * Partition an original array into two children array based on a logical test


Test patch:
diff --git a/tests/foundry/client/pixi/layers/grid/grid.test-d.ts b/tests/foundry/client/pixi/layers/grid/grid.test-d.ts
index a3a55cfe3..4260a0052 100644
--- a/tests/foundry/client/pixi/layers/grid/grid.test-d.ts
+++ b/tests/foundry/client/pixi/layers/grid/grid.test-d.ts
@@ -1,6 +1,6 @@
 import { expectTypeOf } from "vitest";
 
-const myGrid = new BaseGrid({
+const myGrid = new foundry.grid.BaseGrid({
   dimensions: {
     width: 1,
     height: 2,
@@ -19,4 +19,4 @@ const myGrid = new BaseGrid({
   alpha: 3,
 });
 
-expectTypeOf(myGrid.draw()).toEqualTypeOf<BaseGrid>();
+expectTypeOf(myGrid.draw()).toEqualTypeOf<foundry.grid.BaseGrid>();
diff --git a/tests/foundry/client/pixi/layers/grid/layer.test-d.ts b/tests/foundry/client/pixi/layers/grid/layer.test-d.ts
index b09e9c960..24c2aa8a0 100644
--- a/tests/foundry/client/pixi/layers/grid/layer.test-d.ts
+++ b/tests/foundry/client/pixi/layers/grid/layer.test-d.ts
@@ -1,4 +1,5 @@
 import { expectTypeOf } from "vitest";
+import type BaseGrid from "../../../../../../src/foundry/common/grid/base.d.mts";
 
 expectTypeOf(GridLayer.instance).toEqualTypeOf<GridLayer | undefined>();
 expectTypeOf(GridLayer.layerOptions).toEqualTypeOf<GridLayer.LayerOptions>();