@optolith/database-schema 0.108.1 → 0.109.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,21 @@
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.109.0](https://github.com/Optolith/database-schema/compare/v0.108.1...v0.109.0) (2026-10-17)
6
+
7
+ ### ⚠ BREAKING CHANGES
8
+
9
+ * item component references special ammunition only
10
+
11
+ ### Features
12
+
13
+ * special ammunition entity ([0b149a9](https://github.com/Optolith/database-schema/commit/0b149a9073f02f425cb56c52c0b4e60b819b3024))
14
+
15
+ ### Bug Fixes
16
+
17
+ * derived trade secrets for special ammunition ([83b8d14](https://github.com/Optolith/database-schema/commit/83b8d1410886d87b6f790fa4bb96c100f5c04ee8))
18
+ * item component references special ammunition only ([a200ecd](https://github.com/Optolith/database-schema/commit/a200ecd5bd31e4d4bdc4cf1f13f11d73b22d88ce))
19
+
5
20
  ## [0.108.1](https://github.com/Optolith/database-schema/compare/v0.108.0...v0.108.1) (2026-10-17)
6
21
 
7
22
  ### Bug Fixes
package/gen/types.d.ts CHANGED
@@ -171,6 +171,7 @@ export type EntityMap = {
171
171
  SkillStyleSpecialAbility: SkillStyleSpecialAbility
172
172
  SkillUse: SkillUse
173
173
  SocialStatus: SocialStatus
174
+ SpecialAmmunition: SpecialAmmunition
174
175
  Spell: Spell
175
176
  SpellSwordEnchantment: SpellSwordEnchantment
176
177
  StaffEnchantment: StaffEnchantment
@@ -26728,7 +26729,7 @@ export interface ApplicableAmmunition {
26728
26729
  /**
26729
26730
  * Specific ammunition this component can be applied to.
26730
26731
  */
26731
- ammunition?: Ammunition_ID[]
26732
+ ammunition?: SpecialAmmunition_ID[]
26732
26733
 
26733
26734
  /**
26734
26735
  * Whether the list of ammunition is inverted, i.e. whether the component can be applied to all ammunition – or those of the specified category – except for the listed ammunition.
@@ -26741,6 +26742,69 @@ export interface ApplicableAmmunition {
26741
26742
  category?: ApplicableAmmunitionCategory
26742
26743
  }
26743
26744
 
26745
+ export interface SpecialAmmunition {
26746
+ /**
26747
+ * The base ammunition type that is affected by this specialization.
26748
+ */
26749
+ applicableTo: Ammunition_ID[]
26750
+
26751
+ /**
26752
+ * The cost modifier for the base price of affected ammunition.
26753
+ */
26754
+ costModifier: number
26755
+
26756
+ /**
26757
+ * The complexity of crafting the item.
26758
+ */
26759
+ complexity?: Complexity
26760
+
26761
+ /**
26762
+ * The prerequisites of the item, if any. Note that this is fully separate from the prerequisites of the item’s trade secret, which are defined independently from this.
26763
+ */
26764
+ prerequisites?: EquipmentPrerequisites
26765
+
26766
+ /**
26767
+ * References to where in which publications this entry has been defined. Entries may also be added or removed in later printings.
26768
+ */
26769
+ src: PublicationRefs
26770
+
26771
+ /**
26772
+ * All translations for the entry, identified by IETF language tag (BCP47).
26773
+ */
26774
+ translations: {
26775
+ [localeId: string]: SpecialAmmunitionTranslation
26776
+ }
26777
+ }
26778
+
26779
+ /**
26780
+ * The entity’s identifier. A UUID or a locale code if it is registered as the locale entity.
26781
+ */
26782
+ export type SpecialAmmunition_ID = string
26783
+
26784
+ export interface SpecialAmmunitionTranslation {
26785
+ /**
26786
+ * The item’s name.
26787
+ */
26788
+ name: string
26789
+
26790
+ /**
26791
+ * An auxiliary name or label of the item, if available.
26792
+ */
26793
+ secondary_name?: string
26794
+
26795
+ /**
26796
+ * Note text.
26797
+ */
26798
+ note?: string
26799
+
26800
+ /**
26801
+ * Special rules text.
26802
+ */
26803
+ rules?: string
26804
+
26805
+ errata?: Errata
26806
+ }
26807
+
26744
26808
  export type ApplicableAmmunitionCategory =
26745
26809
  | {
26746
26810
  kind: "ArrowOrBolt"
@@ -5,7 +5,7 @@ type EquipmentEntitiesWithComplexities = {
5
5
  [K in EquipmentIdentifier["kind"]]: EntityMap[K] extends {
6
6
  complexity?: Complexity | ArmorComplexity;
7
7
  } ? K : never;
8
- }[EquipmentIdentifier["kind"]];
8
+ }[EquipmentIdentifier["kind"]] | "SpecialAmmunition";
9
9
  type HerbaryEntitiesWithTradeSecrets = "Disease" | "Elixir" | "HerbalAid" | "Poison";
10
10
  export type DerivedTradeSecretsCache = {
11
11
  equipment: {
@@ -22,6 +22,7 @@ const emptyDerivedEquipmentTradeSecretsCache = {
22
22
  MusicalInstrument: {},
23
23
  OrienteeringAid: {},
24
24
  RopeOrChain: {},
25
+ SpecialAmmunition: {},
25
26
  Stationery: {},
26
27
  ThievesTool: {},
27
28
  ToolOfTheTrade: {},
package/lib/main.js CHANGED
@@ -153,6 +153,7 @@ export const schema = new Schema((await import("../package.json", { with: { type
153
153
  Types.SkillModificationLevel,
154
154
  Types.SkillStyleSpecialAbility,
155
155
  Types.SocialStatus,
156
+ Types.SpecialAmmunition,
156
157
  Types.Spell,
157
158
  Types.SpellSwordEnchantment,
158
159
  Types.StaffEnchantment,
@@ -161,6 +161,7 @@ export declare const SkillIdentifier: () => R;
161
161
  export declare const SkillModificationLevelIdentifier: () => R;
162
162
  export declare const SkillStyleSpecialAbilityIdentifier: () => R;
163
163
  export declare const SocialStatusIdentifier: () => R;
164
+ export declare const SpecialAmmunitionIdentifier: () => R;
164
165
  export declare const SpellIdentifier: () => R;
165
166
  export declare const SpellSwordEnchantmentIdentifier: () => R;
166
167
  export declare const StaffEnchantmentIdentifier: () => R;
@@ -51,6 +51,7 @@ import { OrienteeringAid } from "./equipment/item/OrienteeringAid.js";
51
51
  import { Plant } from "./equipment/item/Plant.js";
52
52
  import { Poison } from "./equipment/item/Poison.js";
53
53
  import { RopeOrChain } from "./equipment/item/RopeOrChain.js";
54
+ import { SpecialAmmunition } from "./equipment/item/SpecialAmmunition.js";
54
55
  import { Stationery } from "./equipment/item/Stationery.js";
55
56
  import { Biome } from "./equipment/item/sub/Biome.js";
56
57
  import { BotanicRegion } from "./equipment/item/sub/BotanicRegion.js";
@@ -331,6 +332,7 @@ export const SkillIdentifier = () => R(Skill);
331
332
  export const SkillModificationLevelIdentifier = () => R(SkillModificationLevel);
332
333
  export const SkillStyleSpecialAbilityIdentifier = () => R(SkillStyleSpecialAbility);
333
334
  export const SocialStatusIdentifier = () => R(SocialStatus);
335
+ export const SpecialAmmunitionIdentifier = () => R(SpecialAmmunition);
334
336
  export const SpellIdentifier = () => R(Spell);
335
337
  export const SpellSwordEnchantmentIdentifier = () => R(SpellSwordEnchantment);
336
338
  export const StaffEnchantmentIdentifier = () => R(StaffEnchantment);
@@ -1,5 +1,5 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- import { AmmunitionIdentifier, ArmorIdentifier, CloseCombatTechniqueIdentifier, ItemComponentIdentifier, RangedCombatTechniqueIdentifier, WeaponIdentifier, } from "../../_Identifier.js";
2
+ import { ArmorIdentifier, CloseCombatTechniqueIdentifier, ItemComponentIdentifier, RangedCombatTechniqueIdentifier, SpecialAmmunitionIdentifier, WeaponIdentifier, } from "../../_Identifier.js";
3
3
  import { EquipmentPrerequisites } from "../../_Prerequisite.js";
4
4
  import { CloseCombatTechnique, RangedCombatTechnique } from "../../CombatTechnique.js";
5
5
  import { NestedTranslationMap } from "../../Locale.js";
@@ -258,7 +258,7 @@ const ApplicableAmmunition = DB.TypeAlias(import.meta.url, {
258
258
  type: () => DB.Object({
259
259
  ammunition: DB.Optional({
260
260
  comment: "Specific ammunition this component can be applied to.",
261
- type: DB.Array(AmmunitionIdentifier(), {
261
+ type: DB.Array(SpecialAmmunitionIdentifier(), {
262
262
  minItems: 1,
263
263
  uniqueItems: true,
264
264
  }),
@@ -0,0 +1,152 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ export declare const SpecialAmmunition: DB.Entity<"SpecialAmmunition", {
3
+ applicableTo: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, true>;
4
+ costModifier: DB.MemberDecl<DB.Integer, true>;
5
+ complexity: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Complexity", {
6
+ Primitive: DB.EnumCase<null>;
7
+ Simple: DB.EnumCase<null>;
8
+ Complex: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ComplexComplexity", DB.Object<{
9
+ ap_value: DB.MemberDecl<DB.Integer, true>;
10
+ 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", {
11
+ Single: DB.EnumCase<DB.TypeArgument<DB.Param<"T", DB.Type>>>;
12
+ Disjunction: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PrerequisitesDisjunction", DB.Object<{
13
+ list: DB.MemberDecl<DB.Array<DB.TypeArgument<DB.Param<"T", DB.Type>>>, true>;
14
+ display_option: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DisplayOption", {
15
+ Hide: DB.EnumCase<null>;
16
+ ReplaceWith: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReplacementDisplayOption", DB.Object<{
17
+ sentence_type: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SentenceType", {
18
+ Standalone: DB.EnumCase<null>;
19
+ Connected: DB.EnumCase<null>;
20
+ }, []>>, false>;
21
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ReplacementDisplayOptionTranslation", {
22
+ replacement: DB.MemberDecl<DB.String, true>;
23
+ }>, true>;
24
+ }>, []>>>;
25
+ }, []>>, false>;
26
+ }>, [T: DB.Param<"T", DB.Type>]>>>;
27
+ Group: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PrerequisiteGroup", DB.Object<{
28
+ list: DB.MemberDecl<DB.Array<DB.TypeArgument<DB.Param<"T", DB.Type>>>, true>;
29
+ translations: DB.MemberDecl<DB.NestedEntityMap<"PrerequisiteGroupTranslation", {
30
+ text: DB.MemberDecl<DB.String, true>;
31
+ }>, true>;
32
+ }>, [T: DB.Param<"T", DB.Type>]>>>;
33
+ }, [T: DB.Param<"T", DB.Type>]>>>, [T: DB.Param<"T", DB.Type>]>>, []>>, false>;
34
+ src: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRefs", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRef", DB.Object<{
35
+ id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
36
+ occurrences: DB.MemberDecl<DB.NestedEntityMap<string, {
37
+ initial: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"InitialOccurrence", DB.Object<{
38
+ printing: DB.MemberDecl<DB.Integer, false>;
39
+ pages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PageRange", DB.Object<{
40
+ first_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
41
+ InsideCoverFront: DB.EnumCase<null>;
42
+ InsideCoverBack: DB.EnumCase<null>;
43
+ Numbered: DB.EnumCase<DB.Integer>;
44
+ }, []>>, true>;
45
+ last_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
46
+ InsideCoverFront: DB.EnumCase<null>;
47
+ InsideCoverBack: DB.EnumCase<null>;
48
+ Numbered: DB.EnumCase<DB.Integer>;
49
+ }, []>>, false>;
50
+ }>, []>>>, true>;
51
+ isRemoved: DB.MemberDecl<DB.Boolean, false>;
52
+ }>, []>>, true>;
53
+ revisions: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"Revision", {
54
+ Since: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"Since", DB.Object<{
55
+ printing: DB.MemberDecl<DB.Integer, true>;
56
+ pages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PageRange", DB.Object<{
57
+ first_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
58
+ InsideCoverFront: DB.EnumCase<null>;
59
+ InsideCoverBack: DB.EnumCase<null>;
60
+ Numbered: DB.EnumCase<DB.Integer>;
61
+ }, []>>, true>;
62
+ last_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
63
+ InsideCoverFront: DB.EnumCase<null>;
64
+ InsideCoverBack: DB.EnumCase<null>;
65
+ Numbered: DB.EnumCase<DB.Integer>;
66
+ }, []>>, false>;
67
+ }>, []>>>, true>;
68
+ }>, []>>>;
69
+ Deprecated: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"Deprecation", DB.Object<{
70
+ printing: DB.MemberDecl<DB.Integer, true>;
71
+ }>, []>>>;
72
+ }, []>>>, false>;
73
+ }>, true>;
74
+ }>, []>>>, []>>, false>;
75
+ }>, []>>>;
76
+ }, []>>, false>;
77
+ prerequisites: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"EquipmentPrerequisites", DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PlainPrerequisites", DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.Enum<"PrerequisitesElement", {
78
+ Single: DB.EnumCase<DB.TypeArgument<DB.Param<"T", DB.Type>>>;
79
+ Disjunction: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PrerequisitesDisjunction", DB.Object<{
80
+ list: DB.MemberDecl<DB.Array<DB.TypeArgument<DB.Param<"T", DB.Type>>>, true>;
81
+ display_option: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DisplayOption", {
82
+ Hide: DB.EnumCase<null>;
83
+ ReplaceWith: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReplacementDisplayOption", DB.Object<{
84
+ sentence_type: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SentenceType", {
85
+ Standalone: DB.EnumCase<null>;
86
+ Connected: DB.EnumCase<null>;
87
+ }, []>>, false>;
88
+ translations: DB.MemberDecl<DB.NestedEntityMap<"ReplacementDisplayOptionTranslation", {
89
+ replacement: DB.MemberDecl<DB.String, true>;
90
+ }>, true>;
91
+ }>, []>>>;
92
+ }, []>>, false>;
93
+ }>, [T: DB.Param<"T", DB.Type>]>>>;
94
+ Group: DB.EnumCase<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PrerequisiteGroup", DB.Object<{
95
+ list: DB.MemberDecl<DB.Array<DB.TypeArgument<DB.Param<"T", DB.Type>>>, true>;
96
+ translations: DB.MemberDecl<DB.NestedEntityMap<"PrerequisiteGroupTranslation", {
97
+ text: DB.MemberDecl<DB.String, true>;
98
+ }>, true>;
99
+ }>, [T: DB.Param<"T", DB.Type>]>>>;
100
+ }, [T: DB.Param<"T", DB.Type>]>>>, [T: DB.Param<"T", DB.Type>]>>, []>>, false>;
101
+ src: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRefs", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRef", DB.Object<{
102
+ id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
103
+ occurrences: DB.MemberDecl<DB.NestedEntityMap<string, {
104
+ initial: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"InitialOccurrence", DB.Object<{
105
+ printing: DB.MemberDecl<DB.Integer, false>;
106
+ pages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PageRange", DB.Object<{
107
+ first_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
108
+ InsideCoverFront: DB.EnumCase<null>;
109
+ InsideCoverBack: DB.EnumCase<null>;
110
+ Numbered: DB.EnumCase<DB.Integer>;
111
+ }, []>>, true>;
112
+ last_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
113
+ InsideCoverFront: DB.EnumCase<null>;
114
+ InsideCoverBack: DB.EnumCase<null>;
115
+ Numbered: DB.EnumCase<DB.Integer>;
116
+ }, []>>, false>;
117
+ }>, []>>>, true>;
118
+ isRemoved: DB.MemberDecl<DB.Boolean, false>;
119
+ }>, []>>, true>;
120
+ revisions: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"Revision", {
121
+ Since: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"Since", DB.Object<{
122
+ printing: DB.MemberDecl<DB.Integer, true>;
123
+ pages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PageRange", DB.Object<{
124
+ first_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
125
+ InsideCoverFront: DB.EnumCase<null>;
126
+ InsideCoverBack: DB.EnumCase<null>;
127
+ Numbered: DB.EnumCase<DB.Integer>;
128
+ }, []>>, true>;
129
+ last_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
130
+ InsideCoverFront: DB.EnumCase<null>;
131
+ InsideCoverBack: DB.EnumCase<null>;
132
+ Numbered: DB.EnumCase<DB.Integer>;
133
+ }, []>>, false>;
134
+ }>, []>>>, true>;
135
+ }>, []>>>;
136
+ Deprecated: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"Deprecation", DB.Object<{
137
+ printing: DB.MemberDecl<DB.Integer, true>;
138
+ }>, []>>>;
139
+ }, []>>>, false>;
140
+ }>, true>;
141
+ }>, []>>>, []>>, true>;
142
+ translations: DB.MemberDecl<DB.NestedEntityMap<"SpecialAmmunitionTranslation", {
143
+ name: DB.MemberDecl<DB.String, true>;
144
+ secondary_name: DB.MemberDecl<DB.String, false>;
145
+ note: DB.MemberDecl<DB.String, false>;
146
+ rules: DB.MemberDecl<DB.String, false>;
147
+ errata: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"Errata", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"Erratum", DB.Object<{
148
+ date: DB.MemberDecl<DB.Date, true>;
149
+ description: DB.MemberDecl<DB.String, true>;
150
+ }>, []>>>, []>>, false>;
151
+ }>, true>;
152
+ }, undefined>;
@@ -0,0 +1,58 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ import { AmmunitionIdentifier } from "../../_Identifier.js";
3
+ import { EquipmentPrerequisites } from "../../_Prerequisite.js";
4
+ import { NestedTranslationMap } from "../../Locale.js";
5
+ import { Errata } from "../../source/_Erratum.js";
6
+ import { src } from "../../source/_PublicationRef.js";
7
+ import { Complexity } from "./_Item.js";
8
+ export const SpecialAmmunition = DB.Entity(import.meta.url, {
9
+ name: "SpecialAmmunition",
10
+ namePlural: "SpecialAmmunition",
11
+ type: () => DB.Object({
12
+ applicableTo: DB.Required({
13
+ comment: "The base ammunition type that is affected by this specialization.",
14
+ type: DB.Array(AmmunitionIdentifier(), { minItems: 1 }),
15
+ }),
16
+ costModifier: DB.Required({
17
+ comment: "The cost modifier for the base price of affected ammunition.",
18
+ type: DB.Integer({ minimum: 1 }),
19
+ }),
20
+ complexity: DB.Optional({
21
+ comment: "The complexity of crafting the item.",
22
+ type: DB.IncludeIdentifier(Complexity),
23
+ }),
24
+ prerequisites: DB.Optional({
25
+ comment: "The prerequisites of the item, if any. Note that this is fully separate from the prerequisites of the item’s trade secret, which are defined independently from this.",
26
+ type: DB.IncludeIdentifier(EquipmentPrerequisites),
27
+ }),
28
+ src,
29
+ translations: NestedTranslationMap(DB.Required, "SpecialAmmunition", DB.Object({
30
+ name: DB.Required({
31
+ comment: "The item’s name.",
32
+ type: DB.String({ minLength: 1 }),
33
+ }),
34
+ secondary_name: DB.Optional({
35
+ comment: "An auxiliary name or label of the item, if available.",
36
+ type: DB.String({ minLength: 1 }),
37
+ }),
38
+ note: DB.Optional({
39
+ comment: "Note text.",
40
+ type: DB.String({ minLength: 1, markdown: "block" }),
41
+ }),
42
+ rules: DB.Optional({
43
+ comment: "Special rules text.",
44
+ type: DB.String({ minLength: 1, markdown: "block" }),
45
+ }),
46
+ errata: DB.Optional({
47
+ type: DB.IncludeIdentifier(Errata),
48
+ }),
49
+ })),
50
+ }),
51
+ instanceDisplayName: {},
52
+ uniqueConstraints: [
53
+ {
54
+ entityMapKeyPath: "translations",
55
+ keyPathInEntityMap: "name",
56
+ },
57
+ ],
58
+ });
@@ -49,6 +49,7 @@ export { OrienteeringAid } from "./equipment/item/OrienteeringAid.js";
49
49
  export { Plant } from "./equipment/item/Plant.js";
