optolith-database-schema 0.24.3 → 0.26.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.
Files changed (161) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/gen/types.d.ts +49 -6
  3. package/lib/main.d.ts +7 -0
  4. package/lib/test.d.ts +1 -1
  5. package/lib/test.js +10 -1
  6. package/lib/types/Advantage.js +7 -0
  7. package/lib/types/AnimalDisease.js +6 -0
  8. package/lib/types/AnimalType.js +6 -0
  9. package/lib/types/ArcaneBardTradition.js +6 -0
  10. package/lib/types/ArcaneDancerTradition.js +6 -0
  11. package/lib/types/Aspect.js +6 -0
  12. package/lib/types/Attribute.js +10 -0
  13. package/lib/types/Blessing.js +6 -0
  14. package/lib/types/Cantrip.js +6 -0
  15. package/lib/types/Ceremony.js +6 -0
  16. package/lib/types/CombatTechnique.d.ts +79 -55
  17. package/lib/types/CombatTechnique.js +37 -7
  18. package/lib/types/Condition.js +6 -0
  19. package/lib/types/Continent.js +6 -0
  20. package/lib/types/Culture.js +6 -0
  21. package/lib/types/DerivedCharacteristic.js +10 -0
  22. package/lib/types/Disadvantage.js +7 -0
  23. package/lib/types/Disease.js +6 -0
  24. package/lib/types/Element.js +6 -0
  25. package/lib/types/ExperienceLevel.js +6 -0
  26. package/lib/types/EyeColor.js +6 -0
  27. package/lib/types/FamiliarsTrick.js +6 -0
  28. package/lib/types/HairColor.js +6 -0
  29. package/lib/types/Lessons.js +12 -0
  30. package/lib/types/LiturgicalChant.js +6 -0
  31. package/lib/types/Locale.js +10 -0
  32. package/lib/types/MetaCondition.js +6 -0
  33. package/lib/types/PactCategory.js +36 -0
  34. package/lib/types/Patron.js +6 -0
  35. package/lib/types/PatronCategory.js +6 -0
  36. package/lib/types/PersonalityTrait.js +6 -0
  37. package/lib/types/Profession.d.ts +25 -0
  38. package/lib/types/Profession.js +16 -0
  39. package/lib/types/Property.js +6 -0
  40. package/lib/types/Race.js +17 -0
  41. package/lib/types/Region.js +6 -0
  42. package/lib/types/Ritual.js +6 -0
  43. package/lib/types/Service.js +6 -0
  44. package/lib/types/SexPractice.js +6 -0
  45. package/lib/types/Skill.js +15 -0
  46. package/lib/types/SkillGroup.js +6 -0
  47. package/lib/types/SkillModificationLevel.js +8 -0
  48. package/lib/types/SocialStatus.js +7 -0
  49. package/lib/types/Spell.js +6 -0
  50. package/lib/types/State.js +6 -0
  51. package/lib/types/Talisman.js +6 -0
  52. package/lib/types/TargetCategory.js +6 -0
  53. package/lib/types/_ActivatableSelectOptions.js +11 -0
  54. package/lib/types/_Enhancements.js +11 -0
  55. package/lib/types/_Influence.js +6 -0
  56. package/lib/types/equipment/EquipmentPackage.js +6 -0
  57. package/lib/types/equipment/item/Ammunition.js +6 -0
  58. package/lib/types/equipment/item/Animal.js +6 -0
  59. package/lib/types/equipment/item/AnimalCare.js +6 -0
  60. package/lib/types/equipment/item/Armor.js +6 -0
  61. package/lib/types/equipment/item/BandageOrRemedy.js +16 -0
  62. package/lib/types/equipment/item/Book.js +6 -0
  63. package/lib/types/equipment/item/CeremonialItem.js +16 -0
  64. package/lib/types/equipment/item/Clothes.js +16 -0
  65. package/lib/types/equipment/item/Container.js +16 -0
  66. package/lib/types/equipment/item/Elixir.js +6 -0
  67. package/lib/types/equipment/item/EquipmentOfBlessedOnes.js +16 -0
  68. package/lib/types/equipment/item/GemOrPreciousStone.js +6 -0
  69. package/lib/types/equipment/item/IlluminationLightSource.js +16 -0
  70. package/lib/types/equipment/item/IlluminationRefillOrSupply.js +16 -0
  71. package/lib/types/equipment/item/Jewelry.js +6 -0
  72. package/lib/types/equipment/item/Laboratory.js +6 -0
  73. package/lib/types/equipment/item/Liebesspielzeug.js +16 -0
  74. package/lib/types/equipment/item/LuxuryGood.js +16 -0
  75. package/lib/types/equipment/item/MagicalArtifact.js +16 -0
  76. package/lib/types/equipment/item/MusicalInstrument.js +16 -0
  77. package/lib/types/equipment/item/Newspaper.js +6 -0
  78. package/lib/types/equipment/item/Poison.js +6 -0
  79. package/lib/types/equipment/item/ToolOfTheTrade.js +6 -0
  80. package/lib/types/equipment/item/TravelGearOrTool.js +16 -0
  81. package/lib/types/equipment/item/Vehicle.js +6 -0
  82. package/lib/types/equipment/item/Weapon.d.ts +45 -45
  83. package/lib/types/equipment/item/Weapon.js +13 -5
  84. package/lib/types/equipment/item/WeaponAccessory.js +16 -0
  85. package/lib/types/equipment/item/_Item.js +19 -1
  86. package/lib/types/equipment/item/_Weapon.d.ts +13 -4
  87. package/lib/types/equipment/item/_Weapon.js +32 -4
  88. package/lib/types/equipment/item/sub/ArmorType.js +6 -0
  89. package/lib/types/equipment/item/sub/Reach.js +6 -0
  90. package/lib/types/magicalActions/AnimistPower.js +6 -0
  91. package/lib/types/magicalActions/AnimistPower_Tribe.js +6 -0
  92. package/lib/types/magicalActions/Curse.js +6 -0
  93. package/lib/types/magicalActions/DominationRitual.js +6 -0
  94. package/lib/types/magicalActions/ElvenMagicalSong.js +6 -0
  95. package/lib/types/magicalActions/GeodeRitual.js +6 -0
  96. package/lib/types/magicalActions/JesterTrick.js +6 -0
  97. package/lib/types/magicalActions/MagicalDance.js +6 -0
  98. package/lib/types/magicalActions/MagicalMelody.js +6 -0
  99. package/lib/types/magicalActions/MagicalRune.js +6 -0
  100. package/lib/types/magicalActions/ZibiljaRitual.js +6 -0
  101. package/lib/types/rule/AlternativeRule.js +6 -0
  102. package/lib/types/rule/CoreRule.js +6 -0
  103. package/lib/types/rule/FocusRule.js +6 -0
  104. package/lib/types/rule/FocusRule_Subject.js +6 -0
  105. package/lib/types/rule/OptionalRule.js +6 -0
  106. package/lib/types/source/Publication.js +6 -0
  107. package/lib/types/specialAbility/AdvancedCombatSpecialAbility.js +7 -0
  108. package/lib/types/specialAbility/AdvancedKarmaSpecialAbility.js +7 -0
  109. package/lib/types/specialAbility/AdvancedMagicalSpecialAbility.js +7 -0
  110. package/lib/types/specialAbility/AdvancedSkillSpecialAbility.js +7 -0
  111. package/lib/types/specialAbility/AncestorGlyph.js +7 -0
  112. package/lib/types/specialAbility/BlessedTradition.js +7 -0
  113. package/lib/types/specialAbility/BrawlingSpecialAbility.js +7 -0
  114. package/lib/types/specialAbility/CeremonialItemSpecialAbility.js +12 -0
  115. package/lib/types/specialAbility/CombatSpecialAbility.js +7 -0
  116. package/lib/types/specialAbility/CombatStyleSpecialAbility.js +7 -0
  117. package/lib/types/specialAbility/CommandSpecialAbility.js +7 -0
  118. package/lib/types/specialAbility/FamiliarSpecialAbility.js +7 -0
  119. package/lib/types/specialAbility/FatePointSexSpecialAbility.js +7 -0
  120. package/lib/types/specialAbility/FatePointSpecialAbility.js +7 -0
  121. package/lib/types/specialAbility/GeneralSpecialAbility.js +7 -0
  122. package/lib/types/specialAbility/KarmaSpecialAbility.js +7 -0
  123. package/lib/types/specialAbility/LiturgicalStyleSpecialAbility.js +7 -0
  124. package/lib/types/specialAbility/LycantropicGift.js +7 -0
  125. package/lib/types/specialAbility/MagicStyleSpecialAbility.js +7 -0
  126. package/lib/types/specialAbility/MagicalSign.js +7 -0
  127. package/lib/types/specialAbility/MagicalSpecialAbility.js +7 -0
  128. package/lib/types/specialAbility/MagicalTradition.js +7 -0
  129. package/lib/types/specialAbility/PactGift.js +7 -0
  130. package/lib/types/specialAbility/ProtectiveWardingCircleSpecialAbility.js +7 -0
  131. package/lib/types/specialAbility/Sermon.js +7 -0
  132. package/lib/types/specialAbility/SexSpecialAbility.js +7 -0
  133. package/lib/types/specialAbility/SikaryanDrainSpecialAbility.js +7 -0
  134. package/lib/types/specialAbility/SkillStyleSpecialAbility.js +7 -0
  135. package/lib/types/specialAbility/VampiricGift.js +7 -0
  136. package/lib/types/specialAbility/Vision.js +7 -0
  137. package/lib/types/specialAbility/sub/Language.js +6 -0
  138. package/lib/types/specialAbility/sub/Script.js +6 -0
  139. package/lib/types/specialAbility/sub/TradeSecret.js +6 -0
  140. package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.js +7 -0
  141. package/lib/types/traditionArtifacts/AttireEnchantment.js +7 -0
  142. package/lib/types/traditionArtifacts/Beutelzauber.js +7 -0
  143. package/lib/types/traditionArtifacts/BowlEnchantment.js +7 -0
  144. package/lib/types/traditionArtifacts/CauldronEnchantment.js +7 -0
  145. package/lib/types/traditionArtifacts/ChronicleEnchantment.js +7 -0
  146. package/lib/types/traditionArtifacts/DaggerRitual.js +7 -0
  147. package/lib/types/traditionArtifacts/FoolsHatEnchantment.js +7 -0
  148. package/lib/types/traditionArtifacts/Haubenzauber.js +7 -0
  149. package/lib/types/traditionArtifacts/InstrumentEnchantment.js +7 -0
  150. package/lib/types/traditionArtifacts/Krallenkettenzauber.js +7 -0
  151. package/lib/types/traditionArtifacts/Kristallkugelzauber.js +7 -0
  152. package/lib/types/traditionArtifacts/OrbEnchantment.js +7 -0
  153. package/lib/types/traditionArtifacts/RingEnchantment.js +7 -0
  154. package/lib/types/traditionArtifacts/SickleRitual.js +7 -0
  155. package/lib/types/traditionArtifacts/SpellSwordEnchantment.js +7 -0
  156. package/lib/types/traditionArtifacts/StaffEnchantment.js +7 -0
  157. package/lib/types/traditionArtifacts/ToyEnchantment.js +7 -0
  158. package/lib/types/traditionArtifacts/Trinkhornzauber.js +7 -0
  159. package/lib/types/traditionArtifacts/WandEnchantment.js +7 -0
  160. package/lib/types/traditionArtifacts/WeaponEnchantment.js +7 -0
  161. package/package.json +2 -2
