optolith-database-schema 0.22.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/gen/types.d.ts +1295 -1182
  3. package/lib/types/Locale.d.ts +97 -133
  4. package/lib/types/Locale.js +147 -134
  5. package/lib/types/equipment/item/Animal.d.ts +1 -1
  6. package/lib/types/equipment/item/AnimalCare.d.ts +1 -1
  7. package/lib/types/equipment/item/Armor.d.ts +44 -0
  8. package/lib/types/equipment/item/Armor.js +9 -1
  9. package/lib/types/equipment/item/BandageOrRemedy.d.ts +45 -9
  10. package/lib/types/equipment/item/CeremonialItem.d.ts +45 -9
  11. package/lib/types/equipment/item/Clothes.d.ts +45 -9
  12. package/lib/types/equipment/item/Container.d.ts +45 -9
  13. package/lib/types/equipment/item/EquipmentOfBlessedOnes.d.ts +77 -20
  14. package/lib/types/equipment/item/EquipmentOfBlessedOnes.js +5 -6
  15. package/lib/types/equipment/item/IlluminationLightSource.d.ts +45 -9
  16. package/lib/types/equipment/item/IlluminationRefillOrSupply.d.ts +45 -9
  17. package/lib/types/equipment/item/Jewelry.d.ts +1 -1
  18. package/lib/types/equipment/item/Laboratory.d.ts +1 -1
  19. package/lib/types/equipment/item/Liebesspielzeug.d.ts +45 -9
  20. package/lib/types/equipment/item/LuxuryGood.d.ts +45 -9
  21. package/lib/types/equipment/item/MagicalArtifact.d.ts +61 -21
  22. package/lib/types/equipment/item/MagicalArtifact.js +33 -3
  23. package/lib/types/equipment/item/MusicalInstrument.d.ts +48 -9
  24. package/lib/types/equipment/item/MusicalInstrument.js +5 -1
  25. package/lib/types/equipment/item/OrienteeringAid.d.ts +45 -9
  26. package/lib/types/equipment/item/Poison.d.ts +41 -5
  27. package/lib/types/equipment/item/Poison.js +33 -1
  28. package/lib/types/equipment/item/RopeOrChain.d.ts +45 -9
  29. package/lib/types/equipment/item/Stationery.d.ts +45 -9
  30. package/lib/types/equipment/item/ThievesTool.d.ts +45 -9
  31. package/lib/types/equipment/item/ToolOfTheTrade.d.ts +1 -1
  32. package/lib/types/equipment/item/TravelGearOrTool.d.ts +45 -9
  33. package/lib/types/equipment/item/Vehicle.d.ts +1 -1
  34. package/lib/types/equipment/item/Weapon.d.ts +105 -78
  35. package/lib/types/equipment/item/Weapon.js +8 -46
  36. package/lib/types/equipment/item/WeaponAccessory.d.ts +45 -9
  37. package/lib/types/equipment/item/_Item.d.ts +148 -29
  38. package/lib/types/equipment/item/_Item.js +94 -2
  39. package/lib/types/specialAbility/CombatStyleSpecialAbility.d.ts +52 -0
  40. package/lib/types/specialAbility/CombatStyleSpecialAbility.js +2 -1
  41. package/lib/types/specialAbility/MagicalSign.d.ts +75 -40
  42. package/lib/types/specialAbility/MagicalSign.js +23 -2
  43. package/package.json +2 -2
