@optolith/database-schema 0.94.0 → 0.96.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.
@@ -0,0 +1,281 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ export declare const ArmorAccessory: DB.Entity<"ArmorAccessory", {
3
+ cost: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Cost", {
4
+ Free: DB.EnumCase<null>;
5
+ Various: DB.EnumCase<null>;
6
+ Invaluable: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"InvaluableCost", DB.Object<{
7
+ translations: DB.MemberDecl<DB.NestedEntityMap<"InvaluableCostTranslation", {
8
+ wrap_in_text: DB.MemberDecl<DB.String, true>;
9
+ }>, false>;
10
+ }>, []>>>;
11
+ Fixed: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"FixedCost", DB.Object<{
12
+ value: DB.MemberDecl<DB.Float, true>;
13
+ translations: DB.MemberDecl<DB.NestedEntityMap<"FixedCostTranslation", {
14
+ wrap_in_text: DB.MemberDecl<DB.String, true>;
15
+ }>, false>;
16
+ }>, []>>>;
17
+ Range: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"CostRange", DB.Object<{
18
+ from: DB.MemberDecl<DB.Float, true>;
19
+ to: DB.MemberDecl<DB.Float, false>;
20
+ translations: DB.MemberDecl<DB.NestedEntityMap<"CostRangeTranslation", {
21
+ wrap_in_text: DB.MemberDecl<DB.String, true>;
22
+ }>, false>;
23
+ }>, []>>>;
24
+ }, []>>, true>;
25
+ weight: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Weight", DB.Float, []>>, false>;
26
+ complexity: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Complexity", {
27
+ Primitive: DB.EnumCase<null>;
28
+ Simple: DB.EnumCase<null>;
29
+ Complex: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ComplexComplexity", DB.Object<{
30
+ ap_value: DB.MemberDecl<DB.Integer, true>;
31
+ prerequisites: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PlainGeneralPrerequisites", DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PlainPrerequisites", DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.Enum<"PrerequisitesElement", {
32
+ Single: DB.EnumCase<DB.TypeArgument<DB.Param<"T", DB.Type>>>;
33
+ Disjunction: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PrerequisitesDisjunction", DB.Object<{
34
+ list: DB.MemberDecl<DB.Array<DB.TypeArgument<DB.Param<"T", DB.Type>>>, true>;
35
+ display_option: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DisplayOption", {
36
+ Hide: DB.EnumCase<null>;
37
+ ReplaceWith: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReplacementDisplayOption", DB.Object<{
38
+ sentence_type: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SentenceType", {
39
+ Standalone: DB.EnumCase<null>;
40
+ Connected: DB.EnumCase<null>;
41
+ }, []>>, false>;
42
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ReplacementDisplayOptionTranslation", {
43
+ replacement: DB.MemberDecl<DB.String, true>;
44
+ }>, true>;
45
+ }>, []>>>;
46
+ }, []>>, false>;
47
+ }>, [T: DB.Param<"T", DB.Type>]>>>;
48
+ Group: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PrerequisiteGroup", DB.Object<{
49
+ list: DB.MemberDecl<DB.Array<DB.TypeArgument<DB.Param<"T", DB.Type>>>, true>;
50
+ translations: DB.MemberDecl<DB.NestedEntityMap<"PrerequisiteGroupTranslation", {
51
+ text: DB.MemberDecl<DB.String, true>;
52
+ }>, true>;
53
+ }>, [T: DB.Param<"T", DB.Type>]>>>;
54
+ }, [T: DB.Param<"T", DB.Type>]>>>, [T: DB.Param<"T", DB.Type>]>>, []>>, false>;
55
+ src: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRefs", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRef", DB.Object<{
56
+ id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
57
+ occurrences: DB.MemberDecl<DB.NestedEntityMap<string, {
58
+ initial: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"InitialOccurrence", DB.Object<{
59
+ printing: DB.MemberDecl<DB.Integer, false>;
60
+ pages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PageRange", DB.Object<{
61
+ first_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
62
+ InsideCoverFront: DB.EnumCase<null>;
63
+ InsideCoverBack: DB.EnumCase<null>;
64
+ Numbered: DB.EnumCase<DB.Integer>;
65
+ }, []>>, true>;
66
+ last_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
67
+ InsideCoverFront: DB.EnumCase<null>;
68
+ InsideCoverBack: DB.EnumCase<null>;
69
+ Numbered: DB.EnumCase<DB.Integer>;
70
+ }, []>>, false>;
71
+ }>, []>>>, true>;
72
+ isRemoved: DB.MemberDecl<DB.Boolean, false>;
73
+ }>, []>>, true>;
74
+ revisions: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"Revision", {
75
+ Since: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"Since", DB.Object<{
76
+ printing: DB.MemberDecl<DB.Integer, true>;
77
+ pages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PageRange", DB.Object<{
78
+ first_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
79
+ InsideCoverFront: DB.EnumCase<null>;
80
+ InsideCoverBack: DB.EnumCase<null>;
81
+ Numbered: DB.EnumCase<DB.Integer>;
82
+ }, []>>, true>;
83
+ last_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
84
+ InsideCoverFront: DB.EnumCase<null>;
85
+ InsideCoverBack: DB.EnumCase<null>;
86
+ Numbered: DB.EnumCase<DB.Integer>;
87
+ }, []>>, false>;
88
+ }>, []>>>, true>;
89
+ }>, []>>>;
90
+ Deprecated: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"Deprecation", DB.Object<{
91
+ printing: DB.MemberDecl<DB.Integer, true>;
92
+ }>, []>>>;
93
+ }, []>>>, false>;
94
+ }>, true>;
95
+ }>, []>>>, []>>, false>;
96
+ }>, []>>>;
97
+ }, []>>, false>;
98
+ structure_points: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"StructurePoints", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"StructurePointsComponent", DB.Object<{
99
+ points: DB.MemberDecl<DB.Integer, true>;
100
+ }>, []>>>, []>>, false>;
101
+ combat_use: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"CombatUse", {
102
+ Weapon: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ImprovisedWeapon", DB.Object<{
103
+ melee_uses: DB.MemberDecl<DB.NestedEntityMap<string, {
104
+ damage: DB.MemberDecl<DB.TypeArgument<DB.Param<"Damage", DB.Type>>, true>;
105
+ damage_threshold: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"PrimaryAttributeDamageThreshold", {
106
+ Default: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"DefaultPrimaryAttributeDamageThreshold", DB.Object<{
107
+ threshold: DB.MemberDecl<DB.Integer, true>;
108
+ }>, []>>>;
109
+ List: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"PrimaryAttributeDamageThresholdList", DB.Object<{
110
+ list: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"SinglePrimaryAttributeDamageThreshold", DB.Object<{
111
+ attribute: DB.MemberDecl<DB.ReferenceIdentifier, true>;
112
+ threshold: DB.MemberDecl<DB.Integer, true>;
113
+ }>, []>>>, true>;
114
+ }>, []>>>;
115
+ }, []>>, false>;
116
+ attackModifier: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"AttackModifier", DB.Integer, []>>, false>;
117
+ parryModifier: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"ParryModifier", DB.Integer, []>>, false>;
118
+ reach: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
119
+ length: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Length", DB.Integer, []>>, false>;
120
+ size: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ShieldSize", {
121
+ Small: DB.EnumCase<null>;
122
+ Medium: DB.EnumCase<null>;
123
+ Large: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"LargeShieldSize", DB.Object<{
124
+ attack_penalty: DB.MemberDecl<DB.Integer, false>;
125
+ }>, []>>>;
126
+ }, []>>, false>;
127
+ is_parrying_weapon: DB.MemberDecl<DB.Boolean, true>;
128
+ is_two_handed_weapon: DB.MemberDecl<DB.Boolean, true>;
129
+ is_improvised_weapon: DB.MemberDecl<DB.Boolean, true>;
130
+ }>, false>;
131
+ ranged_uses: DB.MemberDecl<DB.NestedEntityMap<string, {
132
+ damage: DB.MemberDecl<DB.TypeArgument<DB.Param<"Damage", DB.Type>>, true>;
133
+ reload_time: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"ReloadTime", DB.Object<{
134
+ value: DB.MemberDecl<DB.Integer, true>;
135
+ }>, []>>>, true>;
136
+ range: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RangeBrackets", DB.Object<{
137
+ close: DB.MemberDecl<DB.Integer, true>;
138
+ medium: DB.MemberDecl<DB.Integer, true>;
139
+ far: DB.MemberDecl<DB.Integer, true>;
140
+ }>, []>>, true>;
141
+ ammunition: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"AmmunitionishIdentifier", {
142
+ Ammunition: DB.EnumCase<DB.ReferenceIdentifier>;
143
+ Weapon: DB.EnumCase<DB.ReferenceIdentifier>;
144
+ }, []>>, false>;
145
+ length: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Length", DB.Integer, []>>, false>;
146
+ is_improvised_weapon: DB.MemberDecl<DB.Boolean, true>;
147
+ }>, false>;
148
+ restrictedTo: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RestrictedTo", DB.Object<{
149
+ races: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RestrictedToRaces", DB.Object<{
150
+ scope: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, true>;
151
+ }>, []>>, false>;
152
+ cultures: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RestrictedToCultures", DB.Object<{
153
+ scope: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, true>;
154
+ }>, []>>, false>;
155
+ professions: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RestrictedToProfessions", DB.Object<{
156
+ scope: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, true>;
157
+ }>, []>>, false>;
158
+ magicalTraditions: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RestrictedToMagicalTraditions", DB.Object<{
159
+ scope: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, true>;
160
+ }>, []>>, false>;
161
+ blessedTraditions: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RestrictedToBlessedTraditions", DB.Object<{
162
+ scope: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"RestrictedToBlessedTraditionsScope", {
163
+ Specific: DB.EnumCase<DB.Array<DB.ReferenceIdentifier>>;
164
+ Church: DB.EnumCase<null>;
165
+ Shamanistic: DB.EnumCase<null>;
166
+ }, []>>, true>;
167
+ isSanctifiedBy: DB.MemberDecl<DB.Boolean, true>;
168
+ }>, []>>, false>;
169
+ }>, []>>, false>;
170
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ImprovisedWeaponTranslation", {
171
+ advantage: DB.MemberDecl<DB.String, false>;
172
+ disadvantage: DB.MemberDecl<DB.String, false>;
173
+ }>, false>;
174
+ }>, []>>>;
175
+ Armor: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"SecondaryArmor", DB.Object<{
176
+ protection: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Protection", DB.Integer, []>>, true>;
177
+ encumbrance: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Encumbrance", DB.Integer, []>>, true>;
178
+ has_additional_penalties: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HasAdditionalPenalties", DB.Boolean, []>>, true>;
179
+ armorType: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"ArmorType", {
180
+ Standard: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardArmorType", DB.Object<{
181
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
182
+ }>, []>>>;
183
+ StandardVariant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"StandardVariantArmorType", DB.Object<{
184
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
185
+ sturdinessRating: DB.MemberDecl<DB.Integer, true>;
186
+ }>, []>>>;
187
+ Variant: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"VariantArmorType", DB.Object<{
188
+ variantOf: DB.MemberDecl<DB.ReferenceIdentifier, true>;
189
+ }>, []>>>;
190
+ }, []>>, true>;
191
+ hit_zone: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"HitZone", {
192
+ Head: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZone", DB.Object<{
193
+ combination_possibilities: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HeadHitZoneCombinationPossibilities", DB.Object<{
194
+ armors: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, true>;
195
+ protection: DB.MemberDecl<DB.Integer, false>;
196
+ }>, []>>, false>;
197
+ }>, []>>>;
198
+ Torso: DB.EnumCase<null>;
199
+ Arms: DB.EnumCase<null>;
200
+ Legs: DB.EnumCase<null>;
201
+ }, []>>, false>;
202
+ restrictedTo: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RestrictedTo", DB.Object<{
203
+ races: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RestrictedToRaces", DB.Object<{
204
+ scope: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, true>;
205
+ }>, []>>, false>;
206
+ cultures: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RestrictedToCultures", DB.Object<{
207
+ scope: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, true>;
208
+ }>, []>>, false>;
209
+ professions: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RestrictedToProfessions", DB.Object<{
210
+ scope: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, true>;
211
+ }>, []>>, false>;
212
+ magicalTraditions: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RestrictedToMagicalTraditions", DB.Object<{
213
+ scope: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, true>;
214
+ }>, []>>, false>;
215
+ blessedTraditions: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RestrictedToBlessedTraditions", DB.Object<{
216
+ scope: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"RestrictedToBlessedTraditionsScope", {
217
+ Specific: DB.EnumCase<DB.Array<DB.ReferenceIdentifier>>;
218
+ Church: DB.EnumCase<null>;
219
+ Shamanistic: DB.EnumCase<null>;
220
+ }, []>>, true>;
221
+ isSanctifiedBy: DB.MemberDecl<DB.Boolean, true>;
222
+ }>, []>>, false>;
223
+ }>, []>>, false>;
224
+ translations: DB.MemberDecl<DB.NestedEntityMap<"SecondaryArmorTranslation", {
225
+ advantage: DB.MemberDecl<DB.String, false>;
226
+ disadvantage: DB.MemberDecl<DB.String, false>;
227
+ }>, false>;
228
+ }>, []>>>;
229
+ }, []>>, false>;
230
+ src: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRefs", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRef", DB.Object<{
231
+ id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
232
+ occurrences: DB.MemberDecl<DB.NestedEntityMap<string, {
233
+ initial: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"InitialOccurrence", DB.Object<{
234
+ printing: DB.MemberDecl<DB.Integer, false>;
235
+ pages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PageRange", DB.Object<{
236
+ first_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
237
+ InsideCoverFront: DB.EnumCase<null>;
238
+ InsideCoverBack: DB.EnumCase<null>;
239
+ Numbered: DB.EnumCase<DB.Integer>;
240
+ }, []>>, true>;
241
+ last_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
242
+ InsideCoverFront: DB.EnumCase<null>;
243
+ InsideCoverBack: DB.EnumCase<null>;
244
+ Numbered: DB.EnumCase<DB.Integer>;
245
+ }, []>>, false>;
246
+ }>, []>>>, true>;
247
+ isRemoved: DB.MemberDecl<DB.Boolean, false>;
248
+ }>, []>>, true>;
249
+ revisions: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"Revision", {
250
+ Since: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"Since", DB.Object<{
251
+ printing: DB.MemberDecl<DB.Integer, true>;
252
+ pages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PageRange", DB.Object<{
253
+ first_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
254
+ InsideCoverFront: DB.EnumCase<null>;
255
+ InsideCoverBack: DB.EnumCase<null>;
256
+ Numbered: DB.EnumCase<DB.Integer>;
257
+ }, []>>, true>;
258
+ last_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
259
+ InsideCoverFront: DB.EnumCase<null>;
260
+ InsideCoverBack: DB.EnumCase<null>;
261
+ Numbered: DB.EnumCase<DB.Integer>;
262
+ }, []>>, false>;
263
+ }>, []>>>, true>;
264
+ }>, []>>>;
265
+ Deprecated: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"Deprecation", DB.Object<{
266
+ printing: DB.MemberDecl<DB.Integer, true>;
267
+ }>, []>>>;
268
+ }, []>>>, false>;
269
+ }>, true>;
270
+ }>, []>>>, []>>, true>;
271
+ translations: DB.MemberDecl<DB.NestedEntityMap<`${string}Translation`, {
272
+ name: DB.MemberDecl<DB.String, true>;
273
+ secondary_name: DB.MemberDecl<DB.String, false>;
274
+ note: DB.MemberDecl<DB.String, false>;
275
+ rules: DB.MemberDecl<DB.String, false>;
276
+ errata: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Errata", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"Erratum", DB.Object<{
277
+ date: DB.MemberDecl<DB.Date, true>;
278
+ description: DB.MemberDecl<DB.String, true>;
279
+ }>, []>>>, []>>, false>;
280
+ }>, true>;
281
+ }, undefined>;
@@ -0,0 +1,48 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ import { src } from "../../source/_PublicationRef.js";
3
+ import { CombatUse, Complexity, Cost, DefaultItemTranslations, StructurePoints, Weight, } from "./_Item.js";
4
+ import { checkWeaponCombatTechniqueIntegrity } from "./_Weapon.js";
5
+ export const ArmorAccessory = DB.Entity(import.meta.url, {
6
+ name: "ArmorAccessory",
7
+ namePlural: "ArmorAccessories",
8
+ type: () => DB.Object({
9
+ cost: DB.Required({
10
+ comment: "The cost in silverthalers.",
11
+ type: DB.IncludeIdentifier(Cost),
12
+ }),
13
+ weight: DB.Optional({
14
+ comment: "The weight in kg.",
15
+ type: DB.IncludeIdentifier(Weight),
16
+ }),
17
+ complexity: DB.Optional({
18
+ comment: "The complexity of crafting the item.",
19
+ type: DB.IncludeIdentifier(Complexity),
20
+ }),
21
+ structure_points: DB.Optional({
22
+ comment: "The structure points of the item. Use an array if the item consists of multiple components that have individual structure points.",
23
+ type: DB.IncludeIdentifier(StructurePoints),
24
+ }),
25
+ combat_use: DB.Optional({
26
+ 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.",
27
+ type: DB.IncludeIdentifier(CombatUse),
28
+ }),
29
+ src,
30
+ translations: DefaultItemTranslations("ArmorAccessory"),
31
+ }),
32
+ instanceDisplayName: {},
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
+ });
45
+ }
46
+ return [];
47
+ },
48
+ });
@@ -13,6 +13,30 @@ export declare const Book: DB.Entity<"Book", {
13
13
  Magical: DB.EnumCase<null>;
14
14
  Religious: DB.EnumCase<null>;
15
15
  }, []>>>, true>;
