Skip to content

Commit

Permalink
Merge branch 'v11/data-models' of github.com:League-of-Foundry-Develo…
Browse files Browse the repository at this point in the history
…pers/foundry-vtt-types into v11/data-models
  • Loading branch information
LukeAbby committed Jun 15, 2024
2 parents e6864c1 + 8e4bd32 commit 8a16f83
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 16 deletions.
1 change: 0 additions & 1 deletion src/foundry/client/config.d.mts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import type { ConstructorOf, PropertyTypeOrFallback } from "../../types/utils.d.
import type * as CONST from "../common/constants.d.mts";
import type { StatusEffect } from "./data/documents/token.d.mts";
import type { DataModel } from "../common/abstract/module.d.mts";
import type { SchemaField } from "../common/data/fields.d.mts";

declare global {
/**
Expand Down
29 changes: 19 additions & 10 deletions src/foundry/common/abstract/document.d.mts
Original file line number Diff line number Diff line change
Expand Up @@ -511,12 +511,21 @@ declare abstract class Document<
* (default: `{}`)
* @returns An array of created Document instances
*/
// Excluding FogExploration because it broke polymorphism and is never embedded
createEmbeddedDocuments<EmbeddedName extends Exclude<DocumentType, "FogExploration">>(
// Excluding FogExploration because it broke polymorphism and is never embedded. Can be removed in v12
createEmbeddedDocuments<
EmbeddedName extends Exclude<DocumentType, "FogExploration">,
Temporary extends boolean = false,
>(
embeddedName: EmbeddedName,
data?: Array<ConstructorDataType<ConfiguredDocumentClassForName<EmbeddedName>>>,
context?: DocumentModificationContext, // Possibly a way to specify the parent here, but seems less relevant?
): Promise<Array<InstanceType<ConfiguredDocumentClassForName<EmbeddedName>>>>;
context?: Omit<DocumentModificationContext, "temporary"> & { temporary?: Temporary }, // Possibly a way to specify the parent here, but seems less relevant?
): Promise<
Array<
Temporary extends true
? InstanceType<ConfiguredDocumentClassForName<EmbeddedName>>
: StoredDocument<InstanceType<ConfiguredDocumentClassForName<EmbeddedName>>>
>
>;

/**
* Update multiple embedded Document instances within a parent Document using provided differential data.
Expand All @@ -528,11 +537,11 @@ declare abstract class Document<
* (default: `{}`)
* @returns An array of updated Document instances
*/
updateEmbeddedDocuments(
embeddedName: string,
updateEmbeddedDocuments<EmbeddedName extends Exclude<DocumentType, "FogExploration">>(
embeddedName: EmbeddedName,
updates?: Array<Record<string, unknown>>,
context?: DocumentModificationContext,
): Promise<Array<Document.AnyChild<this>>>;
): Promise<Array<StoredDocument<InstanceType<ConfiguredDocumentClassForName<EmbeddedName>>>>>;

/**
* Delete multiple embedded Document instances within a parent Document using provided string ids.
Expand All @@ -543,11 +552,11 @@ declare abstract class Document<
* (default: `{}`)
* @returns An array of deleted Document instances
*/
deleteEmbeddedDocuments(
embeddedName: string,
deleteEmbeddedDocuments<EmbeddedName extends Exclude<DocumentType, "FogExploration">>(
embeddedName: EmbeddedName,
ids: Array<string>,
context?: DocumentModificationContext,
): Promise<Array<Document.AnyChild<this>>>;
): Promise<Array<StoredDocument<InstanceType<ConfiguredDocumentClassForName<EmbeddedName>>>>>;

/**
* Get the value of a "flag" for this document
Expand Down
10 changes: 5 additions & 5 deletions tests/foundry/common/abstract/document.mjs.test-d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ expectTypeOf(baseActiveEffect.toObject().changes).toEqualTypeOf<EffectChangeData
expectTypeOf(baseActiveEffect.toObject(true).changes).toEqualTypeOf<EffectChangeData[]>();
expectTypeOf(baseActiveEffect.toObject(false).changes).toEqualTypeOf<EffectChangeData[]>();

const item = await Item.create({ name: "Some Item", type: "weapon" });
const item = await Item.create({ name: "Some Item", type: "base" });
if (item) {
expectTypeOf(item.toObject(false).effects[0].changes).toEqualTypeOf<EffectChangeData[]>();
expectTypeOf(item.toObject().effects).toEqualTypeOf<BaseActiveEffect["_source"][]>();
Expand Down Expand Up @@ -59,16 +59,16 @@ if (user) {
// test creation of embedded documents
declare const actor: Actor;
expectTypeOf(actor.createEmbeddedDocuments("ActiveEffect", [], { temporary: true })).toEqualTypeOf<
Promise<foundry.abstract.Document<any, Actor>[]>
Promise<ActiveEffect[]>
>();
expectTypeOf(actor.createEmbeddedDocuments("ActiveEffect", [], { temporary: bool })).toEqualTypeOf<
Promise<foundry.abstract.Document<any, Actor>[]>
Promise<ActiveEffect[] | StoredDocument<ActiveEffect>[]>
>();
expectTypeOf(actor.createEmbeddedDocuments("ActiveEffect", [], { temporary: false })).toEqualTypeOf<
Promise<StoredDocument<foundry.abstract.Document<any, Actor>>[]>
Promise<StoredDocument<ActiveEffect>[]>
>();
expectTypeOf(actor.createEmbeddedDocuments("ActiveEffect", [])).toEqualTypeOf<
Promise<StoredDocument<foundry.abstract.Document<any, Actor>>[]>
Promise<StoredDocument<ActiveEffect>[]>
>();

// verify that document lifecycle methods work with source data is possible
Expand Down

0 comments on commit 8a16f83

Please sign in to comment.