@optolith/database-schema 0.87.0 → 0.89.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,27 @@
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.89.0](https://github.com/Optolith/database-schema/compare/v0.88.0...v0.89.0) (2026-10-09)
6
+
7
+ ### ⚠ BREAKING CHANGES
8
+
9
+ * blessed tradition groups in cultures
10
+
11
+ ### Features
12
+
13
+ * blessed tradition groups in cultures ([6a1cc80](https://github.com/Optolith/database-schema/commit/6a1cc805a8f32c32e993fcc6a1226a3aa16daa30))
14
+ * name of people in culture ([1b9fbcf](https://github.com/Optolith/database-schema/commit/1b9fbcfbfbf24a46f73ac8c14959d5c57bc9f317))
15
+
16
+ ## [0.88.0](https://github.com/Optolith/database-schema/compare/v0.87.0...v0.88.0) (2026-10-08)
17
+
18
+ ### ⚠ BREAKING CHANGES
19
+
20
+ * separate religious profession group
21
+
22
+ ### Features
23
+
24
+ * separate religious profession group ([5058757](https://github.com/Optolith/database-schema/commit/50587570cb9bf4418b80048c604dac83adf2431f))
25
+
5
26
  ## [0.87.0](https://github.com/Optolith/database-schema/compare/v0.86.0...v0.87.0) (2026-10-07)
6
27
 
7
28
  ### ⚠ BREAKING CHANGES
package/gen/types.d.ts CHANGED
@@ -30,6 +30,7 @@ export type EntityMap = {
30
30
  Beutelzauber: Beutelzauber
31
31
  Biome: Biome
32
32
  BlessedTradition: BlessedTradition
33
+ BlessedTraditionGroup: BlessedTraditionGroup
33
34
  Blessing: Blessing
34
35
  Book: Book
35
36
  BotanicRegion: BotanicRegion
@@ -563,6 +564,7 @@ export type TypeAliasMap = {
563
564
  BindingCostMapOptionValue: BindingCostMapOptionValue
564
565
  BindingCostPerLevel: BindingCostPerLevel
565
566
  BlessedTraditionConstraint: BlessedTraditionConstraint
567
+ BlessedTraditionGroupConstraint: BlessedTraditionGroupConstraint
566
568
  BlessedTraditionPrerequisite: BlessedTraditionPrerequisite
567
569
  BlessedTraditionsSelectOptionCategory: BlessedTraditionsSelectOptionCategory
568
570
  BlessingPerformanceParameters: BlessingPerformanceParameters
@@ -883,6 +885,7 @@ export type TypeAliasMap = {
883
885
  ReferenceListNode: ReferenceListNode
884
886
  ReferenceListNodeImprovementCostSource: ReferenceListNodeImprovementCostSource
885
887
  ReferenceNode: ReferenceNode
888
+ ReligiousProfessionGroup: ReligiousProfessionGroup
886
889
  ReloadTime: ReloadTime
887
890
  ReplacementDisplayOption: ReplacementDisplayOption
888
891
  RequiredMinimumSkillsToBeOnSkillRating: RequiredMinimumSkillsToBeOnSkillRating
@@ -7854,6 +7857,11 @@ export interface LiturgyTraditionWithAspects {
7854
7857
  }
7855
7858
 
7856
7859
  export interface BlessedTradition {
7860
+ /**
7861
+ * The group of traditions this tradition belongs to.
7862
+ */
7863
+ group: BlessedTraditionGroup_ID
7864
+
7857
7865
  /**
7858
7866
  * Definitions for possible options for the activatable entry, derived from entry categories.
7859
7867
  *
@@ -7972,6 +7980,32 @@ export interface BlessedTraditionTranslation {
7972
7980
  errata?: Errata
7973
7981
  }
7974
7982
 
7983
+ export interface BlessedTraditionGroup {
7984
+ /**
7985
+ * All translations for the entry, identified by IETF language tag (BCP47).
7986
+ */
7987
+ translations: {
7988
+ [localeId: string]: BlessedTraditionGroupTranslation
7989
+ }
7990
+ }
7991
+
7992
+ /**
7993
+ * The entity’s identifier. A UUID or a locale code if it is registered as the locale entity.
7994
+ */
7995
+ export type BlessedTraditionGroup_ID = string
7996
+
7997
+ export interface BlessedTraditionGroupTranslation {
7998
+ /**
7999
+ * The name of the group.
8000
+ */
8001
+ name: string
8002
+
8003
+ /**
8004
+ * The text to use when all Blessed Ones of this group are recommended for a culture.
8005
+ */
8006
+ nameInCulture: string
8007
+ }
8008
+
7975
8009
  export interface Blessing {
7976
8010
  /**
7977
8011
  * Measurable parameters of a blessing.
@@ -8912,6 +8946,10 @@ export type ProfessionGroup =
8912
8946
  | {
8913
8947
  kind: "Blessed"
8914
8948
  }
8949
+ | {
8950
+ kind: "Religious"
8951
+ Religious: ReligiousProfessionGroup
8952
+ }
8915
8953
 
8916
8954
  export type MundaneProfessionGroup =
8917
8955
  | {
@@ -8920,9 +8958,6 @@ export type MundaneProfessionGroup =
8920
8958
  | {
8921
8959
  kind: "Fighter"
8922
8960
  }
8923
- | {
8924
- kind: "Religious"
8925
- }
8926
8961
 
8927
8962
  export interface MagicalProfessionGroup {
8928
8963
  /**
@@ -9518,6 +9553,13 @@ export interface SpellworkAdjustmentWithBase {
9518
9553
  tradition?: MagicalTradition_ID
9519
9554
  }
9520
9555
 
9556
+ export interface ReligiousProfessionGroup {
9557
+ /**
9558
+ * The associated blessed tradition (religion).
9559
+ */
9560
+ associatedTradition?: BlessedTradition_ID
9561
+ }
9562
+
9521
9563
  export interface ProfessionVersion {
9522
9564
  /**
9523
9565
  * The associated profession.
@@ -9856,6 +9898,11 @@ export interface CultureTranslation {
9856
9898
  */
9857
9899
  nameInPrerequisites?: string
9858
9900
 
9901
+ /**
9902
+ * The name for people of this culture, if different from the normal culture’s name.
9903
+ */
9904
+ nameOfPeople?: string
9905
+
9859
9906
  /**
9860
9907
  * The description of the area knowledge.
9861
9908
  */
@@ -10067,10 +10114,6 @@ export type MundaneCommonProfessionConstraint =
10067
10114
  kind: "Profession"
10068
10115
  Profession: ProfessionConstraint
10069
10116
  }
10070
- | {
10071
- kind: "Group"
10072
- Group: MundaneProfessionGroup
10073
- }
10074
10117
 
10075
10118
  export interface ProfessionConstraint {
10076
10119
  /**
@@ -10114,6 +10157,9 @@ export type CommonnessWeight =
10114
10157
  | {
10115
10158
  kind: "Only"
10116
10159
  }
10160
+ | {
10161
+ kind: "ExceptFor"
10162
+ }
10117
10163
 
10118
10164
  export interface ProfessionVariant {
10119
10165
  /**
@@ -21232,6 +21278,13 @@ export type BlessedCommonProfessionConstraint =
21232
21278
  kind: "Profession"
21233
21279
  Profession: ProfessionConstraint
21234
21280
  }
21281
+ | {
21282
+ kind: "Group"
21283
+ Group: BlessedTraditionGroupConstraint
21284
+ }
21285
+ | {
21286
+ kind: "Religious"
21287
+ }
21235
21288
 
21236
21289
  export interface BlessedTraditionConstraint {
21237
21290
  /**
@@ -21250,6 +21303,23 @@ export interface BlessedTraditionConstraint {
21250
21303
  rarity?: Rarity
21251
21304
  }
21252
21305
 
21306
+ export interface BlessedTraditionGroupConstraint {
21307
+ /**
21308
+ * The blessed tradition group’s identifier.
21309
+ */
21310
+ id: BlessedTraditionGroup_ID
21311
+
21312
+ /**
21313
+ * Some traditions are more common than others. There may be cultures where some traditions are not represented at all.
21314
+ */
21315
+ weighted_professions?: Weighted<BlessedTradition_ID>
21316
+
21317
+ /**
21318
+ * Some traditions may be found in a culture, but are not that common.
21319
+ */
21320
+ rarity?: Rarity
21321
+ }
21322
+
21253
21323
  /**
21254
21324
  * Reference to a commonness-rated advantage or disadvantage. Commonness-rating terms used in the source books are strongly recommended, common, uncommon, suggested and unsuitable.
21255
21325
  */
package/lib/main.js CHANGED
@@ -29,6 +29,7 @@ export const schema = new Schema([
29
29
  Types.Beutelzauber,
30
30
  Types.Biome,
31
31
  Types.BlessedTradition,
32
+ Types.BlessedTraditionGroup,
32
33
  Types.Blessing,
33
34
  Types.Book,
34
35
  Types.BotanicRegion,
@@ -243,6 +243,7 @@ export declare const Culture: DB.Entity<"Culture", {
243
243
  translations: DB.MemberDecl<DB.NestedEntityMap<"CultureTranslation", {
244
244
  name: DB.MemberDecl<DB.String, true>;
245
245
  nameInPrerequisites: DB.MemberDecl<DB.String, false>;
246
+ nameOfPeople: DB.MemberDecl<DB.String, false>;
246
247
  area_knowledge: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"AreaKnowledgeTranslation", DB.Object<{
247
248
  description: DB.MemberDecl<DB.String, true>;
248
249
  abbreviated: DB.MemberDecl<DB.String, true>;
@@ -1,9 +1,8 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
2
  import { CommonnessRatedAdvantageDisadvantage } from "./_CommonnessRatedAdvantageDisadvantage.js";
3
- import { AdvantageIdentifier, BlessedTraditionIdentifier, DisadvantageIdentifier, LanguageIdentifier, LanguageSpecializationIdentifier, MagicalTraditionIdentifier, ProfessionIdentifier, ProfessionVariantIdentifier, ScriptIdentifier, SkillIdentifier, SocialStatusIdentifier, } from "./_Identifier.js";
3
+ import { AdvantageIdentifier, BlessedTraditionGroupIdentifier, BlessedTraditionIdentifier, DisadvantageIdentifier, LanguageIdentifier, LanguageSpecializationIdentifier, MagicalTraditionIdentifier, ProfessionIdentifier, ProfessionVariantIdentifier, ScriptIdentifier, SkillIdentifier, SocialStatusIdentifier, } from "./_Identifier.js";
4
4
  import { BinarySex } from "./_Sex.js";
5
5
  import { NestedTranslationMap } from "./Locale.js";
6
- import { MundaneProfessionGroup } from "./Profession.js";
7
6
  import { Errata } from "./source/_Erratum.js";
8
7
  import { src } from "./source/_PublicationRef.js";
9
8
  export const Culture = DB.Entity(import.meta.url, {
@@ -68,6 +67,10 @@ export const Culture = DB.Entity(import.meta.url, {
68
67
  comment: "The culture’s name in prerequisites, if different from the normal culture’s name.",
69
68
  type: DB.String({ minLength: 1 }),
70
69
  }),
70
+ nameOfPeople: DB.Optional({
71
+ comment: "The name for people of this culture, if different from the normal culture’s name.",
72
+ type: DB.String({ minLength: 1 }),
73
+ }),
71
74
  area_knowledge: DB.Required({
72
75
  comment: "The description of the area knowledge.",
73
76
  type: DB.IncludeIdentifier(AreaKnowledgeTranslation),
@@ -145,6 +148,7 @@ const CommonnessWeight = DB.Enum(import.meta.url, {
145
148
  values: () => ({
146
149
  Mostly: DB.EnumCase({ type: null }),
147
150
  Only: DB.EnumCase({ type: null }),
151
+ ExceptFor: DB.EnumCase({ type: null }),
148
152
  }),
149
153
  });
150
154
  const Weighted = DB.GenTypeAlias(import.meta.url, {
@@ -244,11 +248,27 @@ const BlessedTraditionConstraint = DB.TypeAlias(import.meta.url, {
244
248
  }),
245
249
  }),
246
250
  });
251
+ const BlessedTraditionGroupConstraint = DB.TypeAlias(import.meta.url, {
252
+ name: "BlessedTraditionGroupConstraint",
253
+ type: () => DB.Object({
254
+ id: DB.Required({
255
+ comment: "The blessed tradition group’s identifier.",
256
+ type: BlessedTraditionGroupIdentifier(),
257
+ }),
258
+ weighted_professions: DB.Optional({
259
+ comment: "Some traditions are more common than others. There may be cultures where some traditions are not represented at all.",
260
+ type: DB.GenIncludeIdentifier(Weighted, [BlessedTraditionIdentifier()]),
261
+ }),
262
+ rarity: DB.Optional({
263
+ comment: "Some traditions may be found in a culture, but are not that common.",
264
+ type: DB.IncludeIdentifier(Rarity),
265
+ }),
266
+ }),
267
+ });
247
268
  const MundaneCommonProfessionConstraint = DB.Enum(import.meta.url, {
248
269
  name: "MundaneCommonProfessionConstraint",
249
270
  values: () => ({
250
271
  Profession: DB.EnumCase({ type: DB.IncludeIdentifier(ProfessionConstraint) }),
251
- Group: DB.EnumCase({ type: DB.IncludeIdentifier(MundaneProfessionGroup) }),
252
272
  }),
253
273
  });
254
274
  const MagicCommonProfessionConstraint = DB.Enum(import.meta.url, {
@@ -264,6 +284,8 @@ const BlessedCommonProfessionConstraint = DB.Enum(import.meta.url, {
264
284
  values: () => ({
265
285
  Tradition: DB.EnumCase({ type: DB.IncludeIdentifier(BlessedTraditionConstraint) }),
266
286
  Profession: DB.EnumCase({ type: DB.IncludeIdentifier(ProfessionConstraint) }),
287
+ Group: DB.EnumCase({ type: DB.IncludeIdentifier(BlessedTraditionGroupConstraint) }),
288
+ Religious: DB.EnumCase({ type: null }),
267
289
  }),
268
290
  });
269
291
  const PlainCommonProfessions = DB.TypeAlias(import.meta.url, {
@@ -4,13 +4,15 @@ export declare const Profession: DB.Entity<"Profession", {
4
4
  Mundane: DB.EnumCase<DB.IncludeIdentifier<[], DB.Enum<"MundaneProfessionGroup", {
5
5
  Profane: DB.EnumCase<null>;
6
6
  Fighter: DB.EnumCase<null>;
7
- Religious: DB.EnumCase<null>;
8
7
  }, []>>>;
9
8
  Magical: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"MagicalProfessionGroup", DB.Object<{
10
9
  curriculum: DB.MemberDecl<DB.ReferenceIdentifier, false>;
11
10
  subgroup: DB.MemberDecl<DB.ReferenceIdentifier, false>;
12
11
  }>, []>>>;
13
12
  Blessed: DB.EnumCase<null>;
13
+ Religious: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ReligiousProfessionGroup", DB.Object<{
14
+ associatedTradition: DB.MemberDecl<DB.ReferenceIdentifier, false>;
15
+ }>, []>>>;
14
16
  }, []>>, true>;
15
17
  versions: DB.MemberDecl<DB.ChildEntities<DB.Entity<"ProfessionVersion", {
16
18
  profession: DB.MemberDecl<DB.ReferenceIdentifier, true>;
@@ -878,7 +880,6 @@ export declare const Profession: DB.Entity<"Profession", {
878
880
  export declare const MundaneProfessionGroup: DB.Enum<"MundaneProfessionGroup", {
879
881
  Profane: DB.EnumCase<null>;
880
882
  Fighter: DB.EnumCase<null>;
881
- Religious: DB.EnumCase<null>;
882
883
  }, []>;
883
884
  export declare const ProfessionVersion: DB.Entity<"ProfessionVersion", {
884
885
  profession: DB.MemberDecl<DB.ReferenceIdentifier, true>;
@@ -2,7 +2,7 @@ import { isNotNullish } from "@elyukai/utils/nullable";
2
2
  import * as DB from "tsondb/schema/dsl";
3
3
  import { verifyOptionsForActivatableEntry } from "./_ActivatableSelectOptions.js";
4
4
  import { CommonnessRatedAdvantageDisadvantage } from "./_CommonnessRatedAdvantageDisadvantage.js";
5
- import { AdvantageIdentifier, BannzeichenOptionIdentifier, CantripIdentifier, CurriculumIdentifier, DisadvantageIdentifier, ExperienceLevelIdentifier, MagicalTraditionIdentifier, ProfessionIdentifier, ProfessionPackageIdentifier, ProfessionVersionIdentifier, SkillGroupIdentifier, SkillIdentifier, } from "./_Identifier.js";
5
+ import { AdvantageIdentifier, BannzeichenOptionIdentifier, BlessedTraditionIdentifier, CantripIdentifier, CurriculumIdentifier, DisadvantageIdentifier, ExperienceLevelIdentifier, MagicalTraditionIdentifier, ProfessionIdentifier, ProfessionPackageIdentifier, ProfessionVersionIdentifier, SkillGroupIdentifier, SkillIdentifier, } from "./_Identifier.js";
6
6
  import { CombatTechniqueIdentifier, LiturgyIdentifier, MagicalActionIdentifier, ProfessionSpecialAbilityIdentifier, RequirableSelectOptionIdentifier, SpecialAbilityIdentifier, SpellworkIdentifier, } from "./_IdentifierGroup.js";
7
7
  import { ProfessionPrerequisites, ProfessionVariantPrerequisites } from "./_Prerequisite.js";
8
8
  import { NestedTranslationMap } from "./Locale.js";
@@ -47,6 +47,7 @@ const ProfessionGroup = DB.Enum(import.meta.url, {
47
47
  Mundane: DB.EnumCase({ type: DB.IncludeIdentifier(MundaneProfessionGroup) }),
48
48
  Magical: DB.EnumCase({ type: DB.IncludeIdentifier(MagicalProfessionGroup) }),
49
49
  Blessed: DB.EnumCase({ type: null }),
50
+ Religious: DB.EnumCase({ type: DB.IncludeIdentifier(ReligiousProfessionGroup) }),
50
51
  }),
51
52
  });
52
53
  export const MundaneProfessionGroup = DB.Enum(import.meta.url, {
@@ -54,7 +55,6 @@ export const MundaneProfessionGroup = DB.Enum(import.meta.url, {
54
55
  values: () => ({
55
56
  Profane: DB.EnumCase({ type: null }),
56
57
  Fighter: DB.EnumCase({ type: null }),
57
- Religious: DB.EnumCase({ type: null }),
58
58
  }),
59
59
  });
60
60
  const MagicalProfessionGroup = DB.TypeAlias(import.meta.url, {
@@ -70,6 +70,15 @@ const MagicalProfessionGroup = DB.TypeAlias(import.meta.url, {
70
70
  }),
71
71
  }),
72
72
  });
73
+ const ReligiousProfessionGroup = DB.TypeAlias(import.meta.url, {
74
+ name: "ReligiousProfessionGroup",
75
+ type: () => DB.Object({
76
+ associatedTradition: DB.Optional({
77
+ comment: "The associated blessed tradition (religion).",
78
+ type: BlessedTraditionIdentifier(),
79
+ }),
80
+ }),
81
+ });
73
82
  export const ProfessionVersion = DB.Entity(import.meta.url, {
74
83
  name: "ProfessionVersion",
75
84
  namePlural: "ProfessionVersions",
@@ -27,6 +27,7 @@ export declare const BannzeichenOptionIdentifier: () => R;
27
27
  export declare const BeutelzauberIdentifier: () => R;
28
28
  export declare const BiomeIdentifier: () => R;
29
29
  export declare const BlessedTraditionIdentifier: () => R;
30
+ export declare const BlessedTraditionGroupIdentifier: () => R;
30
31
  export declare const BlessingIdentifier: () => R;
31
32
  export declare const BookIdentifier: () => R;
32
33
  export declare const BowlEnchantmentIdentifier: () => R;
@@ -128,6 +128,7 @@ import { Sermon } from "./specialAbility/Sermon.js";
128
128
  import { SexSpecialAbility } from "./specialAbility/SexSpecialAbility.js";
129
129
  import { SikaryanDrainSpecialAbility } from "./specialAbility/SikaryanDrainSpecialAbility.js";
130
130
  import { SkillStyleSpecialAbility } from "./specialAbility/SkillStyleSpecialAbility.js";
131
+ import { BlessedTraditionGroup } from "./specialAbility/sub/BlessedTraditionGroup.js";
131
132
  import { CeremonialItemSpecialAbilityGroup } from "./specialAbility/sub/CeremonialItemSpecialAbilityGroup.js";
132
133
  import { Language, LanguageSpecialization } from "./specialAbility/sub/Language.js";
133
134
  import { MagicalTraditionSubgroup } from "./specialAbility/sub/MagicalTraditionSubgroup.js";
@@ -194,6 +195,7 @@ export const BannzeichenOptionIdentifier = () => R(BannzeichenOption);
194
195
  export const BeutelzauberIdentifier = () => R(Beutelzauber);
195
196
  export const BiomeIdentifier = () => R(Biome);
196
197
  export const BlessedTraditionIdentifier = () => R(BlessedTradition);
198
+ export const BlessedTraditionGroupIdentifier = () => R(BlessedTraditionGroup);
197
199
  export const BlessingIdentifier = () => R(Blessing);
198
200
  export const BookIdentifier = () => R(Book);
199
201
  export const BowlEnchantmentIdentifier = () => R(BowlEnchantment);
@@ -132,6 +132,7 @@ export { Sermon } from "./specialAbility/Sermon.js";
132
132
  export { SexSpecialAbility } from "./specialAbility/SexSpecialAbility.js";
133
133
  export { SikaryanDrainSpecialAbility } from "./specialAbility/SikaryanDrainSpecialAbility.js";
134
134
  export { SkillStyleSpecialAbility } from "./specialAbility/SkillStyleSpecialAbility.js";
135
+ export { BlessedTraditionGroup } from "./specialAbility/sub/BlessedTraditionGroup.ts";
135
136
  export { CeremonialItemSpecialAbilityGroup } from "./specialAbility/sub/CeremonialItemSpecialAbilityGroup.js";
136
137
  export { Language } from "./specialAbility/sub/Language.js";
137
138
  export { MagicalTraditionSubgroup } from "./specialAbility/sub/MagicalTraditionSubgroup.ts";
@@ -132,6 +132,7 @@ export { Sermon } from "./specialAbility/Sermon.js";
132
132
  export { SexSpecialAbility } from "./specialAbility/SexSpecialAbility.js";
133
133
  export { SikaryanDrainSpecialAbility } from "./specialAbility/SikaryanDrainSpecialAbility.js";
134
134
  export { SkillStyleSpecialAbility } from "./specialAbility/SkillStyleSpecialAbility.js";
135
+ export { BlessedTraditionGroup } from "./specialAbility/sub/BlessedTraditionGroup.js";
135
136
  export { CeremonialItemSpecialAbilityGroup } from "./specialAbility/sub/CeremonialItemSpecialAbilityGroup.js";
136
137
  export { Language } from "./specialAbility/sub/Language.js";
137
138
  export { MagicalTraditionSubgroup } from "./specialAbility/sub/MagicalTraditionSubgroup.js";
@@ -1,5 +1,6 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
2
  export declare const BlessedTradition: DB.Entity<"BlessedTradition", {
3
+ group: DB.MemberDecl<DB.ReferenceIdentifier, true>;
3
4
  select_options: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"SelectOptions", DB.Object<{
4
5
  derived: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"SelectOptionCategory", {
5
6
  Blessings: DB.EnumCase<null>;
@@ -4,7 +4,7 @@ import { ap_value, ap_value_append, ap_value_l10n } from "../_ActivatableAdventu
4
4
  import { activatableDisplayNameCustomizer } from "../_ActivatableNames.js";
5
5
  import { explicit_select_options, select_options, verifySelectOptionRules, } from "../_ActivatableSelectOptions.js";
6
6
  import { skill_applications, skill_uses } from "../_ActivatableSkillApplicationsAndUses.js";
7
- import { AspectIdentifier, AttributeIdentifier, BlessingIdentifier, GeneralIdentifier, SkillIdentifier, } from "../_Identifier.js";
7
+ import { AspectIdentifier, AttributeIdentifier, BlessedTraditionGroupIdentifier, BlessingIdentifier, GeneralIdentifier, SkillIdentifier, } from "../_Identifier.js";
8
8
  import { CombatTechniqueIdentifier } from "../_IdentifierGroup.js";
9
9
  import { GeneralPrerequisites } from "../_Prerequisite.js";
10
10
  import { NestedTranslationMap } from "../Locale.js";
@@ -15,6 +15,10 @@ export const BlessedTradition = DB.Entity(import.meta.url, {
15
15
  name: "BlessedTradition",
16
16
  namePlural: "BlessedTraditions",
17
17
  type: () => DB.Object({
18
+ group: DB.Required({
19
+ comment: "The group of traditions this tradition belongs to.",
20
+ type: BlessedTraditionGroupIdentifier(),
21
+ }),
18
22
  select_options,
19
23
  explicit_select_options,
20
24
  skill_applications,
@@ -0,0 +1,7 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ export declare const BlessedTraditionGroup: DB.Entity<"BlessedTraditionGroup", {
3
+ translations: DB.MemberDecl<DB.NestedEntityMap<"BlessedTraditionGroupTranslation", {
4
+ name: DB.MemberDecl<DB.String, true>;
5
+ nameInCulture: DB.MemberDecl<DB.String, true>;
6
+ }>, true>;
7
+ }, undefined>;
@@ -0,0 +1,25 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ import { NestedTranslationMap } from "../../Locale.js";
3
+ export const BlessedTraditionGroup = DB.Entity(import.meta.url, {
4
+ name: "BlessedTraditionGroup",
5
+ namePlural: "BlessedTraditionGroup",
6
+ type: () => DB.Object({
7
+ translations: NestedTranslationMap(DB.Required, "BlessedTraditionGroup", DB.Object({
8
+ name: DB.Required({
9
+ comment: "The name of the group.",
10
+ type: DB.String({ minLength: 1 }),
11
+ }),
12
+ nameInCulture: DB.Required({
13
+ comment: "The text to use when all Blessed Ones of this group are recommended for a culture.",
14
+ type: DB.String({ minLength: 1 }),
15
+ }),
16
+ })),
17
+ }),
18
+ instanceDisplayName: {},
19
+ uniqueConstraints: [
20
+ {
21
+ entityMapKeyPath: "translations",
22
+ keyPathInEntityMap: "name",
23
+ },
24
+ ],
25
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optolith/database-schema",
3
- "version": "0.87.0",
3
+ "version": "0.89.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",