From 16de03d13a2c1d618b62ae8aaf71a4ddcc0e9bb4 Mon Sep 17 00:00:00 2001 From: Lector Date: Tue, 23 Jun 2026 21:21:16 +0200 Subject: [PATCH 1/6] Added cantrips and blessings to activatable prereqs --- src/types/_IdentifierGroup.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/types/_IdentifierGroup.ts b/src/types/_IdentifierGroup.ts index e8c5aa57..f23794fc 100644 --- a/src/types/_IdentifierGroup.ts +++ b/src/types/_IdentifierGroup.ts @@ -140,6 +140,8 @@ export const ActivatableIdentifier = DB.Enum(import.meta.url, { values: () => ({ Advantage: DB.EnumCase({ type: AdvantageIdentifier() }), Disadvantage: DB.EnumCase({ type: DisadvantageIdentifier() }), + Cantrip: DB.EnumCase({ type: CantripIdentifier() }), + Blessing: DB.EnumCase({ type: BlessingIdentifier() }), ...SpecialAbilityIdentifier.type.value.values, }), }) From 6737a322d471e986610501e5f74059237b7e979e Mon Sep 17 00:00:00 2001 From: Lector Date: Wed, 24 Jun 2026 11:22:58 +0200 Subject: [PATCH 2/6] Blessing and Cantrips are now entries in GeneralPrerequisites. --- src/types/_IdentifierGroup.ts | 4 ++-- src/types/prerequisites/PrerequisiteGroups.ts | 8 ++++++-- .../single/BlessingPrerequisite.ts | 18 ++++++++++++++++++ .../single/CantripPrerequisite.ts | 18 ++++++++++++++++++ 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 src/types/prerequisites/single/BlessingPrerequisite.ts create mode 100644 src/types/prerequisites/single/CantripPrerequisite.ts diff --git a/src/types/_IdentifierGroup.ts b/src/types/_IdentifierGroup.ts index f23794fc..a5db675d 100644 --- a/src/types/_IdentifierGroup.ts +++ b/src/types/_IdentifierGroup.ts @@ -140,8 +140,6 @@ export const ActivatableIdentifier = DB.Enum(import.meta.url, { values: () => ({ Advantage: DB.EnumCase({ type: AdvantageIdentifier() }), Disadvantage: DB.EnumCase({ type: DisadvantageIdentifier() }), - Cantrip: DB.EnumCase({ type: CantripIdentifier() }), - Blessing: DB.EnumCase({ type: BlessingIdentifier() }), ...SpecialAbilityIdentifier.type.value.values, }), }) @@ -211,7 +209,9 @@ export const SpecialAbilityIdentifier = DB.Enum(import.meta.url, { AdvancedSkillSpecialAbility: DB.EnumCase({ type: AdvancedSkillSpecialAbilityIdentifier() }), AncestorGlyph: DB.EnumCase({ type: AncestorGlyphIdentifier() }), BlessedTradition: DB.EnumCase({ type: BlessedTraditionIdentifier() }), + Blessing: DB.EnumCase({ type: BlessingIdentifier() }), BrawlingSpecialAbility: DB.EnumCase({ type: BrawlingSpecialAbilityIdentifier() }), + Cantrip: DB.EnumCase({ type: CantripIdentifier() }), CeremonialItemSpecialAbility: DB.EnumCase({ type: CeremonialItemSpecialAbilityIdentifier() }), ChronicleEnchantment: DB.EnumCase({ type: ChronicleEnchantmentIdentifier() }), CombatSpecialAbility: DB.EnumCase({ type: CombatSpecialAbilityIdentifier() }), diff --git a/src/types/prerequisites/PrerequisiteGroups.ts b/src/types/prerequisites/PrerequisiteGroups.ts index 47ed01ef..7fad61ff 100644 --- a/src/types/prerequisites/PrerequisiteGroups.ts +++ b/src/types/prerequisites/PrerequisiteGroups.ts @@ -2,13 +2,15 @@ import * as DB from "tsondb/schema/dsl" import { ActivatablePrerequisite } from "./single/ActivatablePrerequisite.js" import { AncestorBloodPrerequisite } from "./single/AncestorBloodPrerequisite.js" import { AnimistPowerPrerequisite } from "./single/AnimistPowerPrerequisite.js" +import { BlessingPrerequisite } from "./single/BlessingPrerequisite.js" +import { CantripPrerequisite } from "./single/CantripPrerequisite.js" import { CulturePrerequisite } from "./single/CulturePrerequisite.js" import { EnhancementPrerequisite } from "./single/EnhancementPrerequisite.js" import { InfluencePrerequisite } from "./single/InfluencePrerequisite.js" import { PactPrerequisite } from "./single/PactPrerequisite.js" import { PersonalityTraitPrerequisite } from "./single/PersonalityTraitPrerequisite.js" import { PrimaryAttributePrerequisite } from "./single/PrimaryAttributePrerequisite.js" -import { ProfessionPrerequisite } from "./single/ProfessionPrerequisite.ts" +import { ProfessionPrerequisite } from "./single/ProfessionPrerequisite.js" import { PublicationPrerequisite } from "./single/PublicationPrerequisite.js" import { RacePrerequisite } from "./single/RacePrerequisite.js" import { RatedMinimumNumberPrerequisite } from "./single/RatedMinimumNumberPrerequisite.js" @@ -59,6 +61,7 @@ export const PublicationPrerequisiteGroup = DB.Enum(import.meta.url, { export const GeneralPrerequisiteGroup = DB.Enum(import.meta.url, { name: "GeneralPrerequisiteGroup", values: () => ({ + Activatable: DB.EnumCase({ type: DB.IncludeIdentifier(ActivatablePrerequisite) }), Sex: DB.EnumCase({ type: DB.IncludeIdentifier(SexPrerequisite) }), Race: DB.EnumCase({ type: DB.IncludeIdentifier(RacePrerequisite) }), Culture: DB.EnumCase({ type: DB.IncludeIdentifier(CulturePrerequisite) }), @@ -67,9 +70,10 @@ export const GeneralPrerequisiteGroup = DB.Enum(import.meta.url, { State: DB.EnumCase({ type: DB.IncludeIdentifier(StatePrerequisite) }), Rule: DB.EnumCase({ type: DB.IncludeIdentifier(RulePrerequisite) }), PrimaryAttribute: DB.EnumCase({ type: DB.IncludeIdentifier(PrimaryAttributePrerequisite) }), - Activatable: DB.EnumCase({ type: DB.IncludeIdentifier(ActivatablePrerequisite) }), BlessedTradition: DB.EnumCase({ type: DB.IncludeIdentifier(BlessedTraditionPrerequisite) }), MagicalTradition: DB.EnumCase({ type: DB.IncludeIdentifier(MagicalTraditionPrerequisite) }), + Cantrip: DB.EnumCase({ type: DB.IncludeIdentifier(CantripPrerequisite) }), + Blessing: DB.EnumCase({ type: DB.IncludeIdentifier(BlessingPrerequisite) }), Rated: DB.EnumCase({ type: DB.IncludeIdentifier(RatedPrerequisite) }), RatedMinimumNumber: DB.EnumCase({ type: DB.IncludeIdentifier(RatedMinimumNumberPrerequisite) }), RatedSum: DB.EnumCase({ type: DB.IncludeIdentifier(RatedSumPrerequisite) }), diff --git a/src/types/prerequisites/single/BlessingPrerequisite.ts b/src/types/prerequisites/single/BlessingPrerequisite.ts new file mode 100644 index 00000000..239e6180 --- /dev/null +++ b/src/types/prerequisites/single/BlessingPrerequisite.ts @@ -0,0 +1,18 @@ +import * as DB from "tsondb/schema/dsl" +import { BlessingIdentifier } from "../../_Identifier.js" +import { DisplayOption } from "../DisplayOption.js" + +export const BlessingPrerequisite = DB.TypeAlias(import.meta.url, { + name: "BlessingPrerequisite", + comment: "Requires a specific blessing.", + type: () => + DB.Object({ + blessing: DB.Required({ + comment: "The required blessing.", + type: BlessingIdentifier(), + }), + display_option: DB.Optional({ + type: DB.IncludeIdentifier(DisplayOption), + }), + }), +}) diff --git a/src/types/prerequisites/single/CantripPrerequisite.ts b/src/types/prerequisites/single/CantripPrerequisite.ts new file mode 100644 index 00000000..098d7ecc --- /dev/null +++ b/src/types/prerequisites/single/CantripPrerequisite.ts @@ -0,0 +1,18 @@ +import * as DB from "tsondb/schema/dsl" +import { CantripIdentifier } from "../../_Identifier.js" +import { DisplayOption } from "../DisplayOption.js" + +export const CantripPrerequisite = DB.TypeAlias(import.meta.url, { + name: "CantripPrerequisite", + comment: "Requires a specific cantrip.", + type: () => + DB.Object({ + cantrip: DB.Required({ + comment: "The required cantrip.", + type: CantripIdentifier(), + }), + display_option: DB.Optional({ + type: DB.IncludeIdentifier(DisplayOption), + }), + }), +}) From 9652cdac632d9adeb11392af996578b79a99cf83 Mon Sep 17 00:00:00 2001 From: Lector Date: Thu, 25 Jun 2026 13:27:50 +0200 Subject: [PATCH 3/6] Blessing and CantripPrerequisite.ts are now a TinyActivatablePrereq in _IdentifierGroup.ts Removed this Prereqs from SpecialAbilities in _IdentifierGroup.ts Renamed identifying key to id in this 2 Prereqs --- src/types/_IdentifierGroup.ts | 10 ++++++++-- src/types/prerequisites/single/BlessingPrerequisite.ts | 2 +- src/types/prerequisites/single/CantripPrerequisite.ts | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/types/_IdentifierGroup.ts b/src/types/_IdentifierGroup.ts index a5db675d..84e2bcc3 100644 --- a/src/types/_IdentifierGroup.ts +++ b/src/types/_IdentifierGroup.ts @@ -209,9 +209,7 @@ export const SpecialAbilityIdentifier = DB.Enum(import.meta.url, { AdvancedSkillSpecialAbility: DB.EnumCase({ type: AdvancedSkillSpecialAbilityIdentifier() }), AncestorGlyph: DB.EnumCase({ type: AncestorGlyphIdentifier() }), BlessedTradition: DB.EnumCase({ type: BlessedTraditionIdentifier() }), - Blessing: DB.EnumCase({ type: BlessingIdentifier() }), BrawlingSpecialAbility: DB.EnumCase({ type: BrawlingSpecialAbilityIdentifier() }), - Cantrip: DB.EnumCase({ type: CantripIdentifier() }), CeremonialItemSpecialAbility: DB.EnumCase({ type: CeremonialItemSpecialAbilityIdentifier() }), ChronicleEnchantment: DB.EnumCase({ type: ChronicleEnchantmentIdentifier() }), CombatSpecialAbility: DB.EnumCase({ type: CombatSpecialAbilityIdentifier() }), @@ -507,3 +505,11 @@ export const AdvancedSkillStyleSpecialAbilityIdentifier = DB.Enum(import.meta.ur AdvancedSkillSpecialAbility: DB.EnumCase({ type: AdvancedSkillSpecialAbilityIdentifier() }), }), }) + +export const TinyActivatableIdentifier = DB.Enum(import.meta.url, { + name: "TinyActivatableIdentifier", + values: () => ({ + Blessing: DB.EnumCase({ type: BlessingIdentifier() }), + Cantrip: DB.EnumCase({ type: CantripIdentifier() }), + }) +}) \ No newline at end of file diff --git a/src/types/prerequisites/single/BlessingPrerequisite.ts b/src/types/prerequisites/single/BlessingPrerequisite.ts index 239e6180..9ceb89b9 100644 --- a/src/types/prerequisites/single/BlessingPrerequisite.ts +++ b/src/types/prerequisites/single/BlessingPrerequisite.ts @@ -7,7 +7,7 @@ export const BlessingPrerequisite = DB.TypeAlias(import.meta.url, { comment: "Requires a specific blessing.", type: () => DB.Object({ - blessing: DB.Required({ + id: DB.Required({ comment: "The required blessing.", type: BlessingIdentifier(), }), diff --git a/src/types/prerequisites/single/CantripPrerequisite.ts b/src/types/prerequisites/single/CantripPrerequisite.ts index 098d7ecc..3447d80d 100644 --- a/src/types/prerequisites/single/CantripPrerequisite.ts +++ b/src/types/prerequisites/single/CantripPrerequisite.ts @@ -7,7 +7,7 @@ export const CantripPrerequisite = DB.TypeAlias(import.meta.url, { comment: "Requires a specific cantrip.", type: () => DB.Object({ - cantrip: DB.Required({ + id: DB.Required({ comment: "The required cantrip.", type: CantripIdentifier(), }), From baa37e097c8314bf32f1918a2527685a4317768b Mon Sep 17 00:00:00 2001 From: Lector Date: Sat, 27 Jun 2026 14:07:27 +0200 Subject: [PATCH 4/6] Fix cache --- src/cache/magicalAndBlessedAdvantagesAndDisadvantages.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cache/magicalAndBlessedAdvantagesAndDisadvantages.ts b/src/cache/magicalAndBlessedAdvantagesAndDisadvantages.ts index ed312eaa..af44409e 100644 --- a/src/cache/magicalAndBlessedAdvantagesAndDisadvantages.ts +++ b/src/cache/magicalAndBlessedAdvantagesAndDisadvantages.ts @@ -81,6 +81,8 @@ const isPrerequisiteFor = ( case "PrimaryAttribute": case "BlessedTradition": case "MagicalTradition": + case "Cantrip": + case "Blessing": case "RatedMinimumNumber": case "RatedSum": case "Enhancement": From 739620db3ab313188669cb82a185a6fd54eb2136 Mon Sep 17 00:00:00 2001 From: Lector Date: Sat, 27 Jun 2026 14:08:51 +0200 Subject: [PATCH 5/6] prettier --- src/types/_IdentifierGroup.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/types/_IdentifierGroup.ts b/src/types/_IdentifierGroup.ts index 84e2bcc3..e60b3e58 100644 --- a/src/types/_IdentifierGroup.ts +++ b/src/types/_IdentifierGroup.ts @@ -511,5 +511,5 @@ export const TinyActivatableIdentifier = DB.Enum(import.meta.url, { values: () => ({ Blessing: DB.EnumCase({ type: BlessingIdentifier() }), Cantrip: DB.EnumCase({ type: CantripIdentifier() }), - }) -}) \ No newline at end of file + }), +}) From fbe85e7c1aae9df6ea1c469d97b13b673bf9b8ed Mon Sep 17 00:00:00 2001 From: Lector Date: Mon, 29 Jun 2026 12:53:54 +0200 Subject: [PATCH 6/6] Cantrip- und BlessingPrereq ist now grouped under TinyActivatablePrerequisite.ts --- ...calAndBlessedAdvantagesAndDisadvantages.ts | 3 +-- src/types/prerequisites/PrerequisiteGroups.ts | 6 ++--- .../single/TinyActivatablePrerequisite.ts | 26 +++++++++++++++++++ 3 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 src/types/prerequisites/single/TinyActivatablePrerequisite.ts diff --git a/src/cache/magicalAndBlessedAdvantagesAndDisadvantages.ts b/src/cache/magicalAndBlessedAdvantagesAndDisadvantages.ts index af44409e..f4e4aa37 100644 --- a/src/cache/magicalAndBlessedAdvantagesAndDisadvantages.ts +++ b/src/cache/magicalAndBlessedAdvantagesAndDisadvantages.ts @@ -81,8 +81,7 @@ const isPrerequisiteFor = ( case "PrimaryAttribute": case "BlessedTradition": case "MagicalTradition": - case "Cantrip": - case "Blessing": + case "TinyActivatable": case "RatedMinimumNumber": case "RatedSum": case "Enhancement": diff --git a/src/types/prerequisites/PrerequisiteGroups.ts b/src/types/prerequisites/PrerequisiteGroups.ts index 7fad61ff..9ba4329d 100644 --- a/src/types/prerequisites/PrerequisiteGroups.ts +++ b/src/types/prerequisites/PrerequisiteGroups.ts @@ -2,8 +2,7 @@ import * as DB from "tsondb/schema/dsl" import { ActivatablePrerequisite } from "./single/ActivatablePrerequisite.js" import { AncestorBloodPrerequisite } from "./single/AncestorBloodPrerequisite.js" import { AnimistPowerPrerequisite } from "./single/AnimistPowerPrerequisite.js" -import { BlessingPrerequisite } from "./single/BlessingPrerequisite.js" -import { CantripPrerequisite } from "./single/CantripPrerequisite.js" +import { TinyActivatablePrerequisite } from "./single/TinyActivatablePrerequisite.js" import { CulturePrerequisite } from "./single/CulturePrerequisite.js" import { EnhancementPrerequisite } from "./single/EnhancementPrerequisite.js" import { InfluencePrerequisite } from "./single/InfluencePrerequisite.js" @@ -72,8 +71,7 @@ export const GeneralPrerequisiteGroup = DB.Enum(import.meta.url, { PrimaryAttribute: DB.EnumCase({ type: DB.IncludeIdentifier(PrimaryAttributePrerequisite) }), BlessedTradition: DB.EnumCase({ type: DB.IncludeIdentifier(BlessedTraditionPrerequisite) }), MagicalTradition: DB.EnumCase({ type: DB.IncludeIdentifier(MagicalTraditionPrerequisite) }), - Cantrip: DB.EnumCase({ type: DB.IncludeIdentifier(CantripPrerequisite) }), - Blessing: DB.EnumCase({ type: DB.IncludeIdentifier(BlessingPrerequisite) }), + TinyActivatable: DB.EnumCase({ type: DB.IncludeIdentifier(TinyActivatablePrerequisite) }), Rated: DB.EnumCase({ type: DB.IncludeIdentifier(RatedPrerequisite) }), RatedMinimumNumber: DB.EnumCase({ type: DB.IncludeIdentifier(RatedMinimumNumberPrerequisite) }), RatedSum: DB.EnumCase({ type: DB.IncludeIdentifier(RatedSumPrerequisite) }), diff --git a/src/types/prerequisites/single/TinyActivatablePrerequisite.ts b/src/types/prerequisites/single/TinyActivatablePrerequisite.ts new file mode 100644 index 00000000..fab59cb5 --- /dev/null +++ b/src/types/prerequisites/single/TinyActivatablePrerequisite.ts @@ -0,0 +1,26 @@ +import * as DB from "tsondb/schema/dsl" +import { BlessingIdentifier, CantripIdentifier } from "../../_Identifier.js" +import { DisplayOption } from "../DisplayOption.js" + +export const TinyActivatablePrerequisite = DB.TypeAlias(import.meta.url, { + name: "TinyActivatablePrerequisite", + comment: "Requires a specific cantrip or blessing.", + type: () => + DB.Object({ + id: DB.Required({ + comment: "The required item.", + type: DB.IncludeIdentifierType(TinyActivatableCategory), + }), + display_option: DB.Optional({ + type: DB.IncludeIdentifier(DisplayOption), + }), + }), +}) + +const TinyActivatableCategory = DB.Enum(import.meta.url, { + name: "TinyActivatableCategory", + values: () => ({ + Blessing: DB.EnumCase({ type: BlessingIdentifier() }), + Cantrip: DB.EnumCase({ type: CantripIdentifier() }), + }), +})