@@ -76,6 +76,12 @@ export const Armor = Entity(import.meta.url, {
76
76
  })),
77
77
  }),
78
78
  displayName: {},
79
+ uniqueConstraints: [
80
+ {
81
+ entityMapKeyPath: "translations",
82
+ keyPathInEntityMap: "name",
83
+ },
84
+ ],
79
85
  });
80
86
  export const SecondaryArmor = TypeAlias(import.meta.url, {
81
87
  name: "SecondaryArmor",
@@ -1,6 +1,7 @@
1
1
  import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
3
  import { CombatUse, Complexity, Cost, DefaultItemTranslations, StructurePoints, Weight, } from "./_Item.js";
4
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
4
5
  export const BandageOrRemedy = Entity(import.meta.url, {
5
6
  name: "BandageOrRemedy",
6
7
  namePlural: "BandagesAndRemedies",
@@ -29,4 +30,19 @@ export const BandageOrRemedy = Entity(import.meta.url, {
29
30
  translations: DefaultItemTranslations("BandageOrRemedy"),
30
31
  }),
31
32
  displayName: {},
33
+ uniqueConstraints: [
34
+ {
35
+ entityMapKeyPath: "translations",
36
+ keyPathInEntityMap: "name",
37
+ },
38
+ ],
39
+ customConstraints: ({ instanceContent, ...rest }) => {
40
+ if (instanceContent.combat_use && instanceContent.combat_use.kind === "Weapon") {
41
+ return checkWeaponCombatTechniqueIntegrity({
42
+ ...rest,
43
+ instanceContent: instanceContent.combat_use.Weapon,
44
+ }, true);
45
+ }
46
+ return [];
47
+ },
32
48
  });
@@ -60,6 +60,12 @@ export const Book = Entity(import.meta.url, {
60
60
  })),
61
61
  }),
