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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,19 @@
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.26.0](https://github.com/elyukai/optolith-database-schema/compare/v0.25.0...v0.26.0) (2025-12-15)
6
+
7
+
8
+ ### ⚠ BREAKING CHANGES
9
+
10
+ * Combat techniques need to specify special rules
11
+ differently.
12
+
13
+ ### Features
14
+
15
+ * add profession liturgies for ap sum option ([a1316af](https://github.com/elyukai/optolith-database-schema/commit/a1316af0c1f8b85e79f5f393eed2c3bec5204645)), closes [#86](https://github.com/elyukai/optolith-database-schema/issues/86)
16
+ * custom constraint for weapon values ([02be29d](https://github.com/elyukai/optolith-database-schema/commit/02be29dab7bca40fb4c370c48a9f775ccf8aaf7d))
17
+
5
18
  ## [0.25.0](https://github.com/elyukai/optolith-database-schema/compare/v0.24.3...v0.25.0) (2025-12-14)
6
19
 
7
20
 
package/gen/types.d.ts CHANGED
@@ -4131,17 +4131,31 @@ export interface CloseCombatTechniqueSpecialRules {
4131
4131
  /**
4132
4132
  * Is parrying possible with this combat technique?
4133
4133
  */
4134
- can_parry: boolean
4134
+ can_parry: WeaponCombatTechniqueValueRule
4135
4135
 
4136
- has_damage_threshold: boolean
4136
+ has_damage_threshold: WeaponCombatTechniqueValueRule
4137
4137
 
4138
- has_reach: boolean
4138
+ has_reach: WeaponCombatTechniqueValueRule
4139
4139
 
4140
- has_length: boolean
4140
+ has_length: WeaponCombatTechniqueValueRule
4141
4141
 
4142
- has_shield_size: boolean
4142
+ has_shield_size: WeaponCombatTechniqueValueRule
4143
4143
  }
4144
4144
 
4145
+ /**
4146
+ * Defines if the weapon must/can/must not define a value for this parameter.
4147
+ */
4148
+ export type WeaponCombatTechniqueValueRule =
4149
+ | {
4150
+ kind: "Required"
4151
+ }
4152
+ | {
4153
+ kind: "Optional"
4154
+ }
4155
+ | {
4156
+ kind: "Prohibited"
4157
+ }
4158
+
4145
4159
  export interface RangedCombatTechnique {
4146
4160
  /**
4147
4161
  * Special rules for the combat technique that apply to all weapons in this category.
@@ -4199,7 +4213,7 @@ export interface RangedCombatTechniqueTranslation {
4199
4213
  * Special rules for the combat technique that apply to all weapons in this category.
4200
4214
  */
4201
4215
  export interface RangedCombatTechniqueSpecialRules {
4202
- has_ammunition: boolean
4216
+ has_ammunition: WeaponCombatTechniqueValueRule
4203
4217
  }
4204
4218
 
4205
4219
  export interface Property {
@@ -7737,6 +7751,7 @@ export interface ProfessionPackageOptions {
7737
7751
  curses?: CursesOptions
7738
7752
  terrain_knowledge?: TerrainKnowledgeOptions
7739
7753
  skills?: SkillsOptions
7754
+ liturgies?: LiturgiesOptions
7740
7755
  }
7741
7756
 
7742
7757
  /**
@@ -8043,6 +8058,16 @@ export interface SkillsOptions {
8043
8058
  ap_value: number
8044
8059
  }
8045
8060
 
8061
+ /**
8062
+ * Buy liturgical chants and ceremonies for a specific amount of AP.
8063
+ */
8064
+ export interface LiturgiesOptions {
8065
+ /**
8066
+ * The AP value you can buy liturgical chants and ceremonies for.
8067
+ */
8068
+ ap_value: number
8069
+ }
8070
+
8046
8071
  export type ProfessionSpecialAbility =
8047
8072
  | {
8048
8073
  kind: "Constant"
@@ -17226,6 +17251,7 @@ export interface ProfessionVariantPackageOptions {
17226
17251
  curses?: VariantOptionAction<CursesOptions>
17227
17252
  terrain_knowledge?: VariantOptionAction<TerrainKnowledgeOptions>
17228
17253
  skills?: VariantOptionAction<SkillsOptions>
17254
+ liturgies?: VariantOptionAction<LiturgiesOptions>
17229
17255
  }
17230
17256
 
17231
17257
  export type VariantOptionAction<T> =
package/lib/main.d.ts CHANGED
@@ -1,2 +1,9 @@
1
1
  import { Schema } from "tsondb/schema";
2
+ import type { ChildEntityMap, EntityMap } from "../gen/types.js";
3
+ declare module "tsondb/schema" {
4
+ interface Register {
5
+ entityMap: EntityMap;
6
+ childEntityMap: ChildEntityMap;
7
+ }
8
+ }
2
9
  export declare const schema: Schema;
@@ -1,19 +1,39 @@
1
- import { Array, Boolean, Entity, IncludeIdentifier, Integer, Object, String, TypeAlias } from "tsondb/schema/def";
1
+ import { Array, Entity, Enum, EnumCase, IncludeIdentifier, Integer, Object, String, TypeAlias } from "tsondb/schema/def";
2
2
  export declare const CloseCombatTechnique: Entity<"CloseCombatTechnique", {
3
3
  special: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"CloseCombatTechniqueSpecialRules", Object<{
4
- can_parry: import("tsondb/schema/def").MemberDecl<Boolean, true>;
5
- has_damage_threshold: import("tsondb/schema/def").MemberDecl<Boolean, true>;
6
- has_reach: import("tsondb/schema/def").MemberDecl<Boolean, true>;
7
- has_length: import("tsondb/schema/def").MemberDecl<Boolean, true>;
8
- has_shield_size: import("tsondb/schema/def").MemberDecl<Boolean, true>;
4
+ can_parry: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"WeaponCombatTechniqueValueRule", {
5
+ Required: EnumCase<null>;
6
+ Optional: EnumCase<null>;
7
+ Prohibited: EnumCase<null>;
8
+ }, []>>, true>;
9
+ has_damage_threshold: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"WeaponCombatTechniqueValueRule", {
10
+ Required: EnumCase<null>;
11
+ Optional: EnumCase<null>;
12
+ Prohibited: EnumCase<null>;
13
+ }, []>>, true>;
14
+ has_reach: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"WeaponCombatTechniqueValueRule", {
15
+ Required: EnumCase<null>;
16
+ Optional: EnumCase<null>;
17
+ Prohibited: EnumCase<null>;
18
+ }, []>>, true>;
19
+ has_length: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"WeaponCombatTechniqueValueRule", {
20
+ Required: EnumCase<null>;
21
+ Optional: EnumCase<null>;
22
+ Prohibited: EnumCase<null>;
23
+ }, []>>, true>;
24
+ has_shield_size: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"WeaponCombatTechniqueValueRule", {
25
+ Required: EnumCase<null>;
26
+ Optional: EnumCase<null>;
27
+ Prohibited: EnumCase<null>;
28
+ }, []>>, true>;
9
29
  }>, []>>, true>;
10
30
  primary_attribute: import("tsondb/schema/def").MemberDecl<Array<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
11
31
  breaking_point_rating: import("tsondb/schema/def").MemberDecl<Integer, true>;
12
- improvement_cost: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"ImprovementCost", {
13
- A: import("tsondb/schema/def").EnumCaseDecl<null>;
14
- B: import("tsondb/schema/def").EnumCaseDecl<null>;
15
- C: import("tsondb/schema/def").EnumCaseDecl<null>;
16
- D: import("tsondb/schema/def").EnumCaseDecl<null>;
32
+ improvement_cost: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"ImprovementCost", {
33
+ A: EnumCase<null>;
34
+ B: EnumCase<null>;
35
+ C: EnumCase<null>;
36
+ D: EnumCase<null>;
17
37
  }, []>>, true>;
18
38
  src: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"PublicationRefs", Array<IncludeIdentifier<[], TypeAlias<"PublicationRef", Object<{
19
39
  id: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
@@ -21,35 +41,35 @@ export declare const CloseCombatTechnique: Entity<"CloseCombatTechnique", {
21
41
  initial: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"InitialOccurrence", Object<{
22
42
  printing: import("tsondb/schema/def").MemberDecl<Integer, false>;
23
43
  pages: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], TypeAlias<"PageRange", Object<{
24
- first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
25
- InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
26
- InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
27
- Numbered: import("tsondb/schema/def").EnumCaseDecl<Integer>;
44
+ first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"Page", {
45
+ InsideCoverFront: EnumCase<null>;
46
+ InsideCoverBack: EnumCase<null>;
47
+ Numbered: EnumCase<Integer>;
28
48
  }, []>>, true>;
29
- last_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
30
- InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
31
- InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
32
- Numbered: import("tsondb/schema/def").EnumCaseDecl<Integer>;
49
+ last_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"Page", {
50
+ InsideCoverFront: EnumCase<null>;
51
+ InsideCoverBack: EnumCase<null>;
52
+ Numbered: EnumCase<Integer>;
33
53
  }, []>>, false>;
34
54
  }>, []>>>, true>;
35
55
  }>, []>>, true>;
36
- revisions: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Revision", {
37
- Since: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"Since", Object<{
56
+ revisions: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], Enum<"Revision", {
57
+ Since: EnumCase<IncludeIdentifier<[], TypeAlias<"Since", Object<{
38
58
  printing: import("tsondb/schema/def").MemberDecl<Integer, true>;
39
59
  pages: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], TypeAlias<"PageRange", Object<{
40
- first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
41
- InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
42
- InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
43
- Numbered: import("tsondb/schema/def").EnumCaseDecl<Integer>;
60
+ first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"Page", {
61
+ InsideCoverFront: EnumCase<null>;
62
+ InsideCoverBack: EnumCase<null>;
63
+ Numbered: EnumCase<Integer>;
44
64
  }, []>>, true>;
45
- last_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
46
- InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
47
- InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
48
- Numbered: import("tsondb/schema/def").EnumCaseDecl<Integer>;
65
+ last_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"Page", {
66
+ InsideCoverFront: EnumCase<null>;
67
+ InsideCoverBack: EnumCase<null>;
68
+ Numbered: EnumCase<Integer>;
49
69
  }, []>>, false>;
50
70
  }>, []>>>, true>;
51
71
  }>, []>>>;
52
- Deprecated: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"Deprecation", Object<{
72
+ Deprecated: EnumCase<IncludeIdentifier<[], TypeAlias<"Deprecation", Object<{
53
73
  printing: import("tsondb/schema/def").MemberDecl<Integer, true>;
54
74
  }>, []>>>;
55
75
  }, []>>>, false>;
@@ -66,15 +86,19 @@ export declare const CloseCombatTechnique: Entity<"CloseCombatTechnique", {
66
86
  }, undefined>;
67
87
  export declare const RangedCombatTechnique: Entity<"RangedCombatTechnique", {
68
88
  special: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RangedCombatTechniqueSpecialRules", Object<{
69
- has_ammunition: import("tsondb/schema/def").MemberDecl<Boolean, true>;
89
+ has_ammunition: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"WeaponCombatTechniqueValueRule", {
90
+ Required: EnumCase<null>;
91
+ Optional: EnumCase<null>;
92
+ Prohibited: EnumCase<null>;
93
+ }, []>>, true>;
70
94
  }>, []>>, true>;
71
95
  primary_attribute: import("tsondb/schema/def").MemberDecl<Array<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
72
96
  breaking_point_rating: import("tsondb/schema/def").MemberDecl<Integer, true>;
73
- improvement_cost: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"ImprovementCost", {
74
- A: import("tsondb/schema/def").EnumCaseDecl<null>;
75
- B: import("tsondb/schema/def").EnumCaseDecl<null>;
76
- C: import("tsondb/schema/def").EnumCaseDecl<null>;
77
- D: import("tsondb/schema/def").EnumCaseDecl<null>;
97
+ improvement_cost: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"ImprovementCost", {
98
+ A: EnumCase<null>;
99
+ B: EnumCase<null>;
100
+ C: EnumCase<null>;
101
+ D: EnumCase<null>;
78
102
  }, []>>, true>;
79
103
  src: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"PublicationRefs", Array<IncludeIdentifier<[], TypeAlias<"PublicationRef", Object<{
80
104
  id: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
@@ -82,35 +106,35 @@ export declare const RangedCombatTechnique: Entity<"RangedCombatTechnique", {
82
106
  initial: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"InitialOccurrence", Object<{
83
107
  printing: import("tsondb/schema/def").MemberDecl<Integer, false>;
84
108
  pages: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], TypeAlias<"PageRange", Object<{
85
- first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
86
- InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
87
- InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
88
- Numbered: import("tsondb/schema/def").EnumCaseDecl<Integer>;
109
+ first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"Page", {
110
+ InsideCoverFront: EnumCase<null>;
111
+ InsideCoverBack: EnumCase<null>;
112
+ Numbered: EnumCase<Integer>;
89
113
  }, []>>, true>;
90
- last_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
91
- InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
92
- InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
93
- Numbered: import("tsondb/schema/def").EnumCaseDecl<Integer>;
114
+ last_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"Page", {
115
+ InsideCoverFront: EnumCase<null>;
116
+ InsideCoverBack: EnumCase<null>;
117
+ Numbered: EnumCase<Integer>;
94
118
  }, []>>, false>;
95
119
  }>, []>>>, true>;
96
120
  }>, []>>, true>;
97
- revisions: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Revision", {
98
- Since: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"Since", Object<{
121
+ revisions: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], Enum<"Revision", {
122
+ Since: EnumCase<IncludeIdentifier<[], TypeAlias<"Since", Object<{
99
123
  printing: import("tsondb/schema/def").MemberDecl<Integer, true>;
100
124
  pages: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], TypeAlias<"PageRange", Object<{
101
- first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
102
- InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
103
- InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
104
- Numbered: import("tsondb/schema/def").EnumCaseDecl<Integer>;
125
+ first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"Page", {
126
+ InsideCoverFront: EnumCase<null>;
127
+ InsideCoverBack: EnumCase<null>;
128
+ Numbered: EnumCase<Integer>;
105
129
  }, []>>, true>;
106
- last_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
107
- InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
108
- InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
109
- Numbered: import("tsondb/schema/def").EnumCaseDecl<Integer>;
130
+ last_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"Page", {
131
+ InsideCoverFront: EnumCase<null>;
132
+ InsideCoverBack: EnumCase<null>;
133
+ Numbered: EnumCase<Integer>;
110
134
  }, []>>, false>;
111
135
  }>, []>>>, true>;
112
136
  }>, []>>>;
113
- Deprecated: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], TypeAlias<"Deprecation", Object<{
137
+ Deprecated: EnumCase<IncludeIdentifier<[], TypeAlias<"Deprecation", Object<{
114
138
  printing: import("tsondb/schema/def").MemberDecl<Integer, true>;
115
139
  }>, []>>>;
116
140
  }, []>>>, false>;
@@ -1,4 +1,4 @@
1
- import { Array, Boolean, Entity, IncludeIdentifier, Integer, Object, Optional, Required, String, TypeAlias, } from "tsondb/schema/def";
1
+ import { Array, Entity, Enum, EnumCase, IncludeIdentifier, Integer, Object, Optional, Required, String, TypeAlias, } from "tsondb/schema/def";
2
2
  import { AttributeIdentifier } from "./_Identifier.js";
3
3
  import { ImprovementCost } from "./_ImprovementCost.js";
4
4
  import { NestedTranslationMap } from "./Locale.js";
@@ -47,18 +47,36 @@ export const CloseCombatTechnique = Entity(import.meta.url, {
47
47
  },
48
48
  ],
49
49
  });
50
+ const WeaponCombatTechniqueValueRule = Enum(import.meta.url, {
51
+ name: "WeaponCombatTechniqueValueRule",
52
+ comment: "Defines if the weapon must/can/must not define a value for this parameter.",
53
+ values: () => ({
54
+ Required: EnumCase({
55
+ comment: "The parameter must be present in all weapons for this combat technique.",
56
+ type: null,
57
+ }),
58
+ Optional: EnumCase({
59
+ comment: "The parameter can be present in any weapons for this combat technique.",
60
+ type: null,
61
+ }),
62
+ Prohibited: EnumCase({
63
+ comment: "The parameter must not be present in any weapon for this combat technique.",
64
+ type: null,
65
+ }),
66
+ }),
67
+ });
50
68
  const CloseCombatTechniqueSpecialRules = TypeAlias(import.meta.url, {
51
69
  name: "CloseCombatTechniqueSpecialRules",
52
70
  comment: "Special rules for the combat technique that apply to all weapons in this category.",
53
71
  type: () => Object({
54
72
  can_parry: Required({
55
73
  comment: "Is parrying possible with this combat technique?",
56
- type: Boolean(),
74
+ type: IncludeIdentifier(WeaponCombatTechniqueValueRule),
57
75
  }),
58
- has_damage_threshold: Required({ type: Boolean() }),
59
- has_reach: Required({ type: Boolean() }),
60
- has_length: Required({ type: Boolean() }),
61
- has_shield_size: Required({ type: Boolean() }),
76
+ has_damage_threshold: Required({ type: IncludeIdentifier(WeaponCombatTechniqueValueRule) }),
77
+ has_reach: Required({ type: IncludeIdentifier(WeaponCombatTechniqueValueRule) }),
78
+ has_length: Required({ type: IncludeIdentifier(WeaponCombatTechniqueValueRule) }),
79
+ has_shield_size: Required({ type: IncludeIdentifier(WeaponCombatTechniqueValueRule) }),
62
80
  }),
63
81
  });
64
82
  export const RangedCombatTechnique = Entity(import.meta.url, {
@@ -108,6 +126,6 @@ const RangedCombatTechniqueSpecialRules = TypeAlias(import.meta.url, {
108
126
  name: "RangedCombatTechniqueSpecialRules",
109
127
  comment: "Special rules for the combat technique that apply to all weapons in this category.",
110
128
  type: () => Object({
111
- has_ammunition: Required({ type: Boolean() }),
129
+ has_ammunition: Required({ type: IncludeIdentifier(WeaponCombatTechniqueValueRule) }),
112
130
  }),
113
131
  });
@@ -76,6 +76,9 @@ export declare const Profession: Entity<"Profession", {
76
76
  group: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, false>;
77
77
  ap_value: import("tsondb/schema/def").MemberDecl<Integer, true>;
78
78
  }>, []>>, false>;
79
+ liturgies: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"LiturgiesOptions", ObjectType<{
80
+ ap_value: import("tsondb/schema/def").MemberDecl<Integer, true>;
81
+ }>, []>>, false>;
79
82
  }>, []>>, false>;
80
83
  special_abilities: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], Enum<"ProfessionSpecialAbility", {
81
84
  Constant: EnumCase<IncludeIdentifier<[], TypeAlias<"ConstantProfessionSpecialAbility", ObjectType<{
@@ -332,6 +335,10 @@ export declare const Profession: Entity<"Profession", {
332
335
  Remove: EnumCase<null>;
333
336
  Override: EnumCase<TypeArgument<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>;
334
337
  }, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>, false>;
338
+ liturgies: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], Enum<"VariantOptionAction", {
339
+ Remove: EnumCase<null>;
340
+ Override: EnumCase<TypeArgument<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>;
341
+ }, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>, false>;
335
342
  }>, []>>, false>;
336
343
  special_abilities: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], TypeAlias<"ProfessionVariantSpecialAbility", ObjectType<{
337
344
  action: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"VariantSpecialAbilityAction", {
@@ -692,6 +699,9 @@ export declare const ProfessionVersion: Entity<"ProfessionVersion", {
692
699
  group: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, false>;
693
700
  ap_value: import("tsondb/schema/def").MemberDecl<Integer, true>;
694
701
  }>, []>>, false>;
702
+ liturgies: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"LiturgiesOptions", ObjectType<{
703
+ ap_value: import("tsondb/schema/def").MemberDecl<Integer, true>;
704
+ }>, []>>, false>;
695
705
  }>, []>>, false>;
696
706
  special_abilities: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], Enum<"ProfessionSpecialAbility", {
697
707
  Constant: EnumCase<IncludeIdentifier<[], TypeAlias<"ConstantProfessionSpecialAbility", ObjectType<{
@@ -948,6 +958,10 @@ export declare const ProfessionVersion: Entity<"ProfessionVersion", {
948
958
  Remove: EnumCase<null>;
949
959
  Override: EnumCase<TypeArgument<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>;
950
960
  }, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>, false>;
961
+ liturgies: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], Enum<"VariantOptionAction", {
962
+ Remove: EnumCase<null>;
963
+ Override: EnumCase<TypeArgument<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>;
964
+ }, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>, false>;
951
965
  }>, []>>, false>;
952
966
  special_abilities: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], TypeAlias<"ProfessionVariantSpecialAbility", ObjectType<{
953
967
  action: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"VariantSpecialAbilityAction", {
@@ -1300,6 +1314,9 @@ export declare const ProfessionPackage: Entity<"ProfessionPackage", {
1300
1314
  group: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, false>;
1301
1315
  ap_value: import("tsondb/schema/def").MemberDecl<Integer, true>;
1302
1316
  }>, []>>, false>;
1317
+ liturgies: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"LiturgiesOptions", ObjectType<{
1318
+ ap_value: import("tsondb/schema/def").MemberDecl<Integer, true>;
1319
+ }>, []>>, false>;
1303
1320
  }>, []>>, false>;
1304
1321
  special_abilities: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], Enum<"ProfessionSpecialAbility", {
1305
1322
  Constant: EnumCase<IncludeIdentifier<[], TypeAlias<"ConstantProfessionSpecialAbility", ObjectType<{
@@ -1556,6 +1573,10 @@ export declare const ProfessionPackage: Entity<"ProfessionPackage", {
1556
1573
  Remove: EnumCase<null>;
1557
1574
  Override: EnumCase<TypeArgument<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>;
1558
1575
  }, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>, false>;
1576
+ liturgies: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], Enum<"VariantOptionAction", {
1577
+ Remove: EnumCase<null>;
1578
+ Override: EnumCase<TypeArgument<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>;
1579
+ }, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>, false>;
1559
1580
  }>, []>>, false>;
1560
1581
  special_abilities: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], TypeAlias<"ProfessionVariantSpecialAbility", ObjectType<{
1561
1582
  action: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"VariantSpecialAbilityAction", {
@@ -1828,6 +1849,10 @@ export declare const ProfessionVariant: Entity<"ProfessionVariant", {
1828
1849
  Remove: EnumCase<null>;
1829
1850
  Override: EnumCase<TypeArgument<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>;
1830
1851
  }, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>, false>;
1852
+ liturgies: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], Enum<"VariantOptionAction", {
1853
+ Remove: EnumCase<null>;
1854
+ Override: EnumCase<TypeArgument<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>;
1855
+ }, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>, false>;
1831
1856
  }>, []>>, false>;
1832
1857
  special_abilities: import("tsondb/schema/def").MemberDecl<Array<IncludeIdentifier<[], TypeAlias<"ProfessionVariantSpecialAbility", ObjectType<{
1833
1858
  action: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"VariantSpecialAbilityAction", {
@@ -435,6 +435,9 @@ const ProfessionPackageOptions = TypeAlias(import.meta.url, {
435
435
  skills: Optional({
436
436
  type: IncludeIdentifier(SkillsOptions),
437
437
  }),
438
+ liturgies: Optional({
439
+ type: IncludeIdentifier(LiturgiesOptions),
440
+ }),
438
441
  }, { minProperties: 1 }),
439
442
  });
440
443
  const ProfessionVariantPackageOptions = TypeAlias(import.meta.url, {
@@ -470,6 +473,9 @@ const ProfessionVariantPackageOptions = TypeAlias(import.meta.url, {
470
473
  skills: Optional({
471
474
  type: GenIncludeIdentifier(VariantOptionAction, [IncludeIdentifier(SkillsOptions)]),
472
475
  }),
476
+ liturgies: Optional({
477
+ type: GenIncludeIdentifier(VariantOptionAction, [IncludeIdentifier(LiturgiesOptions)]),
478
+ }),
473
479
  }, { minProperties: 1 }),
474
480
  });
475
481
  const VariantOptionAction = GenEnum(import.meta.url, {
@@ -589,6 +595,16 @@ const SkillsOptions = TypeAlias(import.meta.url, {
589
595
  }),
590
596
  }),
591
597
  });
598
+ const LiturgiesOptions = TypeAlias(import.meta.url, {
599
+ name: "LiturgiesOptions",
600
+ comment: `Buy liturgical chants and ceremonies for a specific amount of AP.`,
601
+ type: () => ObjectType({
602
+ ap_value: Required({
603
+ comment: "The AP value you can buy liturgical chants and ceremonies for.",
604
+ type: Integer({ minimum: 1 }),
605
+ }),
606
+ }),
607
+ });
592
608
  const ProfessionName = TypeAlias(import.meta.url, {
593
609
  name: "ProfessionName",
594
610
  comment: "The name of the profession that may have sex-specific names. Useful if the term in generell is different (i.e. actor/actress) or if the language uses gendered nouns. The default name is also used in case neither the male nor female name strictly applies.",
@@ -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",
@@ -35,4 +36,13 @@ export const BandageOrRemedy = 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
  });
@@ -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",
@@ -40,4 +41,13 @@ export const CeremonialItem = Entity(import.meta.url, {
40
41
  keyPathInEntityMap: "name",
41
42
  },
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
+ },
43
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",
@@ -35,4 +36,13 @@ export const Clothes = 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 Container = Entity(import.meta.url, {
5
6
  name: "Container",
6
7
  namePlural: "Containers",
@@ -35,4 +36,13 @@ export const Container = 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, 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",
@@ -31,4 +32,13 @@ export const EquipmentOfBlessedOnes = Entity(import.meta.url, {
31
32
  keyPathInEntityMap: "name",
32
33
  },
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
+ },
34
44
  });
@@ -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",
@@ -39,6 +40,15 @@ export const IlluminationLightSource = Entity(import.meta.url, {
39
40
  keyPathInEntityMap: "name",
40
41
  },
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
+ },
42
52
  });
43
53
  const BurningTime = Enum(import.meta.url, {
44
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",
@@ -35,4 +36,13 @@ export const IlluminationRefillOrSupply = 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
  });