@optolith/database-schema 0.89.0 → 0.91.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 (60) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/gen/types.d.ts +435 -345
  3. package/lib/cache/activatableSelectOptions.js +21 -19
  4. package/lib/cache/ancestorBloodAdvantages.js +4 -1
  5. package/lib/cache/magicalAndBlessedAdvantagesAndDisadvantages.js +21 -22
  6. package/lib/cache/newApplicationsAndUses.js +4 -1
  7. package/lib/cache/tradeSecrets.js +1 -1
  8. package/lib/test.js +1 -0
  9. package/lib/types/AnimalDisease.js +1 -1
  10. package/lib/types/Attribute.js +1 -1
  11. package/lib/types/Culture.d.ts +8 -4
  12. package/lib/types/DerivedCharacteristic.js +3 -1
  13. package/lib/types/Disease.js +1 -1
  14. package/lib/types/Lessons.js +1 -1
  15. package/lib/types/Locale.js +1 -0
  16. package/lib/types/PatronCategory.js +1 -1
  17. package/lib/types/PersonalityTrait.js +1 -1
  18. package/lib/types/Profession.d.ts +16 -8
  19. package/lib/types/Race.d.ts +16 -8
  20. package/lib/types/TargetCategory.js +1 -1
  21. package/lib/types/_ActivatableNonMundane.js +1 -1
  22. package/lib/types/_ActivatableSelectOptionCategory.js +1 -1
  23. package/lib/types/_ActivatableSelectOptions.js +1 -1
  24. package/lib/types/_ActivatableSkill.d.ts +1 -1
  25. package/lib/types/_ActivatableSkill.js +1 -1
  26. package/lib/types/_ActivatableSkillApplicationsAndUses.js +1 -1
  27. package/lib/types/_ActivatableSkillCastingTime.js +2 -2
  28. package/lib/types/_ActivatableSkillDuration.js +2 -2
  29. package/lib/types/_ActivatableSkillTargetCategory.js +1 -1
  30. package/lib/types/_ArcaneTradition.js +1 -1
  31. package/lib/types/_CommonnessRatedAdvantageDisadvantage.d.ts +2 -1
  32. package/lib/types/_CommonnessRatedAdvantageDisadvantage.js +2 -2
  33. package/lib/types/_DiseasePoison.js +1 -1
  34. package/lib/types/_Enhancements.d.ts +1 -1
  35. package/lib/types/_Enhancements.js +1 -1
  36. package/lib/types/_IdentifierGroup.d.ts +23 -0
  37. package/lib/types/_IdentifierGroup.js +9 -1
  38. package/lib/types/_Prerequisite.d.ts +1 -1
  39. package/lib/types/_Prerequisite.js +1 -1
  40. package/lib/types/_ResponsiveText.js +2 -2
  41. package/lib/types/equipment/item/Elixir.d.ts +1 -1
  42. package/lib/types/equipment/item/Elixir.js +2 -2
  43. package/lib/types/equipment/item/HerbalAid.js +2 -2
  44. package/lib/types/equipment/item/HerbalPreservation.js +3 -3
  45. package/lib/types/equipment/item/Plant.js +2 -2
  46. package/lib/types/equipment/item/Poison.js +1 -1
  47. package/lib/types/equipment/item/_Item.js +1 -1
  48. package/lib/types/equipment/item/sub/BotanicRegion.js +1 -1
  49. package/lib/types/equipment/item/sub/SubBiome.js +1 -1
  50. package/lib/types/magicalActions/AnimistPower_Tribe.js +1 -1
  51. package/lib/types/magicalActions/MagicalDance.d.ts +2 -2
  52. package/lib/types/magicalActions/MagicalMelody.d.ts +2 -2
  53. package/lib/types/magicalActions/_MusicTradition.d.ts +2 -2
  54. package/lib/types/magicalActions/_MusicTradition.js +2 -2
  55. package/lib/types/prerequisites/PrerequisiteGroups.js +7 -9
  56. package/lib/types/prerequisites/single/AnySpecialAbilityOfGroupPrerequisite.js +4 -6
  57. package/lib/types/source/Publication.js +1 -1
  58. package/lib/types/specialAbility/sub/MagicalTraditionSubgroup.js +1 -1
  59. package/lib/types/traditionArtifacts/_shared.js +1 -1
  60. package/package.json +10 -12
@@ -8,7 +8,8 @@ export declare const CommonnessRatedAdvantageDisadvantage: DB.TypeAlias<"Commonn
8
8
  max: DB.MemberDecl<DB.Integer, true>;
9
9
  }>>;
10
10
  }, []>>, false>;