62
62
  displayName: {},
63
+ uniqueConstraints: [
64
+ {
65
+ entityMapKeyPath: "translations",
66
+ keyPathInEntityMap: "name",
67
+ },
68
+ ],
63
69
  });
64
70
  const BookType = Enum(import.meta.url, {
65
71
  name: "BookType",
@@ -2,6 +2,7 @@ import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/sc
2
2
  import { BlessedTraditionIdentifier } from "../../_Identifier.js";
3
3
  import { src } from "../../source/_PublicationRef.js";
4
4
  import { CombatUse, Complexity, Cost, DefaultItemTranslations, StructurePoints, Weight, } from "./_Item.js";
5
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
5
6
  export const CeremonialItem = Entity(import.meta.url, {
6
7
  name: "CeremonialItem",
7
8
  namePlural: "CeremonialItems",
@@ -34,4 +35,19 @@ export const CeremonialItem = Entity(import.meta.url, {
34
35
  translations: DefaultItemTranslations("CeremonialItem"),
35
36
  }),
36
37
  displayName: {},
38
+ uniqueConstraints: [
39
+ {
40
+ entityMapKeyPath: "translations",
41
+ keyPathInEntityMap: "name",
42
+ },
43
+ ],
44
+ customConstraints: ({ instanceContent, ...rest }) => {
45
+ if (instanceContent.combat_use && instanceContent.combat_use.kind === "Weapon") {
46
+ return checkWeaponCombatTechniqueIntegrity({
47
+ ...rest,
48
+ instanceContent: instanceContent.combat_use.Weapon,
49
+ }, true);
50
+ }
51
+ return [];
52
+ },
37
53
  });
@@ -1,6 +1,7 @@
1
1
  import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
3
  import { CombatUse, Complexity, Cost, DefaultItemTranslations, StructurePoints, Weight, } from "./_Item.js";
4
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
4
5
  export const Clothes = Entity(import.meta.url, {
5
6
  name: "Clothes",
6
7
  namePlural: "Clothes",
@@ -29,4 +30,19 @@ export const Clothes = Entity(import.meta.url, {
29
30
  translations: DefaultItemTranslations("Clothes"),
30
31
  }),
31
32
  displayName: {},
33
+ uniqueConstraints: [
34
+ {
35
+ entityMapKeyPath: "translations",
36
+ keyPathInEntityMap: "name",
37
+ },
38
+ ],
39
+ customConstraints: ({ instanceContent, ...rest }) => {
40
+ if (instanceContent.combat_use && instanceContent.combat_use.kind === "Weapon") {
41
+ return checkWeaponCombatTechniqueIntegrity({
42
+ ...rest,
43
+ instanceContent: instanceContent.combat_use.Weapon,
44
+ }, true);
45
+ }
46
+ return [];
47
+ },
32
48
  });
@@ -1,6 +1,7 @@
1
1
  import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
3
  import { CombatUse, Complexity, Cost, DefaultItemTranslations, StructurePoints, Weight, } from "./_Item.js";
4
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
4
5
  export const Container = Entity(import.meta.url, {
5
6
  name: "Container",
6
7
  namePlural: "Containers",
@@ -29,4 +30,19 @@ export const Container = Entity(import.meta.url, {
29
30
  translations: DefaultItemTranslations("Container"),
30
31
  }),
31
32
  displayName: {},
33
+ uniqueConstraints: [
34
+ {
35
+ entityMapKeyPath: "translations",
36
+ keyPathInEntityMap: "name",
37
+ },
38
+ ],
39
+ customConstraints: ({ instanceContent, ...rest }) => {
40
+ if (instanceContent.combat_use && instanceContent.combat_use.kind === "Weapon") {
41
+ return checkWeaponCombatTechniqueIntegrity({
42
+ ...rest,
43
+ instanceContent: instanceContent.combat_use.Weapon,
44
+ }, true);
45
+ }
46
+ return [];
47
+ },
32
48
  });
@@ -68,4 +68,10 @@ export const Elixir = Entity(import.meta.url, {
68
68
  })),
69
69
  }),
