@7h3laughingman/pf2e-helpers 7.10.9 → 7.10.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -50,7 +50,10 @@ export function measureDistanceCuboid(r0, r1, { reach = null, token = null, targ
50
50
  const elevation1 = Math.floor((targetElevation / gridDistance) * gridSize);
51
51
  const height1 = Math.floor((targetDimensions.height / gridDistance) * gridSize);
52
52
  // XZ Plane
53
- const xzPlane = { self: new PIXI.Rectangle(r0.x, elevation0, r0.width, height0), target: new PIXI.Rectangle(r1.x, elevation1, r1.width, height1) };
53
+ const xzPlane = {
54
+ self: new PIXI.Rectangle(r0.x, elevation0, r0.width, height0),
55
+ target: new PIXI.Rectangle(r1.x, elevation1, r1.width, height1)
56
+ };
54
57
  // Check for overlaps
55
58
  const elevationOverlap = [
56
59
  [xzPlane.self, xzPlane.target],
@@ -0,0 +1,124 @@
1
+ import {
2
+ ActiveEffectPF2e,
3
+ ActorPF2e,
4
+ AmbientLightDocumentPF2e,
5
+ AmbientLightPF2e,
6
+ ChatMessagePF2e,
7
+ CombatantPF2e,
8
+ EncounterPF2e,
9
+ ItemPF2e,
10
+ MacroPF2e,
11
+ MeasuredTemplateDocumentPF2e,
12
+ MeasuredTemplatePF2e,
13
+ RegionBehaviorPF2e,
14
+ RegionDocumentPF2e,
15
+ RegionPF2e,
16
+ ScenePF2e,
17
+ TileDocumentPF2e,
18
+ TokenDocumentPF2e,
19
+ TokenPF2e,
20
+ UserPF2e
21
+ } from "@7h3laughingman/pf2e-types";
22
+
23
+ import AmbientSound = foundry.canvas.placeables.AmbientSound;
24
+ import Drawing = foundry.canvas.placeables.Drawing;
25
+ import Note = foundry.canvas.placeables.Note;
26
+ import Tile = foundry.canvas.placeables.Tile;
27
+ import Wall = foundry.canvas.placeables.Wall;
28
+
29
+ export * from "@7h3laughingman/foundry-helpers/utilities";
30
+
31
+ export function isPlaceableObject(value: unknown, embeddedName: "AmbientLight"): value is AmbientLightPF2e;
32
+ export function isPlaceableObject(value: unknown, embeddedName: "AmbientSound"): value is AmbientSound;
33
+ export function isPlaceableObject(value: unknown, embeddedName: "Drawing"): value is Drawing;
34
+ export function isPlaceableObject(value: unknown, embeddedName: "MeasuredTemplate"): value is MeasuredTemplatePF2e;
35
+ export function isPlaceableObject(value: unknown, embeddedName: "Note"): value is Note;
36
+ export function isPlaceableObject(value: unknown, embeddedName: "Region"): value is RegionPF2e;
37
+ export function isPlaceableObject(value: unknown, embeddedName: "Tile"): value is Tile;
38
+ export function isPlaceableObject(value: unknown, embeddedName: "Token"): value is TokenPF2e;
39
+ export function isPlaceableObject(value: unknown, embeddedName: "Wall"): value is Wall;
40
+
41
+ export function placeableObjectHasScene(
42
+ value: Maybe<AmbientLightPF2e>
43
+ ): value is AmbientLightPF2e<AmbientLightDocumentPF2e<ScenePF2e>>;
44
+ export function placeableObjectHasScene(
45
+ value: Maybe<AmbientSound>
46
+ ): value is AmbientSound<AmbientSoundDocument<ScenePF2e>>;
47
+ export function placeableObjectHasScene(value: Maybe<Drawing>): value is Drawing<DrawingDocument<ScenePF2e>>;
48
+ export function placeableObjectHasScene(
49
+ value: Maybe<MeasuredTemplatePF2e>
50
+ ): value is MeasuredTemplatePF2e<MeasuredTemplateDocumentPF2e<ScenePF2e>>;
51
+ export function placeableObjectHasScene(value: Maybe<Note>): value is Note<NoteDocument<ScenePF2e>>;
52
+ export function placeableObjectHasScene(value: Maybe<RegionPF2e>): value is RegionPF2e<RegionDocumentPF2e<ScenePF2e>>;
53
+ export function placeableObjectHasScene(value: Maybe<Tile>): value is Tile<TileDocument<ScenePF2e>>;
54
+ export function placeableObjectHasScene(value: Maybe<TokenPF2e>): value is TokenPF2e<TokenDocumentPF2e<ScenePF2e>>;
55
+ export function placeableObjectHasScene(value: Maybe<Wall>): value is Wall<WallDocument<ScenePF2e>>;
56
+
57
+ export function isDocumentType(
58
+ value: unknown,
59
+ documentName: "ActiveEffect"
60
+ ): value is ActiveEffectPF2e<ActorPF2e | ItemPF2e | null>;
61
+ export function isDocumentType(value: unknown, documentName: "Actor"): value is ActorPF2e;
62
+ export function isDocumentType(value: unknown, documentName: "ActorDelta"): value is ActorDelta;
63
+ export function isDocumentType(value: unknown, documentName: "Adventure"): value is Adventure;
64
+ export function isDocumentType(value: unknown, documentName: "AmbientLight"): value is AmbientLightDocumentPF2e;
65
+ export function isDocumentType(value: unknown, documentName: "AmbientSound"): value is AmbientSoundDocument;
66
+ export function isDocumentType(value: unknown, documentName: "Card"): value is Card;
67
+ export function isDocumentType(value: unknown, documentName: "Cards"): value is Cards;
68
+ export function isDocumentType(value: unknown, documentName: "ChatMessage"): value is ChatMessagePF2e;
69
+ export function isDocumentType(value: unknown, documentName: "Combat"): value is EncounterPF2e;
70
+ export function isDocumentType(value: unknown, documentName: "Combatant"): value is CombatantPF2e;
71
+ export function isDocumentType(value: unknown, documentName: "CombatantGroup"): value is CombatantGroup;
72
+ export function isDocumentType(value: unknown, documentName: "Drawing"): value is DrawingDocument;
73
+ export function isDocumentType(value: unknown, documentName: "FogExploration"): value is FogExploration;
74
+ export function isDocumentType(value: unknown, documentName: "Folder"): value is Folder;
75
+ export function isDocumentType(value: unknown, documentName: "Item"): value is ItemPF2e;
76
+ export function isDocumentType(value: unknown, documentName: "JournalEntry"): value is JournalEntry;
77
+ export function isDocumentType(value: unknown, documentName: "JournalEntryCategory"): value is JournalEntryCategory;
78
+ export function isDocumentType(value: unknown, documentName: "JournalEntryPage"): value is JournalEntryPage;
79
+ export function isDocumentType(value: unknown, documentName: "Macro"): value is MacroPF2e;
80
+ export function isDocumentType(value: unknown, documentName: "MeasuredTemplate"): value is MeasuredTemplateDocument;
81
+ export function isDocumentType(value: unknown, documentName: "Note"): value is NoteDocument;
82
+ export function isDocumentType(value: unknown, documentName: "Playlist"): value is Playlist;
83
+ export function isDocumentType(value: unknown, documentName: "PlaylistSound"): value is PlaylistSound;
84
+ export function isDocumentType(value: unknown, documentName: "Region"): value is RegionDocumentPF2e;
85
+ export function isDocumentType(value: unknown, documentName: "RegionBehavior"): value is RegionBehaviorPF2e;
86
+ export function isDocumentType(value: unknown, documentName: "RollTable"): value is RollTable;
87
+ export function isDocumentType(value: unknown, documentName: "Scene"): value is ScenePF2e;
88
+ export function isDocumentType(value: unknown, documentName: "Setting"): value is Setting;
89
+ export function isDocumentType(value: unknown, documentName: "TableResult"): value is TableResult;
90
+ export function isDocumentType(value: unknown, documentName: "Tile"): value is TileDocumentPF2e;
91
+ export function isDocumentType(value: unknown, documentName: "Token"): value is TokenDocumentPF2e;
92
+ export function isDocumentType(value: unknown, documentName: "User"): value is UserPF2e;
93
+ export function isDocumentType(value: unknown, documentName: "Wall"): value is WallDocument;
94
+
95
+ export function documentHasParent(
96
+ value: Maybe<ActiveEffectPF2e<ActorPF2e | ItemPF2e | null>>
97
+ ): value is ActiveEffectPF2e<ActorPF2e | ItemPF2e>;
98
+ export function documentHasParent(value: Maybe<ActorPF2e>): value is ActorPF2e<TokenDocumentPF2e>;
99
+ export function documentHasParent(value: Maybe<ActorDelta>): value is ActorDelta<TokenDocumentPF2e>;
100
+ export function documentHasParent(value: Maybe<AmbientLightDocumentPF2e>): value is AmbientLightDocumentPF2e<ScenePF2e>;
101
+ export function documentHasParent(value: Maybe<AmbientSoundDocument>): value is AmbientSoundDocument<ScenePF2e>;
102
+ export function documentHasParent(value: Maybe<CombatantPF2e>): value is CombatantPF2e<EncounterPF2e>;
103
+ export function documentHasParent(value: Maybe<CombatantGroup>): value is CombatantGroup<EncounterPF2e>;
104
+ export function documentHasParent(value: Maybe<DrawingDocument>): value is DrawingDocument<ScenePF2e>;
105
+ export function documentHasParent(value: Maybe<ItemPF2e>): value is ItemPF2e<ActorPF2e>;
106
+ export function documentHasParent(value: Maybe<JournalEntryCategory>): value is JournalEntryCategory<JournalEntry>;
107
+ export function documentHasParent(value: Maybe<JournalEntryPage>): value is JournalEntryPage<JournalEntry>;
108
+ export function documentHasParent(value: Maybe<MeasuredTemplateDocument>): value is MeasuredTemplateDocument<Scene>;
109
+ export function documentHasParent(value: Maybe<NoteDocument>): value is NoteDocument<ScenePF2e>;
110
+ export function documentHasParent(value: Maybe<PlaylistSound>): value is PlaylistSound<Playlist>;
111
+ export function documentHasParent(value: Maybe<RegionDocumentPF2e>): value is RegionDocumentPF2e<ScenePF2e>;
112
+ export function documentHasParent(value: Maybe<RegionBehaviorPF2e>): value is RegionBehaviorPF2e<RegionDocumentPF2e>;
113
+ export function documentHasParent(value: Maybe<TableResult>): value is TableResult<RollTable>;
114
+ export function documentHasParent(value: Maybe<TileDocumentPF2e>): value is TileDocumentPF2e<ScenePF2e>;
115
+ export function documentHasParent(value: Maybe<TokenDocumentPF2e>): value is TokenDocumentPF2e<ScenePF2e>;
116
+ export function documentHasParent(value: Maybe<WallDocument>): value is WallDocument<ScenePF2e>;
117
+
118
+ export function getCurrentUser(): UserPF2e;
119
+ export function userIsGM(user?: UserPF2e): boolean;
120
+ export function getPrimaryUpdater(actor: ActorPF2e): UserPF2e | null;
121
+ export function isPrimaryUpdater(actor: ActorPF2e, user?: UserPF2e): boolean;
122
+ export function primaryPlayerOwner(actor: ActorPF2e): UserPF2e | null;
123
+ export function isPrimaryOwner(actor: ActorPF2e, user?: UserPF2e): boolean;
124
+ export function getTargets(user?: UserPF2e): TokenPF2e<TokenDocumentPF2e<ScenePF2e>>[];
@@ -1,49 +1,8 @@
1
- import { ActiveEffectPF2e, ActorPF2e, AmbientLightDocumentPF2e, AmbientLightPF2e, ChatMessagePF2e, CombatantPF2e, EncounterPF2e, ItemPF2e, MacroPF2e, MeasuredTemplateDocumentPF2e, MeasuredTemplatePF2e, RegionBehaviorPF2e, RegionDocumentPF2e, RegionPF2e, ScenePF2e, TileDocumentPF2e, TokenDocumentPF2e, TokenPF2e, UserPF2e } from "@7h3laughingman/pf2e-types";
2
- declare module "@7h3laughingman/foundry-helpers/utilities" {
3
- function isPlaceableObject(value: unknown, embeddedName: "AmbientLight"): value is AmbientLightPF2e;
4
- function isPlaceableObject(value: unknown, embeddedName: "MeasuredTemplate"): value is MeasuredTemplatePF2e;
5
- function isPlaceableObject(value: unknown, embeddedName: "Region"): value is RegionPF2e;
6
- function isPlaceableObject(value: unknown, embeddedName: "Token"): value is TokenPF2e;
7
- function placeableObjectHasScene(value: Maybe<AmbientLightPF2e>): value is AmbientLightPF2e<AmbientLightDocumentPF2e<ScenePF2e>>;
8
- function placeableObjectHasScene(value: Maybe<MeasuredTemplatePF2e>): value is MeasuredTemplatePF2e<MeasuredTemplateDocumentPF2e<ScenePF2e>>;
9
- function placeableObjectHasScene(value: Maybe<RegionPF2e>): value is RegionPF2e<RegionDocumentPF2e<ScenePF2e>>;
10
- function placeableObjectHasScene(value: Maybe<TokenPF2e>): value is TokenPF2e<TokenDocumentPF2e<ScenePF2e>>;
11
- function isDocumentType(value: unknown, documentName: "ActiveEffect"): value is ActiveEffectPF2e<ActorPF2e | ItemPF2e | null>;
12
- function isDocumentType(value: unknown, documentName: "Actor"): value is ActorPF2e;
13
- function isDocumentType(value: unknown, documentName: "AmbientLight"): value is AmbientLightDocumentPF2e;
14
- function isDocumentType(value: unknown, documentName: "ChatMessage"): value is ChatMessagePF2e;
15
- function isDocumentType(value: unknown, documentName: "Combat"): value is EncounterPF2e;
16
- function isDocumentType(value: unknown, documentName: "Combatant"): value is CombatantPF2e;
17
- function isDocumentType(value: unknown, documentName: "Item"): value is ItemPF2e;
18
- function isDocumentType(value: unknown, documentName: "Macro"): value is MacroPF2e;
19
- function isDocumentType(value: unknown, documentName: "Region"): value is RegionDocumentPF2e;
20
- function isDocumentType(value: unknown, documentName: "RegionBehavior"): value is RegionBehaviorPF2e;
21
- function isDocumentType(value: unknown, documentName: "Scene"): value is ScenePF2e;
22
- function isDocumentType(value: unknown, documentName: "Tile"): value is TileDocumentPF2e;
23
- function isDocumentType(value: unknown, documentName: "Token"): value is TokenDocumentPF2e;
24
- function isDocumentType(value: unknown, documentName: "User"): value is UserPF2e;
25
- function documentHasParent(value: Maybe<ActiveEffectPF2e<ActorPF2e | ItemPF2e | null>>): value is ActiveEffectPF2e<ActorPF2e | ItemPF2e>;
26
- function documentHasParent(value: Maybe<ActorPF2e>): value is ActorPF2e<TokenDocumentPF2e>;
27
- function documentHasParent(value: Maybe<AmbientLightDocumentPF2e>): value is AmbientLightDocumentPF2e<ScenePF2e>;
28
- function documentHasParent(value: Maybe<CombatantPF2e>): value is CombatantPF2e<EncounterPF2e>;
29
- function documentHasParent(value: Maybe<ItemPF2e>): value is ItemPF2e<ActorPF2e>;
30
- function documentHasParent(value: Maybe<RegionDocumentPF2e>): value is RegionDocumentPF2e<ScenePF2e>;
31
- function documentHasParent(value: Maybe<RegionBehaviorPF2e>): value is RegionBehaviorPF2e<RegionDocumentPF2e>;
32
- function documentHasParent(value: Maybe<TileDocumentPF2e>): value is TileDocumentPF2e<ScenePF2e>;
33
- function documentHasParent(value: Maybe<TokenDocumentPF2e>): value is TokenDocumentPF2e<ScenePF2e>;
34
- function getCurrentUser(): UserPF2e;
35
- function userIsGM(user?: UserPF2e): boolean;
36
- function getPrimaryUpdater(actor: ActorPF2e): UserPF2e | null;
37
- function isPrimaryUpdater(actor: ActorPF2e, user?: UserPF2e): boolean;
38
- function primaryPlayerOwner(actor: ActorPF2e): UserPF2e | null;
39
- function isPrimaryOwner(actor: ActorPF2e, user?: UserPF2e): boolean;
40
- function getTargets(user?: UserPF2e): TokenPF2e<TokenDocumentPF2e<ScenePF2e>>[];
41
- }
42
- export * from "@7h3laughingman/foundry-helpers/utilities";
43
1
  export * from "./alliance.js";
44
2
  export * from "./check.js";
45
3
  export * from "./damage.js";
46
4
  export * from "./distance.js";
5
+ export * from "./foundry-helpers.js";
47
6
  export * from "./notes.js";
48
7
  export * from "./roll.js";
49
8
  export * from "./scene.js";
@@ -1,8 +1,8 @@
1
- export * from "@7h3laughingman/foundry-helpers/utilities";
2
1
  export * from "./alliance.js";
3
2
  export * from "./check.js";
4
3
  export * from "./damage.js";
5
4
  export * from "./distance.js";
5
+ export * from "./foundry-helpers.js";
6
6
  export * from "./notes.js";
7
7
  export * from "./roll.js";
8
8
  export * from "./scene.js";
@@ -0,0 +1,2 @@
1
+ import { AbilityItemPF2e, ActorPF2e, MeleePF2e, WeaponPF2e } from "@7h3laughingman/pf2e-types";
2
+ export declare function isWeapon(value: unknown): value is AbilityItemPF2e<ActorPF2e> | WeaponPF2e<ActorPF2e> | MeleePF2e<ActorPF2e>;
@@ -0,0 +1,4 @@
1
+ import { documentHasParent, isDocumentType } from "./foundry-helpers.js";
2
+ export function isWeapon(value) {
3
+ return isDocumentType(value, "Item") && documentHasParent(value) && value.isOfType("action", "weapon", "melee");
4
+ }
@@ -0,0 +1,52 @@
1
+ import { ActorTraitsRuleElement, AdjustDegreeOfSuccessRuleElement, AdjustModifierRuleElement, AdjustStrikeRuleElement, AELikeRuleElement, AELikeSchema, AuraRuleElement, BaseSpeedRuleElement, BattleFormRuleElement, ChoiceSetRuleElement, CraftingAbilityRuleElement, CreatureSizeRuleElement, CritSpecRuleElement, DamageAlterationRuleElement, DamageDiceRuleElement, DexterityModifierCapRuleElement, EphemeralEffectRuleElement, FastHealingRuleElement, FlatModifierRuleElement, GrantItemRuleElement, ImmunityRuleElement, ItemAlterationRuleElement, ItemSourcePF2e, LoseHitPointsRuleElement, MartialProficiencyRuleElement, MultipleAttackPenaltyRuleElement, ResistanceRuleElement, RollNoteRuleElement, RollOptionRuleElement, RollTwiceRuleElement, SenseRuleElement, SpecialResourceRuleElement, SpecialStatisticRuleElement, StrikeRuleElement, SubstituteRollRuleElement, TempHPRuleElement, TokenDocumentPF2e, TokenEffectIconRuleElement, TokenImageRuleElement, TokenLightRuleElement, TokenMarkRuleElement, TokenNameRuleElement, WeaknessRuleElement } from "@7h3laughingman/pf2e-types";
2
+ export declare function getChoiceSetSelection<T extends ItemSourcePF2e>(itemSource: T, { flag }?: {
3
+ flag?: string;
4
+ }): string | number | boolean | object | undefined;
5
+ export declare function setChoiceSet<T extends ItemSourcePF2e>(itemSource: T, { flag, selection }: {
6
+ flag?: string;
7
+ selection: string | number | boolean;
8
+ }): T;
9
+ export declare function setTokenMark<T extends ItemSourcePF2e>(itemSource: T, { slug, token }: {
10
+ slug: string;
11
+ token: TokenDocumentPF2e;
12
+ }): T;
13
+ export declare function isRuleElement(value: unknown, key: "ActiveEffectLike"): value is AELikeRuleElement<AELikeSchema>;
14
+ export declare function isRuleElement(value: unknown, key: "ActorTraits"): value is ActorTraitsRuleElement;
15
+ export declare function isRuleElement(value: unknown, key: "AdjustDegreeOfSuccess"): value is AdjustDegreeOfSuccessRuleElement;
16
+ export declare function isRuleElement(value: unknown, key: "AdjustModifier"): value is AdjustModifierRuleElement;
17
+ export declare function isRuleElement(value: unknown, key: "AdjustStrike"): value is AdjustStrikeRuleElement;
18
+ export declare function isRuleElement(value: unknown, key: "Aura"): value is AuraRuleElement;
19
+ export declare function isRuleElement(value: unknown, key: "BaseSpeed"): value is BaseSpeedRuleElement;
20
+ export declare function isRuleElement(value: unknown, key: "BattleForm"): value is BattleFormRuleElement;
21
+ export declare function isRuleElement(value: unknown, key: "ChoiceSet"): value is ChoiceSetRuleElement;
22
+ export declare function isRuleElement(value: unknown, key: "CraftingAbility"): value is CraftingAbilityRuleElement;
23
+ export declare function isRuleElement(value: unknown, key: "CreatureSize"): value is CreatureSizeRuleElement;
24
+ export declare function isRuleElement(value: unknown, key: "CriticalSpecialization"): value is CritSpecRuleElement;
25
+ export declare function isRuleElement(value: unknown, key: "DamageAlteration"): value is DamageAlterationRuleElement;
26
+ export declare function isRuleElement(value: unknown, key: "DamageDice"): value is DamageDiceRuleElement;
27
+ export declare function isRuleElement(value: unknown, key: "DexterityModifierCap"): value is DexterityModifierCapRuleElement;
28
+ export declare function isRuleElement(value: unknown, key: "EphemeralEffect"): value is EphemeralEffectRuleElement;
29
+ export declare function isRuleElement(value: unknown, key: "FastHealing"): value is FastHealingRuleElement;
30
+ export declare function isRuleElement(value: unknown, key: "FlatModifier"): value is FlatModifierRuleElement;
31
+ export declare function isRuleElement(value: unknown, key: "GrantItem"): value is GrantItemRuleElement;
32
+ export declare function isRuleElement(value: unknown, key: "Immunity"): value is ImmunityRuleElement;
33
+ export declare function isRuleElement(value: unknown, key: "ItemAlteration"): value is ItemAlterationRuleElement;
34
+ export declare function isRuleElement(value: unknown, key: "LoseHitPoints"): value is LoseHitPointsRuleElement;
35
+ export declare function isRuleElement(value: unknown, key: "MartialProficiency"): value is MartialProficiencyRuleElement;
36
+ export declare function isRuleElement(value: unknown, key: "MultipleAttackPenalty"): value is MultipleAttackPenaltyRuleElement;
37
+ export declare function isRuleElement(value: unknown, key: "Note"): value is RollNoteRuleElement;
38
+ export declare function isRuleElement(value: unknown, key: "Resistance"): value is ResistanceRuleElement;
39
+ export declare function isRuleElement(value: unknown, key: "RollOption"): value is RollOptionRuleElement;
40
+ export declare function isRuleElement(value: unknown, key: "RollTwice"): value is RollTwiceRuleElement;
41
+ export declare function isRuleElement(value: unknown, key: "Sense"): value is SenseRuleElement;
42
+ export declare function isRuleElement(value: unknown, key: "SpecialResource"): value is SpecialResourceRuleElement;
43
+ export declare function isRuleElement(value: unknown, key: "SpecialStatistic"): value is SpecialStatisticRuleElement;
44
+ export declare function isRuleElement(value: unknown, key: "Strike"): value is StrikeRuleElement;
45
+ export declare function isRuleElement(value: unknown, key: "SubstituteRoll"): value is SubstituteRollRuleElement;
46
+ export declare function isRuleElement(value: unknown, key: "TempHP"): value is TempHPRuleElement;
47
+ export declare function isRuleElement(value: unknown, key: "TokenEffectIcon"): value is TokenEffectIconRuleElement;
48
+ export declare function isRuleElement(value: unknown, key: "TokenImage"): value is TokenImageRuleElement;
49
+ export declare function isRuleElement(value: unknown, key: "TokenLight"): value is TokenLightRuleElement;
50
+ export declare function isRuleElement(value: unknown, key: "TokenMark"): value is TokenMarkRuleElement;
51
+ export declare function isRuleElement(value: unknown, key: "TokenName"): value is TokenNameRuleElement;
52
+ export declare function isRuleElement(value: unknown, key: "Weakness"): value is WeaknessRuleElement;
@@ -0,0 +1,29 @@
1
+ import { zChoiceSetSource } from "#zod/rules/choice-set.js";
2
+ import { zTokenMarkSource } from "#zod/rules/token-mark.js";
3
+ import { zIs } from "#zod/type-guards.js";
4
+ export function getChoiceSetSelection(itemSource, { flag } = {}) {
5
+ return itemSource.system.rules
6
+ .filter((rule) => zIs(rule, zChoiceSetSource))
7
+ .find((rule) => (flag === undefined ? true : rule.flag === flag))?.selection;
8
+ }
9
+ export function setChoiceSet(itemSource, { flag, selection }) {
10
+ const returnValue = foundry.utils.deepClone(itemSource);
11
+ const choiceSet = returnValue.system.rules
12
+ .filter((rule) => zIs(rule, zChoiceSetSource))
13
+ .find((rule) => (flag === undefined ? true : rule.flag === flag));
14
+ if (choiceSet)
15
+ choiceSet.selection = selection;
16
+ return returnValue;
17
+ }
18
+ export function setTokenMark(itemSource, { slug, token }) {
19
+ const returnValue = foundry.utils.deepClone(itemSource);
20
+ const tokenMark = returnValue.system.rules
21
+ .filter((rule) => zIs(rule, zTokenMarkSource))
22
+ .find((rule) => rule.slug === slug);
23
+ if (tokenMark)
24
+ tokenMark.uuid = token.uuid;
25
+ return returnValue;
26
+ }
27
+ export function isRuleElement(value, key) {
28
+ return value instanceof game.pf2e.RuleElements.builtin[key];
29
+ }
@@ -3,6 +3,9 @@ export declare function getTokens(scene: Maybe<ScenePF2e>, args?: {
3
3
  allyOf?: TokenPF2e | TokenDocumentPF2e | ActorPF2e;
4
4
  enemyOf?: TokenPF2e | TokenDocumentPF2e | ActorPF2e;
5
5
  adjacentTo?: TokenPF2e | TokenDocumentPF2e;
6
- distanceTo?: TokenPF2e | TokenDocumentPF2e;
7
- distance?: number;
6
+ distanceTo?: {
7
+ target: TokenPF2e | TokenDocumentPF2e;
8
+ distance: number;
9
+ };
10
+ predicate?: (value: TokenDocumentPF2e<ScenePF2e>) => boolean;
8
11
  }): TokenDocumentPF2e<ScenePF2e>[];
@@ -7,5 +7,8 @@ export function getTokens(scene, args = {}) {
7
7
  return scene.tokens.filter((token) => (R.isNonNullish(args.allyOf) ? isAllyOf(args.allyOf, token) : true) &&
8
8
  (R.isNonNullish(args.enemyOf) ? isEnemyOf(args.enemyOf, token) : true) &&
9
9
  (R.isNonNullish(args.adjacentTo) ? isAdjacentTo(args.adjacentTo, token) : true) &&
10
- (R.isNonNullish(args.distanceTo) ? distanceTo(args.distanceTo, token) <= (args.distance ?? 0) : true));
10
+ (R.isNonNullish(args.distanceTo)
11
+ ? distanceTo(args.distanceTo.target, token) <= args.distanceTo.distance
12
+ : true) &&
13
+ (R.isNonNullish(args.predicate) ? args.predicate(token) : true));
11
14
  }
@@ -1,3 +1,5 @@
1
1
  import { TokenDocumentPF2e, TokenPF2e } from "@7h3laughingman/pf2e-types";
2
2
  export declare function isAdjacentTo(a: Maybe<TokenPF2e | TokenDocumentPF2e>, b: Maybe<TokenPF2e | TokenDocumentPF2e>): boolean;
3
- export declare function distanceTo(a: Maybe<TokenPF2e | TokenDocumentPF2e>, b: Maybe<TokenPF2e | TokenDocumentPF2e>): number;
3
+ export declare function distanceTo(a: Maybe<TokenPF2e | TokenDocumentPF2e>, b: Maybe<TokenPF2e | TokenDocumentPF2e>, { reach }?: {
4
+ reach?: number;
5
+ }): number;
@@ -4,8 +4,8 @@ export function isAdjacentTo(a, b) {
4
4
  const tokenB = b instanceof TokenDocument ? b.object : b;
5
5
  return R.isNonNullish(tokenA) && R.isNonNullish(tokenB) && tokenA.isAdjacentTo(tokenB);
6
6
  }
7
- export function distanceTo(a, b) {
7
+ export function distanceTo(a, b, { reach } = {}) {
8
8
  const tokenA = a instanceof TokenDocument ? a.object : a;
9
9
  const tokenB = b instanceof TokenDocument ? b.object : b;
10
- return R.isNonNullish(tokenA) && R.isNonNullish(tokenB) ? tokenA.distanceTo(tokenB) : 0;
10
+ return R.isNonNullish(tokenA) && R.isNonNullish(tokenB) ? tokenA.distanceTo(tokenB, { reach }) : 0;
11
11
  }
@@ -8,4 +8,9 @@ export const zAttitude = z.custom((data) => R.isString(data) && Object.hasOwn(CO
8
8
  export const zModeOfBeing = z.literal(["living", "undead", "construct", "object"]);
9
9
  export const zSenseAcuity = z.literal(["precise", "imprecise", "vague"]);
10
10
  export const zSenseType = z.custom((data) => R.isString(data) && Object.hasOwn(CONFIG.PF2E.senses, data));
11
- export const zSpecialVisionType = z.literal(["low-light-vision", "darkvision", "greater-darkvision", "see-invisibility"]);
11
+ export const zSpecialVisionType = z.literal([
12
+ "low-light-vision",
13
+ "darkvision",
14
+ "greater-darkvision",
15
+ "see-invisibility"
16
+ ]);
@@ -1,2 +1,10 @@
1
1
  import * as z from "zod";
2
- export const zModifierType = z.literal(["ability", "circumstance", "item", "potency", "proficiency", "status", "untyped"]);
2
+ export const zModifierType = z.literal([
3
+ "ability",
4
+ "circumstance",
5
+ "item",
6
+ "potency",
7
+ "proficiency",
8
+ "status",
9
+ "untyped"
10
+ ]);
@@ -1,7 +1,9 @@
1
1
  import * as R from "remeda";
2
2
  import * as z from "zod";
3
3
  export function zDocument(type) {
4
- return z.custom((value) => R.isIncludedIn(type, CONST.ALL_DOCUMENT_TYPES) && R.isNonNullish(value) && value instanceof getDocumentClass(type));
4
+ return z.custom((value) => R.isIncludedIn(type, CONST.ALL_DOCUMENT_TYPES) &&
5
+ R.isNonNullish(value) &&
6
+ value instanceof getDocumentClass(type));
5
7
  }
6
8
  export function zDocumentUUID(type, embedded) {
7
9
  return z.custom((value) => {
@@ -66,4 +66,10 @@ export const zArmorPropertyRuneType = z.literal([
66
66
  export const zArmorTrait = z.lazy(() => z.literal(R.keys(CONFIG.PF2E.armorTraits)));
67
67
  export const zBaseArmorType = z.lazy(() => z.literal(R.keys(CONFIG.PF2E.baseArmorTypes)));
68
68
  export const zOtherArmorTag = z.lazy(() => z.literal(R.keys(CONFIG.PF2E.otherArmorTags)));
69
- export const zResilientRuneType = z.literal(["", "resilient", "greaterResilient", "majorResilient", "mythicResilient"]);
69
+ export const zResilientRuneType = z.literal([
70
+ "",
71
+ "resilient",
72
+ "greaterResilient",
73
+ "majorResilient",
74
+ "mythicResilient"
75
+ ]);
@@ -10,7 +10,13 @@ export declare const zBaseMaterialThickness: z.ZodLiteral<"standard" | "structur
10
10
  export declare const zBaseMaterial: z.ZodType<BaseMaterial, BaseMaterial>;
11
11
  export declare const zCoinDenomination: z.ZodLiteral<CoinDenomination>;
12
12
  export declare const zCurrency: z.ZodLazy<z.ZodLiteral<Currency>>;
13
- export declare const zPhysicalItemTrait: z.ZodUnion<[typeof zArmorTrait, typeof zConsumableTrait, typeof zEquipmentTrait, typeof zShieldTrait, typeof zWeaponTrait]>;
13
+ export declare const zPhysicalItemTrait: z.ZodUnion<[
14
+ typeof zArmorTrait,
15
+ typeof zConsumableTrait,
16
+ typeof zEquipmentTrait,
17
+ typeof zShieldTrait,
18
+ typeof zWeaponTrait
19
+ ]>;
14
20
  export declare const zPhysicalItemType: z.ZodLiteral<PhysicalItemType>;
15
21
  export declare const zPreciousMaterialType: z.ZodLazy<z.ZodLiteral<PreciousMaterialType>>;
16
22
  export declare const zPreciousMaterialGrade: z.ZodLazy<z.ZodLiteral<PreciousMaterialGrade>>;
@@ -5,7 +5,17 @@ import { zConsumableTrait } from "./consumable.js";
5
5
  import { zEquipmentTrait } from "./equipment.js";
6
6
  import { zShieldTrait } from "./shield.js";
7
7
  import { zWeaponTrait } from "./weapon.js";
8
- export const zBaseMaterialType = z.literal(["bone", "cloth", "glass", "leather", "paper", "rope", "steel", "stone", "wood"]);
8
+ export const zBaseMaterialType = z.literal([
9
+ "bone",
10
+ "cloth",
11
+ "glass",
12
+ "leather",
13
+ "paper",
14
+ "rope",
15
+ "steel",
16
+ "stone",
17
+ "wood"
18
+ ]);
9
19
  export const zBaseMaterialThickness = z.literal(["thin", "standard", "structure"]);
10
20
  export const zBaseMaterial = z.strictObject({
11
21
  type: zBaseMaterialType,
@@ -5,4 +5,12 @@ export const zRangeData = z.strictObject({
5
5
  increment: z.number().nullable(),
6
6
  max: z.number()
7
7
  });
8
- export const zEffectAreaShape = z.literal(["burst", "cone", "cube", "cylinder", "emanation", "line", "square"]);
8
+ export const zEffectAreaShape = z.literal([
9
+ "burst",
10
+ "cone",
11
+ "cube",
12
+ "cylinder",
13
+ "emanation",
14
+ "line",
15
+ "square"
16
+ ]);
@@ -98,5 +98,10 @@ export const zWeaponRangeIncrement = z.literal([
98
98
  10, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 140, 150, 180, 200, 240, 300
99
99
  ]);
100
100
  export const zWeaponReloadTime = z.lazy(() => z.literal(R.keys(CONFIG.PF2E.weaponReload)));
101
- export const zStrikingRuneType = z.literal(["striking", "greaterStriking", "majorStriking", "mythicStriking"]);
101
+ export const zStrikingRuneType = z.literal([
102
+ "striking",
103
+ "greaterStriking",
104
+ "majorStriking",
105
+ "mythicStriking"
106
+ ]);
102
107
  export const zWeaponMaterialType = z.lazy(() => z.literal(R.keys(CONFIG.PF2E.preciousMaterials).filter((value) => value !== "dragonhide" && value !== "grisantian-pelt" && value !== "dreamweb")));
@@ -1,6 +1,14 @@
1
1
  import * as z from "zod";
2
2
  import { zRuleElementSource, zRuleValue } from "./base.js";
3
- export const zAELikeChangeMode = z.literal(["multiply", "add", "subtract", "remove", "downgrade", "upgrade", "override"]);
3
+ export const zAELikeChangeMode = z.literal([
4
+ "multiply",
5
+ "add",
6
+ "subtract",
7
+ "remove",
8
+ "downgrade",
9
+ "upgrade",
10
+ "override"
11
+ ]);
4
12
  export const zAELikeDataPrepPhase = z.literal(["applyAEs", "beforeDerived", "afterDerived", "beforeRoll"]);
5
13
  export const zAELikeSource = zRuleElementSource.extend({
6
14
  key: z.literal("ActiveEffectLike"),
@@ -30,7 +30,12 @@ export const zChoiceSetConfig = z.strictObject({
30
30
  config: z.string(),
31
31
  predicate: zRawPredicate.optional()
32
32
  });
33
- export const zChoiceSetObject = z.union([zChoiceSetOwnedItems, zChoiceSetAttacks, zChoiceSetPackQuery, zChoiceSetConfig]);
33
+ export const zChoiceSetObject = z.union([
34
+ zChoiceSetOwnedItems,
35
+ zChoiceSetAttacks,
36
+ zChoiceSetPackQuery,
37
+ zChoiceSetConfig
38
+ ]);
34
39
  export const zChoiceSetSource = zRuleElementSource.extend({
35
40
  key: z.literal("ChoiceSet"),
36
41
  choices: z.union([z.array(zPickableThing), zChoiceSetObject, z.string()]).optional(),
@@ -12,7 +12,9 @@ export const zRollOptionSource = zRuleElementSource.extend({
12
12
  domain: z.string().optional(),
13
13
  option: z.string().optional(),
14
14
  phase: zAELikeDataPrepPhase.optional(),
15
- suboptions: z.union([z.array(zSuboption), z.strictObject({ config: z.string(), predicate: zRawPredicate.optional() })]).optional(),
15
+ suboptions: z
16
+ .union([z.array(zSuboption), z.strictObject({ config: z.string(), predicate: zRawPredicate.optional() })])
17
+ .optional(),
16
18
  mergeable: z.boolean().optional(),
17
19
  value: z.union([z.boolean(), z.string()]).optional(),
18
20
  selection: z.string().optional(),
@@ -1,6 +1,10 @@
1
1
  import * as R from "remeda";
2
2
  import * as z from "zod";
3
- export const zDamageCategoryUnique = z.literal(["persistent", "precision", "splash"]);
3
+ export const zDamageCategoryUnique = z.literal([
4
+ "persistent",
5
+ "precision",
6
+ "splash"
7
+ ]);
4
8
  export const zDamageCategory = z.lazy(() => z.literal(R.keys(CONFIG.PF2E.damageCategories)));
5
9
  export const zDamageDiceFaces = z.literal([4, 6, 8, 10, 12]);
6
10
  export const zDamageDieSize = z.literal(["d4", "d6", "d8", "d10", "d12"]);
@@ -11,4 +11,9 @@ export const zDegreeAdjustmentAmount = z.literal([
11
11
  "criticalSuccess"
12
12
  ]);
13
13
  export const zDegreeOfSuccessIndex = zZeroToThree;
14
- export const zDegreeOfSuccessString = z.literal(["criticalFailure", "failure", "success", "criticalSuccess"]);
14
+ export const zDegreeOfSuccessString = z.literal([
15
+ "criticalFailure",
16
+ "failure",
17
+ "success",
18
+ "criticalSuccess"
19
+ ]);
@@ -27,5 +27,8 @@ const zCompoundStatement = z.union([
27
27
  zConditional,
28
28
  zBiconditional
29
29
  ]);
30
- export const zPredicateStatement = z.union([zAtom, zCompoundStatement]);
30
+ export const zPredicateStatement = z.union([
31
+ zAtom,
32
+ zCompoundStatement
33
+ ]);
31
34
  export const zRawPredicate = z.array(zPredicateStatement);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@7h3laughingman/pf2e-helpers",
3
- "version": "7.10.9",
3
+ "version": "7.10.11",
4
4
  "description": "Basic helpers used for developed modules for the PF2e/SF2e system.",
5
5
  "homepage": "https://github.com/7H3LaughingMan/pf2e-helpers#readme",
6
6
  "bugs": {
@@ -19,12 +19,16 @@
19
19
  "./utilities": "./dist/utilities/index.js",
20
20
  "./zod": "./dist/zod/index.js"
21
21
  },
22
+ "imports": {
23
+ "#utilities/*": "./src/utilities/*",
24
+ "#zod/*": "./src/zod/*"
25
+ },
22
26
  "files": [
23
27
  "./dist/*"
24
28
  ],
25
29
  "scripts": {
26
30
  "tsc": "tsc",
27
- "copy-dts": "copyfiles -u 1 \"src/**/*.d.ts\" dist",
31
+ "copy-dts": "copyfiles src/**/*.d.ts dist -u 1",
28
32
  "eslint": "eslint src",
29
33
  "eslint:fix": "eslint src --fix && prettier src --write",
30
34
  "prepare": "husky"
@@ -39,15 +43,15 @@
39
43
  "devDependencies": {
40
44
  "@eslint/js": "^10.0.1",
41
45
  "@eslint/json": "^1.0.1",
42
- "copyfiles": "^2.4.1",
43
- "eslint": "^10.0.1",
46
+ "eslint": "^10.0.2",
44
47
  "eslint-config-prettier": "^10.1.8",
45
48
  "eslint-plugin-prettier": "^5.5.5",
46
49
  "husky": "^9.1.7",
47
50
  "lint-staged": "^16.2.7",
51
+ "native-copyfiles": "^2.0.1",
48
52
  "prettier-plugin-organize-imports": "^4.3.0",
49
53
  "typescript": "5.9.3",
50
- "typescript-eslint": "^8.56.0"
54
+ "typescript-eslint": "^8.56.1"
51
55
  },
52
56
  "engines": {
53
57
  "node": ">=24"