optolith-database-schema 0.12.0 → 0.12.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.
Files changed (162) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/lib/main.d.ts +15 -0
  3. package/lib/main.js +11 -0
  4. package/lib/typeConfig.d.ts +2 -0
  5. package/lib/types/Advantage.js +2 -0
  6. package/lib/types/AnimalDisease.js +2 -0
  7. package/lib/types/AnimalType.js +2 -0
  8. package/lib/types/ArcaneBardTradition.js +2 -0
  9. package/lib/types/ArcaneDancerTradition.js +2 -0
  10. package/lib/types/Aspect.js +2 -0
  11. package/lib/types/Attribute.js +2 -0
  12. package/lib/types/Blessing.js +2 -0
  13. package/lib/types/Cantrip.js +2 -0
  14. package/lib/types/Ceremony.js +2 -0
  15. package/lib/types/CombatTechnique_Close.js +2 -0
  16. package/lib/types/CombatTechnique_Ranged.js +2 -0
  17. package/lib/types/Condition.js +2 -0
  18. package/lib/types/Continent.js +2 -0
  19. package/lib/types/Culture.js +2 -0
  20. package/lib/types/DerivedCharacteristic.js +2 -0
  21. package/lib/types/Disadvantage.js +2 -0
  22. package/lib/types/Disease.js +2 -0
  23. package/lib/types/Element.js +2 -0
  24. package/lib/types/ExperienceLevel.js +2 -0
  25. package/lib/types/EyeColor.js +2 -0
  26. package/lib/types/FamiliarsTrick.js +2 -0
  27. package/lib/types/HairColor.js +2 -0
  28. package/lib/types/Kirchenpraegung.js +2 -0
  29. package/lib/types/Lessons_Curriculum.js +2 -0
  30. package/lib/types/Lessons_Guideline.js +2 -0
  31. package/lib/types/LiturgicalChant.js +2 -0
  32. package/lib/types/Locale.js +3 -1
  33. package/lib/types/MetaCondition.js +2 -0
  34. package/lib/types/PactCategory.js +2 -0
  35. package/lib/types/Patron.js +2 -0
  36. package/lib/types/PatronCategory.js +2 -0
  37. package/lib/types/PersonalityTrait.js +2 -0
  38. package/lib/types/Profession.js +2 -0
  39. package/lib/types/Property.js +2 -0
  40. package/lib/types/Race.js +2 -0
  41. package/lib/types/Region.js +2 -0
  42. package/lib/types/Ritual.js +2 -0
  43. package/lib/types/Service.js +2 -0
  44. package/lib/types/SexPractice.js +2 -0
  45. package/lib/types/Skill.js +2 -0
  46. package/lib/types/SkillGroup.js +2 -0
  47. package/lib/types/SkillModificationLevel.js +2 -0
  48. package/lib/types/SocialStatus.js +2 -0
  49. package/lib/types/Spell.js +2 -0
  50. package/lib/types/State.js +2 -0
  51. package/lib/types/Talisman.js +2 -0
  52. package/lib/types/TargetCategory.js +2 -0
  53. package/lib/types/UI.js +2 -0
  54. package/lib/types/equipment/EquipmentPackage.js +2 -0
  55. package/lib/types/equipment/item/Alchemicum.js +2 -0
  56. package/lib/types/equipment/item/Ammunition.js +2 -0
  57. package/lib/types/equipment/item/Animal.js +2 -0
  58. package/lib/types/equipment/item/AnimalCare.js +2 -0
  59. package/lib/types/equipment/item/Armor.js +2 -0
  60. package/lib/types/equipment/item/BandageOrRemedy.js +2 -0
  61. package/lib/types/equipment/item/Book.js +2 -0
  62. package/lib/types/equipment/item/CeremonialItem.js +2 -0
  63. package/lib/types/equipment/item/Clothes.js +2 -0
  64. package/lib/types/equipment/item/Container.js +2 -0
  65. package/lib/types/equipment/item/Elixir.js +2 -0
  66. package/lib/types/equipment/item/EquipmentOfBlessedOnes.js +2 -0
  67. package/lib/types/equipment/item/GemOrPreciousStone.js +2 -0
  68. package/lib/types/equipment/item/IlluminationLightSource.js +2 -0
  69. package/lib/types/equipment/item/IlluminationRefillsOrSupplies.js +2 -0
  70. package/lib/types/equipment/item/Jewelry.js +2 -0
  71. package/lib/types/equipment/item/Liebesspielzeug.js +2 -0
  72. package/lib/types/equipment/item/LuxuryGood.js +2 -0
  73. package/lib/types/equipment/item/MagicalArtifact.js +2 -0
  74. package/lib/types/equipment/item/MusicalInstrument.js +2 -0
  75. package/lib/types/equipment/item/OrienteeringAid.js +2 -0
  76. package/lib/types/equipment/item/Poison.js +2 -0
  77. package/lib/types/equipment/item/RopeOrChain.js +2 -0
  78. package/lib/types/equipment/item/Stationary.js +2 -0
  79. package/lib/types/equipment/item/ThievesTool.js +2 -0
  80. package/lib/types/equipment/item/ToolOfTheTrade.js +2 -0
  81. package/lib/types/equipment/item/TravelGearOrTool.js +2 -0
  82. package/lib/types/equipment/item/Vehicle.js +2 -0
  83. package/lib/types/equipment/item/Weapon.js +2 -0
  84. package/lib/types/equipment/item/WeaponAccessory.js +2 -0
  85. package/lib/types/equipment/item/sub/ArmorType.js +2 -0
  86. package/lib/types/equipment/item/sub/Reach.js +2 -0
  87. package/lib/types/magicalActions/AnimistPower.js +2 -0
  88. package/lib/types/magicalActions/AnimistPower_Tribe.js +2 -0
  89. package/lib/types/magicalActions/Curse.js +2 -0
  90. package/lib/types/magicalActions/DominationRitual.js +2 -0
  91. package/lib/types/magicalActions/ElvenMagicalSong.js +2 -0
  92. package/lib/types/magicalActions/GeodeRitual.js +2 -0
  93. package/lib/types/magicalActions/JesterTrick.js +2 -0
  94. package/lib/types/magicalActions/MagicalDance.js +2 -0
  95. package/lib/types/magicalActions/MagicalMelody.js +2 -0
  96. package/lib/types/magicalActions/MagicalRune.js +2 -0
  97. package/lib/types/magicalActions/ZibiljaRitual.js +2 -0
  98. package/lib/types/rule/CoreRule.js +2 -0
  99. package/lib/types/rule/FocusRule.js +2 -0
  100. package/lib/types/rule/FocusRule_Subject.js +2 -0
  101. package/lib/types/rule/OptionalRule.js +2 -0
  102. package/lib/types/source/Publication.js +2 -0
  103. package/lib/types/specialAbility/AdvancedCombatSpecialAbility.js +2 -0
  104. package/lib/types/specialAbility/AdvancedKarmaSpecialAbility.js +2 -0
  105. package/lib/types/specialAbility/AdvancedMagicalSpecialAbility.js +2 -0
  106. package/lib/types/specialAbility/AdvancedSkillSpecialAbility.js +2 -0
  107. package/lib/types/specialAbility/AncestorGlyph.js +2 -0
  108. package/lib/types/specialAbility/BlessedTradition.js +2 -0
  109. package/lib/types/specialAbility/BrawlingSpecialAbility.js +2 -0
  110. package/lib/types/specialAbility/CeremonialItemSpecialAbility.js +2 -0
  111. package/lib/types/specialAbility/CombatSpecialAbility.js +2 -0
  112. package/lib/types/specialAbility/CombatStyleSpecialAbility.js +2 -0
  113. package/lib/types/specialAbility/CommandSpecialAbility.js +2 -0
  114. package/lib/types/specialAbility/FamiliarSpecialAbility.js +2 -0
  115. package/lib/types/specialAbility/FatePointSexSpecialAbility.js +2 -0
  116. package/lib/types/specialAbility/FatePointSpecialAbility.js +2 -0
  117. package/lib/types/specialAbility/GeneralSpecialAbility.js +2 -0
  118. package/lib/types/specialAbility/KarmaSpecialAbility.js +2 -0
  119. package/lib/types/specialAbility/LiturgicalStyleSpecialAbility.js +2 -0
  120. package/lib/types/specialAbility/LycantropicGift.js +2 -0
  121. package/lib/types/specialAbility/MagicStyleSpecialAbility.js +2 -0
  122. package/lib/types/specialAbility/MagicalSign.js +2 -0
  123. package/lib/types/specialAbility/MagicalSpecialAbility.js +2 -0
  124. package/lib/types/specialAbility/MagicalTradition.js +2 -0
  125. package/lib/types/specialAbility/PactGift.js +2 -0
  126. package/lib/types/specialAbility/ProtectiveWardingCircleSpecialAbility.js +2 -0
  127. package/lib/types/specialAbility/Sermon.js +2 -0
  128. package/lib/types/specialAbility/SexSpecialAbility.js +2 -0
  129. package/lib/types/specialAbility/SikaryanDrainSpecialAbility.js +2 -0
  130. package/lib/types/specialAbility/SkillStyleSpecialAbility.js +2 -0
  131. package/lib/types/specialAbility/VampiricGift.js +2 -0
  132. package/lib/types/specialAbility/Vision.js +2 -0
  133. package/lib/types/specialAbility/sub/Language.js +2 -0
  134. package/lib/types/specialAbility/sub/Script.js +2 -0
  135. package/lib/types/specialAbility/sub/TradeSecret.js +2 -0
  136. package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.js +2 -0
  137. package/lib/types/traditionArtifacts/AttireEnchantment.js +2 -0
  138. package/lib/types/traditionArtifacts/BowlEnchantment.js +2 -0
  139. package/lib/types/traditionArtifacts/CauldronEnchantment.js +2 -0
  140. package/lib/types/traditionArtifacts/ChronicleEnchantment.js +2 -0
  141. package/lib/types/traditionArtifacts/DaggerRitual.js +2 -0
  142. package/lib/types/traditionArtifacts/FoolsHatEnchantment.js +2 -0
  143. package/lib/types/traditionArtifacts/InstrumentEnchantment.js +2 -0
  144. package/lib/types/traditionArtifacts/Krallenkettenzauber.js +2 -0
  145. package/lib/types/traditionArtifacts/OrbEnchantment.js +2 -0
  146. package/lib/types/traditionArtifacts/RingEnchantment.js +2 -0
  147. package/lib/types/traditionArtifacts/SickleRitual.js +2 -0
  148. package/lib/types/traditionArtifacts/SpellSwordEnchantment.js +2 -0
  149. package/lib/types/traditionArtifacts/StaffEnchantment.js +2 -0
  150. package/lib/types/traditionArtifacts/ToyEnchantment.js +2 -0
  151. package/lib/types/traditionArtifacts/Trinkhornzauber.js +2 -0
  152. package/lib/types/traditionArtifacts/WandEnchantment.js +2 -0
  153. package/lib/types/traditionArtifacts/WeaponEnchantment.js +2 -0
  154. package/lib/types/traditionArtifacts/sub/AnimalShape.js +2 -0
  155. package/lib/types/traditionArtifacts/sub/AnimalShapePath.js +2 -0
  156. package/lib/types/traditionArtifacts/sub/AnimalShapeSize.js +2 -0
  157. package/lib/types/traditionArtifacts/sub/Brew.js +2 -0
  158. package/lib/validation/builders/naming.d.ts +3 -1
  159. package/lib/validation/builders/naming.js +9 -6
  160. package/lib/validation/raw.d.ts +1 -1
  161. package/lib/validation/raw.js +3 -4
  162. package/package.json +1 -1