70
70
  displayName: {},
71
+ uniqueConstraints: [
72
+ {
73
+ entityMapKeyPath: "translations",
74
+ keyPathInEntityMap: "name",
75
+ },
76
+ ],
71
77
  });
@@ -1,6 +1,7 @@
1
1
  import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
3
  import { CombatUse, Cost, DefaultItemTranslations, RestrictedTo, StructurePoints } from "./_Item.js";
4
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
4
5
  export const EquipmentOfBlessedOnes = Entity(import.meta.url, {
5
6
  name: "EquipmentOfBlessedOnes",
6
7
  namePlural: "EquipmentOfBlessedOnes",
@@ -25,4 +26,19 @@ export const EquipmentOfBlessedOnes = Entity(import.meta.url, {
25
26
  translations: DefaultItemTranslations("EquipmentOfBlessedOnes"),
26
27
  }),
27
28
  displayName: {},
29
+ uniqueConstraints: [
30
+ {
31
+ entityMapKeyPath: "translations",
32
+ keyPathInEntityMap: "name",
33
+ },
34
+ ],
35
+ customConstraints: ({ instanceContent, ...rest }) => {
36
+ if (instanceContent.combat_use && instanceContent.combat_use.kind === "Weapon") {
37
+ return checkWeaponCombatTechniqueIntegrity({
38
+ ...rest,
39
+ instanceContent: instanceContent.combat_use.Weapon,
40
+ }, true);
41
+ }
42
+ return [];
43
+ },
28
44
  });