11
- options: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"RequirableSelectOptionIdentifier", {
11
+ options: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"CommonnessSelectOptionIdentifier", {
12
+ SkillGroup: DB.EnumCase<DB.ReferenceIdentifier>;
12
13
  General: DB.EnumCase<DB.ReferenceIdentifier>;
13
14
  Race: DB.EnumCase<DB.ReferenceIdentifier>;
14
15
  Skill: DB.EnumCase<DB.ReferenceIdentifier>;
@@ -1,6 +1,6 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
+ import { CommonnessSelectOptionIdentifier } from "./_IdentifierGroup.js";
2
3
  import { NestedTranslationMap } from "./Locale.js";
3
- import { RequirableSelectOptionIdentifier } from "./_IdentifierGroup.js";
4
4
  export const CommonnessRatedAdvantageDisadvantage = DB.GenTypeAlias(import.meta.url, {
5
5
  name: "CommonnessRatedAdvantageDisadvantage",
6
6
  comment: "Reference to a commonness-rated advantage or disadvantage. Commonness-rating terms used in the source books are strongly recommended, common, uncommon, suggested and unsuitable.",
@@ -16,7 +16,7 @@ export const CommonnessRatedAdvantageDisadvantage = DB.GenTypeAlias(import.meta.
16
16
  }),
17
17
  options: DB.Optional({
18
18
  comment: "The options the commonness rating applies to.",
19
- type: DB.Array(DB.IncludeIdentifier(RequirableSelectOptionIdentifier), { minItems: 1 }),
19
+ type: DB.Array(DB.IncludeIdentifier(CommonnessSelectOptionIdentifier), { minItems: 1 }),
20
20
  }),
21
21
  translations: NestedTranslationMap(DB.Optional, "CommonnessRatedAdvantageDisadvantage", DB.Object({
22
22
  options: DB.Optional({
@@ -3,9 +3,9 @@
3
3
  */
4
4
  import { isNotNullish, nullableToArray } from "@elyukai/utils/nullable";
5
5
  import * as DB from "tsondb/schema/dsl";
6
- import { NestedTranslationMap } from "./Locale.js";
7
6
  import { AlternativeName } from "./_AlternativeNames.js";
8
7
  import { DerivedCharacteristicIdentifier } from "./_Identifier.js";
8
+ import { NestedTranslationMap } from "./Locale.js";
9
9
  import { Errata } from "./source/_Erratum.js";
10
10
  export const level = DB.Required({
11
11
  comment: "The disease’s level.",
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @title Enhancements
2
+ * @module Enhancements
3
3
  */
4
4
  import * as DB from "tsondb/schema/dsl";
5
5
  export declare const Enhancements: DB.TypeAlias<"Enhancements", DB.ChildEntities<DB.Entity<"Enhancement", {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @title Enhancements
2
+ * @module Enhancements
3
3
  */
4
4
  import * as DB from "tsondb/schema/dsl";
5
5
  import { input } from "./_Activatable.js";
@@ -402,6 +402,29 @@ export declare const RequirableSelectOptionIdentifier: DB.Enum<"RequirableSelect
402
402
  ArcaneDancerTradition: DB.EnumCase<DB.ReferenceIdentifier>;
403
403
  Element: DB.EnumCase<DB.ReferenceIdentifier>;
404
404
  }, []>;
405
+ export declare const CommonnessSelectOptionIdentifier: DB.Enum<"CommonnessSelectOptionIdentifier", {
406
+ SkillGroup: DB.EnumCase<DB.ReferenceIdentifier>;
407
+ General: DB.EnumCase<DB.ReferenceIdentifier>;
408
+ Race: DB.EnumCase<DB.ReferenceIdentifier>;
409
+ Skill: DB.EnumCase<DB.ReferenceIdentifier>;
410
+ SkillApplication: DB.EnumCase<DB.ReferenceIdentifier>;
411
+ CloseCombatTechnique: DB.EnumCase<DB.ReferenceIdentifier>;
412
+ RangedCombatTechnique: DB.EnumCase<DB.ReferenceIdentifier>;
413
+ Property: DB.EnumCase<DB.ReferenceIdentifier>;
414
+ Aspect: DB.EnumCase<DB.ReferenceIdentifier>;
415
+ Disease: DB.EnumCase<DB.ReferenceIdentifier>;
416
+ Poison: DB.EnumCase<DB.ReferenceIdentifier>;
417
+ Language: DB.EnumCase<DB.ReferenceIdentifier>;
418
+ AnimalShape: DB.EnumCase<DB.ReferenceIdentifier>;
419
+ LiturgicalChant: DB.EnumCase<DB.ReferenceIdentifier>;
420
+ Ceremony: DB.EnumCase<DB.ReferenceIdentifier>;
421
+ Spell: DB.EnumCase<DB.ReferenceIdentifier>;
422
+ Ritual: DB.EnumCase<DB.ReferenceIdentifier>;
423
+ TradeSecret: DB.EnumCase<DB.ReferenceIdentifier>;
424
+ ArcaneBardTradition: DB.EnumCase<DB.ReferenceIdentifier>;
425
+ ArcaneDancerTradition: DB.EnumCase<DB.ReferenceIdentifier>;
426
+ Element: DB.EnumCase<DB.ReferenceIdentifier>;
427
+ }, []>;
405
428
  export declare const CoreRuleDerivableContentIdentifier: DB.Enum<"CoreRuleDerivableContentIdentifier", {
406
429
  MagicalTradition: DB.EnumCase<DB.ReferenceIdentifier>;
407
430
  FamiliarSpecialAbility: DB.EnumCase<DB.ReferenceIdentifier>;
@@ -1,6 +1,6 @@
1
1
  import { sortObjectKeys } from "@elyukai/utils/object";
2
2
  import * as DB from "tsondb/schema/dsl";
3
- import { AdvancedCombatSpecialAbilityIdentifier, AdvancedKarmaSpecialAbilityIdentifier, AdvancedMagicalSpecialAbilityIdentifier, AdvancedSkillSpecialAbilityIdentifier, AdvantageIdentifier, AmmunitionIdentifier, AncestorGlyphIdentifier, AnimalCareIdentifier, AnimalIdentifier, AnimalShapeIdentifier, AnimalShapeSizeIdentifier, AnimistPowerIdentifier, ArcaneBardTraditionIdentifier, ArcaneDancerTraditionIdentifier, ArcaneOrbEnchantmentIdentifier, ArmorIdentifier, AspectIdentifier, AttireEnchantmentIdentifier, AttributeIdentifier, BandageOrRemedyIdentifier, BannzeichenIdentifier, BeutelzauberIdentifier, BlessedTraditionIdentifier, BlessingIdentifier, BookIdentifier, BowlEnchantmentIdentifier, BrawlingSpecialAbilityIdentifier, CantripIdentifier, CauldronEnchantmentIdentifier, CeremonialItemIdentifier, CeremonialItemSpecialAbilityIdentifier, CeremonyIdentifier, ChronicleEnchantmentIdentifier, CloseCombatTechniqueIdentifier, ClothesIdentifier, ClothingPackageIdentifier, CombatSpecialAbilityIdentifier, CombatStyleSpecialAbilityIdentifier, CommandSpecialAbilityIdentifier, ContainerIdentifier, CultureIdentifier, CurseIdentifier, DaggerRitualIdentifier, DisadvantageIdentifier, DiseaseIdentifier, DominationRitualIdentifier, ElementIdentifier, ElixirIdentifier, ElvenMagicalSongIdentifier, EnhancementIdentifier, EquipmentOfBlessedOnesIdentifier, FamiliarSpecialAbilityIdentifier, FatePointSexSpecialAbilityIdentifier, FatePointSpecialAbilityIdentifier, FocusRuleIdentifier, FoolsHatEnchantmentIdentifier, GemOrPreciousStoneIdentifier, GeneralIdentifier, GeneralSpecialAbilityIdentifier, GeodeRitualIdentifier, GoblinRitualIdentifier, HaubenzauberIdentifier, HauerkettenzauberIdentifier, IlluminationLightSourceIdentifier, IlluminationRefillOrSupplyIdentifier, InstrumentEnchantmentIdentifier, JesterTrickIdentifier, JewelryIdentifier, KarmaSpecialAbilityIdentifier, KeulenzauberIdentifier, KrallenkettenzauberIdentifier, KristallkugelzauberIdentifier, LaboratoryIdentifier, LanguageIdentifier, LiebesspielzeugIdentifier, LiturgicalChantIdentifier, LiturgicalStyleSpecialAbilityIdentifier, LuxuryGoodIdentifier, LycantropicGiftIdentifier, MagicalArtifactIdentifier, MagicalDanceIdentifier, MagicalMelodyIdentifier, MagicalRuneIdentifier, MagicalSignIdentifier, MagicalSpecialAbilityIdentifier, MagicalTraditionIdentifier, MagicStyleSpecialAbilityIdentifier, MusicalInstrumentIdentifier, NewspaperIdentifier, OptionalRuleIdentifier, OrbEnchantmentIdentifier, OrienteeringAidIdentifier, PactGiftIdentifier, PatronIdentifier, PoisonIdentifier, PropertyIdentifier, ProtectiveWardingCircleSpecialAbilityIdentifier, RaceIdentifier, RangedCombatTechniqueIdentifier, RingEnchantmentIdentifier, RitualIdentifier, RopeOrChainIdentifier, SchweinetrommelzauberIdentifier, ScriptIdentifier, SermonIdentifier, SexPracticeIdentifier, SexSpecialAbilityIdentifier, SickleRitualIdentifier, SikaryanDrainSpecialAbilityIdentifier, SkillApplicationIdentifier, SkillIdentifier, SkillStyleSpecialAbilityIdentifier, SpellIdentifier, SpellSwordEnchantmentIdentifier, StaffEnchantmentIdentifier, StationeryIdentifier, TargetCategoryIdentifier, ThievesToolIdentifier, ToolOfTheTradeIdentifier, ToyEnchantmentIdentifier, TradeSecretIdentifier, TravelGearOrToolIdentifier, TrinkhornzauberIdentifier, VampiricGiftIdentifier, VehicleIdentifier, VisionIdentifier, WandEnchantmentIdentifier, WeaponAccessoryIdentifier, WeaponEnchantmentIdentifier, WeaponIdentifier, WorkingSupernaturalCreatureIdentifier, ZibiljaRitualIdentifier, } from "./_Identifier.js";
3
+ import { AdvancedCombatSpecialAbilityIdentifier, AdvancedKarmaSpecialAbilityIdentifier, AdvancedMagicalSpecialAbilityIdentifier, AdvancedSkillSpecialAbilityIdentifier, AdvantageIdentifier, AmmunitionIdentifier, AncestorGlyphIdentifier, AnimalCareIdentifier, AnimalIdentifier, AnimalShapeIdentifier, AnimalShapeSizeIdentifier, AnimistPowerIdentifier, ArcaneBardTraditionIdentifier, ArcaneDancerTraditionIdentifier, ArcaneOrbEnchantmentIdentifier, ArmorIdentifier, AspectIdentifier, AttireEnchantmentIdentifier, AttributeIdentifier, BandageOrRemedyIdentifier, BannzeichenIdentifier, BeutelzauberIdentifier, BlessedTraditionIdentifier, BlessingIdentifier, BookIdentifier, BowlEnchantmentIdentifier, BrawlingSpecialAbilityIdentifier, CantripIdentifier, CauldronEnchantmentIdentifier, CeremonialItemIdentifier, CeremonialItemSpecialAbilityIdentifier, CeremonyIdentifier, ChronicleEnchantmentIdentifier, CloseCombatTechniqueIdentifier, ClothesIdentifier, ClothingPackageIdentifier, CombatSpecialAbilityIdentifier, CombatStyleSpecialAbilityIdentifier, CommandSpecialAbilityIdentifier, ContainerIdentifier, CultureIdentifier, CurseIdentifier, DaggerRitualIdentifier, DisadvantageIdentifier, DiseaseIdentifier, DominationRitualIdentifier, ElementIdentifier, ElixirIdentifier, ElvenMagicalSongIdentifier, EnhancementIdentifier, EquipmentOfBlessedOnesIdentifier, FamiliarSpecialAbilityIdentifier, FatePointSexSpecialAbilityIdentifier, FatePointSpecialAbilityIdentifier, FocusRuleIdentifier, FoolsHatEnchantmentIdentifier, GemOrPreciousStoneIdentifier, GeneralIdentifier, GeneralSpecialAbilityIdentifier, GeodeRitualIdentifier, GoblinRitualIdentifier, HaubenzauberIdentifier, HauerkettenzauberIdentifier, IlluminationLightSourceIdentifier, IlluminationRefillOrSupplyIdentifier, InstrumentEnchantmentIdentifier, JesterTrickIdentifier, JewelryIdentifier, KarmaSpecialAbilityIdentifier, KeulenzauberIdentifier, KrallenkettenzauberIdentifier, KristallkugelzauberIdentifier, LaboratoryIdentifier, LanguageIdentifier, LiebesspielzeugIdentifier, LiturgicalChantIdentifier, LiturgicalStyleSpecialAbilityIdentifier, LuxuryGoodIdentifier, LycantropicGiftIdentifier, MagicalArtifactIdentifier, MagicalDanceIdentifier, MagicalMelodyIdentifier, MagicalRuneIdentifier, MagicalSignIdentifier, MagicalSpecialAbilityIdentifier, MagicalTraditionIdentifier, MagicStyleSpecialAbilityIdentifier, MusicalInstrumentIdentifier, NewspaperIdentifier, OptionalRuleIdentifier, OrbEnchantmentIdentifier, OrienteeringAidIdentifier, PactGiftIdentifier, PatronIdentifier, PoisonIdentifier, PropertyIdentifier, ProtectiveWardingCircleSpecialAbilityIdentifier, RaceIdentifier, RangedCombatTechniqueIdentifier, RingEnchantmentIdentifier, RitualIdentifier, RopeOrChainIdentifier, SchweinetrommelzauberIdentifier, ScriptIdentifier, SermonIdentifier, SexPracticeIdentifier, SexSpecialAbilityIdentifier, SickleRitualIdentifier, SikaryanDrainSpecialAbilityIdentifier, SkillApplicationIdentifier, SkillGroupIdentifier, SkillIdentifier, SkillStyleSpecialAbilityIdentifier, SpellIdentifier, SpellSwordEnchantmentIdentifier, StaffEnchantmentIdentifier, StationeryIdentifier, TargetCategoryIdentifier, ThievesToolIdentifier, ToolOfTheTradeIdentifier, ToyEnchantmentIdentifier, TradeSecretIdentifier, TravelGearOrToolIdentifier, TrinkhornzauberIdentifier, VampiricGiftIdentifier, VehicleIdentifier, VisionIdentifier, WandEnchantmentIdentifier, WeaponAccessoryIdentifier, WeaponEnchantmentIdentifier, WeaponIdentifier, WorkingSupernaturalCreatureIdentifier, ZibiljaRitualIdentifier, } from "./_Identifier.js";
4
4
  export const ActivatableIdentifier = DB.Enum(import.meta.url, {
5
5
  name: "ActivatableIdentifier",
6
6
  values: () => ({
@@ -286,6 +286,14 @@ export const RequirableSelectOptionIdentifier = DB.Enum(import.meta.url, {
286
286
  Element: DB.EnumCase({ type: ElementIdentifier() }),
287
287
  }),
288
288
  });
289
+ export const CommonnessSelectOptionIdentifier = DB.Enum(import.meta.url, {
290
+ name: "CommonnessSelectOptionIdentifier",
291
+ comment: "A skill group can be chosen as an option for commonness-rated advantages and disadvantages, but it refers to all skills within that group, rather than being a select option itself.",
292
+ values: () => ({
293
+ ...RequirableSelectOptionIdentifier.type.value.values,
294
+ SkillGroup: DB.EnumCase({ type: SkillGroupIdentifier() }),
295
+ }),
296
+ });
289
297
  export const CoreRuleDerivableContentIdentifier = DB.Enum(import.meta.url, {
290
298
  name: "CoreRuleDerivableContentIdentifier",
291
299
  values: () => ({
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @title Prerequisites
2
+ * @module Prerequisites
3
3
  */
4
4
  import * as DB from "tsondb/schema/dsl";
5
5
  export declare const RulePrerequisites: DB.TypeAlias<"RulePrerequisites", DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.TypeAlias<"PlainPrerequisites", DB.Array<DB.IncludeIdentifier<DB.Param<string, DB.Type>[], DB.Enum<"PrerequisitesElement", {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @title Prerequisites
2
+ * @module Prerequisites
3
3
  */
4
4
  import * as DB from "tsondb/schema/dsl";
5
5
  import { NestedTranslationMap } from "./Locale.js";
@@ -36,11 +36,11 @@ export const ResponsiveTextReplace = DB.TypeAlias(import.meta.url, {
36
36
  type: () => DB.Object({
37
37
  full: DB.Required({
38
38
  comment: "The full replacement string. It must contain `$1`, which is going to be replaced with the generated string, so additional information can be provided without duplicating concrete numeric values.",
39
- type: DB.String({ minLength: 1, pattern: /\$1/ }),
39
+ type: DB.String({ minLength: 1, pattern: /\$1/u }),
40
40
  }),
41
41
  compressed: DB.Required({
42
42
  comment: "A compressed replacement string for use in small areas (e.g. on character sheet). It must contain `$1`, which is going to be replaced with the generated string, so additional information can be provided without duplicating concrete numeric values.",
43
- type: DB.String({ minLength: 1, pattern: /\$1/ }),
43
+ type: DB.String({ minLength: 1, pattern: /\$1/u }),
44
44
  }),
45
45
  }),
46
46
  });
@@ -84,7 +84,7 @@ export declare const Elixir: DB.Entity<"Elixir", {
84
84
  }, []>>>, false>;
85
85
  }>, true>;
86
86
  }>, []>>>, []>>, false>;
87
- }>, []>>, true>;
87
+ }>, []>>, false>;
88
88
  src: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRefs", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRef", DB.Object<{
89
89
  id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
90
90
  occurrences: DB.MemberDecl<DB.NestedEntityMap<string, {
@@ -1,6 +1,6 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- import { NestedTranslationMap } from "../../Locale.js";
3
2
  import { AlternativeName } from "../../_AlternativeNames.js";
3
+ import { NestedTranslationMap } from "../../Locale.js";
4
4
  import { Errata } from "../../source/_Erratum.js";
5
5
  import { src } from "../../source/_PublicationRef.js";
6
6
  import { EffectType, LaboratoryLevel, RecipeTradeSecret } from "./_Herbary.js";
@@ -28,7 +28,7 @@ export const Elixir = DB.Entity(import.meta.url, {
28
28
  comment: "The brewing difficulty, which represents the challenge of creating an elixir.",
29
29
  type: DB.Integer(),
30
30
  }),
31
- trade_secret: DB.Required({
31
+ trade_secret: DB.Optional({
32
32
  comment: "AP value and prerequisites of the elixir recipe’s trade secret.",
33
33
  type: DB.IncludeIdentifier(RecipeTradeSecret),
34
34
  }),
@@ -1,7 +1,7 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- import { src } from "../../source/_PublicationRef.js";
3
- import { NestedTranslationMap } from "../../Locale.js";
4
2
  import { WeaponIdentifier, ArmorIdentifier } from "../../_Identifier.js";
3
+ import { NestedTranslationMap } from "../../Locale.js";
4
+ import { src } from "../../source/_PublicationRef.js";
5
5
  import { EffectType, RecipeTradeSecret } from "./_Herbary.js";
6
6
  import { HerbalPreservationLongevity } from "./HerbalPreservation.js";
7
7
  export const HerbalAid = DB.Entity(import.meta.url, {
@@ -1,11 +1,11 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- import { NestedTranslationMap } from "../../Locale.js";
3
2
  import { DurationUnit } from "../../_ActivatableSkillDuration.js";
4
- import { ResponsiveTextReplace } from "../../_ResponsiveText.js";
5
3
  import { Dice } from "../../_Dice.js";
6
4
  import { MathOperation } from "../../_MathExpression.js";
7
- import { EffectType } from "./_Herbary.js";
5
+ import { ResponsiveTextReplace } from "../../_ResponsiveText.js";
6
+ import { NestedTranslationMap } from "../../Locale.js";
8
7
  import { src } from "../../source/_PublicationRef.js";
8
+ import { EffectType } from "./_Herbary.js";
9
9
  export const HerbalPreservation = DB.Entity(import.meta.url, {
10
10
  name: "HerbalPreservation",
11
11
  namePlural: "HerbalPreservations",
@@ -1,9 +1,9 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- import { src } from "../../source/_PublicationRef.js";
3
- import { NestedTranslationMap } from "../../Locale.js";
4
2
  import { AlternativeName } from "../../_AlternativeNames.js";
5
3
  import { BiomeIdentifier, SubBiomeIdentifier, BotanicRegionIdentifier, HerbalAidIdentifier, HerbalPreservationIdentifier, ElixirIdentifier, PoisonIdentifier, } from "../../_Identifier.js";
6
4
  import { ResponsiveTextOptional, ResponsiveTextReplace } from "../../_ResponsiveText.js";
5
+ import { NestedTranslationMap } from "../../Locale.js";
6
+ import { src } from "../../source/_PublicationRef.js";
7
7
  import { EffectType, PlantRarity } from "./_Herbary.js";
8
8
  export const Plant = DB.Entity(import.meta.url, {
9
9
  name: "Plant",
@@ -1,10 +1,10 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- import { NestedTranslationMap } from "../../Locale.js";
3
2
  import { AlternativeName } from "../../_AlternativeNames.js";
4
3
  import { Dice } from "../../_Dice.js";
5
4
  import { Reduceable, Resistance } from "../../_DiseasePoison.js";
6
5
  import { DiseaseIdentifier } from "../../_Identifier.js";
7
6
  import { MathOperation } from "../../_MathExpression.js";
7
+ import { NestedTranslationMap } from "../../Locale.js";
8
8
  import { Errata } from "../../source/_Erratum.js";
9
9
  import { src } from "../../source/_PublicationRef.js";
10
10
  import { EffectType, LaboratoryLevel, RecipeComplexity, RecipeTradeSecret } from "./_Herbary.js";
@@ -109,7 +109,7 @@ export const Cost = DB.Enum(import.meta.url, {
109
109
  });
110
110
  const wrap_in_text = DB.Required({
111
111
  comment: "The cost get wrapped by this text using a placeholder in the text.",
112
- type: DB.String({ minLength: 1, pattern: /\{0\}/ }),
112
+ type: DB.String({ minLength: 1, pattern: /\{0\}/u }),
113
113
  });
114
114
  const InvaluableCost = DB.TypeAlias(import.meta.url, {
115
115
  name: "InvaluableCost",
@@ -1,6 +1,6 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- import { NestedTranslationMap } from "../../../Locale.js";
3
2
  import { SubBiomeIdentifier } from "../../../_Identifier.js";
3
+ import { NestedTranslationMap } from "../../../Locale.js";
4
4
  export const BotanicRegion = DB.Entity(import.meta.url, {
5
5
  name: "BotanicRegion",
6
6
  namePlural: "BotanicRegions",
@@ -1,6 +1,6 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- import { NestedTranslationMap } from "../../../Locale.js";
3
2
  import { BiomeIdentifier } from "../../../_Identifier.js";
3
+ import { NestedTranslationMap } from "../../../Locale.js";
4
4
  import { BotanicRegion } from "./BotanicRegion.js";
5
5
  export const SubBiome = DB.Entity(import.meta.url, {
6
6
  name: "SubBiome",
@@ -1,6 +1,6 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- import { NestedTranslationMap } from "../Locale.js";
3
2
  import { TribePrerequisites } from "../_Prerequisite.js";
3
+ import { NestedTranslationMap } from "../Locale.js";
4
4
  export const Tribe = DB.Entity(import.meta.url, {
5
5
  name: "Tribe",
6
6
  namePlural: "Tribes",
@@ -43,9 +43,9 @@ export declare const MagicalDance: DB.Entity<"MagicalDance", {
43
43
  }, []>>, true>;
44
44
  }>, []>>, true>;
45
45
  property: DB.MemberDecl<DB.ReferenceIdentifier, true>;
46
- music_tradition: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<string, DB.Object<{
46
+ music_tradition: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<`${string}Reference`, DB.Object<{
47
47
  id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
48
- translations: DB.MemberDecl<DB.NestedEntityMap<`${string}Translation`, {
48
+ translations: DB.MemberDecl<DB.NestedEntityMap<`${string}ReferenceTranslationTranslation`, {
49
49
  name: DB.MemberDecl<DB.String, true>;
50
50
  }>, true>;
51
51
  }>, []>>>, true>;
@@ -63,9 +63,9 @@ export declare const MagicalMelody: DB.Entity<"MagicalMelody", {
63
63
  }, []>>, true>;
64
64
  }>, []>>, true>;
65
65
  property: DB.MemberDecl<DB.ReferenceIdentifier, true>;
66
- music_tradition: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<string, DB.Object<{
66
+ music_tradition: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<`${string}Reference`, DB.Object<{
67
67
  id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
68
- translations: DB.MemberDecl<DB.NestedEntityMap<`${string}Translation`, {
68
+ translations: DB.MemberDecl<DB.NestedEntityMap<`${string}ReferenceTranslationTranslation`, {
69
69
  name: DB.MemberDecl<DB.String, true>;
70
70
  }>, true>;
71
71
  }>, []>>>, true>;
@@ -1,7 +1,7 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- export declare const MusicTraditionReference: (traditionIdentifier: DB.ReferenceIdentifier) => DB.TypeAlias<string, DB.Object<{
2
+ export declare const MusicTraditionReference: (traditionIdentifier: DB.ReferenceIdentifier) => DB.TypeAlias<`${string}Reference`, DB.Object<{
3
3
  id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
4
- translations: DB.MemberDecl<DB.NestedEntityMap<`${string}Translation`, {
4
+ translations: DB.MemberDecl<DB.NestedEntityMap<`${string}ReferenceTranslationTranslation`, {
5
5
  name: DB.MemberDecl<DB.String, true>;
6
6
  }>, true>;
7
7
  }>, []>;
@@ -1,14 +1,14 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
2
  import { NestedTranslationMap } from "../Locale.js";
3
3
  export const MusicTraditionReference = (traditionIdentifier) => DB.TypeAlias(import.meta.url, {
4
- name: traditionIdentifier.entity.name + "Reference",
4
+ name: `${traditionIdentifier.entity.name}Reference`,
5
5
  comment: "A reference to a music tradition with the music-tradition-specific name of the entry.",
6
6
  type: () => DB.Object({
7
7
  id: DB.Required({
8
8
  comment: "The music tradition’s identifier.",
9
9
  type: traditionIdentifier,
10
10
  }),
11
- translations: NestedTranslationMap(DB.Required, traditionIdentifier.entity.name + "ReferenceTranslation", DB.Object({
11
+ translations: NestedTranslationMap(DB.Required, `${traditionIdentifier.entity.name}ReferenceTranslation`, DB.Object({
12
12
  name: DB.Required({
13
13
  comment: "The music-tradition-specific name of the entry.",
14
14
  type: DB.String({ minLength: 1 }),
@@ -94,15 +94,13 @@ export const ProfessionPrerequisiteGroup = DB.Enum(import.meta.url, {
94
94
  });
95
95
  export const AdvantageDisadvantagePrerequisiteGroup = DB.Enum(import.meta.url, {
96
96
  name: "AdvantageDisadvantagePrerequisiteGroup",
97
- values: () => {
98
- return {
99
- CommonSuggestedByRCP: DB.EnumCase({ type: null }),
100
- NoOtherAncestorBloodAdvantage: DB.EnumCase({
101
- type: AncestorBloodPrerequisite,
102
- }),
103
- ...GeneralPrerequisiteGroup.type.value.values,
104
- };
105
- },
97
+ values: () => ({
98
+ CommonSuggestedByRCP: DB.EnumCase({ type: null }),
99
+ NoOtherAncestorBloodAdvantage: DB.EnumCase({
100
+ type: AncestorBloodPrerequisite,
101
+ }),
102
+ ...GeneralPrerequisiteGroup.type.value.values,
103
+ }),
106
104
  });
107
105
  export const ArcaneTraditionPrerequisiteGroup = DB.Enum(import.meta.url, {
108
106
  name: "ArcaneTraditionPrerequisiteGroup",
@@ -14,10 +14,8 @@ export const AnySpecialAbilityOfGroupPrerequisite = DB.TypeAlias(import.meta.url
14
14
  });
15
15
  const SpecialAbilityGroup = DB.Enum(import.meta.url, {
16
16
  name: "SpecialAbilityGroup",
17
- values: () => ({
18
- ...Object.fromEntries(Object.keys(SpecialAbilityIdentifier.type.value.values).map(entity => [
19
- entity,
20
- DB.EnumCase({ type: null }),
21
- ])),
22
- }),
17
+ values: () => Object.fromEntries(Object.keys(SpecialAbilityIdentifier.type.value.values).map(entity => [
18
+ entity,
19
+ DB.EnumCase({ type: null }),
20
+ ])),
23
21
  });
@@ -1,6 +1,6 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- import { NestedTranslationMap } from "../Locale.js";
3
2
  import { PublicationPrerequisites } from "../_Prerequisite.js";
3
+ import { NestedTranslationMap } from "../Locale.js";
4
4
  export const Publication = DB.Entity(import.meta.url, {
5
5
  name: "Publication",
6
6
  namePlural: "Publications",
@@ -1,6 +1,6 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
- import { NestedTranslationMap } from "../../Locale.js";
3
2
  import { MagicalTraditionIdentifier } from "../../_Identifier.js";
3
+ import { NestedTranslationMap } from "../../Locale.js";
4
4
  export const MagicalTraditionSubgroup = DB.Entity(import.meta.url, {
5
5
  name: "MagicalTraditionSubgroup",
6
6
  namePlural: "MagicalTraditionSubgroups",
@@ -1,12 +1,12 @@
1
1
  import { omitUndefinedKeys } from "@elyukai/utils/object";
2
2
  import * as DB from "tsondb/schema/dsl";
3
- import { NestedTranslationMap } from "../Locale.js";
4
3
  import { effect, levels, maximum, name, name_in_library } from "../_Activatable.js";
5
4
  import { ap_value, ap_value_append, ap_value_l10n } from "../_ActivatableAdventurePointsValue.js";
6
5
  import { nameBuilderRules } from "../_ActivatableNames.js";
7
6
  import { aeCost, bindingCost, cost, cost_note, property, volume, volume_l10n, } from "../_ActivatableNonMundane.js";
8
7
  import { explicit_select_options, select_options, verifySelectOptionRules, } from "../_ActivatableSelectOptions.js";
9
8
  import { GeneralPrerequisites } from "../_Prerequisite.js";
9
+ import { NestedTranslationMap } from "../Locale.js";
10
10
  import { Errata } from "../source/_Erratum.js";
11
11
  import { src } from "../source/_PublicationRef.js";
12
12
  export const full = (options) => DB.Entity(import.meta.url, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@optolith/database-schema",
3
- "version": "0.89.0",
3
+ "version": "0.91.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",
@@ -29,9 +29,9 @@
29
29
  "generate": "tsondb generate",
30
30
  "generate:watch": "nodemon --watch lib --exec \"tsondb generate\" --ext js",
31
31
  "test": "node ./lib/test.js",
32
- "lint": "eslint",
33
- "format": "prettier \"src/{types/**/*.{ts,tsx},*.{ts,tsx}}\" --write",
34
- "format:check": "prettier \"src/{types/**/*.{ts,tsx},*.{ts,tsx}}\" --check",
32
+ "lint": "oxlint",
33
+ "format": "oxfmt \"{src,test}/**/*.{ts,tsx}\"",
34
+ "format:check": "oxfmt \"{src,test}/**/*.{ts,tsx}\" --check",
35
35
  "release": "commit-and-tag-version",
36
36
  "release:sign": "commit-and-tag-version --sign --signoff"
37
37
  },
@@ -39,20 +39,18 @@
39
39
  "license": "MPL-2.0",
40
40
  "dependencies": {
41
41
  "@elyukai/utils": "^0.3.6",
42
- "tsondb": "^0.21.5",
43
- "yaml": "^2.9.1"
42
+ "tsondb": "^0.21.5"
44
43
  },
45
44
  "devDependencies": {
46
- "@eslint/js": "^10.0.1",
45
+ "@elyukai/oxc-config": "^0.1.0",
47
46
  "@types/node": "^26.6.4",
48
47
  "commit-and-tag-version": "^13.2.1",
49
- "eslint": "^10.12.0",
50
- "globals": "^17.13.0",
51
48
  "nodemon": "^3.1.14",
52
- "prettier": "^3.9.9",
49
+ "oxfmt": "^0.72.0",
50
+ "oxlint": "^1.87.0",
51
+ "oxlint-tsgolint": "^7.0.2003",
53
52
  "typescript": "npm:@typescript/typescript6@^6.0.2",
54
- "typescript-7": "npm:typescript@^7.0.2",
55
- "typescript-eslint": "^8.71.0"
53
+ "typescript-7": "npm:typescript@^7.0.2"
56
54
  },
57
55
  "repository": "github:Optolith/database-schema",
58
56
  "bugs": {