16
+ languageAndScript: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"BookPrerequisites", DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PlainPrerequisites", DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.Enum<"PrerequisitesElement", {
17
+ Single: DB.EnumCase<DB.TypeArgument<DB.Param<"T", DB.Type>>>;
18
+ Disjunction: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PrerequisitesDisjunction", DB.Object<{
19
+ list: DB.MemberDecl<DB.Array<DB.TypeArgument<DB.Param<"T", DB.Type>>>, true>;
20
+ display_option: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DisplayOption", {
21
+ Hide: DB.EnumCase<null>;
22
+ ReplaceWith: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReplacementDisplayOption", DB.Object<{
23
+ sentence_type: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SentenceType", {
24
+ Standalone: DB.EnumCase<null>;
25
+ Connected: DB.EnumCase<null>;
26
+ }, []>>, false>;
27
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ReplacementDisplayOptionTranslation", {
28
+ replacement: DB.MemberDecl<DB.String, true>;
29
+ }>, true>;
30
+ }>, []>>>;
31
+ }, []>>, false>;
32
+ }>, [T: DB.Param<"T", DB.Type>]>>>;
33
+ Group: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PrerequisiteGroup", DB.Object<{
34
+ list: DB.MemberDecl<DB.Array<DB.TypeArgument<DB.Param<"T", DB.Type>>>, true>;
35
+ translations: DB.MemberDecl<DB.NestedEntityMap<"PrerequisiteGroupTranslation", {
36
+ text: DB.MemberDecl<DB.String, true>;
37
+ }>, true>;
38
+ }>, [T: DB.Param<"T", DB.Type>]>>>;
39
+ }, [T: DB.Param<"T", DB.Type>]>>>, [T: DB.Param<"T", DB.Type>]>>, []>>, false>;
16
40
  cost: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"BookCost", {
17
41
  Single: DB.EnumCase<DB.IncludeIdentifier<[], DB.Enum<"BookCostVariant", {
18
42
  Definite: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"DefiniteBookCostVariant", DB.Object<{
@@ -166,6 +190,55 @@ export declare const Book: DB.Entity<"Book", {
166
190
  Average: DB.EnumCase<null>;
167
191
  Demanding: DB.EnumCase<DB.Integer>;
168
192
  }, []>>, false>;
193
+ rules: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"BookRules", {
194
+ Plain: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"PlainBookRules", DB.Object<{
195
+ translations: DB.MemberDecl<DB.NestedEntityMap<"PlainBookRulesTranslation", {
196
+ text: DB.MemberDecl<DB.String, true>;
197
+ reconstruction: DB.MemberDecl<DB.String, false>;
198
+ references: DB.MemberDecl<DB.String, false>;
199
+ textAfter: DB.MemberDecl<DB.String, false>;
200
+ }>, true>;
201
+ }>, []>>>;
202
+ Entertainment: DB.EnumCase<null>;
203
+ ByEdition: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"BookRulesByEdition", DB.Object<{
204
+ editions: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"BookRulesOfEdition", DB.Object<{
205
+ languageAndScript: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"BookPrerequisites", DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PlainPrerequisites", DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.Enum<"PrerequisitesElement", {
206
+ Single: DB.EnumCase<DB.TypeArgument<DB.Param<"T", DB.Type>>>;
207
+ Disjunction: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PrerequisitesDisjunction", DB.Object<{
208
+ list: DB.MemberDecl<DB.Array<DB.TypeArgument<DB.Param<"T", DB.Type>>>, true>;
209
+ display_option: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DisplayOption", {
210
+ Hide: DB.EnumCase<null>;
211
+ ReplaceWith: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReplacementDisplayOption", DB.Object<{
212
+ sentence_type: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SentenceType", {
213
+ Standalone: DB.EnumCase<null>;
214
+ Connected: DB.EnumCase<null>;
215
+ }, []>>, false>;
216
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ReplacementDisplayOptionTranslation", {
217
+ replacement: DB.MemberDecl<DB.String, true>;
218
+ }>, true>;
219
+ }>, []>>>;
220
+ }, []>>, false>;
221
+ }>, [T: DB.Param<"T", DB.Type>]>>>;
222
+ Group: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PrerequisiteGroup", DB.Object<{
223
+ list: DB.MemberDecl<DB.Array<DB.TypeArgument<DB.Param<"T", DB.Type>>>, true>;
224
+ translations: DB.MemberDecl<DB.NestedEntityMap<"PrerequisiteGroupTranslation", {
225
+ text: DB.MemberDecl<DB.String, true>;
226
+ }>, true>;
227
+ }>, [T: DB.Param<"T", DB.Type>]>>>;
228
+ }, [T: DB.Param<"T", DB.Type>]>>>, [T: DB.Param<"T", DB.Type>]>>, []>>, false>;
229
+ translations: DB.MemberDecl<DB.NestedEntityMap<"BookRulesOfEditionTranslation", {
230
+ label: DB.MemberDecl<DB.String, true>;
231
+ languageAndScript: DB.MemberDecl<DB.String, false>;
232
+ text: DB.MemberDecl<DB.String, true>;
233
+ reconstruction: DB.MemberDecl<DB.String, false>;
234
+ references: DB.MemberDecl<DB.String, false>;
235
+ }>, true>;
236
+ }>, []>>>, true>;
237
+ translations: DB.MemberDecl<DB.NestedEntityMap<"BookRulesByEditionTranslation", {
238
+ textAfter: DB.MemberDecl<DB.String, false>;
239
+ }>, false>;
240
+ }>, []>>>;
241
+ }, []>>, false>;
169
242
  src: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRefs", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRef", DB.Object<{
170
243
  id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
171
244
  occurrences: DB.MemberDecl<DB.NestedEntityMap<string, {
@@ -210,27 +283,8 @@ export declare const Book: DB.Entity<"Book", {
210
283
  translations: DB.MemberDecl<DB.NestedEntityMap<"BookTranslation", {
211
284
  name: DB.MemberDecl<DB.String, true>;
212
285
  secondary_name: DB.MemberDecl<DB.String, false>;
213
- language: DB.MemberDecl<DB.String, false>;
214
- script: DB.MemberDecl<DB.String, false>;
286
+ languageAndScript: DB.MemberDecl<DB.String, false>;
215
287
  note: DB.MemberDecl<DB.String, false>;
216
- rules: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"BookRules", {
217
- Plain: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"PlainBookRules", DB.Object<{
218
- text: DB.MemberDecl<DB.String, true>;
219
- reconstruction: DB.MemberDecl<DB.String, false>;
220
- references: DB.MemberDecl<DB.String, false>;
221
- textAfter: DB.MemberDecl<DB.String, false>;
222
- }>, []>>>;
223
- Entertainment: DB.EnumCase<null>;
224
- ByEdition: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"BookRulesByEdition", DB.Object<{
225
- editions: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"BookRulesOfEdition", DB.Object<{
226
- label: DB.MemberDecl<DB.String, true>;
227
- text: DB.MemberDecl<DB.String, true>;
228
- reconstruction: DB.MemberDecl<DB.String, false>;
229
- references: DB.MemberDecl<DB.String, false>;
230
- }>, []>>>, true>;
231
- textAfter: DB.MemberDecl<DB.String, false>;
232
- }>, []>>>;
233
- }, []>>, false>;
234
288
  legality: DB.MemberDecl<DB.String, false>;
235
289
  availability: DB.MemberDecl<DB.String, false>;
236
290
  special: DB.MemberDecl<DB.String, false>;
@@ -1,5 +1,6 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
2
  import { SkillIdentifier } from "../../_Identifier.js";
3
+ import { BookPrerequisites } from "../../_Prerequisite.js";
3
4
  import { NestedTranslationMap } from "../../Locale.js";
4
5
  import { Errata } from "../../source/_Erratum.js";
5
6
  import { src } from "../../source/_PublicationRef.js";
@@ -12,6 +13,10 @@ export const Book = DB.Entity(import.meta.url, {
12
13
  comment: "The type of book.",
13
14
  type: DB.Array(DB.IncludeIdentifier(BookType), { minItems: 1, uniqueItems: true }),
14
15
  }),
16
+ languageAndScript: DB.Optional({
17
+ comment: "The language(s) and script(s) the book is written in.",
18
+ type: DB.IncludeIdentifier(BookPrerequisites),
19
+ }),
15
20
  cost: DB.Required({
16
21
  comment: "The cost in silverthalers.",
17
22
  type: DB.IncludeIdentifier(BookCost),
@@ -32,6 +37,10 @@ export const Book = DB.Entity(import.meta.url, {
32
37
  comment: "The quality of the book’s content.",
33
38
  type: DB.IncludeIdentifier(BookContentQuality),
34
39
  }),
40
+ rules: DB.Optional({
41
+ comment: "Skills and abilities you can learn by reading the book, as well as any other rules and effects concerning the book.",
42
+ type: DB.IncludeIdentifier(BookRules),
43
+ }),
35
44
  src,
36
45
  translations: NestedTranslationMap(DB.Required, "Book", DB.Object({
37
46
  name: DB.Required({
@@ -42,22 +51,14 @@ export const Book = DB.Entity(import.meta.url, {
42
51
  comment: "An auxiliary name or label of the item, if available.",
43
52
  type: DB.String({ minLength: 1 }),
44
53
  }),
45
- language: DB.Optional({
46
- comment: "The language the book is written in, if specified.",
47
- type: DB.String({ minLength: 1, markdown: "inline" }),
48
- }),
49
- script: DB.Optional({
50
- comment: "The script that was used for the book, if specified.",
54
+ languageAndScript: DB.Optional({
55
+ comment: "The language(s) and script(s) the book is written in.",
51
56
  type: DB.String({ minLength: 1, markdown: "inline" }),
52
57
  }),
53
58
  note: DB.Optional({
54
59
  comment: "Note text.",
55
60
  type: DB.String({ minLength: 1, markdown: "block" }),
56
61
  }),
57
- rules: DB.Optional({
58
- comment: "Special rules text.",
59
- type: DB.IncludeIdentifier(BookRules),
60
- }),
61
62
  legality: DB.Optional({
62
63
  comment: "The legality of the item, if specified.",
63
64
  type: DB.String({ minLength: 1, markdown: "inline" }),
@@ -217,22 +218,24 @@ const PlainBookRules = DB.TypeAlias(import.meta.url, {
217
218
  name: "PlainBookRules",
218
219
  comment: "The book’s rules without any special effects or conditions.",
219
220
  type: () => DB.Object({
220
- text: DB.Required({
221
- comment: "The (main) rules text.",
222
- type: DB.String({ minLength: 1, markdown: "block" }),
223
- }),
224
- reconstruction: DB.Optional({
225
- comment: "Rules for reconstructing certain skills or abilities from the book.",
226
- type: DB.String({ minLength: 1, markdown: "block" }),
227
- }),
228
- references: DB.Optional({
229
- comment: "References to skills and abilities that, while mentioned in the book, cannot be learned from this book alone.",
230
- type: DB.String({ minLength: 1, markdown: "block" }),
231
- }),
232
- textAfter: DB.Optional({
233
- comment: "Additional rules text that comes after all other rules.",
234
- type: DB.String({ minLength: 1, markdown: "block" }),
235
- }),
221
+ translations: NestedTranslationMap(DB.Required, "PlainBookRules", DB.Object({
222
+ text: DB.Required({
223
+ comment: "The (main) rules text.",
224
+ type: DB.String({ minLength: 1, markdown: "block" }),
225
+ }),
226
+ reconstruction: DB.Optional({
227
+ comment: "Rules for reconstructing certain skills or abilities from the book.",
228
+ type: DB.String({ minLength: 1, markdown: "block" }),
229
+ }),
230
+ references: DB.Optional({
231
+ comment: "References to skills and abilities that, while mentioned in the book, cannot be learned from this book alone.",
232
+ type: DB.String({ minLength: 1, markdown: "block" }),
233
+ }),
234
+ textAfter: DB.Optional({
235
+ comment: "Additional rules text that comes after all other rules.",
236
+ type: DB.String({ minLength: 1, markdown: "block" }),
237
+ }),
238
+ })),
236
239
  }),
237
240
  });
238
241
  const BookRulesByEdition = DB.TypeAlias(import.meta.url, {
@@ -242,30 +245,42 @@ const BookRulesByEdition = DB.TypeAlias(import.meta.url, {
242
245
  editions: DB.Required({
243
246
  type: DB.Array(DB.IncludeIdentifier(BookRulesOfEdition), { minItems: 1 }),
244
247
  }),
245
- textAfter: DB.Optional({
246
- comment: "Additional rules text that comes after all other rules.",
247
- type: DB.String({ minLength: 1, markdown: "block" }),
248
- }),
248
+ translations: NestedTranslationMap(DB.Optional, "BookRulesByEdition", DB.Object({
249
+ textAfter: DB.Optional({
250
+ comment: "Additional rules text that comes after all other rules.",
251
+ type: DB.String({ minLength: 1, markdown: "block" }),
252
+ }),
253
+ })),
249
254
  }),
250
255
  });
251
256
  const BookRulesOfEdition = DB.TypeAlias(import.meta.url, {
252
257
  name: "BookRulesOfEdition",
253
258
  type: () => DB.Object({
254
- label: DB.Required({
255
- comment: "The edition(s) the rules apply to.",
256
- type: DB.String({ minLength: 1 }),
257
- }),
258
- text: DB.Required({
259
- comment: "The rules text.",
260
- type: DB.String({ minLength: 1, markdown: "block" }),
261
- }),
262
- reconstruction: DB.Optional({
263
- comment: "Rules for reconstructing certain skills or abilities from the book.",
264
- type: DB.String({ minLength: 1, markdown: "block" }),
265
- }),
266
- references: DB.Optional({
267
- comment: "References to skills and abilities that, while mentioned in the book, cannot be learned from this book alone.",
268
- type: DB.String({ minLength: 1, markdown: "block" }),
259
+ languageAndScript: DB.Optional({
260
+ comment: "The language(s) and script(s) the book is written in.",
261
+ type: DB.IncludeIdentifier(BookPrerequisites),
269
262
  }),
263
+ translations: NestedTranslationMap(DB.Required, "BookRulesOfEdition", DB.Object({
264
+ label: DB.Required({
265
+ comment: "The edition(s) the rules apply to.",
266
+ type: DB.String({ minLength: 1 }),
267
+ }),
268
+ languageAndScript: DB.Optional({
269
+ comment: "The language(s) and script(s) the book is written in.",
270
+ type: DB.String({ minLength: 1, markdown: "inline" }),
271
+ }),
272
+ text: DB.Required({
273
+ comment: "The rules text.",
274
+ type: DB.String({ minLength: 1, markdown: "block" }),
275
+ }),
276
+ reconstruction: DB.Optional({
277
+ comment: "Rules for reconstructing certain skills or abilities from the book.",
278
+ type: DB.String({ minLength: 1, markdown: "block" }),
279
+ }),
280
+ references: DB.Optional({
281
+ comment: "References to skills and abilities that, while mentioned in the book, cannot be learned from this book alone.",
282
+ type: DB.String({ minLength: 1, markdown: "block" }),
283
+ }),
284
+ })),
270
285
  }),
271
286
  });
@@ -21,6 +21,7 @@ export { Ammunition } from "./equipment/item/Ammunition.js";
21
21
  export { Animal } from "./equipment/item/Animal.js";
22
22
  export { AnimalCare } from "./equipment/item/AnimalCare.js";
23
23
  export { Armor } from "./equipment/item/Armor.js";
24
+ export { ArmorAccessory } from "./equipment/item/ArmorAccessory.js";
24
25
  export { BandageOrRemedy } from "./equipment/item/BandageOrRemedy.js";
25
26
  export { Book } from "./equipment/item/Book.js";
26
27
  export { CeremonialItem } from "./equipment/item/CeremonialItem.js";
@@ -21,6 +21,7 @@ export { Ammunition } from "./equipment/item/Ammunition.js";
21
21
  export { Animal } from "./equipment/item/Animal.js";
22
22
  export { AnimalCare } from "./equipment/item/AnimalCare.js";
23
23
  export { Armor } from "./equipment/item/Armor.js";
24
+ export { ArmorAccessory } from "./equipment/item/ArmorAccessory.js";
24
25
  export { BandageOrRemedy } from "./equipment/item/BandageOrRemedy.js";
25
26
  export { Book } from "./equipment/item/Book.js";
26
27
  export { CeremonialItem } from "./equipment/item/CeremonialItem.js";
@@ -2211,6 +2211,15 @@ export declare const EnhancementPrerequisiteGroup: DB.Enum<"EnhancementPrerequis
2211
2211
  }, []>>, false>;
2212
2212
  }>, []>>>;
2213
2213
  }, []>;
2214
+ export declare const BookPrerequisiteGroup: DB.Enum<"BookPrerequisiteGroup", {
2215
+ Language: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"LanguagePrerequisite", DB.Object<{
2216
+ id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
2217
+ level: DB.MemberDecl<DB.Integer, true>;
2218
+ }>, []>>>;
2219
+ Script: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ScriptPrerequisite", DB.Object<{
2220
+ id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
2221
+ }>, []>>>;
2222
+ }, []>;
2214
2223
  export declare const PreconditionGroup: DB.Enum<"PreconditionGroup", {
2215
2224
  Publication: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationPrerequisite", DB.Object<{
2216
2225
  id: DB.MemberDecl<DB.ReferenceIdentifier, true>;