@@ -43,4 +43,10 @@ export const GemOrPreciousStone = Entity(import.meta.url, {
43
43
  })),
44
44
  }),
45
45
  displayName: {},
46
+ uniqueConstraints: [
47
+ {
48
+ entityMapKeyPath: "translations",
49
+ keyPathInEntityMap: "name",
50
+ },
51
+ ],
46
52
  });
@@ -1,6 +1,7 @@
1
1
  import { Entity, Enum, EnumCase, Float, IncludeIdentifier, Object, Optional, Required, TypeAlias, } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
3
  import { CombatUse, Complexity, Cost, DefaultItemTranslations, StructurePoints, Weight, } from "./_Item.js";
4
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
4
5
  export const IlluminationLightSource = Entity(import.meta.url, {
5
6
  name: "IlluminationLightSource",
6
7
  namePlural: "IlluminationLightSources",
@@ -33,6 +34,21 @@ export const IlluminationLightSource = Entity(import.meta.url, {
33
34
  translations: DefaultItemTranslations("IlluminationLightSource"),
34
35
  }),
35
36
  displayName: {},
37
+ uniqueConstraints: [
38
+ {
39
+ entityMapKeyPath: "translations",
40
+ keyPathInEntityMap: "name",
41
+ },
42
+ ],
43
+ customConstraints: ({ instanceContent, ...rest }) => {
44
+ if (instanceContent.combat_use && instanceContent.combat_use.kind === "Weapon") {
45
+ return checkWeaponCombatTechniqueIntegrity({
46
+ ...rest,
47
+ instanceContent: instanceContent.combat_use.Weapon,
48
+ }, true);
49
+ }
50
+ return [];
51
+ },
36
52
  });