50
50
  export { Poison } from "./equipment/item/Poison.js";
51
51
  export { RopeOrChain } from "./equipment/item/RopeOrChain.js";
52
+ export { SpecialAmmunition } from "./equipment/item/SpecialAmmunition.js";
52
53
  export { Stationery } from "./equipment/item/Stationery.js";
53
54
  export { Biome } from "./equipment/item/sub/Biome.js";
54
55
  export { BotanicRegion } from "./equipment/item/sub/BotanicRegion.js";
@@ -49,6 +49,7 @@ export { OrienteeringAid } from "./equipment/item/OrienteeringAid.js";
49
49
  export { Plant } from "./equipment/item/Plant.js";
50
50
  export { Poison } from "./equipment/item/Poison.js";
51
51
  export { RopeOrChain } from "./equipment/item/RopeOrChain.js";
52
+ export { SpecialAmmunition } from "./equipment/item/SpecialAmmunition.js";
52
53
  export { Stationery } from "./equipment/item/Stationery.js";
53
54
  export { Biome } from "./equipment/item/sub/Biome.js";
54
55
  export { BotanicRegion } from "./equipment/item/sub/BotanicRegion.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optolith/database-schema",
3
- "version": "0.108.1",
3
+ "version": "0.109.0",
4
4
  "description": "Definitions and utilities for the flat-file database of Optolith, a character creation tool for the Pen and Paper RPG “The Dark Eye 5”, and its external integrations into other software.",
5
5
  "keywords": [
6
6
  "tde",