@@ -22,14 +22,14 @@ export const Locale = Entity(import.meta.url, {
22
22
  // prettier-ignore
23
23
  type: TranslationObject({
24
24
  // Menu
25
- "About {0}": null,
25
+ "About {$app}": null,
26
26
  "Preferences …": null,
27
27
  "Services": null,
28
- "Hide {0}": null,
28
+ "Hide {$app}": null,
29
29
  "Hide Others": null,
30
30
  "Show All": null,
31
- "Quit {0}": null,
32
- "File": null,
31
+ "Quit {$app}": null,
32
+ ".input {$os :string} {{File}}": null,
33
33
  "Close": null,
34
34
  "Quit": null,
35
35
  "Edit": null,
@@ -67,7 +67,7 @@ export const Locale = Entity(import.meta.url, {
67
67
  /**
68
68
  * - `0`: Version number
69
69
  */
70
- "Version {0} is available! Do you wish to download and install?": null,
70
+ "Version {$version} is available! Do you wish to download and install?": null,
71
71
  "Download": null,
72
72
  "Download Later": null,
73
73
  "Downloading update …": null,
@@ -112,7 +112,7 @@ export const Locale = Entity(import.meta.url, {
112
112
  /**
113
113
  * - `0`: AP left
114
114
  */
115
- "{0} AP Remaining": null,
115
+ "{$value} AP Remaining": null,
116
116
  "Save": null,
117
117
  "Show Settings": null,
118
118
  "Toggle DevTools": null,
@@ -122,93 +122,93 @@ export const Locale = Entity(import.meta.url, {
122
122
  /**
123
123
  * - `0`: AP value
124
124
  */
125
- "{0} Adventure Points": null,
125
+ ".input {$value :number} {{{$value} Adventure Points}}": null,
126
126
  /**
127
127
  * - `0`: AP value
128
128
  */
129
- "{0} AP": null,
129
+ "{$value} AP": null,
130
130
  /**
131
131
  * - `0`: AP Total
132
132
  */
133
- "{0} Total AP": null,
133
+ "{$value} Total AP": null,
134
134
  /**
135
135
  * - `0`: AP Spent
136
136
  */
137
- "{0} AP Spent": null,
137
+ "{$value} AP Spent": null,
138
138
  /**
139
139
  * - `0`: Current AP spent on advantages
140
140
  * - `1`: Maximum possible AP spent on advantages
141
141
  */
142
- "{0}/{1} AP spent on advantages": null,
142
+ "{$value}/{$max} AP spent on advantages": null,
143
143
  /**
144
144
  * - `0`: Current AP spent on magic advantages
145
145
  * - `1`: Maximum possible AP spent on magic advantages
146
146
  */
147
- "Thereof {0}/{1} on magic advantages": null,
147
+ "Thereof {$value}/{$max} on magic advantages": null,
148
148
  /**
149
149
  * - `0`: Current AP spent on blessed advantages
150
150
  * - `1`: Maximum possible AP spent on blessed advantages
151
151
  */
152
- "Thereof {0}/{1} on blessed advantages": null,
152
+ "Thereof {$value}/{$max} on blessed advantages": null,
153
153
  /**
154
154
  * - `0`: Current AP spent on disadvantages
155
155
  * - `1`: Maximum possible AP spent on disadvantages
156
156
  */
157
- "{0}/{1} AP received from disadvantages": null,
157
+ "{$value}/{$max} AP received from disadvantages": null,
158
158
  /**
159
159
  * - `0`: Current AP spent on magic disadvantages
160
160
  * - `1`: Maximum possible AP spent on magic disadvantages
161
161
  */
162
- "Thereof {0}/{1} from magic disadvantages": null,
162
+ "Thereof {$value}/{$max} from magic disadvantages": null,
163
163
  /**
164
164
  * - `0`: Current AP spent on blessed disadvantages
165
165
  * - `1`: Maximum possible AP spent on blessed disadvantages
166
166
  */
167
- "Thereof {0}/{1} from blessed disadvantages": null,
167
+ "Thereof {$value}/{$max} from blessed disadvantages": null,
168
168
  /**
169
169
  * - `0`: AP spent on race
170
170
  */
171
- "{0} AP spent on race": null,
171
+ "{$value} AP spent on race": null,
172
172
  /**
173
173
  * - `0`: AP spent on profession
174
174
  */
175
- "{0} AP spent on profession": null,
175
+ "{$value} AP spent on profession": null,
176
176
  /**
177
177
  * - `0`: AP spent on attributes
178
178
  */
179
- "{0} AP spent on attributes": null,
179
+ "{$value} AP spent on attributes": null,
180
180
  /**
181
181
  * - `0`: AP spent on skills
182
182
  */
183
- "{0} AP spent on skills": null,
183
+ "{$value} AP spent on skills": null,
184
184
  /**
185
185
  * - `0`: AP spent on combat techniques
186
186
  */
187
- "{0} AP spent on combat techniques": null,
187
+ "{$value} AP spent on combat techniques": null,
188
188
  /**
189
189
  * - `0`: AP spent on spells
190
190
  */
191
- "{0} AP spent on spells": null,
191
+ "{$value} AP spent on spells": null,
192
192
  /**
193
193
  * - `0`: AP spent on cantrips
194
194
  */
195
- "{0} AP spent on cantrips": null,
195
+ "{$value} AP spent on cantrips": null,
196
196
  /**
197
197
  * - `0`: AP spent on liturgical chants
198
198
  */
199
- "{0} AP spent on liturgical chants": null,
199
+ "{$value} AP spent on liturgical chants": null,
200
200
  /**
201
201
  * - `0`: AP spent on blessings
202
202
  */
203
- "{0} AP spent on blessings": null,
203
+ "{$value} AP spent on blessings": null,
204
204
  /**
205
205
  * - `0`: AP spent on special abilities
206
206
  */
207
- "{0} AP spent on special abilities": null,
207
+ "{$value} AP spent on special abilities": null,
208
208
  /**
209
209
  * - `0`: AP spent on energies (LP/AE/KP)
210
210
  */
211
- "{0} AP spent on improving/buying back LP/AE/KP": null,
211
+ "{$value} AP spent on improving/buying back LP/AE/KP": null,
212
212
  "header.dialogs.herosaved": null,
213
213
  "header.dialogs.allsaved": null,
214
214
  "header.dialogs.everythingelsesaved": null,
@@ -257,19 +257,19 @@ export const Locale = Entity(import.meta.url, {
257
257
  "Apply": null,
258
258
  "Add": null,
259
259
  "Not enough AP": null,
260
- "You are missing {0} Adventure Points to do this.": null,
260
+ ".input {$value :number} {{You are missing {$value} Adventure Points to do this.}}": null,
261
261
  "Exceeding Adventure Points limit for advantages": null,
262
- "You cannot spend more than {0} AP on advantages. You would exceed this limit by {1} AP.": null,
262
+ "You cannot spend more than {$max} AP on advantages. You would exceed this limit by {$over} AP.": null,
263
263
  "Exceeding Adventure Points limit for magical advantages": null,
264
- "You cannot spend more than {0} AP on magical advantages. You would exceed this limit by {1} AP.": null,
264
+ "You cannot spend more than {$max} AP on magical advantages. You would exceed this limit by {$over} AP.": null,
265
265
  "Exceeding Adventure Points limit for blessed advantages": null,
266
- "You cannot spend more than {0} AP on blessed advantages. You would exceed this limit by {1} AP.": null,
266
+ "You cannot spend more than {$max} AP on blessed advantages. You would exceed this limit by {$over} AP.": null,
267
267
  "Exceeding Adventure Points limit for disadvantages": null,
268
- "You cannot receive more than {0} AP from disadvantages. You would exceed this limit by {1} AP.": null,
268
+ "You cannot receive more than {$max} AP from disadvantages. You would exceed this limit by {$over} AP.": null,
269
269
  "Exceeding Adventure Points limit for magical disadvantages": null,
270
- "You cannot receive more than {0} AP from magical disadvantages. You would exceed this limit by {1} AP.": null,
270
+ "You cannot receive more than {$max} AP from magical disadvantages. You would exceed this limit by {$over} AP.": null,
271
271
  "Exceeding Adventure Points limit for blessed disadvantages": null,
272
- "You cannot receive more than {0} AP from blessed disadvantages. You would exceed this limit by {1} AP.": null,
272
+ "You cannot receive more than {$max} AP from blessed disadvantages. You would exceed this limit by {$over} AP.": null,
273
273
  "heroes.filters.origin.allheroes": null,
274
274
  "heroes.filters.origin.ownheroes": null,
275
275
  "heroes.filters.origin.sharedheroes": null,
@@ -781,7 +781,7 @@ export const Locale = Entity(import.meta.url, {
781
781
  /**
782
782
  * - `0`: Entry name
783
783
  */
784
- "AP Cost for {0}": null,
784
+ "AP Cost for {$category}": null,
785
785
  "Custom option": null,
786
786
  "specialabilities.nativetonguelevel": null,
787
787
  "Advanced Combat Special Abilities": null,
@@ -910,9 +910,9 @@ export const Locale = Entity(import.meta.url, {
910
910
  "Check Modifier": null,
911
911
  "spells.traditions.general": null,
912
912
  "magicalactions.animistforces.tribes.general": null,
913
- " (modified by {0})": null,
914
- " (− {0})": null,
915
- "{0} or {1}, depending on which value is higher": null,
913
+ " (modified by {$modifier})": null,
914
+ " (−{$modifier})": null,
915
+ "{$first} or {$second}, depending on which value is higher": null,
916
916
  "Invocation Difficulty": null,
917
917
  "ID": null,
918
918
  "Creation Difficulty": null,
@@ -941,86 +941,86 @@ export const Locale = Entity(import.meta.url, {
941
941
  " (you cannot use a modification on this ceremony’s cost)": null,
942
942
  " (you cannot use a modification on this ceremony’s range)": null,
943
943
  " (cannot modify)": null,
944
- "{0} act": null,
944
+ "{$value} act": null,
945
945
  "act": null,
946
- "{0} actions": null,
946
+ ".input {$value :number} {{{$value} actions}}": null,
947
947
  "actions": null,
948
- "{0} s": null,
948
+ "{$value} s": null,
949
949
  "s": null,
950
- "{0} seconds": null,
950
+ ".input {$value :number} {{{$value} seconds}}": null,
951
951
  "seconds": null,
952
- "{0} min": null,
952
+ "{$value} min": null,
953
953
  "min": null,
954
- "{0} minutes": null,
954
+ ".input {$value :number} {{{$value} minutes}}": null,
955
955
  "minutes": null,
956
- "{0} h": null,
956
+ "{$value} h": null,
957
957
  "h": null,
958
- "{0} hours": null,
958
+ ".input {$value :number} {{{$value} hours}}": null,
959
959
  "hours": null,
960
- "{0} d": null,
960
+ "{$value} d": null,
961
961
  "d": null,
962
- "{0} days": null,
962
+ ".input {$value :number} {{{$value} days}}": null,
963
963
  "days": null,
964
- "{0} wks.": null,
964
+ ".input {$value :number} {{{$value} wks.}}": null,
965
965
  "wks.": null,
966
- "{0} weeks": null,
966
+ ".input {$value :number} {{{$value} weeks}}": null,
967
967
  "weeks": null,
968
- "{0} mos.": null,
968
+ ".input {$value :number} {{{$value} mos.}}": null,
969
969
  "mos.": null,
970
- "{0} months": null,
970
+ ".input {$value :number} {{{$value} months}}": null,
971
971
  "months": null,
972
- "{0} yrs.": null,
972
+ ".input {$value :number} {{{$value} yrs.}}": null,
973
973
  "yrs.": null,
974
- "{0} years": null,
974
+ ".input {$value :number} {{{$value} years}}": null,
975
975
  "years": null,
976
- "{0} cent.": null,
976
+ "{$value} cent.": null,
977
977
  "cent.": null,
978
- "{0} centuries": null,
978
+ ".input {$value :number} {{{$value} centuries}}": null,
979
979
  "centuries": null,
980
- "{0} SA": null,
981
- "{0} seduction actions": null,
982
- "{0} rnds": null,
983
- "{0} rounds": null,
984
- "{0} CR": null,
980
+ "{$value} SA": null,
981
+ ".input {$value :number} {{{$value} seduction actions}}": null,
982
+ "{$value} rnds": null,
983
+ ".input {$value :number} {{{$value} rounds}}": null,
984
+ "{$value} CR": null,
985
985
  "CR": null,
986
- "{0} combat rounds": null,
986
+ ".input {$value :number} {{{$value} combat rounds}}": null,
987
987
  "combat rounds": null,
988
- "{0} AE": null,
989
- "{0} KP": null,
988
+ "{$value} AE": null,
989
+ "{$value} KP": null,
990
990
  "min. ": null,
991
991
  "at least ": null,
992
- "min. {0}": null,
993
- "at least {0}": null,
994
- "/{0}": null,
995
- " per {0}": null,
996
- ", minimum of {0}": null,
997
- " ({0} perm.)": null,
998
- ", {0} of which are permanent": null,
992
+ "min. {$value}": null,
993
+ "at least {$value}": null,
994
+ "/{$value}": null,
995
+ " per {$value}": null,
996
+ ", minimum of {$value}": null,
997
+ " ({$value} perm.)": null,
998
+ ".input {$value :number} {{, {$value} of which are permanent}}": null,
999
999
  "half of the activation cost": null,
1000
1000
  " and ": null,
1001
1001
  " + ": null,
1002
1002
  " or ": null,
1003
1003
  " / ": null,
1004
1004
  " for ": null,
1005
- " (no more than {0})": null,
1006
- " (max. {0})": null,
1007
- "no more than {0}": null,
1008
- "max. {0}": null,
1005
+ " (no more than {$value})": null,
1006
+ " (max. {$value})": null,
1007
+ "no more than {$value}": null,
1008
+ "max. {$value}": null,
1009
1009
  "Immediate": null,
1010
1010
  "Permanent": null,
1011
1011
  "no more than ": null,
1012
1012
  "max. ": null,
1013
1013
  "Quality Levels": null,
1014
1014
  "QL": null,
1015
- "QL {0}": null,
1015
+ "QL {$value}": null,
1016
1016
  "Skill Points": null,
1017
1017
  "SP": null,
1018
1018
  "Sustained": null,
1019
1019
  "(S)": null,
1020
- "{0} yards": null,
1021
- "{0} yd": null,
1022
- "{0} miles": null,
1023
- "{0} mi.": null,
1020
+ ".input {$value :number} {{{$value} yards}}": null,
1021
+ "{$value} yd": null,
1022
+ ".input {$value :number} {{{$value} miles}}": null,
1023
+ "{$value} mi.": null,
1024
1024
  "Sight": null,
1025
1025
  "Self": null,
1026
1026
  "Global": null,
@@ -1034,58 +1034,22 @@ export const Locale = Entity(import.meta.url, {
1034
1034
  "all": null,
1035
1035
  "none": null,
1036
1036
  "State": null,
1037
- "Social Status {0} or higher": null,
1038
- "Person with {0}": null,
1037
+ "Social Status {$minStatus} or higher": null,
1038
+ "Person with {$sexualCharacteristic}": null,
1039
1039
  "Penis": null,
1040
1040
  "Vagina": null,
1041
- "the SR for {0} combined must add up to at least {1}": null,
1042
- "{0} on at least SR {1}: {2}": null,
1043
- "{0} arcane works with the property {1} at SR {2} or higher": null,
1044
- "{0} liturgical chants and ceremonies with the aspect {1} at SR {2} or higher": null,
1045
- "one of the following skills": null,
1046
- "two of the following skills": null,
1047
- "three of the following skills": null,
1048
- "four of the following skills": null,
1049
- "five of the following skills": null,
1050
- "six of the following skills": null,
1051
- "seven of the following skills": null,
1052
- "eight of the following skills": null,
1053
- "nine of the following skills": null,
1054
- "{0} of the following skills": null,
1055
- "one combat technique": null,
1056
- "two combat techniques": null,
1057
- "three combat techniques": null,
1058
- "four combat techniques": null,
1059
- "five combat techniques": null,
1060
- "six combat techniques": null,
1061
- "seven combat techniques": null,
1062
- "eight combat techniques": null,
1063
- "nine combat techniques": null,
1064
- "{0} combat techniques": null,
1065
- "one close combat technique": null,
1066
- "two close combat techniques": null,
1067
- "three close combat techniques": null,
1068
- "four close combat techniques": null,
1069
- "five close combat techniques": null,
1070
- "six close combat techniques": null,
1071
- "seven close combat techniques": null,
1072
- "eight close combat techniques": null,
1073
- "nine close combat techniques": null,
1074
- "{0} close combat techniques": null,
1075
- "one ranged combat technique": null,
1076
- "two ranged combat techniques": null,
1077
- "three ranged combat techniques": null,
1078
- "four ranged combat techniques": null,
1079
- "five ranged combat techniques": null,
1080
- "six ranged combat techniques": null,
1081
- "seven ranged combat techniques": null,
1082
- "eight ranged combat techniques": null,
1083
- "nine ranged combat techniques": null,
1084
- "{0} ranged combat techniques": null,
1041
+ "the SR for {$skill} combined must add up to at least {$minRating}": null,
1042
+ ".input {$count :number} .input {$minRating :number} {{{$count} on at least SR {$minRating}: {$list}}}": null,
1043
+ ".input {$count :number} .input {$minRating :number} {{{$count} arcane works with the property {$property} at SR {$minRating} or higher}}": null,
1044
+ ".input {$count :number} .input {$minRating :number} {{{$count} liturgical chants and ceremonies with the aspect {$aspect} at SR {$minRating} or higher}}": null,
1045
+ ".input {$count :number} {{{$count} of the following skills}}": null,
1046
+ ".input {$count :number} {{{$count} combat techniques}}": null,
1047
+ ".input {$count :number} {{{$count} close combat techniques}}": null,
1048
+ ".input {$count :number} {{{$count} ranged combat techniques}}": null,
1085
1049
  "special ability": null,
1086
1050
  "no special ability": null,
1087
1051
  "Tradition": null,
1088
- "Tradition ({0})": null,
1052
+ "Tradition ({$tradition})": null,
1089
1053
  "Church": null,
1090
1054
  "Shaman": null,
1091
1055
  "Tradition must be able to use rituals": null,
@@ -1094,12 +1058,12 @@ export const Locale = Entity(import.meta.url, {
1094
1058
  "liturgical enhancement": null,
1095
1059
  "for": null,
1096
1060
  "no other ancestor blood advantage": null,
1097
- "Race, culture, or profession must have {0} as an automatic or suggested {1}": null,
1061
+ "Race, culture, or profession must have {$entry} as an automatic or suggested {$itemOfCategory}": null,
1098
1062
  "advantage": null,
1099
1063
  "disadvantage": null,
1100
- "domain {0}": null,
1101
- "{0} level {1}": null,
1102
- "Level {0}:": null,
1064
+ "domain {$domain}": null,
1065
+ "{$pact} level {$pactLevel}": null,
1066
+ "Level {$level}:": null,
1103
1067
  "inlinewiki.castingtime": null,
1104
1068
  "inlinewiki.ritualtime": null,
1105
1069
  "inlinewiki.aecost": null,
@@ -1302,9 +1266,9 @@ export const Locale = Entity(import.meta.url, {
1302
1266
  "Improvement Cost": null,
1303
1267
  "Front Cover Inside": null,
1304
1268
  "Back Cover Inside": null,
1305
- "since the {0}. printing": null,
1306
- "removed in {0}. printing": null,
1307
- }),
1269
+ ".input {$printing :number} {{since the {$printing}. printing}}": null,
1270
+ ".input {$printing :number} {{removed in {$printing}. printing}}": null,
1271
+ }, { allKeysAreRequired: true }),
1308
1272
  }),
1309
1273
  }),
1310
1274
  });
@@ -1317,3 +1281,52 @@ export const NestedTranslationMap = (MemberDeclCreator, entityName, type) => Mem
1317
1281
  type,
1318
1282
  }),
1319
1283
  });
1284
+ // /**
1285
+ // * Any type that can be converted to a string via a `toString` method.
1286
+ // */
1287
+ // interface Stringable {
1288
+ // toString(): string
1289
+ // }
1290
+ // type Whitespace = " " | "\n" | "\t" | "\r"
1291
+ // /**
1292
+ // * Removes leading and trailing whitespace from a string literal type.
1293
+ // */
1294
+ // type Trim<L extends string> = L extends `${Whitespace}${infer Rest}`
1295
+ // ? Trim<Rest>
1296
+ // : L extends `${infer Rest}${Whitespace}`
1297
+ // ? Trim<Rest>
1298
+ // : L
1299
+ // /**
1300
+ // * Maps the type function string to the actual TypeScript type.
1301
+ // */
1302
+ // type ActualType<F extends string> = F extends "number" | "integer"
1303
+ // ? number
1304
+ // : F extends "string"
1305
+ // ? string
1306
+ // : F extends "datetime" | "date" | "time"
1307
+ // ? Date
1308
+ // : Stringable
1309
+ // /**
1310
+ // * Makes the parameter types readable by removing any TypeScript-specific constructs.
1311
+ // */
1312
+ // type ReadableParams<P extends object> = {
1313
+ // [K in keyof P]: P[K]
1314
+ // }
1315
+ // /**
1316
+ // * Extracts parameter names and their types from a simple message string. It also works for complex messages, but is not designed for that.
1317
+ // */
1318
+ // type ParamsFromSimpleMessage<L extends string> = L extends `${infer Start}}${infer Rest}`
1319
+ // ? Start extends `${string}{$${infer Name} :${infer TypeFunction}`
1320
+ // ? { [K in Name]: ActualType<TypeFunction> } & Omit<ParamsFromSimpleMessage<Rest>, Name>
1321
+ // : Start extends `${string}{$${infer Name}`
1322
+ // ? ParamsFromSimpleMessage<Rest> extends { [K in Name]: Stringable }
1323
+ // ? ParamsFromSimpleMessage<Rest>
1324
+ // : { [K in Name]: Stringable } & ParamsFromSimpleMessage<Rest>
1325
+ // : ParamsFromSimpleMessage<Rest>
1326
+ // : object
1327
+ // /**
1328
+ // * Extracts parameter names and their types from an Unicode MessageFormat 2.0 (MF2) string.
1329
+ // */
1330
+ // export type ExtractParamsFromMessage<Msg extends string> = ReadableParams<
1331
+ // ParamsFromSimpleMessage<Msg>
1332
+ // >
@@ -58,7 +58,7 @@ export declare const Animal: Entity<"Animal", {
58
58
  }, []>>>, false>;
59
59
  }>, true>;
60
60
  }>, []>>>, []>>, true>;
61
- translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<`${string}TranslationTranslation`, {
61
+ translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<`${string}Translation`, {
62
62
  name: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
63
63
  secondary_name: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
64
64
  note: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
@@ -73,7 +73,7 @@ export declare const AnimalCare: Entity<"AnimalCare", {
73
73
  }, []>>>, false>;
74
74
  }>, true>;
75
75
  }>, []>>>, []>>, true>;
76
- translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<`${string}TranslationTranslation`, {
76
+ translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<`${string}Translation`, {
77
77
  name: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
78
78
  secondary_name: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
79
79
  note: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
@@ -42,6 +42,28 @@ export declare const Armor: Entity<"Armor", {
42
42
  Arms: EnumCase<null>;
43
43
  Legs: EnumCase<null>;
44
44
  }, []>>, false>;
45
+ restrictedTo: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedTo", Object<{
46
+ races: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToRaces", Object<{
47
+ scope: import("tsondb/schema/def").MemberDecl<Array<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
48
+ }>, []>>, false>;
49
+ cultures: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToCultures", Object<{
50
+ scope: import("tsondb/schema/def").MemberDecl<Array<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
51
+ }>, []>>, false>;
52
+ professions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToProfessions", Object<{
53
+ scope: import("tsondb/schema/def").MemberDecl<Array<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
54
+ }>, []>>, false>;
55
+ magicalTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToMagicalTraditions", Object<{
56
+ scope: import("tsondb/schema/def").MemberDecl<Array<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
57
+ }>, []>>, false>;
58
+ blessedTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToBlessedTraditions", Object<{
59
+ scope: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"RestrictedToBlessedTraditionsScope", {
60
+ Specific: EnumCase<Array<import("tsondb/schema/def").ReferenceIdentifierType>>;
61
+ Church: EnumCase<null>;
62
+ Shamanistic: EnumCase<null>;
63
+ }, []>>, true>;
64
+ isSanctifiedBy: import("tsondb/schema/def").MemberDecl<Boolean, true>;
65
+ }>, []>>, false>;
66
+ }>, []>>, false>;
45
67
  src: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"PublicationRefs", Array<IncludeIdentifier<[], TypeAlias<"PublicationRef", Object<{
46
68
  id: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
47
69
  occurrences: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<string, {
@@ -111,6 +133,28 @@ export declare const SecondaryArmor: TypeAlias<"SecondaryArmor", Object<{
111
133
  Arms: EnumCase<null>;
112
134
  Legs: EnumCase<null>;
113
135
  }, []>>, false>;
136
+ restrictedTo: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedTo", Object<{
137
+ races: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToRaces", Object<{
138
+ scope: import("tsondb/schema/def").MemberDecl<Array<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
139
+ }>, []>>, false>;
140
+ cultures: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToCultures", Object<{
141
+ scope: import("tsondb/schema/def").MemberDecl<Array<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
142
+ }>, []>>, false>;
143
+ professions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToProfessions", Object<{
144
+ scope: import("tsondb/schema/def").MemberDecl<Array<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
145
+ }>, []>>, false>;
146
+ magicalTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToMagicalTraditions", Object<{
147
+ scope: import("tsondb/schema/def").MemberDecl<Array<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
148
+ }>, []>>, false>;
149
+ blessedTraditions: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], TypeAlias<"RestrictedToBlessedTraditions", Object<{
150
+ scope: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], Enum<"RestrictedToBlessedTraditionsScope", {
151
+ Specific: EnumCase<Array<import("tsondb/schema/def").ReferenceIdentifierType>>;
152
+ Church: EnumCase<null>;
153
+ Shamanistic: EnumCase<null>;
154
+ }, []>>, true>;
155
+ isSanctifiedBy: import("tsondb/schema/def").MemberDecl<Boolean, true>;
156
+ }>, []>>, false>;
157
+ }>, []>>, false>;
114
158
  translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<"SecondaryArmorTranslation", {
115
159
  advantage: import("tsondb/schema/def").MemberDecl<String, false>;
116
160
  disadvantage: import("tsondb/schema/def").MemberDecl<String, false>;
@@ -3,7 +3,7 @@ import { ArmorIdentifier, ArmorTypeIdentifier } from "../../_Identifier.js";
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 { ComplexComplexity, Cost, Weight } from "./_Item.js";
6
+ import { ComplexComplexity, Cost, RestrictedTo, Weight } from "./_Item.js";
7
7
  export const Armor = Entity(import.meta.url, {
8
8
  name: "Armor",
9
9
  namePlural: "Armor",
@@ -40,6 +40,10 @@ export const Armor = Entity(import.meta.url, {
40
40
  comment: "Specify if armor is only available for a specific hit zone.",
41
41
  type: IncludeIdentifier(HitZone),
42
42
  }),
43
+ restrictedTo: Optional({
44
+ comment: "Define if during character creation this weapon can only be bought by a specific subset of characters.",
45
+ type: IncludeIdentifier(RestrictedTo),
46
+ }),
43
47
  src,
44
48
  translations: NestedTranslationMap(Required, "Armor", Object({
45
49
  name: Required({
@@ -96,6 +100,10 @@ export const SecondaryArmor = TypeAlias(import.meta.url, {
96
100
  comment: "Specify if armor is only available for a specific hit zone.",
97
101
  type: IncludeIdentifier(HitZone),
98
102
  }),
103
+ restrictedTo: Optional({
104
+ comment: "Define if during character creation this armor can only be bought by a specific subset of characters.",
105
+ type: IncludeIdentifier(RestrictedTo),
106
+ }),
99
107
  translations: NestedTranslationMap(Optional, "SecondaryArmor", Object({
100
108
  advantage: Optional({
101
109
  comment: "The armor advantage text.",