37
53
  const BurningTime = Enum(import.meta.url, {
38
54
  name: "BurningTime",
@@ -1,6 +1,7 @@
1
1
  import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
3
  import { CombatUse, Complexity, Cost, DefaultItemTranslations, StructurePoints, Weight, } from "./_Item.js";
4
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
4
5
  export const IlluminationRefillOrSupply = Entity(import.meta.url, {
5
6
  name: "IlluminationRefillOrSupply",
6
7
  namePlural: "IlluminationRefillsAndSupplies",
@@ -29,4 +30,19 @@ export const IlluminationRefillOrSupply = Entity(import.meta.url, {
29
30
  translations: DefaultItemTranslations("IlluminationRefillOrSupply"),
30
31
  }),
31
32
  displayName: {},
33
+ uniqueConstraints: [
34
+ {
35
+ entityMapKeyPath: "translations",
36
+ keyPathInEntityMap: "name",
37
+ },
38
+ ],
39
+ customConstraints: ({ instanceContent, ...rest }) => {
40
+ if (instanceContent.combat_use && instanceContent.combat_use.kind === "Weapon") {
41
+ return checkWeaponCombatTechniqueIntegrity({
42
+ ...rest,
43
+ instanceContent: instanceContent.combat_use.Weapon,
44
+ }, true);
45
+ }
46
+ return [];
47
+ },
32
48
  });
@@ -25,6 +25,12 @@ export const Jewelry = Entity(import.meta.url, {
25
25
  translations: DefaultItemTranslations("Jewelry"),
26
26
  }),
27
27
  displayName: {},
28
+ uniqueConstraints: [
29
+ {
30
+ entityMapKeyPath: "translations",
31
+ keyPathInEntityMap: "name",
32
+ },
33
+ ],
28
34
  });
29
35
  const JewelryMaterialDifference = GenTypeAlias(import.meta.url, {
30
36
  name: "JewelryMaterialDifference",
@@ -25,4 +25,10 @@ export const Laboratory = Entity(import.meta.url, {
25
25
  translations: DefaultItemTranslations("Laboratory"),
26
26
  }),
27
27
  displayName: {},
28
+ uniqueConstraints: [
29
+ {
30
+ entityMapKeyPath: "translations",
31
+ keyPathInEntityMap: "name",
32
+ },
33
+ ],
28
34
  });
@@ -1,6 +1,7 @@
1
1
  import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
