@optolith/database-schema 0.58.0 → 0.60.0

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,27 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [0.60.0](https://github.com/Optolith/database-schema/compare/v0.59.0...v0.60.0) (2026-09-12)
6
+
7
+ ### ⚠ BREAKING CHANGES
8
+
9
+ * add sexual transmittable disease flag
10
+ * any special ability of group prerequisite
11
+
12
+ ### Features
13
+
14
+ * add prerequisite for cantrips and blessings ([a06284c](https://github.com/Optolith/database-schema/commit/a06284cb508b65749f9e2c0beabf5310aeeebb0b)), closes [Optolith/database-schema#172](https://github.com/Optolith/database-schema/issues/172), references [#173](https://github.com/Optolith/database-schema/issues/173)
15
+ * add sexual transmittable disease flag ([998c55b](https://github.com/Optolith/database-schema/commit/998c55bdfc132ca94067bc8cbeed7a70268cb4fc)), closes [Optolith/database-schema#184](https://github.com/Optolith/database-schema/issues/184), references [#185](https://github.com/Optolith/database-schema/issues/185)
16
+ * any special ability of group prerequisite ([376c8f9](https://github.com/Optolith/database-schema/commit/376c8f951af16d3883e800a940a62b47f3248ed6)), closes [#176](https://github.com/Optolith/database-schema/issues/176), references [#177](https://github.com/Optolith/database-schema/issues/177)
17
+ ## [0.59.0](https://github.com/Optolith/database-schema/compare/v0.58.0...v0.59.0) (2026-09-12)
18
+
19
+ ### ⚠ BREAKING CHANGES
20
+
21
+ * magical dis-/advantage subtypes
22
+
23
+ ### Features
24
+
25
+ * magical dis-/advantage subtypes ([986a5a9](https://github.com/Optolith/database-schema/commit/986a5a958f4d2f056ae47bdc6fe3f8627359ced1)), closes [#147](https://github.com/Optolith/database-schema/issues/147)
5
26
  ## [0.58.0](https://github.com/Optolith/database-schema/compare/v0.57.0...v0.58.0) (2026-09-11)
6
27
 
7
28
  ### ⚠ BREAKING CHANGES
package/gen/types.d.ts CHANGED
@@ -219,6 +219,7 @@ export type EnumMap = {
219
219
  AdvancedSpecialAbility: AdvancedSpecialAbility<unknown>
220
220
  AdvancedSpecialAbilityRestrictedOptionIdentifier: AdvancedSpecialAbilityRestrictedOptionIdentifier
221
221
  AdvantageDisadvantagePrerequisiteGroup: AdvantageDisadvantagePrerequisiteGroup
222
+ AdvantageDisadvantageSubtype: AdvantageDisadvantageSubtype
222
223
  AdventurePointsDependingOnActiveInstances: AdventurePointsDependingOnActiveInstances
223
224
  AdventurePointsDependingOnActiveInstancesExpressionValue: AdventurePointsDependingOnActiveInstancesExpressionValue
224
225
  AdventurePointsValue: AdventurePointsValue
@@ -442,6 +443,7 @@ export type EnumMap = {
442
443
  SkillWithEnhancementsIdentifier: SkillWithEnhancementsIdentifier
443
444
  SlowPerformanceParameters: SlowPerformanceParameters
444
445
  SlowSkillCastingTimeUnit: SlowSkillCastingTimeUnit
446
+ SpecialAbilityGroup: SpecialAbilityGroup
445
447
  SpecificAffectedTargetCategoryIdentifier: SpecificAffectedTargetCategoryIdentifier
446
448
  SpecificFromSkillSelectOptionCategoryCategoryOperation: SpecificFromSkillSelectOptionCategoryCategoryOperation
447
449
  SpellFilter: SpellFilter
@@ -455,6 +457,7 @@ export type EnumMap = {
455
457
  TalismanDamageOption: TalismanDamageOption
456
458
  TalismanType: TalismanType
457
459
  TextVerificationRule: TextVerificationRule
460
+ TinyActivatableIdentifier: TinyActivatableIdentifier
458
461
  TradeSecretAdventurePointsValue: TradeSecretAdventurePointsValue
459
462
  TradeSecretSelectOptionCategory: TradeSecretSelectOptionCategory
460
463
  TribePrerequisiteGroup: TribePrerequisiteGroup
@@ -500,6 +503,7 @@ export type TypeAliasMap = {
500
503
  AnimistPowerLevel: AnimistPowerLevel
501
504
  AnimistPowerPrerequisite: AnimistPowerPrerequisite
502
505
  AnimistPowerPrerequisites: AnimistPowerPrerequisites
506
+ AnySpecialAbilityOfGroupPrerequisite: AnySpecialAbilityOfGroupPrerequisite
503
507
  ApplicableCombatTechniquesLevelRestriction: ApplicableCombatTechniquesLevelRestriction
504
508
  ApplicableCombatTechniquesNegativeCombatTechniquesRestriction: ApplicableCombatTechniquesNegativeCombatTechniquesRestriction<unknown>
505
509
  ApplicableCombatTechniquesRaceRestriction: ApplicableCombatTechniquesRaceRestriction
@@ -923,6 +927,7 @@ export type TypeAliasMap = {
923
927
  TargetCategoriesSelectOptionCategory: TargetCategoriesSelectOptionCategory
924
928
  TextNode: TextNode
925
929
  TextPrerequisite: TextPrerequisite
930
+ TinyActivatablePrerequisite: TinyActivatablePrerequisite
926
931
  TradeSecretSelectOptions: TradeSecretSelectOptions
927
932
  TribePrerequisites: TribePrerequisites
928
933
  VolumeByLevel: VolumeByLevel
@@ -2150,6 +2155,7 @@ export interface Locale {
2150
2155
  ".input {$count :number} {{{$count} ranged combat techniques}}": string & { __params: { "count": number } }
2151
2156
  "special ability": string
2152
2157
  "no special ability": string
2158
+ ".input {$entity :string} {{a special ability}}": string & { __params: { "entity": string } }
2153
2159
  "Tradition": string
2154
2160
  "Tradition ({$tradition})": string & { __params: { "tradition": StringableTranslationParameter } }
2155
2161
  "Church": string
@@ -2440,6 +2446,10 @@ export interface Locale {
2440
2446
  "only those with at least one blunt side": string
2441
2447
  "only {$nameWithLevel}": string & { __params: { "nameWithLevel": StringableTranslationParameter } }
2442
2448
  "only {$weapons}": string & { __params: { "weapons": StringableTranslationParameter } }
2449
+ "Magical Rank": string
2450
+ "Magical Title": string
2451
+ "Magical Honor": string
2452
+ "Magical Punishment": string
2443
2453
  ".input {$ord :number} {{{$ord}. attack}}": string & { __params: { "ord": number } }
2444
2454
  ".input {$ord :number} {{{$ord}. throw}}": string & { __params: { "ord": number } }
2445
2455
  "depending on the level of the special ability {$name}": string & { __params: { "name": StringableTranslationParameter } }
@@ -3037,6 +3047,8 @@ export interface Advantage {
3037
3047
  */
3038
3048
  levels?: number
3039
3049
 
3050
+ subtype?: AdvantageDisadvantageSubtype
3051
+
3040
3052
  /**
3041
3053
  * Rules for building the name of an activatable. These rules are used when the activatable doesn't have a custom name specified.
3042
3054
  */
@@ -3142,6 +3154,20 @@ export interface AdvantageTranslation {
3142
3154
  errata?: Errata
3143
3155
  }
3144
3156
 
3157
+ export type AdvantageDisadvantageSubtype =
3158
+ | {
3159
+ kind: "MagicalRank"
3160
+ }
3161
+ | {
3162
+ kind: "MagicalTitle"
3163
+ }
3164
+ | {
3165
+ kind: "MagicalHonor"
3166
+ }
3167
+ | {
3168
+ kind: "MagicalPunishment"
3169
+ }
3170
+
3145
3171
  export interface GeneralSelectOption {
3146
3172
  /**
3147
3173
  * The entry that contains select option.
@@ -3441,6 +3467,8 @@ export interface Disadvantage {
3441
3467
  */
3442
3468
  levels?: number
3443
3469
 
3470
+ subtype?: AdvantageDisadvantageSubtype
3471
+
3444
3472
  /**
3445
3473
  * Rules for building the name of an activatable. These rules are used when the activatable doesn't have a custom name specified.
3446
3474
  */
@@ -4454,6 +4482,14 @@ export type GeneralPrerequisiteGroup =
4454
4482
  kind: "MagicalTradition"
4455
4483
  MagicalTradition: MagicalTraditionPrerequisite
4456
4484
  }
4485
+ | {
4486
+ kind: "TinyActivatable"
4487
+ TinyActivatable: TinyActivatablePrerequisite
4488
+ }
4489
+ | {
4490
+ kind: "AnySpecialAbilityOfGroup"
4491
+ AnySpecialAbilityOfGroup: AnySpecialAbilityOfGroupPrerequisite
4492
+ }
4457
4493
  | {
4458
4494
  kind: "Rated"
4459
4495
  Rated: RatedPrerequisite
@@ -5307,6 +5343,11 @@ export interface Disease {
5307
5343
  */
5308
5344
  isMagicalDisease: boolean
5309
5345
 
5346
+ /**
5347
+ * Whether the disease is sexually transmittable.
5348
+ */
5349
+ isSexuallyTransmittableDisease: boolean
5350
+
5310
5351
  /**
5311
5352
  * References to where in which publications this entry has been defined. Entries may also be added or removed in later printings.
5312
5353
  */
@@ -21557,6 +21598,197 @@ export type PrimaryAttributeCategory =
21557
21598
  kind: "Magical"
21558
21599
  }
21559
21600
 
21601
+ /**
21602
+ * Requires a specific cantrip or blessing.
21603
+ */
21604
+ export interface TinyActivatablePrerequisite {
21605
+ /**
21606
+ * The required item.
21607
+ */
21608
+ id: TinyActivatableIdentifier
21609
+
21610
+ display_option?: DisplayOption
21611
+ }
21612
+
21613
+ export type TinyActivatableIdentifier =
21614
+ | {
21615
+ kind: "Blessing"
21616
+ Blessing: Blessing_ID
21617
+ }
21618
+ | {
21619
+ kind: "Cantrip"
21620
+ Cantrip: Cantrip_ID
21621
+ }
21622
+
21623
+ export interface AnySpecialAbilityOfGroupPrerequisite {
21624
+ group: SpecialAbilityGroup
21625
+ display_option?: DisplayOption
21626
+ }
21627
+
21628
+ export type SpecialAbilityGroup =
21629
+ | {
21630
+ kind: "AdvancedCombatSpecialAbility"
21631
+ }
21632
+ | {
21633
+ kind: "AdvancedKarmaSpecialAbility"
21634
+ }
21635
+ | {
21636
+ kind: "AdvancedMagicalSpecialAbility"
21637
+ }
21638
+ | {
21639
+ kind: "AdvancedSkillSpecialAbility"
21640
+ }
21641
+ | {
21642
+ kind: "AncestorGlyph"
21643
+ }
21644
+ | {
21645
+ kind: "ArcaneOrbEnchantment"
21646
+ }
21647
+ | {
21648
+ kind: "AttireEnchantment"
21649
+ }
21650
+ | {
21651
+ kind: "Beutelzauber"
21652
+ }
21653
+ | {
21654
+ kind: "BlessedTradition"
21655
+ }
21656
+ | {
21657
+ kind: "BowlEnchantment"
21658
+ }
21659
+ | {
21660
+ kind: "BrawlingSpecialAbility"
21661
+ }
21662
+ | {
21663
+ kind: "CauldronEnchantment"
21664
+ }
21665
+ | {
21666
+ kind: "CeremonialItemSpecialAbility"
21667
+ }
21668
+ | {
21669
+ kind: "ChronicleEnchantment"
21670
+ }
21671
+ | {
21672
+ kind: "CombatSpecialAbility"
21673
+ }
21674
+ | {
21675
+ kind: "CombatStyleSpecialAbility"
21676
+ }
21677
+ | {
21678
+ kind: "CommandSpecialAbility"
21679
+ }
21680
+ | {
21681
+ kind: "DaggerRitual"
21682
+ }
21683
+ | {
21684
+ kind: "FamiliarSpecialAbility"
21685
+ }
21686
+ | {
21687
+ kind: "FatePointSexSpecialAbility"
21688
+ }
21689
+ | {
21690
+ kind: "FatePointSpecialAbility"
21691
+ }
21692
+ | {
21693
+ kind: "FoolsHatEnchantment"
21694
+ }
21695
+ | {
21696
+ kind: "GeneralSpecialAbility"
21697
+ }
21698
+ | {
21699
+ kind: "Haubenzauber"
21700
+ }
21701
+ | {
21702
+ kind: "Hauerkettenzauber"
21703
+ }
21704
+ | {
21705
+ kind: "InstrumentEnchantment"
21706
+ }
21707
+ | {
21708
+ kind: "KarmaSpecialAbility"
21709
+ }
21710
+ | {
21711
+ kind: "Keulenzauber"
21712
+ }
21713
+ | {
21714
+ kind: "Krallenkettenzauber"
21715
+ }
21716
+ | {
21717
+ kind: "Kristallkugelzauber"
21718
+ }
21719
+ | {
21720
+ kind: "LiturgicalStyleSpecialAbility"
21721
+ }
21722
+ | {
21723
+ kind: "LycantropicGift"
21724
+ }
21725
+ | {
21726
+ kind: "MagicalSign"
21727
+ }
21728
+ | {
21729
+ kind: "MagicalSpecialAbility"
21730
+ }
21731
+ | {
21732
+ kind: "MagicalTradition"
21733
+ }
21734
+ | {
21735
+ kind: "MagicStyleSpecialAbility"
21736
+ }
21737
+ | {
21738
+ kind: "OrbEnchantment"
21739
+ }
21740
+ | {
21741
+ kind: "PactGift"
21742
+ }
21743
+ | {
21744
+ kind: "ProtectiveWardingCircleSpecialAbility"
21745
+ }
21746
+ | {
21747
+ kind: "RingEnchantment"
21748
+ }
21749
+ | {
21750
+ kind: "Schweinetrommelzauber"
21751
+ }
21752
+ | {
21753
+ kind: "Sermon"
21754
+ }
21755
+ | {
21756
+ kind: "SexSpecialAbility"
21757
+ }
21758
+ | {
21759
+ kind: "SickleRitual"
21760
+ }
21761
+ | {
21762
+ kind: "SikaryanDrainSpecialAbility"
21763
+ }
21764
+ | {
21765
+ kind: "SkillStyleSpecialAbility"
21766
+ }
21767
+ | {
21768
+ kind: "SpellSwordEnchantment"
21769
+ }
21770
+ | {
21771
+ kind: "StaffEnchantment"
21772
+ }
21773
+ | {
21774
+ kind: "ToyEnchantment"
21775
+ }
21776
+ | {
21777
+ kind: "Trinkhornzauber"
21778
+ }
21779
+ | {
21780
+ kind: "VampiricGift"
21781
+ }
21782
+ | {
21783
+ kind: "Vision"
21784
+ }
21785
+ | {
21786
+ kind: "WandEnchantment"
21787
+ }
21788
+ | {
21789
+ kind: "WeaponEnchantment"
21790
+ }
21791
+
21560
21792
  export interface RatedMinimumNumberPrerequisite {
21561
21793
  /**
21562
21794
  * The minimum number of skills that need to be on the defined minimum skill rating.
@@ -21794,6 +22026,14 @@ export type AdvantageDisadvantagePrerequisiteGroup =
21794
22026
  kind: "MagicalTradition"
21795
22027
  MagicalTradition: MagicalTraditionPrerequisite
21796
22028
  }
22029
+ | {
22030
+ kind: "TinyActivatable"
22031
+ TinyActivatable: TinyActivatablePrerequisite
22032
+ }
22033
+ | {
22034
+ kind: "AnySpecialAbilityOfGroup"
22035
+ AnySpecialAbilityOfGroup: AnySpecialAbilityOfGroupPrerequisite
22036
+ }
21797
22037
  | {
21798
22038
  kind: "Rated"
21799
22039
  Rated: RatedPrerequisite
@@ -50,6 +50,8 @@ const isPrerequisiteFor = (idMap, type, prerequisite, getById, traversedIds) =>
50
50
  case "PrimaryAttribute":
51
51
  case "BlessedTradition":
52
52
  case "MagicalTradition":
53
+ case "TinyActivatable":
54
+ case "AnySpecialAbilityOfGroup":
53
55
  case "RatedMinimumNumber":
54
56
  case "RatedSum":
55
57
  case "Enhancement":
@@ -1,6 +1,12 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
2
  export declare const Advantage: DB.Entity<"Advantage", {
3
3
  levels: DB.MemberDecl<DB.Integer, false>;
4
+ subtype: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"AdvantageDisadvantageSubtype", {
5
+ MagicalRank: DB.EnumCase<null>;
6
+ MagicalTitle: DB.EnumCase<null>;
7
+ MagicalHonor: DB.EnumCase<null>;
8
+ MagicalPunishment: DB.EnumCase<null>;
9
+ }, []>>, false>;
4
10
  nameBuilderRules: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"ActivatableNameBuilderRules", DB.Object<{
5
11
  levelPlacement: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ActivatableNameLevelPlacement", {
6
12
  BeforeOptions: DB.EnumCase<null>;
@@ -2,6 +2,7 @@ import * as DB from "tsondb/schema/dsl";
2
2
  import { input, levels, maximum, name, name_in_library, range_l10n, rules } from "./_Activatable.js";
3
3
  import { ap_value, ap_value_append, ap_value_l10n } from "./_ActivatableAdventurePointsValue.js";
4
4
  import { automatic_entries } from "./_ActivatableAutomatic.js";
5
+ import { subtype } from "./_ActivatableMagical.js";
5
6
  import { activatableDisplayNameCustomizer, nameBuilderRules } from "./_ActivatableNames.js";
6
7
  import { explicit_select_options, select_options } from "./_ActivatableSelectOptions.js";
7
8
  import { skill_applications, skill_uses } from "./_ActivatableSkillApplicationsAndUses.js";
@@ -14,6 +15,7 @@ export const Advantage = DB.Entity(import.meta.url, {
14
15
  namePlural: "Advantages",
15
16
  type: () => DB.Object({
16
17
  levels,
18
+ subtype,
17
19
  nameBuilderRules,
18
20
  select_options,
19
21
  explicit_select_options,
@@ -1,6 +1,12 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
2
  export declare const Disadvantage: DB.Entity<"Disadvantage", {
3
3
  levels: DB.MemberDecl<DB.Integer, false>;
4
+ subtype: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"AdvantageDisadvantageSubtype", {
5
+ MagicalRank: DB.EnumCase<null>;
6
+ MagicalTitle: DB.EnumCase<null>;
7
+ MagicalHonor: DB.EnumCase<null>;
8
+ MagicalPunishment: DB.EnumCase<null>;
9
+ }, []>>, false>;
4
10
  nameBuilderRules: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"ActivatableNameBuilderRules", DB.Object<{
5
11
  levelPlacement: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ActivatableNameLevelPlacement", {
6
12
  BeforeOptions: DB.EnumCase<null>;
@@ -1,6 +1,7 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
2
  import { input, levels, maximum, name, name_in_library, rules } from "./_Activatable.js";
3
3
  import { ap_value, ap_value_append, ap_value_l10n } from "./_ActivatableAdventurePointsValue.js";
4
+ import { subtype } from "./_ActivatableMagical.js";
4
5
  import { activatableDisplayNameCustomizer, nameBuilderRules } from "./_ActivatableNames.js";
5
6
  import { explicit_select_options, select_options } from "./_ActivatableSelectOptions.js";
6
7
  import { skill_applications, skill_uses } from "./_ActivatableSkillApplicationsAndUses.js";
@@ -13,6 +14,7 @@ export const Disadvantage = DB.Entity(import.meta.url, {
13
14
  namePlural: "Disadvantages",
14
15
  type: () => DB.Object({
15
16
  levels,
17
+ subtype,
16
18
  nameBuilderRules,
17
19
  select_options,
18
20
  explicit_select_options,
@@ -43,6 +43,7 @@ export declare const Disease: DB.Entity<"Disease", {
43
43
  }>, []>>, false>;
44
44
  isChildhoodDisease: DB.MemberDecl<DB.Boolean, true>;
45
45
  isMagicalDisease: DB.MemberDecl<DB.Boolean, true>;
46
+ isSexuallyTransmittableDisease: DB.MemberDecl<DB.Boolean, true>;
46
47
  src: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRefs", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRef", DB.Object<{
47
48
  id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
48
49
  occurrences: DB.MemberDecl<DB.NestedEntityMap<string, {
@@ -22,6 +22,10 @@ export const Disease = DB.Entity(import.meta.url, {
22
22
  comment: "Whether the disease is a magical disease.",
23
23
  type: DB.Boolean(),
24
24
  }),
25
+ isSexuallyTransmittableDisease: DB.Required({
26
+ comment: "Whether the disease is sexually transmittable.",
27
+ type: DB.Boolean(),
28
+ }),
25
29
  src,
26
30
  translations: NestedTranslationMap(DB.Required, "Disease", DiseaseTranslation),
27
31
  }),
@@ -1069,6 +1069,7 @@ export declare const Locale: DB.Entity<"Locale", {
1069
1069
  ".input {$count :number} {{{$count} ranged combat techniques}}": null;
1070
1070
  "special ability": null;
1071
1071
  "no special ability": null;
1072
+ ".input {$entity :string} {{a special ability}}": null;
1072
1073
  Tradition: null;
1073
1074
  "Tradition ({$tradition})": null;
1074
1075
  Church: null;
@@ -1374,6 +1375,10 @@ export declare const Locale: DB.Entity<"Locale", {
1374
1375
  "only those with at least one blunt side": null;
1375
1376
  "only {$nameWithLevel}": null;
1376
1377
  "only {$weapons}": null;
1378
+ "Magical Rank": null;
1379
+ "Magical Title": null;
1380
+ "Magical Honor": null;
1381
+ "Magical Punishment": null;
1377
1382
  ".input {$ord :number} {{{$ord}. attack}}": null;
1378
1383
  ".input {$ord :number} {{{$ord}. throw}}": null;
1379
1384
  "depending on the level of the special ability {$name}": null;
@@ -1094,6 +1094,7 @@ export const Locale = DB.Entity(import.meta.url, {
1094
1094
  ".input {$count :number} {{{$count} ranged combat techniques}}": null,
1095
1095
  "special ability": null,
1096
1096
  "no special ability": null,
1097
+ ".input {$entity :string} {{a special ability}}": null,
1097
1098
  "Tradition": null,
1098
1099
  "Tradition ({$tradition})": null,
1099
1100
  "Church": null,
@@ -1409,6 +1410,11 @@ export const Locale = DB.Entity(import.meta.url, {
1409
1410
  "only those with at least one blunt side": null,
1410
1411
  "only {$nameWithLevel}": null,
1411
1412
  "only {$weapons}": null,
1413
+ // advantages/disadvantages
1414
+ "Magical Rank": null,
1415
+ "Magical Title": null,
1416
+ "Magical Honor": null,
1417
+ "Magical Punishment": null,
1412
1418
  // combat special ability -- penalty
1413
1419
  ".input {$ord :number} {{{$ord}. attack}}": null,
1414
1420
  ".input {$ord :number} {{{$ord}. throw}}": null,
@@ -0,0 +1,7 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ export declare const subtype: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"AdvantageDisadvantageSubtype", {
3
+ MagicalRank: DB.EnumCase<null>;
4
+ MagicalTitle: DB.EnumCase<null>;
5
+ MagicalHonor: DB.EnumCase<null>;
6
+ MagicalPunishment: DB.EnumCase<null>;
7
+ }, []>>, false>;
@@ -0,0 +1,11 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ const AdvantageDisadvantageSubtype = DB.Enum(import.meta.url, {
3
+ name: "AdvantageDisadvantageSubtype",
4
+ values: () => ({
5
+ MagicalRank: DB.EnumCase({ type: null }),
6
+ MagicalTitle: DB.EnumCase({ type: null }),
7
+ MagicalHonor: DB.EnumCase({ type: null }),
8
+ MagicalPunishment: DB.EnumCase({ type: null }),
9
+ }),
10
+ });
11
+ export const subtype = DB.Optional({ type: DB.IncludeIdentifier(AdvantageDisadvantageSubtype) });
@@ -451,3 +451,7 @@ export declare const AdvancedSkillStyleSpecialAbilityIdentifier: DB.Enum<"Advanc
451
451
  AdvancedCombatSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
452
452
  AdvancedSkillSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
453
453
  }, []>;
454
+ export declare const TinyActivatableIdentifier: DB.Enum<"TinyActivatableIdentifier", {
455
+ Blessing: DB.EnumCase<DB.ReferenceIdentifier>;
456
+ Cantrip: DB.EnumCase<DB.ReferenceIdentifier>;
457
+ }, []>;
@@ -347,3 +347,10 @@ export const AdvancedSkillStyleSpecialAbilityIdentifier = DB.Enum(import.meta.ur
347
347
  AdvancedSkillSpecialAbility: DB.EnumCase({ type: AdvancedSkillSpecialAbilityIdentifier() }),
348
348
  }),
349
349
  });
350
+ export const TinyActivatableIdentifier = DB.Enum(import.meta.url, {
351
+ name: "TinyActivatableIdentifier",
352
+ values: () => ({
353
+ Blessing: DB.EnumCase({ type: BlessingIdentifier() }),
354
+ Cantrip: DB.EnumCase({ type: CantripIdentifier() }),
355
+ }),
356
+ });
@@ -556,6 +556,41 @@ export declare const GeneralPrerequisiteGroup: DB.Enum<"GeneralPrerequisiteGroup
556
556
  }>, []>>>;
557
557
  }, []>>, false>;
558
558
  }>, []>>>;
559
+ TinyActivatable: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"TinyActivatablePrerequisite", DB.Object<{
560
+ id: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"TinyActivatableIdentifier", {
561
+ Blessing: DB.EnumCase<DB.ReferenceIdentifier>;
562
+ Cantrip: DB.EnumCase<DB.ReferenceIdentifier>;
563
+ }, []>>, true>;
564
+ display_option: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DisplayOption", {
565
+ Hide: DB.EnumCase<null>;
566
+ ReplaceWith: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReplacementDisplayOption", DB.Object<{
567
+ sentence_type: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SentenceType", {
568
+ Standalone: DB.EnumCase<null>;
569
+ Connected: DB.EnumCase<null>;
570
+ }, []>>, false>;
571
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ReplacementDisplayOptionTranslation", {
572
+ replacement: DB.MemberDecl<DB.String, true>;
573
+ }>, true>;
574
+ }>, []>>>;
575
+ }, []>>, false>;
576
+ }>, []>>>;
577
+ AnySpecialAbilityOfGroup: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"AnySpecialAbilityOfGroupPrerequisite", DB.Object<{
578
+ group: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SpecialAbilityGroup", {
579
+ [k: string]: DB.EnumCase<null>;
580
+ }, []>>, true>;
581
+ display_option: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DisplayOption", {
582
+ Hide: DB.EnumCase<null>;
583
+ ReplaceWith: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReplacementDisplayOption", DB.Object<{
584
+ sentence_type: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SentenceType", {
585
+ Standalone: DB.EnumCase<null>;
586
+ Connected: DB.EnumCase<null>;
587
+ }, []>>, false>;
588
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ReplacementDisplayOptionTranslation", {
589
+ replacement: DB.MemberDecl<DB.String, true>;
590
+ }>, true>;
591
+ }>, []>>>;
592
+ }, []>>, false>;
593
+ }>, []>>>;
559
594
  Rated: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"RatedPrerequisite", DB.Object<{
560
595
  id: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"RatedIdentifier", {
561
596
  Attribute: DB.EnumCase<DB.ReferenceIdentifier>;
@@ -1191,6 +1226,41 @@ export declare const AdvantageDisadvantagePrerequisiteGroup: DB.Enum<"AdvantageD
1191
1226
  }>, []>>>;
1192
1227
  }, []>>, false>;
1193
1228
  }>, []>>>;
1229
+ TinyActivatable: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"TinyActivatablePrerequisite", DB.Object<{
1230
+ id: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"TinyActivatableIdentifier", {
1231
+ Blessing: DB.EnumCase<DB.ReferenceIdentifier>;
1232
+ Cantrip: DB.EnumCase<DB.ReferenceIdentifier>;
1233
+ }, []>>, true>;
1234
+ display_option: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DisplayOption", {
1235
+ Hide: DB.EnumCase<null>;
1236
+ ReplaceWith: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReplacementDisplayOption", DB.Object<{
1237
+ sentence_type: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SentenceType", {
1238
+ Standalone: DB.EnumCase<null>;
1239
+ Connected: DB.EnumCase<null>;
1240
+ }, []>>, false>;
1241
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ReplacementDisplayOptionTranslation", {
1242
+ replacement: DB.MemberDecl<DB.String, true>;
1243
+ }>, true>;
1244
+ }>, []>>>;
1245
+ }, []>>, false>;
1246
+ }>, []>>>;
1247
+ AnySpecialAbilityOfGroup: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"AnySpecialAbilityOfGroupPrerequisite", DB.Object<{
1248
+ group: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SpecialAbilityGroup", {
1249
+ [k: string]: DB.EnumCase<null>;
1250
+ }, []>>, true>;
1251
+ display_option: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DisplayOption", {
1252
+ Hide: DB.EnumCase<null>;
1253
+ ReplaceWith: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReplacementDisplayOption", DB.Object<{
1254
+ sentence_type: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SentenceType", {
1255
+ Standalone: DB.EnumCase<null>;
1256
+ Connected: DB.EnumCase<null>;
1257
+ }, []>>, false>;
1258
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ReplacementDisplayOptionTranslation", {
1259
+ replacement: DB.MemberDecl<DB.String, true>;
1260
+ }>, true>;
1261
+ }>, []>>>;
1262
+ }, []>>, false>;
1263
+ }>, []>>>;
1194
1264
  Rated: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"RatedPrerequisite", DB.Object<{
1195
1265
  id: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"RatedIdentifier", {
1196
1266
  Attribute: DB.EnumCase<DB.ReferenceIdentifier>;
@@ -2,6 +2,7 @@ import * as DB from "tsondb/schema/dsl";
2
2
  import { ActivatablePrerequisite } from "./single/ActivatablePrerequisite.js";
3
3
  import { AncestorBloodPrerequisite } from "./single/AncestorBloodPrerequisite.js";
4
4
  import { AnimistPowerPrerequisite } from "./single/AnimistPowerPrerequisite.js";
5
+ import { AnySpecialAbilityOfGroupPrerequisite } from "./single/AnySpecialAbilityOfGroupPrerequisite.js";
5
6
  import { CulturePrerequisite } from "./single/CulturePrerequisite.js";
6
7
  import { EnhancementPrerequisite } from "./single/EnhancementPrerequisite.js";
7
8
  import { InfluencePrerequisite } from "./single/InfluencePrerequisite.js";
@@ -20,6 +21,7 @@ import { SexualCharacteristicPrerequisite } from "./single/SexualCharacteristicP
20
21
  import { SocialStatusPrerequisite } from "./single/SocialStatusPrerequisite.js";
21
22
  import { StatePrerequisite } from "./single/StatePrerequisite.js";
22
23
  import { TextPrerequisite } from "./single/TextPrerequisite.js";
24
+ import { TinyActivatablePrerequisite } from "./single/TinyActivatablePrerequisite.js";
23
25
  import { BlessedTraditionPrerequisite, MagicalTraditionPrerequisite, } from "./single/TraditionPrerequisite.js";
24
26
  export const RulePrerequisiteGroup = DB.Enum(import.meta.url, {
25
27
  name: "RulePrerequisiteGroup",
@@ -62,6 +64,10 @@ export const GeneralPrerequisiteGroup = DB.Enum(import.meta.url, {
62
64
  Activatable: DB.EnumCase({ type: DB.IncludeIdentifier(ActivatablePrerequisite) }),
63
65
  BlessedTradition: DB.EnumCase({ type: DB.IncludeIdentifier(BlessedTraditionPrerequisite) }),
64
66
  MagicalTradition: DB.EnumCase({ type: DB.IncludeIdentifier(MagicalTraditionPrerequisite) }),
67
+ TinyActivatable: DB.EnumCase({ type: DB.IncludeIdentifier(TinyActivatablePrerequisite) }),
68
+ AnySpecialAbilityOfGroup: DB.EnumCase({
69
+ type: DB.IncludeIdentifier(AnySpecialAbilityOfGroupPrerequisite),
70
+ }),
65
71
  Rated: DB.EnumCase({ type: DB.IncludeIdentifier(RatedPrerequisite) }),
66
72
  RatedMinimumNumber: DB.EnumCase({ type: DB.IncludeIdentifier(RatedMinimumNumberPrerequisite) }),
67
73
  RatedSum: DB.EnumCase({ type: DB.IncludeIdentifier(RatedSumPrerequisite) }),
@@ -0,0 +1,18 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ export declare const AnySpecialAbilityOfGroupPrerequisite: DB.TypeAlias<"AnySpecialAbilityOfGroupPrerequisite", DB.Object<{
3
+ group: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SpecialAbilityGroup", {
4
+ [k: string]: DB.EnumCase<null>;
5
+ }, []>>, true>;
6
+ display_option: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DisplayOption", {
7
+ Hide: DB.EnumCase<null>;
8
+ ReplaceWith: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReplacementDisplayOption", DB.Object<{
9
+ sentence_type: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SentenceType", {
10
+ Standalone: DB.EnumCase<null>;
11
+ Connected: DB.EnumCase<null>;
12
+ }, []>>, false>;
13
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ReplacementDisplayOptionTranslation", {
14
+ replacement: DB.MemberDecl<DB.String, true>;
15
+ }>, true>;
16
+ }>, []>>>;
17
+ }, []>>, false>;
18
+ }>, []>;
@@ -0,0 +1,23 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ import { SpecialAbilityIdentifier } from "../../_IdentifierGroup.js";
3
+ import { DisplayOption } from "../DisplayOption.js";
4
+ export const AnySpecialAbilityOfGroupPrerequisite = DB.TypeAlias(import.meta.url, {
5
+ name: "AnySpecialAbilityOfGroupPrerequisite",
6
+ type: () => DB.Object({
7
+ group: DB.Required({
8
+ type: DB.IncludeIdentifier(SpecialAbilityGroup),
9
+ }),
10
+ display_option: DB.Optional({
11
+ type: DB.IncludeIdentifier(DisplayOption),
12
+ }),
13
+ }),
14
+ });
15
+ const SpecialAbilityGroup = DB.Enum(import.meta.url, {
16
+ name: "SpecialAbilityGroup",
17
+ values: () => ({
18
+ ...Object.fromEntries(Object.keys(SpecialAbilityIdentifier.type.value.values).map(entity => [
19
+ entity,
20
+ DB.EnumCase({ type: null }),
21
+ ])),
22
+ }),
23
+ });
@@ -0,0 +1,19 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ export declare const TinyActivatablePrerequisite: DB.TypeAlias<"TinyActivatablePrerequisite", DB.Object<{
3
+ id: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"TinyActivatableIdentifier", {
4
+ Blessing: DB.EnumCase<DB.ReferenceIdentifier>;
5
+ Cantrip: DB.EnumCase<DB.ReferenceIdentifier>;
6
+ }, []>>, true>;
7
+ display_option: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DisplayOption", {
8
+ Hide: DB.EnumCase<null>;
9
+ ReplaceWith: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReplacementDisplayOption", DB.Object<{
10
+ sentence_type: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SentenceType", {
11
+ Standalone: DB.EnumCase<null>;
12
+ Connected: DB.EnumCase<null>;
13
+ }, []>>, false>;
14
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ReplacementDisplayOptionTranslation", {
15
+ replacement: DB.MemberDecl<DB.String, true>;
16
+ }>, true>;
17
+ }>, []>>>;
18
+ }, []>>, false>;
19
+ }>, []>;
@@ -0,0 +1,16 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ import { TinyActivatableIdentifier } from "../../_IdentifierGroup.js";
3
+ import { DisplayOption } from "../DisplayOption.js";
4
+ export const TinyActivatablePrerequisite = DB.TypeAlias(import.meta.url, {
5
+ name: "TinyActivatablePrerequisite",
6
+ comment: "Requires a specific cantrip or blessing.",
7
+ type: () => DB.Object({
8
+ id: DB.Required({
9
+ comment: "The required item.",
10
+ type: DB.IncludeIdentifierType(TinyActivatableIdentifier),
11
+ }),
12
+ display_option: DB.Optional({
13
+ type: DB.IncludeIdentifier(DisplayOption),
14
+ }),
15
+ }),
16
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optolith/database-schema",
3
- "version": "0.58.0",
3
+ "version": "0.60.0",
4
4
  "description": "Definitions and utilities for the flat-file database of Optolith, a character creation tool for the Pen and Paper RPG “The Dark Eye 5”, and its external integrations into other software.",
5
5
  "keywords": [
6
6
  "tde",