@@ -2,6 +2,7 @@
2
2
  * @main SikaryanDrainSpecialAbility
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("SikaryanDrainSpecialAbility"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main SkillStyleSpecialAbility
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("SkillStyleSpecialAbility"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main VampiricGift
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("VampiricGift"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main Vision
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("Vision"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main Language
3
3
  */
4
4
  import { todo } from "../../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("Language"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main Script
3
3
  */
4
4
  import { todo } from "../../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("Script"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main TradeSecret
3
3
  */
4
4
  import { todo } from "../../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("TradeSecret"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main ArcaneOrbEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("ArcaneOrbEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main AttireEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("AttireEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main BowlEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("BowlEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main CauldronEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("CauldronEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main ChronicleEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("ChronicleEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main DaggerRitual
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("DaggerRitual"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main FoolsHatEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("FoolsHatEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main InstrumentEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("InstrumentEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main Krallenkettenzauber
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("Krallenkettenzauber"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main OrbEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("OrbEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main RingEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("RingEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main SickleRitual
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("SickleRitual"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main SpellSwordEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("SpellSwordEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main StaffEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("StaffEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main ToyEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("ToyEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main Trinkhornzauber
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("Trinkhornzauber"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main WandEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("WandEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main WeaponEnchantment
3
3
  */
4
4
  import { todo } from "../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("WeaponEnchantment"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main AnimalShape
3
3
  */
4
4
  import { todo } from "../../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("AnimalShape"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main AnimalShapePath
3
3
  */
4
4
  import { todo } from "../../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("AnimalShapePath"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main AnimalShapeSize
3
3
  */
4
4
  import { todo } from "../../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("AnimalShapeSize"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -2,6 +2,7 @@
2
2
  * @main Brew
3
3
  */
4
4
  import { todo } from "../../../validation/builders/integrity.js";
5
+ import { validateEntityFileName } from "../../../validation/builders/naming.js";
5
6
  import { createSchemaValidator } from "../../../validation/builders/schema.js";
6
7
  import { getFIlenamePrefixAsNumericId } from "../../../validation/filename.js";
7
8
  export const config = {
@@ -9,4 +10,5 @@ export const config = {
9
10
  id: getFIlenamePrefixAsNumericId,
10
11
  integrityValidator: todo("Brew"),
11
12
  schemaValidator: createSchemaValidator(import.meta.url),
13
+ fileNameValidator: validateEntityFileName,
12
14
  };
@@ -10,4 +10,6 @@ export type FileNameError = {
10
10
  };
11
11
  export type FileNameValidationResult = Result<void, FileNameError[]>;
12
12
  export type FileNameValidator = (filePath: string) => FileNameValidationResult;
13
- export declare const validateFileName: FileNameValidator;
13
+ export declare const createFileNameValidator: (pattern: RegExp) => FileNameValidator;
14
+ export declare const validateEntityFileName: FileNameValidator;
15
+ export declare const validateLanguageFileName: FileNameValidator;
@@ -1,14 +1,17 @@
1
1
  import { basename } from "node:path";
2
2
  import { error, ok } from "../../helpers/result.js";
3
- const BASE_NAME_PATTERN = /^(?:0|[1-9][0-9]*)_(?:[A-Z][a-zA-Z]*|[1-9][0-9]*)(?:-(?:[a-zA-Z]+|[1-9][0-9]*))*\.yml$/;
4
- const fileNameError = (fileName) => ({
3
+ const ENTITY_FILENAME_PATTERN = /^(?:0|[1-9][0-9]*)_(?:[A-Z][a-zA-Z]*|[1-9][0-9]*)(?:-(?:[a-zA-Z]+|[1-9][0-9]*))*\.yml$/;
4
+ const LANGUAGE_FILENAME_PATTERN = /^[a-z]{2}-[A-Z]{2}\.yml$/;
5
+ const fileNameError = (pattern, fileName) => ({
5
6
  keyword: "filename",
6
7
  instancePath: "",
7
- message: `the file name "${fileName}" does not match the pattern ${BASE_NAME_PATTERN.source}`
8
+ message: `the file name "${fileName}" does not match the pattern ${pattern.source}`
8
9
  });
9
- export const validateFileName = (filePath) => {
10
+ export const createFileNameValidator = (pattern) => (filePath) => {
10
11
  const fileName = basename(filePath);
11
- return BASE_NAME_PATTERN.test(fileName)
12
+ return pattern.test(fileName)
12
13
  ? ok(undefined)
13
- : error([fileNameError(fileName)]);
14
+ : error([fileNameError(pattern, fileName)]);
14
15
  };
16
+ export const validateEntityFileName = createFileNameValidator(ENTITY_FILENAME_PATTERN);
17
+ export const validateLanguageFileName = createFileNameValidator(LANGUAGE_FILENAME_PATTERN);
@@ -5,4 +5,4 @@ import { EntityDirectoryPaths, TypeValidationError, ValidationOptions } from "..
5
5
  export type TypeIdPair<K extends keyof TypeMap> = [id: TypeId<K>, data: TypeMap[K]];
6
6
  export type TypeValidationResult<K extends keyof TypeMap> = Result<TypeIdPair<K>, TypeValidationError[]>;
7
7
  export type TypeValidationResultsByType = [keyof TypeMap, [filePath: string, result: TypeValidationResult<keyof TypeMap>][]][];
8
- export declare const getRawValidationResults: (entityDirectoryPaths: EntityDirectoryPaths, options?: ValidationOptions) => Promise<TypeValidationResultsByType>;
8
+ export declare const getRawValidationResults: (entityDirPaths: EntityDirectoryPaths, options?: ValidationOptions) => Promise<TypeValidationResultsByType>;
@@ -7,7 +7,6 @@ import { collator } from "../helpers/i18n.js";
7
7
  import { isHiddenFileName, readYamlFile } from "../helpers/io.js";
8
8
  import { mapSecond, mapSecondAsync, mapToSecondAsync } from "../helpers/pair.js";
9
9
  import { Result, isOk } from "../helpers/result.js";
10
- import { validateFileName } from "./builders/naming.js";
11
10
  import { getPreparedSchemaValidator } from "./schema.js";
12
11
  const getFiles = async (path) => (await readdir(path))
13
12
  .sort(collator.compare)
@@ -31,13 +30,13 @@ const validateStructuralIntegrityOfFiles = (validator, typeConfig, validateFileN
31
30
  return Result.map(Result.combine(schemaValidationResult, fileNameValidationResult, (data, _) => data, (schemaErrors, fileNameErrors) => [...schemaErrors, ...fileNameErrors]), data => [typeConfig.id(data, path), data]);
32
31
  }));
33
32
  const validateSemanticAndReferencialIntegrityOfFiles = (validators, typeConfig, results) => results.map(mapSecond((res, path) => Result.reduce(res, ([id, data]) => Result.map(typeConfig.integrityValidator(validators, data, path), () => [id, data]), errors => Result.error(errors))));
34
- export const getRawValidationResults = async (entityDirectoryPaths, options = {}) => {
33
+ export const getRawValidationResults = async (entityDirPaths, options = {}) => {
35
34
  const { checkIntegrity = false } = options;
36
35
  const validator = await getPreparedSchemaValidator(jsonSchemaSpec, {}, jsonSchemaDir);
37
- const entityDirectoryPathEntries = Object.entries(entityDirectoryPaths);
36
+ const entityDirectoryPathEntries = Object.entries(entityDirPaths);
38
37
  const structuralIntegrityResults = await Promise.all(entityDirectoryPathEntries.map(mapSecondAsync(async (path, typeName) => {
39
38
  const files = await getFiles(path);
40
- return validateStructuralIntegrityOfFiles(validator, configMap[typeName], validateFileName, files);
39
+ return validateStructuralIntegrityOfFiles(validator, configMap[typeName], configMap[typeName].fileNameValidator, files);
41
40
  })));
42
41
  if (checkIntegrity) {
43
42
  const identityIntegrityValidators = Object.fromEntries(structuralIntegrityResults.map(mapSecond(results => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "optolith-database-schema",
3
- "version": "0.12.0",
3
+ "version": "0.12.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",