3
  import { CombatUse, Complexity, Cost, DefaultItemTranslations, StructurePoints, Weight, } from "./_Item.js";
4
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
4
5
  export const Liebesspielzeug = Entity(import.meta.url, {
5
6
  name: "Liebesspielzeug",
6
7
  namePlural: "Liebesspielzeug",
@@ -29,4 +30,19 @@ export const Liebesspielzeug = Entity(import.meta.url, {
29
30
  translations: DefaultItemTranslations("Liebesspielzeug"),
30
31
  }),
31
32
  displayName: {},
33
+ uniqueConstraints: [
34
+ {
35
+ entityMapKeyPath: "translations",
36
+ keyPathInEntityMap: "name",
37
+ },
38
+ ],
39
+ customConstraints: ({ instanceContent, ...rest }) => {
40
+ if (instanceContent.combat_use && instanceContent.combat_use.kind === "Weapon") {
41
+ return checkWeaponCombatTechniqueIntegrity({
42
+ ...rest,
43
+ instanceContent: instanceContent.combat_use.Weapon,
44
+ }, true);
45
+ }
46
+ return [];
47
+ },
32
48
  });
@@ -1,6 +1,7 @@
1
1
  import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
3
  import { CombatUse, Complexity, Cost, DefaultItemTranslations, StructurePoints, Weight, } from "./_Item.js";
4
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
4
5
  export const LuxuryGood = Entity(import.meta.url, {
5
6
  name: "LuxuryGood",
6
7
  namePlural: "LuxuryGoods",
@@ -29,4 +30,19 @@ export const LuxuryGood = Entity(import.meta.url, {
29
30
  translations: DefaultItemTranslations("LuxuryGood"),
30
31
  }),
31
32
  displayName: {},
33
+ uniqueConstraints: [
34
+ {
35
+ entityMapKeyPath: "translations",
36
+ keyPathInEntityMap: "name",
37
+ },
38
+ ],
39
+ customConstraints: ({ instanceContent, ...rest }) => {
40
+ if (instanceContent.combat_use && instanceContent.combat_use.kind === "Weapon") {
41
+ return checkWeaponCombatTechniqueIntegrity({
42
+ ...rest,
43
+ instanceContent: instanceContent.combat_use.Weapon,
44
+ }, true);
45
+ }
46
+ return [];
47
+ },
32
48
  });
@@ -3,6 +3,7 @@ import { NestedTranslationMap } from "../../Locale.js";
3
3
  import { Errata } from "../../source/_Erratum.js";
4
4
  import { src } from "../../source/_PublicationRef.js";
5
5
  import { CombatUse, Complexity, Cost, StructurePoints, Weight } from "./_Item.js";
6
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
6
7
  export const MagicalArtifact = Entity(import.meta.url, {
7
8
  name: "MagicalArtifact",
8
9
  namePlural: "MagicalArtifacts",
@@ -63,4 +64,19 @@ export const MagicalArtifact = Entity(import.meta.url, {
63
64
  })),
64
65
  }),
65
66
  displayName: {},
67
+ uniqueConstraints: [
68
+ {
69
+ entityMapKeyPath: "translations",
70
+ keyPathInEntityMap: "name",
71
+ },
72
+ ],
73
+ customConstraints: ({ instanceContent, ...rest }) => {
74
+ if (instanceContent.combat_use && instanceContent.combat_use.kind === "Weapon") {
75
+ return checkWeaponCombatTechniqueIntegrity({
76
+ ...rest,
77
+ instanceContent: instanceContent.combat_use.Weapon,
78
+ }, true);
79
+ }
80
+ return [];
81
+ },
66
82
  });
@@ -1,6 +1,7 @@
1
1
  import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
3
  import { CombatUse, Complexity, Cost, DefaultItemTranslations, StructurePoints, Weight, } from "./_Item.js";
