@optolith/database-schema 0.69.0 → 0.70.1

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,20 @@
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.70.1](https://github.com/Optolith/database-schema/compare/v0.70.0...v0.70.1) (2026-09-28)
6
+
7
+ ### Features
8
+
9
+ * different names for familiar's tricks based on tradition ([189a86d](https://github.com/Optolith/database-schema/commit/189a86da529c1b220030c746f8bdb0b94a29a3d9))
10
+ ## [0.70.0](https://github.com/Optolith/database-schema/compare/v0.69.0...v0.70.0) (2026-09-27)
11
+
12
+ ### ⚠ BREAKING CHANGES
13
+
14
+ * plant adjustments
15
+
16
+ ### Features
17
+
18
+ * plant adjustments ([8dcd08b](https://github.com/Optolith/database-schema/commit/8dcd08b1a3492686703fbdee7f5f12c992a5d2c5)), references [#195](https://github.com/Optolith/database-schema/issues/195)
5
19
  ## [0.69.0](https://github.com/Optolith/database-schema/compare/v0.68.1...v0.69.0) (2026-09-27)
6
20
 
7
21
  ### ⚠ BREAKING CHANGES
package/gen/types.d.ts CHANGED
@@ -634,6 +634,7 @@ export type TypeAliasMap = {
634
634
  ExpressionBasedRange: ExpressionBasedRange
635
635
  FamiliarsTrickAllOneTimeCost: FamiliarsTrickAllOneTimeCost
636
636
  FamiliarsTrickFixedOneTimeCost: FamiliarsTrickFixedOneTimeCost
637
+ FamiliarsTrickNameByTradition: FamiliarsTrickNameByTradition
637
638
  FamiliarsTrickOneTimeIntervalCost: FamiliarsTrickOneTimeIntervalCost
638
639
  FamiliarsTrickOneTimeIntervalPerformanceParameters: FamiliarsTrickOneTimeIntervalPerformanceParameters
639
640
  FamiliarsTrickOneTimePerformanceParameters: FamiliarsTrickOneTimePerformanceParameters
@@ -25599,6 +25600,11 @@ export interface FamiliarsTrickTranslation {
25599
25600
  */
25600
25601
  name: string
25601
25602
 
25603
+ /**
25604
+ * For some traditions, the name of the familiar’s trick is different.
25605
+ */
25606
+ nameByTradition?: FamiliarsTrickNameByTradition
25607
+
25602
25608
  /**
25603
25609
  * The effect description.
25604
25610
  */
@@ -25747,6 +25753,17 @@ export interface IndefiniteFamiliarsTrickPropertyTranslation {
25747
25753
  description: ResponsiveText
25748
25754
  }
25749
25755
 
25756
+ export type FamiliarsTrickNameByTradition = {
25757
+ [magicalTraditionId: string]: FamiliarsTrickNameForTradition
25758
+ }
25759
+
25760
+ export interface FamiliarsTrickNameForTradition {
25761
+ /**
25762
+ * The familiar’s trick’s name for this tradition.
25763
+ */
25764
+ name: string
25765
+ }
25766
+
25750
25767
  export interface HerbalAid {
25751
25768
  /**
25752
25769
  * The plant types this aid belongs to.
@@ -25756,7 +25773,7 @@ export interface HerbalAid {
25756
25773
  /**
25757
25774
  * The difficulty for this aid to craft.
25758
25775
  */
25759
- crafting_difficulty: number
25776
+ crafting_difficulty?: number
25760
25777
 
25761
25778
  /**
25762
25779
  * AP value and prerequisites of the herbal aid�s trade secret.
@@ -25768,6 +25785,11 @@ export interface HerbalAid {
25768
25785
  */
25769
25786
  combatUse?: HerbalAidCombatUse
25770
25787
 
25788
+ /**
25789
+ * How long this herbal aid lasts.
25790
+ */
25791
+ longevity?: HerbalPreservationLongevity
25792
+
25771
25793
  /**
25772
25794
  * References to where in which publications this entry has been defined. Entries may also be added or removed in later printings.
25773
25795
  */
@@ -25795,7 +25817,7 @@ export interface HerbalAidTranslation {
25795
25817
  /**
25796
25818
  * The herbal aid's description.
25797
25819
  */
25798
- description: string
25820
+ description?: string
25799
25821
 
25800
25822
  /**
25801
25823
  * The ingredients used to craft this herbal aid.
@@ -25818,6 +25840,44 @@ export type HerbalAidCombatUse =
25818
25840
  Armor: Armor_ID
25819
25841
  }
25820
25842
 
25843
+ export interface HerbalPreservationLongevity {
25844
+ /**
25845
+ * An expression that evaluates to the duration.
25846
+ */
25847
+ value: HerbalPreservationLongevityExpression
25848
+
25849
+ /**
25850
+ * The duration unit.
25851
+ */
25852
+ unit: DurationUnit
25853
+
25854
+ /**
25855
+ * All translations for the entry, identified by IETF language tag (BCP47).
25856
+ */
25857
+ translations?: {
25858
+ [localeId: string]: HerbalPreservationLongevityTranslation
25859
+ }
25860
+ }
25861
+
25862
+ export interface HerbalPreservationLongevityTranslation {
25863
+ /**
25864
+ * A replacement string.
25865
+ */
25866
+ replacement: ResponsiveTextReplace
25867
+ }
25868
+
25869
+ export type HerbalPreservationLongevityExpression = MathOperation<HerbalPreservationLongevityValue>
25870
+
25871
+ export type HerbalPreservationLongevityValue =
25872
+ | {
25873
+ kind: "Constant"
25874
+ Constant: number
25875
+ }
25876
+ | {
25877
+ kind: "Dice"
25878
+ Dice: Dice
25879
+ }
25880
+
25821
25881
  export interface HerbalPreservation {
25822
25882
  /**
25823
25883
  * The types of this preservation.
@@ -25864,44 +25924,6 @@ export interface HerbalPreservationTranslation {
25864
25924
  alternative_effect: string
25865
25925
  }
25866
25926
 
25867
- export interface HerbalPreservationLongevity {
25868
- /**
25869
- * An expression that evaluates to the duration.
25870
- */
25871
- value: HerbalPreservationLongevityExpression
25872
-
25873
- /**
25874
- * The duration unit.
25875
- */
25876
- unit: DurationUnit
25877
-
25878
- /**
25879
- * All translations for the entry, identified by IETF language tag (BCP47).
25880
- */
25881
- translations?: {
25882
- [localeId: string]: HerbalPreservationLongevityTranslation
25883
- }
25884
- }
25885
-
25886
- export interface HerbalPreservationLongevityTranslation {
25887
- /**
25888
- * A replacement string.
25889
- */
25890
- replacement: ResponsiveTextReplace
25891
- }
25892
-
25893
- export type HerbalPreservationLongevityExpression = MathOperation<HerbalPreservationLongevityValue>
25894
-
25895
- export type HerbalPreservationLongevityValue =
25896
- | {
25897
- kind: "Constant"
25898
- Constant: number
25899
- }
25900
- | {
25901
- kind: "Dice"
25902
- Dice: Dice
25903
- }
25904
-
25905
25927
  export interface HomunculusType {
25906
25928
  /**
25907
25929
  * All translations for the entry, identified by IETF language tag (BCP47).
@@ -26355,7 +26377,7 @@ export interface PlantLongevity {
26355
26377
  /**
26356
26378
  * All translations for the entry, identified by IETF language tag (BCP47).
26357
26379
  */
26358
- translations: {
26380
+ translations?: {
26359
26381
  [localeId: string]: PlantLongevityTranslation
26360
26382
  }
26361
26383
  }
@@ -26364,7 +26386,7 @@ export interface PlantLongevityTranslation {
26364
26386
  /**
26365
26387
  * The longevity of the raw plant
26366
26388
  */
26367
- raw: string
26389
+ raw?: string
26368
26390
 
26369
26391
  /**
26370
26392
  * The longevity of the preserved plant
@@ -219,6 +219,9 @@ export declare const FamiliarsTrick: DB.Entity<"FamiliarsTrick", {
219
219
  }>, []>>>, []>>, true>;
220
220
  translations: DB.MemberDecl<DB.NestedEntityMap<"FamiliarsTrickTranslation", {
221
221
  name: DB.MemberDecl<DB.String, true>;
222
+ nameByTradition: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"FamiliarsTrickNameByTradition", DB.NestedEntityMap<string, {
223
+ name: DB.MemberDecl<DB.String, true>;
224
+ }>, []>>, false>;
222
225
  effect: DB.MemberDecl<DB.String, true>;
223
226
  cost: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"OldParameter", DB.Object<{
224
227
  full: DB.MemberDecl<DB.String, true>;
@@ -7,6 +7,7 @@ import { ResponsiveText } from "./_ResponsiveText.js";
7
7
  import { NestedTranslationMap } from "./Locale.js";
8
8
  import { Errata } from "./source/_Erratum.js";
9
9
  import { src } from "./source/_PublicationRef.js";
10
+ import { MagicalTradition } from "./specialAbility/MagicalTradition.js";
10
11
  export const FamiliarsTrick = DB.Entity(import.meta.url, {
11
12
  name: "FamiliarsTrick",
12
13
  namePlural: "FamiliarsTricks",
@@ -43,6 +44,10 @@ If no traditions are given, the familiars trick is not restricted by the magical
43
44
  comment: "The familiar’s trick’s name.",
44
45
  type: DB.String({ minLength: 1 }),
45
46
  }),
47
+ nameByTradition: DB.Optional({
48
+ comment: "For some traditions, the name of the familiar’s trick is different.",
49
+ type: DB.IncludeIdentifier(FamiliarsTrickNameByTradition),
50
+ }),
46
51
  effect: DB.Required({
47
52
  comment: "The effect description.",
48
53
  type: DB.String({ minLength: 1, markdown: "block" }),
@@ -68,6 +73,21 @@ If no traditions are given, the familiars trick is not restricted by the magical
68
73
  },
69
74
  ],
70
75
  });
76
+ const FamiliarsTrickNameByTradition = DB.TypeAlias(import.meta.url, {
77
+ name: "FamiliarsTrickNameByTradition",
78
+ type: () => DB.NestedEntityMap({
79
+ secondaryEntity: MagicalTradition,
80
+ name: "FamiliarsTrickNameForTradition",
81
+ namePlural: "FamiliarsTrickNameForTraditions",
82
+ type: DB.Object({
83
+ name: DB.Required({
84
+ comment: "The familiar’s trick’s name for this tradition.",
85
+ type: DB.String({ minLength: 1 }),
86
+ }),
87
+ }),
88
+ minProperties: 1,
89
+ }),
90
+ });
71
91
  const FamiliarsTrickProperty = DB.Enum(import.meta.url, {
72
92
  name: "FamiliarsTrickProperty",
73
93
  values: () => ({
@@ -9,7 +9,7 @@ export declare const HerbalAid: DB.Entity<"HerbalAid", {
9
9
  Defensive: DB.EnumCase<null>;
10
10
  Supernatural: DB.EnumCase<null>;
11
11
  }, []>>>, true>;
12
- crafting_difficulty: DB.MemberDecl<DB.Integer, true>;
12
+ crafting_difficulty: DB.MemberDecl<DB.Integer, false>;
13
13
  trade_secret: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"RecipeTradeSecret", DB.Object<{
14
14
  ap_value: DB.MemberDecl<DB.Integer, true>;
15
15
  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", {
@@ -82,6 +82,38 @@ export declare const HerbalAid: DB.Entity<"HerbalAid", {
82
82
  Weapon: DB.EnumCase<DB.ReferenceIdentifier>;
83
83
  Armor: DB.EnumCase<DB.ReferenceIdentifier>;
84
84
  }, []>>, false>;
85
+ longevity: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HerbalPreservationLongevity", DB.Object<{
86
+ value: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"HerbalPreservationLongevityExpression", DB.IncludeIdentifier<DB.Param<string, DB.Type>[], import("../../_MathExpression.ts").MathOperation>, []>>, true>;
87
+ unit: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"DurationUnit", {
88
+ Seconds: DB.EnumCase<null>;
89
+ Minutes: DB.EnumCase<null>;
90
+ Hours: DB.EnumCase<null>;
91
+ Days: DB.EnumCase<null>;
92
+ Weeks: DB.EnumCase<null>;
93
+ Months: DB.EnumCase<null>;
94
+ Years: DB.EnumCase<null>;
95
+ Decades: DB.EnumCase<null>;
96
+ Centuries: DB.EnumCase<null>;
97
+ Actions: DB.EnumCase<null>;
98
+ CombatRounds: DB.EnumCase<null>;
99
+ Custom: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"CustomDurationUnit", DB.Object<{
100
+ translations: DB.MemberDecl<DB.NestedEntityMap<"CustomDurationUnitTranslation", {
101
+ name: DB.MemberDecl<DB.String, true>;
102
+ fullNumber: DB.MemberDecl<DB.String, true>;
103
+ full: DB.MemberDecl<DB.String, true>;
104
+ symbol: DB.MemberDecl<DB.String, true>;
105
+ compressedNumber: DB.MemberDecl<DB.String, true>;
106
+ compressed: DB.MemberDecl<DB.String, true>;
107
+ }>, true>;
108
+ }>, []>>>;
109
+ }, []>>, true>;
110
+ translations: DB.MemberDecl<DB.NestedEntityMap<"HerbalPreservationLongevityTranslation", {
111
+ replacement: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"ResponsiveTextReplace", DB.Object<{
112
+ full: DB.MemberDecl<DB.String, true>;
113
+ compressed: DB.MemberDecl<DB.String, true>;
114
+ }>, []>>, true>;
115
+ }>, false>;
116
+ }>, []>>, false>;
85
117
  src: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRefs", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRef", DB.Object<{
86
118
  id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
87
119
  occurrences: DB.MemberDecl<DB.NestedEntityMap<string, {
@@ -125,7 +157,7 @@ export declare const HerbalAid: DB.Entity<"HerbalAid", {
125
157
  }>, []>>>, []>>, true>;
126
158
  translations: DB.MemberDecl<DB.NestedEntityMap<"HerbalAidTranslation", {
127
159
  name: DB.MemberDecl<DB.String, true>;
128
- description: DB.MemberDecl<DB.String, true>;
160
+ description: DB.MemberDecl<DB.String, false>;
129
161
  ingredients: DB.MemberDecl<DB.Array<DB.String>, true>;
130
162
  typical_tools: DB.MemberDecl<DB.Array<DB.String>, false>;
131
163
  }>, true>;
@@ -3,6 +3,7 @@ import { src } from "../../source/_PublicationRef.js";
3
3
  import { NestedTranslationMap } from "../../Locale.js";
4
4
  import { WeaponIdentifier, ArmorIdentifier } from "../../_Identifier.js";
5
5
  import { EffectType, RecipeTradeSecret } from "./_Herbary.js";
6
+ import { HerbalPreservationLongevity } from "./HerbalPreservation.js";
6
7
  export const HerbalAid = DB.Entity(import.meta.url, {
7
8
  name: "HerbalAid",
8
9
  namePlural: "HerbalAids",
@@ -11,7 +12,7 @@ export const HerbalAid = DB.Entity(import.meta.url, {
11
12
  comment: "The plant types this aid belongs to.",
12
13
  type: DB.Array(DB.IncludeIdentifier(EffectType), { minItems: 1, uniqueItems: true }),
13
14
  }),
14
- crafting_difficulty: DB.Required({
15
+ crafting_difficulty: DB.Optional({
15
16
  comment: "The difficulty for this aid to craft.",
16
17
  type: DB.Integer(),
17
18
  }),
@@ -23,13 +24,17 @@ export const HerbalAid = DB.Entity(import.meta.url, {
23
24
  comment: "The armor or weapon this herbal aid represents.",
24
25
  type: DB.IncludeIdentifier(HerbalAidCombatUse),
25
26
  }),
27
+ longevity: DB.Optional({
28
+ comment: "How long this herbal aid lasts.",
29
+ type: DB.IncludeIdentifier(HerbalPreservationLongevity),
30
+ }),
26
31
  src,
27
32
  translations: NestedTranslationMap(DB.Required, "HerbalAid", DB.Object({
28
33
  name: DB.Required({
29
34
  comment: "The herbal aid's name.",
30
35
  type: DB.String({ minLength: 1 }),
31
36
  }),
32
- description: DB.Required({
37
+ description: DB.Optional({
33
38
  comment: "The herbal aid's description.",
34
39
  type: DB.String({ minLength: 1, markdown: "block" }),
35
40
  }),
@@ -157,9 +157,9 @@ export declare const Plant: DB.Entity<"Plant", {
157
157
  longevity: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PlantLongevity", DB.Object<{
158
158
  preservations: DB.MemberDecl<DB.Array<DB.ReferenceIdentifier>, false>;
159
159
  translations: DB.MemberDecl<DB.NestedEntityMap<"PlantLongevityTranslation", {
160
- raw: DB.MemberDecl<DB.String, true>;
160
+ raw: DB.MemberDecl<DB.String, false>;
161
161
  preserved: DB.MemberDecl<DB.String, false>;
162
- }>, true>;
162
+ }>, false>;
163
163
  }>, []>>, false>;
164
164
  src: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRefs", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRef", DB.Object<{
165
165
  id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
@@ -270,8 +270,8 @@ const PlantLongevity = DB.TypeAlias(import.meta.url, {
270
270
  comment: "The preservations with alternative effect of this preserved plant",
271
271
  type: DB.Array(HerbalPreservationIdentifier(), { minItems: 1, uniqueItems: true }),
272
272
  }),
273
- translations: NestedTranslationMap(DB.Required, "PlantLongevity", DB.Object({
274
- raw: DB.Required({
273
+ translations: NestedTranslationMap(DB.Optional, "PlantLongevity", DB.Object({
274
+ raw: DB.Optional({
275
275
  comment: "The longevity of the raw plant",
276
276
  type: DB.String({ minLength: 1, markdown: "block" }),
277
277
  }),
@@ -279,6 +279,6 @@ const PlantLongevity = DB.TypeAlias(import.meta.url, {
279
279
  comment: "The longevity of the preserved plant",
280
280
  type: DB.String({ minLength: 1, markdown: "block" }),
281
281
  }),
282
- })),
283
- }),
282
+ }, { minProperties: 1 })),
283
+ }, { minProperties: 1 }),
284
284
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optolith/database-schema",
3
- "version": "0.69.0",
3
+ "version": "0.70.1",
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",