optolith-database-schema 0.25.0 → 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.
@@ -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",
@@ -35,4 +36,13 @@ export const Liebesspielzeug = Entity(import.meta.url, {
35
36
  keyPathInEntityMap: "name",
36
37
  },
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
+ },
38
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",
@@ -35,4 +36,13 @@ export const LuxuryGood = Entity(import.meta.url, {
35
36
  keyPathInEntityMap: "name",
36
37
  },
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
+ },
38
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",
@@ -69,4 +70,13 @@ export const MagicalArtifact = Entity(import.meta.url, {
69
70
  keyPathInEntityMap: "name",
70
71
  },
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
+ },
72
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",
@@ -35,4 +36,13 @@ export const MusicalInstrument = Entity(import.meta.url, {
35
36
  keyPathInEntityMap: "name",
36
37
  },
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
+ },
38
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 TravelGearOrTool = Entity(import.meta.url, {
5
6
  name: "TravelGearOrTool",
6
7
  namePlural: "TravelGearAndTools",
@@ -35,4 +36,13 @@ export const TravelGearOrTool = Entity(import.meta.url, {
35
36
  keyPathInEntityMap: "name",
36
37
  },
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
+ },
38
48
  });
@@ -1,16 +1,16 @@
1
- import { Entity, IncludeIdentifier, NestedEntityMap, Object, String, TypeAlias } from "tsondb/schema/def";
1
+ import { Entity, IncludeIdentifier, NestedEntityMap, ObjectType, String, TypeAlias } from "tsondb/schema/def";
2
2
  export declare const Weapon: Entity<"Weapon", {
3
3
  cost: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Cost", {
4
4
  Free: import("tsondb/schema/def").EnumCaseDecl<null>;
5
5
  Various: import("tsondb/schema/def").EnumCaseDecl<null>;
6
6
  Invaluable: import("tsondb/schema/def").EnumCaseDecl<null>;
7
- Fixed: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"FixedCost", Object<{
7
+ Fixed: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"FixedCost", ObjectType<{
8
8
  value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").FloatType, true>;
9
9
  translations: import("tsondb/schema/def").MemberDecl<NestedEntityMap<"FixedCostTranslation", {
10
10
  wrap_in_text: import("tsondb/schema/def").MemberDecl<String, true>;
11
11
  }>, false>;
12
12
  }>, []>>>;
13
- Range: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"CostRange", Object<{
13
+ Range: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"CostRange", ObjectType<{
14
14
  from: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").FloatType, true>;
15
15
  to: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").FloatType, true>;
16
16
  translations: import("tsondb/schema/def").MemberDecl<NestedEntityMap<"CostRangeTranslation", {
@@ -22,27 +22,27 @@ export declare const Weapon: Entity<"Weapon", {
22
22
  complexity: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Complexity", {
23
23
  Primitive: import("tsondb/schema/def").EnumCaseDecl<null>;
24
24
  Simple: import("tsondb/schema/def").EnumCaseDecl<null>;
25
- Complex: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"ComplexComplexity", Object<{
25
+ Complex: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"ComplexComplexity", ObjectType<{
26
26
  ap_value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
27
27
  }>, []>>>;
28
28
  }, []>>, false>;
29
- structure_points: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"StructurePoints", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"StructurePointsComponent", Object<{
29
+ structure_points: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"StructurePoints", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"StructurePointsComponent", ObjectType<{
30
30
  points: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
31
31
  }>, []>>>, []>>, false>;
32
32
  melee_uses: import("tsondb/schema/def").MemberDecl<NestedEntityMap<string, {
33
- damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"MeleeDamage", Object<{
34
- dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice", Object<{
33
+ damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"MeleeDamage", ObjectType<{
34
+ dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice", ObjectType<{
35
35
  number: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
36
36
  sides: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"DieType", import("tsondb/schema/def").IntegerType, []>>, true>;
37
37
  }>, []>>, true>;
38
38
  flat: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
39
39
  }>, []>>, true>;
40
40
  damage_threshold: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"PrimaryAttributeDamageThreshold", {
41
- Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultPrimaryAttributeDamageThreshold", Object<{
41
+ Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultPrimaryAttributeDamageThreshold", ObjectType<{
42
42
  threshold: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
43
43
  }>, []>>>;
44
- List: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"PrimaryAttributeDamageThresholdList", Object<{
45
- list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"SinglePrimaryAttributeDamageThreshold", Object<{
44
+ List: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"PrimaryAttributeDamageThresholdList", ObjectType<{
45
+ list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"SinglePrimaryAttributeDamageThreshold", ObjectType<{
46
46
  attribute: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
47
47
  threshold: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
48
48
  }>, []>>>, true>;
@@ -55,7 +55,7 @@ export declare const Weapon: Entity<"Weapon", {
55
55
  size: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"ShieldSize", {
56
56
  Small: import("tsondb/schema/def").EnumCaseDecl<null>;
57
57
  Medium: import("tsondb/schema/def").EnumCaseDecl<null>;
58
- Large: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"LargeShieldSize", Object<{
58
+ Large: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"LargeShieldSize", ObjectType<{
59
59
  attack_penalty: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
60
60
  }>, []>>>;
61
61
  }, []>>, false>;
@@ -65,8 +65,8 @@ export declare const Weapon: Entity<"Weapon", {
65
65
  }>, false>;
66
66
  ranged_uses: import("tsondb/schema/def").MemberDecl<NestedEntityMap<string, {
67
67
  damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"RangedDamage", {
68
- Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultRangedDamage", Object<{
69
- dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice", Object<{
68
+ Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultRangedDamage", ObjectType<{
69
+ dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice", ObjectType<{
70
70
  number: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
71
71
  sides: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"DieType", import("tsondb/schema/def").IntegerType, []>>, true>;
72
72
  }>, []>>, true>;
@@ -75,10 +75,10 @@ export declare const Weapon: Entity<"Weapon", {
75
75
  NotApplicable: import("tsondb/schema/def").EnumCaseDecl<null>;
76
76
  Special: import("tsondb/schema/def").EnumCaseDecl<null>;
77
77
  }, []>>, true>;
78
- reload_time: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"ReloadTime", Object<{
78
+ reload_time: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"ReloadTime", ObjectType<{
79
79
  value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
80
80
  }>, []>>>, true>;
81
- range: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RangeBrackets", Object<{
81
+ range: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RangeBrackets", ObjectType<{
82
82
  close: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
83
83
  medium: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
84
84
  far: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
@@ -87,20 +87,20 @@ export declare const Weapon: Entity<"Weapon", {
87
87
  length: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Length", import("tsondb/schema/def").IntegerType, []>>, false>;
88
88
  is_improvised_weapon: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
89
89
  }>, false>;
90
- restrictedTo: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedTo", Object<{
91
- races: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToRaces", Object<{
90
+ restrictedTo: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedTo", ObjectType<{
91
+ races: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToRaces", ObjectType<{
92
92
  scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
93
93
  }>, []>>, false>;
94
- cultures: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToCultures", Object<{
94
+ cultures: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToCultures", ObjectType<{
95
95
  scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
96
96
  }>, []>>, false>;
97
- professions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToProfessions", Object<{
97
+ professions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToProfessions", ObjectType<{
98
98
  scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
99
99
  }>, []>>, false>;
100
- magicalTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToMagicalTraditions", Object<{
100
+ magicalTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToMagicalTraditions", ObjectType<{
101
101
  scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
102
102
  }>, []>>, false>;
103
- blessedTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToBlessedTraditions", Object<{
103
+ blessedTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToBlessedTraditions", ObjectType<{
104
104
  scope: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"RestrictedToBlessedTraditionsScope", {
105
105
  Specific: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>>;
106
106
  Church: import("tsondb/schema/def").EnumCaseDecl<null>;
@@ -109,12 +109,12 @@ export declare const Weapon: Entity<"Weapon", {
109
109
  isSanctifiedBy: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
110
110
  }>, []>>, false>;
111
111
  }>, []>>, false>;
112
- src: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"PublicationRefs", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"PublicationRef", Object<{
112
+ src: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"PublicationRefs", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"PublicationRef", ObjectType<{
113
113
  id: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
114
114
  occurrences: import("tsondb/schema/def").MemberDecl<NestedEntityMap<string, {
115
- initial: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"InitialOccurrence", Object<{
115
+ initial: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"InitialOccurrence", ObjectType<{
116
116
  printing: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
117
- pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"PageRange", Object<{
117
+ pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"PageRange", ObjectType<{
118
118
  first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
119
119
  InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
120
120
  InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
@@ -128,9 +128,9 @@ export declare const Weapon: Entity<"Weapon", {
128
128
  }>, []>>>, true>;
129
129
  }>, []>>, true>;
130
130
  revisions: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Revision", {
131
- Since: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"Since", Object<{
131
+ Since: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"Since", ObjectType<{
132
132
  printing: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
133
- pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"PageRange", Object<{
133
+ pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"PageRange", ObjectType<{
134
134
  first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
135
135
  InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
136
136
  InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
@@ -143,7 +143,7 @@ export declare const Weapon: Entity<"Weapon", {
143
143
  }, []>>, false>;
144
144
  }>, []>>>, true>;
145
145
  }>, []>>>;
146
- Deprecated: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"Deprecation", Object<{
146
+ Deprecated: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"Deprecation", ObjectType<{
147
147
  printing: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
148
148
  }>, []>>>;
149
149
  }, []>>>, false>;
@@ -156,27 +156,27 @@ export declare const Weapon: Entity<"Weapon", {
156
156
  rules: import("tsondb/schema/def").MemberDecl<String, false>;
157
157
  advantage: import("tsondb/schema/def").MemberDecl<String, false>;
158
158
  disadvantage: import("tsondb/schema/def").MemberDecl<String, false>;
159
- errata: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Errata", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"Erratum", Object<{
159
+ errata: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Errata", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"Erratum", ObjectType<{
160
160
  date: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").DateType, true>;
161
161
  description: import("tsondb/schema/def").MemberDecl<String, true>;
162
162
  }>, []>>>, []>>, false>;
163
163
  }>, true>;
164
164
  }, undefined>;
165
- export declare const ImprovisedWeapon: TypeAlias<"ImprovisedWeapon", Object<{
165
+ export declare const ImprovisedWeapon: TypeAlias<"ImprovisedWeapon", ObjectType<{
166
166
  melee_uses: import("tsondb/schema/def").MemberDecl<NestedEntityMap<string, {
167
- damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"MeleeDamage", Object<{
168
- dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice", Object<{
167
+ damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"MeleeDamage", ObjectType<{
168
+ dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice", ObjectType<{
169
169
  number: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
170
170
  sides: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"DieType", import("tsondb/schema/def").IntegerType, []>>, true>;
171
171
  }>, []>>, true>;
172
172
  flat: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
173
173
  }>, []>>, true>;
174
174
  damage_threshold: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"PrimaryAttributeDamageThreshold", {
175
- Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultPrimaryAttributeDamageThreshold", Object<{
175
+ Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultPrimaryAttributeDamageThreshold", ObjectType<{
176
176
  threshold: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
177
177
  }>, []>>>;
178
- List: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"PrimaryAttributeDamageThresholdList", Object<{
179
- list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"SinglePrimaryAttributeDamageThreshold", Object<{
178
+ List: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"PrimaryAttributeDamageThresholdList", ObjectType<{
179
+ list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"SinglePrimaryAttributeDamageThreshold", ObjectType<{
180
180
  attribute: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
181
181
  threshold: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
182
182
  }>, []>>>, true>;
@@ -189,7 +189,7 @@ export declare const ImprovisedWeapon: TypeAlias<"ImprovisedWeapon", Object<{
189
189
  size: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"ShieldSize", {
190
190
  Small: import("tsondb/schema/def").EnumCaseDecl<null>;
191
191
  Medium: import("tsondb/schema/def").EnumCaseDecl<null>;
192
- Large: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"LargeShieldSize", Object<{
192
+ Large: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"LargeShieldSize", ObjectType<{
193
193
  attack_penalty: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
194
194
  }>, []>>>;
195
195
  }, []>>, false>;
@@ -199,8 +199,8 @@ export declare const ImprovisedWeapon: TypeAlias<"ImprovisedWeapon", Object<{
199
199
  }>, false>;
200
200
  ranged_uses: import("tsondb/schema/def").MemberDecl<NestedEntityMap<string, {
201
201
  damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"RangedDamage", {
202
- Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultRangedDamage", Object<{
203
- dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice", Object<{
202
+ Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"DefaultRangedDamage", ObjectType<{
203
+ dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Dice", ObjectType<{
204
204
  number: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
205
205
  sides: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"DieType", import("tsondb/schema/def").IntegerType, []>>, true>;
206
206
  }>, []>>, true>;
@@ -209,10 +209,10 @@ export declare const ImprovisedWeapon: TypeAlias<"ImprovisedWeapon", Object<{
209
209
  NotApplicable: import("tsondb/schema/def").EnumCaseDecl<null>;
210
210
  Special: import("tsondb/schema/def").EnumCaseDecl<null>;
211
211
  }, []>>, true>;
212
- reload_time: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"ReloadTime", Object<{
212
+ reload_time: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], TypeAlias<"ReloadTime", ObjectType<{
213
213
  value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
214
214
  }>, []>>>, true>;
215
- range: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RangeBrackets", Object<{
215
+ range: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RangeBrackets", ObjectType<{
216
216
  close: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
217
217
  medium: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
218
218
  far: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
@@ -221,20 +221,20 @@ export declare const ImprovisedWeapon: TypeAlias<"ImprovisedWeapon", Object<{
221
221
  length: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"Length", import("tsondb/schema/def").IntegerType, []>>, false>;
222
222
  is_improvised_weapon: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
223
223
  }>, false>;
224
- restrictedTo: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedTo", Object<{
225
- races: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToRaces", Object<{
224
+ restrictedTo: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedTo", ObjectType<{
225
+ races: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToRaces", ObjectType<{
226
226
  scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
227
227
  }>, []>>, false>;
228
- cultures: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToCultures", Object<{
228
+ cultures: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToCultures", ObjectType<{
229
229
  scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
230
230
  }>, []>>, false>;
231
- professions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToProfessions", Object<{
231
+ professions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToProfessions", ObjectType<{
232
232
  scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
233
233
  }>, []>>, false>;
234
- magicalTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToMagicalTraditions", Object<{
234
+ magicalTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToMagicalTraditions", ObjectType<{
235
235
  scope: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
236
236
  }>, []>>, false>;
237
- blessedTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToBlessedTraditions", Object<{
237
+ blessedTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToBlessedTraditions", ObjectType<{
238
238
  scope: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"RestrictedToBlessedTraditionsScope", {
239
239
  Specific: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>>;
240
240
  Church: import("tsondb/schema/def").EnumCaseDecl<null>;
@@ -1,4 +1,4 @@
1
- import { Entity, IncludeIdentifier, NestedEntityMap, Object, Optional, Required, String, TypeAlias, } from "tsondb/schema/def";
1
+ import { Entity, IncludeIdentifier, NestedEntityMap, ObjectType, Optional, Required, String, TypeAlias, } from "tsondb/schema/def";
2
2
  import { CloseCombatTechnique, RangedCombatTechnique } from "../../CombatTechnique.js";
3
3
  import { NestedTranslationMap } from "../../Locale.js";
4
4
  import { Errata } from "../../source/_Erratum.js";
@@ -6,10 +6,11 @@ import { src } from "../../source/_PublicationRef.js";
6
6
  import { Complexity, Cost, RestrictedTo, StructurePoints, Weight } from "./_Item.js";
7
7
  import { MeleeWeapon } from "./_MeleeWeapon.js";
8
8
  import { RangedWeapon } from "./_RangedWeapon.js";
9
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
9
10
  export const Weapon = Entity(import.meta.url, {
10
11
  name: "Weapon",
11
12
  namePlural: "Weapons",
12
- type: () => Object({
13
+ type: () => ObjectType({
13
14
  cost: Required({
14
15
  comment: "The cost in silverthalers.",
15
16
  type: IncludeIdentifier(Cost),
@@ -49,7 +50,7 @@ export const Weapon = Entity(import.meta.url, {
49
50
  type: IncludeIdentifier(RestrictedTo),
50
51
  }),
51
52
  src,
52
- translations: NestedTranslationMap(Required, "Weapon", Object({
53
+ translations: NestedTranslationMap(Required, "Weapon", ObjectType({
53
54
  name: Required({
54
55
  comment: "The item’s name.",
55
56
  type: String({ minLength: 1 }),
@@ -86,10 +87,11 @@ export const Weapon = Entity(import.meta.url, {
86
87
  keyPathInEntityMap: "name",
87
88
  },
88
89
  ],
90
+ customConstraints: params => checkWeaponCombatTechniqueIntegrity(params, false),
89
91
  });
90
92
  export const ImprovisedWeapon = TypeAlias(import.meta.url, {
91
93
  name: "ImprovisedWeapon",
92
- type: () => Object({
94
+ type: () => ObjectType({
93
95
  melee_uses: Optional({
94
96
  comment: "A list of stat blocks for each close combat technique this weapon can be used with.",
95
97
  type: NestedEntityMap({
@@ -112,7 +114,7 @@ export const ImprovisedWeapon = TypeAlias(import.meta.url, {
112
114
  comment: "Define if during character creation this weapon can only be bought by a specific subset of characters.",
113
115
  type: IncludeIdentifier(RestrictedTo),
114
116
  }),
115
- translations: NestedTranslationMap(Optional, "ImprovisedWeapon", Object({
117
+ translations: NestedTranslationMap(Optional, "ImprovisedWeapon", ObjectType({
116
118
  advantage: Optional({
117
119
  comment: "The weapon advantage text.",
118
120
  type: String({ minLength: 1, isMarkdown: true }),
@@ -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 WeaponAccessory = Entity(import.meta.url, {
5
6
  name: "WeaponAccessory",
6
7
  namePlural: "WeaponAccessories",
@@ -35,4 +36,13 @@ export const WeaponAccessory = Entity(import.meta.url, {
35
36
  keyPathInEntityMap: "name",
36
37
  },
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
+ },
38
48
  });
@@ -3,8 +3,10 @@ import { BlessedTraditionIdentifier, CultureIdentifier, MagicalTraditionIdentifi
3
3
  import { NestedTranslationMap } from "../../Locale.js";
4
4
  import { Errata } from "../../source/_Erratum.js";
5
5
  import { src } from "../../source/_PublicationRef.js";
6
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
6
7
  import { SecondaryArmor } from "./Armor.js";
7
8
  import { ImprovisedWeapon } from "./Weapon.js";
9
+ const COMBAT_USE = "combat_use";
8
10
  export const DefaultItem = (sourceUrl, singularName, pluralName) => Entity(sourceUrl, {
9
11
  name: singularName,
10
12
  namePlural: pluralName ?? `${singularName}s`,
@@ -25,7 +27,7 @@ export const DefaultItem = (sourceUrl, singularName, pluralName) => Entity(sourc
25
27
  comment: "The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.",
26
28
  type: IncludeIdentifier(StructurePoints),
27
29
  }),
28
- combat_use: Optional({
30
+ [COMBAT_USE]: Optional({
29
31
  comment: "The item can also be used either as an improvised weapon or as an armor, although this is not the primary use case of the item.",
30
32
  type: IncludeIdentifier(CombatUse),
31
33
  }),
@@ -39,6 +41,16 @@ export const DefaultItem = (sourceUrl, singularName, pluralName) => Entity(sourc
39
41
  keyPathInEntityMap: "name",
40
42
  },
41
43
  ],
44
+ customConstraints: ({ instanceContent, ...rest }) => {
45
+ const combatUse = instanceContent.combat_use;
46
+ if (combatUse && combatUse.kind === "Weapon") {
47
+ return checkWeaponCombatTechniqueIntegrity({
48
+ ...rest,
49
+ instanceContent: combatUse.Weapon,
50
+ }, true);
51
+ }
52
+ return [];
53
+ },
42
54
  });
43
55
  export const DefaultItemTranslations = (singularName) => NestedTranslationMap(Required, singularName, Object({
44
56
  name: Required({
@@ -1,13 +1,22 @@
1
- import { Array, Enum, EnumCase, IncludeIdentifier, Integer, Object, TypeAlias } from "tsondb/schema/def";
1
+ import { Array, Enum, EnumCase, IncludeIdentifier, Integer, ObjectType, TypeAlias, type GetDisplayNameWithId, type GetInstanceById } from "tsondb/schema/def";
2
+ import type { MeleeWeapon, RangedWeapon } from "../../../../gen/types.js";
2
3
  export declare const PrimaryAttributeDamageThreshold: Enum<"PrimaryAttributeDamageThreshold", {
3
- Default: EnumCase<IncludeIdentifier<[], TypeAlias<"DefaultPrimaryAttributeDamageThreshold", Object<{
4
+ Default: EnumCase<IncludeIdentifier<[], TypeAlias<"DefaultPrimaryAttributeDamageThreshold", ObjectType<{
4
5
  threshold: import("tsondb/schema/def").MemberDecl<Integer, true>;
5
6
  }>, []>>>;
6
- List: EnumCase<IncludeIdentifier<[], TypeAlias<"PrimaryAttributeDamageThresholdList", Object<{
7
- list: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], TypeAlias<"SinglePrimaryAttributeDamageThreshold", Object<{
7
+ List: EnumCase<IncludeIdentifier<[], TypeAlias<"PrimaryAttributeDamageThresholdList", ObjectType<{
8
+ list: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], TypeAlias<"SinglePrimaryAttributeDamageThreshold", ObjectType<{
8
9
  attribute: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
9
10
  threshold: import("tsondb/schema/def").MemberDecl<Integer, true>;
10
11
  }>, []>>>, true>;
11
12
  }>, []>>>;
12
13
  }, []>;
13
14
  export declare const Length: TypeAlias<"Length", Integer, []>;
15
+ export declare const checkWeaponCombatTechniqueIntegrity: ({ instanceContent, getInstanceById, getDisplayNameWithId, }: {
16
+ instanceContent: {
17
+ melee_uses?: Record<string, MeleeWeapon>;
18
+ ranged_uses?: Record<string, RangedWeapon>;
19
+ };
20
+ getInstanceById: GetInstanceById;
21
+ getDisplayNameWithId: GetDisplayNameWithId;
22
+ }, _secondary: boolean) => string[];
@@ -1,4 +1,4 @@
1
- import { Array, Enum, EnumCase, IncludeIdentifier, Integer, Object, Required, TypeAlias, } from "tsondb/schema/def";
1
+ import { Array, Enum, EnumCase, IncludeIdentifier, Integer, ObjectType, Required, TypeAlias, } from "tsondb/schema/def";
2
2
  import { AttributeIdentifier } from "../../_Identifier.js";
3
3
  export const PrimaryAttributeDamageThreshold = Enum(import.meta.url, {
4
4
  name: "PrimaryAttributeDamageThreshold",
@@ -10,7 +10,7 @@ export const PrimaryAttributeDamageThreshold = Enum(import.meta.url, {
10
10
  });
11
11
  const DefaultPrimaryAttributeDamageThreshold = TypeAlias(import.meta.url, {
12
12
  name: "DefaultPrimaryAttributeDamageThreshold",
13
- type: () => Object({
13
+ type: () => ObjectType({
14
14
  threshold: Required({
15
15
  comment: "The attribute value representing the damage threshold for the primary attribute of the item's combat technique.",
16
16
  type: Integer({ minimum: 1 }),
@@ -19,7 +19,7 @@ const DefaultPrimaryAttributeDamageThreshold = TypeAlias(import.meta.url, {
19
19
  });
20
20
  const PrimaryAttributeDamageThresholdList = TypeAlias(import.meta.url, {
21
21
  name: "PrimaryAttributeDamageThresholdList",
22
- type: () => Object({
22
+ type: () => ObjectType({
23
23
  list: Required({
24
24
  comment: "A list of primary attributes with their associated threshold.",
25
25
  type: Array(IncludeIdentifier(SinglePrimaryAttributeDamageThreshold), {
@@ -31,7 +31,7 @@ const PrimaryAttributeDamageThresholdList = TypeAlias(import.meta.url, {
31
31
  });
32
32
  const SinglePrimaryAttributeDamageThreshold = TypeAlias(import.meta.url, {
33
33
  name: "SinglePrimaryAttributeDamageThreshold",
34
- type: () => Object({
34
+ type: () => ObjectType({
35
35
  attribute: Required({
36
36
  comment: "The primary attribute.",
37
37
  type: AttributeIdentifier(),
@@ -47,3 +47,31 @@ export const Length = TypeAlias(import.meta.url, {
47
47
  comment: "The length of the weapon in cm/halffingers.",
48
48
  type: () => Integer({ minimum: 1 }),
49
49
  });
50
+ export const checkWeaponCombatTechniqueIntegrity = ({ instanceContent, getInstanceById, getDisplayNameWithId, }, _secondary) => {
51
+ const checkPart = (rule, value, name, type, id) => (rule.kind === "Prohibited") === (value === undefined) || rule.kind === "Optional"
52
+ ? undefined
53
+ : `${name} must${rule.kind === "Required" ? "" : " not"} be provided for ${type} combat technique ${getDisplayNameWithId(type === "close" ? "CloseCombatTechnique" : "RangedCombatTechnique", id)}`;
54
+ return [
55
+ instanceContent.melee_uses === undefined && instanceContent.ranged_uses === undefined
56
+ ? "either melee uses or ranged uses have to be provided"
57
+ : undefined,
58
+ ...Object.entries(instanceContent.melee_uses ?? {}).flatMap(([ctId, meleeUse]) => {
59
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- integrity has been checked, it must be present
60
+ const ct = getInstanceById("CloseCombatTechnique", ctId);
61
+ return [
62
+ checkPart(ct.special.can_parry, meleeUse.parryModifier, "a parry modifier", "close", ctId),
63
+ checkPart(ct.special.has_damage_threshold, meleeUse.damage_threshold, "a damage threshold", "close", ctId),
64
+ checkPart(ct.special.has_length, meleeUse.length, "a length", "close", ctId),
65
+ checkPart(ct.special.has_reach, meleeUse.reach, "a reach", "close", ctId),
66
+ checkPart(ct.special.has_shield_size, meleeUse.size, "a shield size", "close", ctId),
67
+ ].filter(v => v !== undefined);
68
+ }),
69
+ ...Object.entries(instanceContent.ranged_uses ?? {}).flatMap(([ctId, rangedUse]) => {
70
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- integrity has been checked, it must be present
71
+ const ct = getInstanceById("RangedCombatTechnique", ctId);
72
+ return [
73
+ checkPart(ct.special.has_ammunition, rangedUse.ammunition, "an ammunition", "ranged", ctId),
74
+ ].filter(v => v !== undefined);
75
+ }),
76
+ ].filter(v => v !== undefined);
77
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "optolith-database-schema",
3
- "version": "0.25.0",
3
+ "version": "0.26.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",
@@ -41,7 +41,7 @@
41
41
  "license": "MPL-2.0",
42
42
  "dependencies": {
43
43
  "@optolith/helpers": "^0.2.2",
44
- "tsondb": "^0.14.0",
44
+ "tsondb": "^0.16.0",
45
45
  "yaml": "^2.8.1"
46
46
  },
47
47
  "devDependencies": {