4
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
4
5
  export const MusicalInstrument = Entity(import.meta.url, {
5
6
  name: "MusicalInstrument",
6
7
  namePlural: "MusicalInstruments",
@@ -29,4 +30,19 @@ export const MusicalInstrument = Entity(import.meta.url, {
29
30
  translations: DefaultItemTranslations("MusicalInstrument"),
30
31
  }),
31
32
  displayName: {},
33
+ uniqueConstraints: [
34
+ {
35
+ entityMapKeyPath: "translations",
36
+ keyPathInEntityMap: "name",
37
+ },
38
+ ],
39
+ customConstraints: ({ instanceContent, ...rest }) => {
40
+ if (instanceContent.combat_use && instanceContent.combat_use.kind === "Weapon") {
41
+ return checkWeaponCombatTechniqueIntegrity({
42
+ ...rest,
43
+ instanceContent: instanceContent.combat_use.Weapon,
44
+ }, true);
45
+ }
46
+ return [];
47
+ },
32
48
  });
@@ -27,4 +27,10 @@ export const Newspaper = Entity(import.meta.url, {
27
27
  })),
28
28
  }),
29
29
  displayName: {},
30
+ uniqueConstraints: [
31
+ {
32
+ entityMapKeyPath: "translations",
33
+ keyPathInEntityMap: "name",
34
+ },
35
+ ],
30
36
  });
@@ -63,6 +63,12 @@ export const Poison = Entity(import.meta.url, {
63
63
  })),
64
64
  }),
65
65
  displayName: {},
66
+ uniqueConstraints: [
67
+ {
68
+ entityMapKeyPath: "translations",
69
+ keyPathInEntityMap: "name",
70
+ },
71
+ ],
66
72
  });
67
73
  const PoisonApplicationType = Enum(import.meta.url, {
68
74
  name: "PoisonApplicationType",
@@ -25,4 +25,10 @@ export const ToolOfTheTrade = Entity(import.meta.url, {
25
25
  translations: DefaultItemTranslations("ToolOfTheTrade"),
26
26
  }),
27
27
  displayName: {},
28
+ uniqueConstraints: [
29
+ {
30
+ entityMapKeyPath: "translations",
31
+ keyPathInEntityMap: "name",
32
+ },
33
+ ],
28
34
  });
@@ -1,6 +1,7 @@
1
1
  import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
3
  import { CombatUse, Complexity, Cost, DefaultItemTranslations, StructurePoints, Weight, } from "./_Item.js";
4
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
4
5
  export const TravelGearOrTool = Entity(import.meta.url, {
5
6
  name: "TravelGearOrTool",
6
7
  namePlural: "TravelGearAndTools",
@@ -29,4 +30,19 @@ export const TravelGearOrTool = Entity(import.meta.url, {
29
30
  translations: DefaultItemTranslations("TravelGearOrTool"),
30
31
  }),
31
32
  displayName: {},
33
+ uniqueConstraints: [
34
+ {
35
+ entityMapKeyPath: "translations",
36
+ keyPathInEntityMap: "name",
37
+ },
38
+ ],
39
+ customConstraints: ({ instanceContent, ...rest }) => {
40
+ if (instanceContent.combat_use && instanceContent.combat_use.kind === "Weapon") {
41
+ return checkWeaponCombatTechniqueIntegrity({
42
+ ...rest,
43
+ instanceContent: instanceContent.combat_use.Weapon,
44
+ }, true);
45
+ }
46
+ return [];
47
+ },
32
48
  });
@@ -21,4 +21,10 @@ export const Vehicle = Entity(import.meta.url, {
21
21
  translations: DefaultItemTranslations("Vehicle"),
22
22
  }),
23
23
  displayName: {},
24
+ uniqueConstraints: [
25
+ {
26
+ entityMapKeyPath: "translations",
27
+ keyPathInEntityMap: "name",
28
+ },
29
+ ],
24
30
  });