@optolith/database-schema 0.45.0 → 0.46.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 (63) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/gen/types.d.ts +678 -240
  3. package/lib/main.js +3 -0
  4. package/lib/types/Advantage.js +2 -1
  5. package/lib/types/AnimalDisease.d.ts +1 -0
  6. package/lib/types/Culture.js +1 -0
  7. package/lib/types/Disadvantage.js +2 -1
  8. package/lib/types/Disease.d.ts +1 -0
  9. package/lib/types/_ActivatableNames.d.ts +14 -0
  10. package/lib/types/_ActivatableNames.js +12 -0
  11. package/lib/types/_AlternativeNames.d.ts +1 -0
  12. package/lib/types/_AlternativeNames.js +5 -0
  13. package/lib/types/_DiseasePoison.d.ts +1 -0
  14. package/lib/types/_Identifier.d.ts +3 -0
  15. package/lib/types/_Identifier.js +6 -0
  16. package/lib/types/_ResponsiveText.d.ts +17 -0
  17. package/lib/types/_ResponsiveText.js +17 -0
  18. package/lib/types/equipment/item/Elixir.d.ts +1 -0
  19. package/lib/types/equipment/item/HerbalAid.d.ts +64 -0
  20. package/lib/types/equipment/item/HerbalAid.js +56 -0
  21. package/lib/types/equipment/item/Plant.d.ts +183 -0
  22. package/lib/types/equipment/item/Plant.js +222 -0
  23. package/lib/types/equipment/item/Poison.d.ts +1 -0
  24. package/lib/types/equipment/item/_Herbary.d.ts +7 -0
  25. package/lib/types/equipment/item/_Herbary.js +11 -0
  26. package/lib/types/equipment/item/sub/Biome.d.ts +6 -0
  27. package/lib/types/equipment/item/sub/Biome.js +21 -0
  28. package/lib/types/index.d.ts +4 -1
  29. package/lib/types/index.js +3 -0
  30. package/lib/types/specialAbility/AdvancedCombatSpecialAbility.js +2 -1
  31. package/lib/types/specialAbility/AdvancedKarmaSpecialAbility.js +2 -1
  32. package/lib/types/specialAbility/AdvancedMagicalSpecialAbility.js +2 -1
  33. package/lib/types/specialAbility/AdvancedSkillSpecialAbility.js +2 -1
  34. package/lib/types/specialAbility/AncestorGlyph.js +2 -1
  35. package/lib/types/specialAbility/BlessedTradition.js +2 -0
  36. package/lib/types/specialAbility/BrawlingSpecialAbility.js +2 -1
  37. package/lib/types/specialAbility/CeremonialItemSpecialAbility.js +2 -1
  38. package/lib/types/specialAbility/CombatSpecialAbility.js +2 -1
  39. package/lib/types/specialAbility/CombatStyleSpecialAbility.js +2 -1
  40. package/lib/types/specialAbility/CommandSpecialAbility.js +2 -1
  41. package/lib/types/specialAbility/FamiliarSpecialAbility.js +2 -1
  42. package/lib/types/specialAbility/FatePointSexSpecialAbility.js +2 -1
  43. package/lib/types/specialAbility/FatePointSpecialAbility.js +2 -1
  44. package/lib/types/specialAbility/GeneralSpecialAbility.js +2 -1
  45. package/lib/types/specialAbility/KarmaSpecialAbility.js +2 -1
  46. package/lib/types/specialAbility/LiturgicalStyleSpecialAbility.js +2 -1
  47. package/lib/types/specialAbility/LycantropicGift.js +2 -1
  48. package/lib/types/specialAbility/MagicStyleSpecialAbility.js +2 -1
  49. package/lib/types/specialAbility/MagicalSign.js +2 -0
  50. package/lib/types/specialAbility/MagicalSpecialAbility.js +2 -1
  51. package/lib/types/specialAbility/MagicalTradition.js +2 -1
  52. package/lib/types/specialAbility/PactGift.js +2 -1
  53. package/lib/types/specialAbility/ProtectiveWardingCircleSpecialAbility.js +2 -1
  54. package/lib/types/specialAbility/Sermon.js +2 -1
  55. package/lib/types/specialAbility/SexSpecialAbility.js +2 -1
  56. package/lib/types/specialAbility/SikaryanDrainSpecialAbility.js +2 -1
  57. package/lib/types/specialAbility/SkillStyleSpecialAbility.js +2 -1
  58. package/lib/types/specialAbility/VampiricGift.js +2 -1
  59. package/lib/types/specialAbility/Vision.js +2 -1
  60. package/lib/types/specialAbility/sub/Language.d.ts +2 -1
  61. package/lib/types/specialAbility/sub/Language.js +1 -1
  62. package/lib/types/specialAbility/sub/Script.d.ts +1 -0
  63. package/package.json +1 -1
package/lib/main.js CHANGED
@@ -28,6 +28,7 @@ export const schema = new Schema([
28
28
  Types.BandageOrRemedy,
29
29
  Types.Bannzeichen,
30
30
  Types.Beutelzauber,
31
+ Types.Biome,
31
32
  Types.BlessedTradition,
32
33
  Types.Blessing,
33
34
  Types.Book,
@@ -78,6 +79,7 @@ export const schema = new Schema([
78
79
  Types.Guideline,
79
80
  Types.HairColor,
80
81
  Types.Haubenzauber,
82
+ Types.HerbalAid,
81
83
  Types.HomunculusType,
82
84
  Types.IlluminationLightSource,
83
85
  Types.IlluminationRefillOrSupply,
@@ -114,6 +116,7 @@ export const schema = new Schema([
114
116
  Types.PatronCategory,
115
117
  Types.PersonalityTrait,
116
118
  Types.PlayerType,
119
+ Types.Plant,
117
120
  Types.Poison,
118
121
  Types.Profession,
119
122
  Types.Property,
@@ -2,7 +2,7 @@ import * as DB from "tsondb/schema/dsl";
2
2
  import { input, levels, maximum, name, name_in_library, range_l10n, rules } from "./_Activatable.js";
3
3
  import { ap_value, ap_value_append, ap_value_l10n } from "./_ActivatableAdventurePointsValue.js";
4
4
  import { automatic_entries } from "./_ActivatableAutomatic.js";
5
- import { nameBuilderRules } from "./_ActivatableNames.js";
5
+ import { activatableDisplayNameCustomizer, nameBuilderRules } from "./_ActivatableNames.js";
6
6
  import { explicit_select_options, select_options } from "./_ActivatableSelectOptions.js";
7
7
  import { skill_applications, skill_uses } from "./_ActivatableSkillApplicationsAndUses.js";
8
8
  import { AdvantageDisadvantagePrerequisites } from "./_Prerequisite.js";
@@ -48,6 +48,7 @@ export const Advantage = DB.Entity(import.meta.url, {
48
48
  })),
49
49
  }),
50
50
  instanceDisplayName: {},
51
+ instanceDisplayNameCustomizer: activatableDisplayNameCustomizer,
51
52
  uniqueConstraints: [
52
53
  {
53
54
  entityMapKeyPath: "translations",
@@ -69,6 +69,7 @@ export declare const AnimalDisease: DB.Entity<"AnimalDisease", {
69
69
  alternative_names: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"AlternativeName", DB.Object<{
70
70
  name: DB.MemberDecl<DB.String, true>;
71
71
  region: DB.MemberDecl<DB.String, false>;
72
+ language: DB.MemberDecl<DB.ReferenceIdentifier, false>;
72
73
  }>, []>>>, false>;
73
74
  progress: DB.MemberDecl<DB.String, true>;
74
75
  incubation_time: DB.MemberDecl<DB.String, true>;
@@ -247,6 +247,7 @@ const BlessedCommonProfessionConstraint = DB.Enum(import.meta.url, {
247
247
  name: "BlessedCommonProfessionConstraint",
248
248
  values: () => ({
249
249
  Tradition: DB.EnumCase({ type: DB.IncludeIdentifier(BlessedTraditionConstraint) }),
250
+ Profession: DB.EnumCase({ type: DB.IncludeIdentifier(ProfessionConstraint) }),
250
251
  }),
251
252
  });
252
253
  const PlainCommonProfessions = DB.TypeAlias(import.meta.url, {
@@ -1,7 +1,7 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
2
  import { input, levels, maximum, name, name_in_library, rules } from "./_Activatable.js";
3
3
  import { ap_value, ap_value_append, ap_value_l10n } from "./_ActivatableAdventurePointsValue.js";
4
- import { nameBuilderRules } from "./_ActivatableNames.js";
4
+ import { activatableDisplayNameCustomizer, nameBuilderRules } from "./_ActivatableNames.js";
5
5
  import { explicit_select_options, select_options } from "./_ActivatableSelectOptions.js";
6
6
  import { skill_applications, skill_uses } from "./_ActivatableSkillApplicationsAndUses.js";
7
7
  import { AdvantageDisadvantagePrerequisites } from "./_Prerequisite.js";
@@ -49,6 +49,7 @@ export const Disadvantage = DB.Entity(import.meta.url, {
49
49
  })),
50
50
  }),
51
51
  instanceDisplayName: {},
52
+ instanceDisplayNameCustomizer: activatableDisplayNameCustomizer,
52
53
  uniqueConstraints: [
53
54
  {
54
55
  entityMapKeyPath: "translations",
@@ -89,6 +89,7 @@ export declare const Disease: DB.Entity<"Disease", {
89
89
  alternative_names: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"AlternativeName", DB.Object<{
90
90
  name: DB.MemberDecl<DB.String, true>;
91
91
  region: DB.MemberDecl<DB.String, false>;
92
+ language: DB.MemberDecl<DB.ReferenceIdentifier, false>;
92
93
  }>, []>>>, false>;
93
94
  progress: DB.MemberDecl<DB.String, true>;
94
95
  incubation_time: DB.MemberDecl<DB.String, true>;
@@ -13,3 +13,17 @@ export declare const nameBuilderRules: DB.MemberDecl<DB.IncludeIdentifier<[], DB
13
13
  }, []>>, false>;
14
14
  useParenthesis: DB.MemberDecl<DB.Boolean, false>;
15
15
  }>, []>>, false>;
16
+ export declare const activatableDisplayNameCustomizer: ({ instance, instanceDisplayName, instanceDisplayNameLocaleId, locales, }: {
17
+ instance: {
18
+ translations: Record<string, {
19
+ name: string;
20
+ name_in_library?: string;
21
+ }>;
22
+ };
23
+ instanceDisplayName: string;
24
+ instanceDisplayNameLocaleId: string | undefined;
25
+ locales: string[];
26
+ }) => {
27
+ name: string;
28
+ localeId: string | undefined;
29
+ };
@@ -24,3 +24,15 @@ const ActivatableNameLevelPlacement = DB.Enum(import.meta.url, {
24
24
  AfterOptions: DB.EnumCase({ type: null }),
25
25
  }),
26
26
  });
27
+ export const activatableDisplayNameCustomizer = ({ instance, instanceDisplayName, instanceDisplayNameLocaleId, locales, }) => {
28
+ for (const locale of locales) {
29
+ const translation = instance.translations[locale];
30
+ if (translation) {
31
+ return {
32
+ name: translation.name_in_library ?? translation.name,
33
+ localeId: locale,
34
+ };
35
+ }
36
+ }
37
+ return { name: instanceDisplayName, localeId: instanceDisplayNameLocaleId };
38
+ };
@@ -2,4 +2,5 @@ import * as DB from "tsondb/schema/dsl";
2
2
  export declare const AlternativeName: DB.TypeAlias<"AlternativeName", DB.Object<{
3
3
  name: DB.MemberDecl<DB.String, true>;
4
4
  region: DB.MemberDecl<DB.String, false>;
5
+ language: DB.MemberDecl<DB.ReferenceIdentifier, false>;
5
6
  }>, []>;
@@ -1,4 +1,5 @@
1
1
  import * as DB from "tsondb/schema/dsl";
2
+ import { LanguageIdentifier } from "./_Identifier.js";
2
3
  export const AlternativeName = DB.TypeAlias(import.meta.url, {
3
4
  name: "AlternativeName",
4
5
  type: () => DB.Object({
@@ -10,5 +11,9 @@ export const AlternativeName = DB.TypeAlias(import.meta.url, {
10
11
  comment: "The region where this alternative name is used.",
11
12
  type: DB.String({ minLength: 1 }),
12
13
  }),
14
+ language: DB.Optional({
15
+ comment: "The language of that alternative name if any.",
16
+ type: LanguageIdentifier(),
17
+ }),
13
18
  }),
14
19
  });
@@ -38,6 +38,7 @@ export declare const DiseaseTranslation: DB.Object<{
38
38
  alternative_names: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"AlternativeName", DB.Object<{
39
39
  name: DB.MemberDecl<DB.String, true>;
40
40
  region: DB.MemberDecl<DB.String, false>;
41
+ language: DB.MemberDecl<DB.ReferenceIdentifier, false>;
41
42
  }>, []>>>, false>;
42
43
  progress: DB.MemberDecl<DB.String, true>;
43
44
  incubation_time: DB.MemberDecl<DB.String, true>;
@@ -25,6 +25,7 @@ export declare const AttributeIdentifier: () => R;
25
25
  export declare const BandageOrRemedyIdentifier: () => R;
26
26
  export declare const BannzeichenIdentifier: () => R;
27
27
  export declare const BeutelzauberIdentifier: () => R;
28
+ export declare const BiomeIdentifier: () => R;
28
29
  export declare const BlessedTraditionIdentifier: () => R;
29
30
  export declare const BlessingIdentifier: () => R;
30
31
  export declare const BookIdentifier: () => R;
@@ -76,6 +77,7 @@ export declare const GoblinRitualIdentifier: () => R;
76
77
  export declare const GuidelineIdentifier: () => R;
77
78
  export declare const HairColorIdentifier: () => R;
78
79
  export declare const HaubenzauberIdentifier: () => R;
80
+ export declare const HerbalAidIdentifier: () => R;
79
81
  export declare const IlluminationLightSourceIdentifier: () => R;
80
82
  export declare const IlluminationRefillOrSupplyIdentifier: () => R;
81
83
  export declare const InfluenceIdentifier: () => R;
@@ -115,6 +117,7 @@ export declare const PactTypeIdentifier: () => R;
115
117
  export declare const PatronCategoryIdentifier: () => R;
116
118
  export declare const PatronIdentifier: () => R;
117
119
  export declare const PersonalityTraitIdentifier: () => R;
120
+ export declare const PlantIdentifier: () => R;
118
121
  export declare const PlayerTypeIdentifier: () => R;
119
122
  export declare const PoisonIdentifier: () => R;
120
123
  export declare const ProfessionIdentifier: () => R;
@@ -32,6 +32,7 @@ import { Container } from "./equipment/item/Container.js";
32
32
  import { Elixir } from "./equipment/item/Elixir.js";
33
33
  import { EquipmentOfBlessedOnes } from "./equipment/item/EquipmentOfBlessedOnes.js";
34
34
  import { GemOrPreciousStone } from "./equipment/item/GemOrPreciousStone.js";
35
+ import { HerbalAid } from "./equipment/item/HerbalAid.js";
35
36
  import { IlluminationLightSource } from "./equipment/item/IlluminationLightSource.js";
36
37
  import { IlluminationRefillOrSupply } from "./equipment/item/IlluminationRefillOrSupply.js";
37
38
  import { Jewelry } from "./equipment/item/Jewelry.js";
@@ -42,10 +43,12 @@ import { MagicalArtifact } from "./equipment/item/MagicalArtifact.js";
42
43
  import { MusicalInstrument } from "./equipment/item/MusicalInstrument.js";
43
44
  import { Newspaper } from "./equipment/item/Newspaper.js";
44
45
  import { OrienteeringAid } from "./equipment/item/OrienteeringAid.js";
46
+ import { Plant } from "./equipment/item/Plant.js";
45
47
  import { Poison } from "./equipment/item/Poison.js";
46
48
  import { RopeOrChain } from "./equipment/item/RopeOrChain.js";
47
49
  import { Stationery } from "./equipment/item/Stationery.js";
48
50
  import { ArmorType } from "./equipment/item/sub/ArmorType.js";
51
+ import { Biome } from "./equipment/item/sub/Biome.js";
49
52
  import { Reach } from "./equipment/item/sub/Reach.js";
50
53
  import { ThievesTool } from "./equipment/item/ThievesTool.js";
51
54
  import { ToolOfTheTrade } from "./equipment/item/ToolOfTheTrade.js";
@@ -180,6 +183,7 @@ export const AttributeIdentifier = () => R(Attribute);
180
183
  export const BandageOrRemedyIdentifier = () => R(BandageOrRemedy);
181
184
  export const BannzeichenIdentifier = () => R(Bannzeichen);
182
185
  export const BeutelzauberIdentifier = () => R(Beutelzauber);
186
+ export const BiomeIdentifier = () => R(Biome);
183
187
  export const BlessedTraditionIdentifier = () => R(BlessedTradition);
184
188
  export const BlessingIdentifier = () => R(Blessing);
185
189
  export const BookIdentifier = () => R(Book);
@@ -231,6 +235,7 @@ export const GoblinRitualIdentifier = () => R(GoblinRitual);
231
235
  export const GuidelineIdentifier = () => R(Guideline);
232
236
  export const HairColorIdentifier = () => R(HairColor);
233
237
  export const HaubenzauberIdentifier = () => R(Haubenzauber);
238
+ export const HerbalAidIdentifier = () => R(HerbalAid);
234
239
  export const IlluminationLightSourceIdentifier = () => R(IlluminationLightSource);
235
240
  export const IlluminationRefillOrSupplyIdentifier = () => R(IlluminationRefillOrSupply);
236
241
  export const InfluenceIdentifier = () => R(Influence);
@@ -270,6 +275,7 @@ export const PactTypeIdentifier = () => R(PactType);
270
275
  export const PatronCategoryIdentifier = () => R(PatronCategory);
271
276
  export const PatronIdentifier = () => R(Patron);
272
277
  export const PersonalityTraitIdentifier = () => R(PersonalityTrait);
278
+ export const PlantIdentifier = () => R(Plant);
273
279
  export const PlayerTypeIdentifier = () => R(PlayerType);
274
280
  export const PoisonIdentifier = () => R(Poison);
275
281
  export const ProfessionIdentifier = () => R(Profession);
@@ -1,3 +1,20 @@
1
+ /**
2
+ * Originally, this type was created to represent the text of a spell, which can
3
+ * be displayed in full on the spell card, but also in a compressed version on
4
+ * the character sheet. However, it can be used for any text that has a similar
5
+ * requirement.
6
+ *
7
+ * The `ResponsiveTextReplace` type is a special case where the full and
8
+ * compressed versions are not standalone texts, but rather templates that
9
+ * include a placeholder (`$1`) for a generated string. The generated string is
10
+ * expected to adapt to different size contexts as well.
11
+ *
12
+ * The `ResponsiveTextOptional` type allows for the possibility that a
13
+ * compressed version may not be provided. In such cases, the full text should
14
+ * be used in all contexts, and the absence of a compressed version indicates
15
+ * that no special formatting is needed for smaller areas.
16
+ * @module
17
+ */
1
18
  import * as DB from "tsondb/schema/dsl";
2
19
  export declare const ResponsiveText: DB.TypeAlias<"ResponsiveText", DB.Object<{
3
20
  full: DB.MemberDecl<DB.String, true>;
@@ -1,3 +1,20 @@
1
+ /**
2
+ * Originally, this type was created to represent the text of a spell, which can
3
+ * be displayed in full on the spell card, but also in a compressed version on
4
+ * the character sheet. However, it can be used for any text that has a similar
5
+ * requirement.
6
+ *
7
+ * The `ResponsiveTextReplace` type is a special case where the full and
8
+ * compressed versions are not standalone texts, but rather templates that
9
+ * include a placeholder (`$1`) for a generated string. The generated string is
10
+ * expected to adapt to different size contexts as well.
11
+ *
12
+ * The `ResponsiveTextOptional` type allows for the possibility that a
13
+ * compressed version may not be provided. In such cases, the full text should
14
+ * be used in all contexts, and the absence of a compressed version indicates
15
+ * that no special formatting is needed for smaller areas.
16
+ * @module
17
+ */
1
18
  import * as DB from "tsondb/schema/dsl";
2
19
  export const ResponsiveText = DB.TypeAlias(import.meta.url, {
3
20
  name: "ResponsiveText",
@@ -92,6 +92,7 @@ export declare const Elixir: DB.Entity<"Elixir", {
92
92
  alternative_names: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"AlternativeName", DB.Object<{
93
93
  name: DB.MemberDecl<DB.String, true>;
94
94
  region: DB.MemberDecl<DB.String, false>;
95
+ language: DB.MemberDecl<DB.ReferenceIdentifier, false>;
95
96
  }>, []>>>, false>;
96
97
  typical_ingredients: DB.MemberDecl<DB.Array<DB.String>, true>;
97
98
  brewing_process_prerequisites: DB.MemberDecl<DB.String, false>;
@@ -0,0 +1,64 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ export declare const HerbalAid: DB.Entity<"HerbalAid", {
3
+ types: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"EffectType", {
4
+ Healing: DB.EnumCase<null>;
5
+ Poison: DB.EnumCase<null>;
6
+ PhysicalEffect: DB.EnumCase<null>;
7
+ PsychicEffect: DB.EnumCase<null>;
8
+ Beneficial: DB.EnumCase<null>;
9
+ Defensive: DB.EnumCase<null>;
10
+ Supernatural: DB.EnumCase<null>;
11
+ }, []>>>, true>;
12
+ crafting_difficulty: DB.MemberDecl<DB.Integer, true>;
13
+ combatUse: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"HerbalAidCombatUse", {
14
+ Weapon: DB.EnumCase<DB.ReferenceIdentifier>;
15
+ Armor: DB.EnumCase<DB.ReferenceIdentifier>;
16
+ }, []>>, false>;
17
+ src: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRefs", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRef", DB.Object<{
18
+ id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
19
+ occurrences: DB.MemberDecl<DB.NestedEntityMap<string, {
20
+ initial: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"InitialOccurrence", DB.Object<{
21
+ printing: DB.MemberDecl<DB.Integer, false>;
22
+ pages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PageRange", DB.Object<{
23
+ first_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
24
+ InsideCoverFront: DB.EnumCase<null>;
25
+ InsideCoverBack: DB.EnumCase<null>;
26
+ Numbered: DB.EnumCase<DB.Integer>;
27
+ }, []>>, true>;
28
+ last_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
29
+ InsideCoverFront: DB.EnumCase<null>;
30
+ InsideCoverBack: DB.EnumCase<null>;
31
+ Numbered: DB.EnumCase<DB.Integer>;
32
+ }, []>>, false>;
33
+ }>, []>>>, true>;
34
+ isRemoved: DB.MemberDecl<DB.Boolean, false>;
35
+ }>, []>>, true>;
36
+ revisions: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"Revision", {
37
+ Since: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"Since", DB.Object<{
38
+ printing: DB.MemberDecl<DB.Integer, true>;
39
+ pages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PageRange", DB.Object<{
40
+ first_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
41
+ InsideCoverFront: DB.EnumCase<null>;
42
+ InsideCoverBack: DB.EnumCase<null>;
43
+ Numbered: DB.EnumCase<DB.Integer>;
44
+ }, []>>, true>;
45
+ last_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
46
+ InsideCoverFront: DB.EnumCase<null>;
47
+ InsideCoverBack: DB.EnumCase<null>;
48
+ Numbered: DB.EnumCase<DB.Integer>;
49
+ }, []>>, false>;
50
+ }>, []>>>, true>;
51
+ }>, []>>>;
52
+ Deprecated: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"Deprecation", DB.Object<{
53
+ printing: DB.MemberDecl<DB.Integer, true>;
54
+ }>, []>>>;
55
+ }, []>>>, false>;
56
+ }>, true>;
57
+ }>, []>>>, []>>, true>;
58
+ translations: DB.MemberDecl<DB.NestedEntityMap<"HerbalAidTranslation", {
59
+ name: DB.MemberDecl<DB.String, true>;
60
+ description: DB.MemberDecl<DB.String, true>;
61
+ ingredients: DB.MemberDecl<DB.Array<DB.String>, true>;
62
+ typical_tools: DB.MemberDecl<DB.Array<DB.String>, false>;
63
+ }>, true>;
64
+ }, undefined>;
@@ -0,0 +1,56 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ import { src } from "../../source/_PublicationRef.js";
3
+ import { NestedTranslationMap } from "../../Locale.js";
4
+ import { WeaponIdentifier, ArmorIdentifier } from "../../_Identifier.js";
5
+ import { EffectType } from "./_Herbary.js";
6
+ export const HerbalAid = DB.Entity(import.meta.url, {
7
+ name: "HerbalAid",
8
+ namePlural: "HerbalAids",
9
+ type: () => DB.Object({
10
+ types: DB.Required({
11
+ comment: "The plant types this aid belongs to.",
12
+ type: DB.Array(DB.IncludeIdentifier(EffectType), { minItems: 1, uniqueItems: true }),
13
+ }),
14
+ crafting_difficulty: DB.Required({
15
+ comment: "The difficulty for this aid to craft.",
16
+ type: DB.Integer(),
17
+ }),
18
+ combatUse: DB.Optional({
19
+ comment: "The armor or weapon this herbal aid represents.",
20
+ type: DB.IncludeIdentifier(HerbalAidCombatUse),
21
+ }),
22
+ src,
23
+ translations: NestedTranslationMap(DB.Required, "HerbalAid", DB.Object({
24
+ name: DB.Required({
25
+ comment: "The herbal aid's name.",
26
+ type: DB.String({ minLength: 1 }),
27
+ }),
28
+ description: DB.Required({
29
+ comment: "The herbal aid's description.",
30
+ type: DB.String({ minLength: 1, markdown: "block" }),
31
+ }),
32
+ ingredients: DB.Required({
33
+ comment: "The ingredients used to craft this herbal aid.",
34
+ type: DB.Array(DB.String({ minLength: 1, markdown: "inline" }), { minItems: 1 }),
35
+ }),
36
+ typical_tools: DB.Optional({
37
+ comment: "The typical tools used to craft this.",
38
+ type: DB.Array(DB.String({ minLength: 1, markdown: "inline" }), { minItems: 1 }),
39
+ }),
40
+ })),
41
+ }),
42
+ instanceDisplayName: {},
43
+ uniqueConstraints: [
44
+ {
45
+ entityMapKeyPath: "translations",
46
+ keyPathInEntityMap: "name",
47
+ },
48
+ ],
49
+ });
50
+ const HerbalAidCombatUse = DB.Enum(import.meta.url, {
51
+ name: "HerbalAidCombatUse",
52
+ values: () => ({
53
+ Weapon: DB.EnumCase({ type: WeaponIdentifier() }),
54
+ Armor: DB.EnumCase({ type: ArmorIdentifier() }),
55
+ }),
56
+ });
@@ -0,0 +1,183 @@
1
+ import * as DB from "tsondb/schema/dsl";
2
+ export declare const Plant: DB.Entity<"Plant", {
3
+ types: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"EffectType", {
4
+ Healing: DB.EnumCase<null>;
5
+ Poison: DB.EnumCase<null>;
6
+ PhysicalEffect: DB.EnumCase<null>;
7
+ PsychicEffect: DB.EnumCase<null>;
8
+ Beneficial: DB.EnumCase<null>;
9
+ Defensive: DB.EnumCase<null>;
10
+ Supernatural: DB.EnumCase<null>;
11
+ }, []>>>, true>;
12
+ occurences: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PlantOccurences", DB.Object<{
13
+ items: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PlantOccurrence", DB.Object<{
14
+ biome: DB.MemberDecl<DB.ReferenceIdentifier, true>;
15
+ rarity: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"PlantRarity", {
16
+ Common: DB.EnumCase<null>;
17
+ Occasional: DB.EnumCase<null>;
18
+ RatherRare: DB.EnumCase<null>;
19
+ Rare: DB.EnumCase<null>;
20
+ VeryRare: DB.EnumCase<null>;
21
+ }, []>>, true>;
22
+ translation: DB.MemberDecl<DB.NestedEntityMap<"PlantOccurrenceTranslation", {
23
+ note: DB.MemberDecl<DB.String, true>;
24
+ }>, false>;
25
+ }>, []>>>, false>;
26
+ translation: DB.MemberDecl<DB.NestedEntityMap<"PlantOccurrencesTranslation", {
27
+ note: DB.MemberDecl<DB.String, true>;
28
+ }>, false>;
29
+ }>, []>>, true>;
30
+ search_difficulty: DB.MemberDecl<DB.Integer, true>;
31
+ identification_difficulty: DB.MemberDecl<DB.Integer, true>;
32
+ applications: DB.MemberDecl<DB.Array<DB.Integer>, true>;
33
+ touch: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PlantEffect", DB.Object<{
34
+ types: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"EffectType", {
35
+ Healing: DB.EnumCase<null>;
36
+ Poison: DB.EnumCase<null>;
37
+ PhysicalEffect: DB.EnumCase<null>;
38
+ PsychicEffect: DB.EnumCase<null>;
39
+ Beneficial: DB.EnumCase<null>;
40
+ Defensive: DB.EnumCase<null>;
41
+ Supernatural: DB.EnumCase<null>;
42
+ }, []>>>, false>;
43
+ translations: DB.MemberDecl<DB.NestedEntityMap<"PlantEffectTranslationTranslation", {
44
+ description: DB.MemberDecl<DB.String, true>;
45
+ }>, true>;
46
+ }>, []>>, false>;
47
+ inhalation: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PlantEffect", DB.Object<{
48
+ types: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"EffectType", {
49
+ Healing: DB.EnumCase<null>;
50
+ Poison: DB.EnumCase<null>;
51
+ PhysicalEffect: DB.EnumCase<null>;
52
+ PsychicEffect: DB.EnumCase<null>;
53
+ Beneficial: DB.EnumCase<null>;
54
+ Defensive: DB.EnumCase<null>;
55
+ Supernatural: DB.EnumCase<null>;
56
+ }, []>>>, false>;
57
+ translations: DB.MemberDecl<DB.NestedEntityMap<"PlantEffectTranslationTranslation", {
58
+ description: DB.MemberDecl<DB.String, true>;
59
+ }>, true>;
60
+ }>, []>>, false>;
61
+ ingestion: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PlantEffect", DB.Object<{
62
+ types: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"EffectType", {
63
+ Healing: DB.EnumCase<null>;
64
+ Poison: DB.EnumCase<null>;
65
+ PhysicalEffect: DB.EnumCase<null>;
66
+ PsychicEffect: DB.EnumCase<null>;
67
+ Beneficial: DB.EnumCase<null>;
68
+ Defensive: DB.EnumCase<null>;
69
+ Supernatural: DB.EnumCase<null>;
70
+ }, []>>>, false>;
71
+ translations: DB.MemberDecl<DB.NestedEntityMap<"PlantEffectTranslationTranslation", {
72
+ description: DB.MemberDecl<DB.String, true>;
73
+ }>, true>;
74
+ }>, []>>, false>;
75
+ price: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"PlantPrice", {
76
+ Constant: DB.EnumCase<DB.Object<{
77
+ value: DB.MemberDecl<DB.Float, true>;
78
+ cost: DB.MemberDecl<DB.Float, true>;
79
+ }>>;
80
+ Indefinite: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"IndefinitePlantPrice", DB.Object<{
81
+ translations: DB.MemberDecl<DB.NestedEntityMap<"IndefinitePlantPriceTranslation", {
82
+ description: DB.MemberDecl<DB.String, true>;
83
+ }>, true>;
84
+ }>, []>>>;
85
+ }, []>>, true>;
86
+ recipes: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"PlantRecipe", {
87
+ HerbalAid: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"HerbalAidRecipe", DB.Object<{
88
+ herbal_aid: DB.MemberDecl<DB.ReferenceIdentifier, true>;
89
+ translation: DB.MemberDecl<DB.NestedEntityMap<"HerbalAidRecipeTranslation", {
90
+ note: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"ResponsiveTextOptional", DB.Object<{
91
+ full: DB.MemberDecl<DB.String, true>;
92
+ compressed: DB.MemberDecl<DB.String, false>;
93
+ }>, []>>, false>;
94
+ replacement: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"ResponsiveTextReplace", DB.Object<{
95
+ full: DB.MemberDecl<DB.String, true>;
96
+ compressed: DB.MemberDecl<DB.String, true>;
97
+ }>, []>>, false>;
98
+ }>, false>;
99
+ }>, []>>>;
100
+ Elixir: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"ElixirRecipe", DB.Object<{
101
+ elixir: DB.MemberDecl<DB.ReferenceIdentifier, true>;
102
+ translation: DB.MemberDecl<DB.NestedEntityMap<"ElixirRecipeTranslation", {
103
+ note: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"ResponsiveTextOptional", DB.Object<{
104
+ full: DB.MemberDecl<DB.String, true>;
105
+ compressed: DB.MemberDecl<DB.String, false>;
106
+ }>, []>>, false>;
107
+ replacement: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"ResponsiveTextReplace", DB.Object<{
108
+ full: DB.MemberDecl<DB.String, true>;
109
+ compressed: DB.MemberDecl<DB.String, true>;
110
+ }>, []>>, false>;
111
+ }>, false>;
112
+ }>, []>>>;
113
+ Poison: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"PoisonRecipe", DB.Object<{
114
+ poison: DB.MemberDecl<DB.ReferenceIdentifier, true>;
115
+ translation: DB.MemberDecl<DB.NestedEntityMap<"PoisonRecipeTranslation", {
116
+ note: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"ResponsiveTextOptional", DB.Object<{
117
+ full: DB.MemberDecl<DB.String, true>;
118
+ compressed: DB.MemberDecl<DB.String, false>;
119
+ }>, []>>, false>;
120
+ replacement: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"ResponsiveTextReplace", DB.Object<{
121
+ full: DB.MemberDecl<DB.String, true>;
122
+ compressed: DB.MemberDecl<DB.String, true>;
123
+ }>, []>>, false>;
124
+ }>, false>;
125
+ }>, []>>>;
126
+ Indefinite: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"IndefiniteRecipe", DB.Object<{
127
+ translations: DB.MemberDecl<DB.NestedEntityMap<"IndefiniteRecipeTranslation", {
128
+ description: DB.MemberDecl<DB.String, true>;
129
+ }>, true>;
130
+ }>, []>>>;
131
+ }, []>>>, false>;
132
+ src: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRefs", DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PublicationRef", DB.Object<{
133
+ id: DB.MemberDecl<DB.ReferenceIdentifier, true>;
134
+ occurrences: DB.MemberDecl<DB.NestedEntityMap<string, {
135
+ initial: DB.MemberDecl<DB.IncludeIdentifier<[], DB.TypeAlias<"InitialOccurrence", DB.Object<{
136
+ printing: DB.MemberDecl<DB.Integer, false>;
137
+ pages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PageRange", DB.Object<{
138
+ first_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
139
+ InsideCoverFront: DB.EnumCase<null>;
140
+ InsideCoverBack: DB.EnumCase<null>;
141
+ Numbered: DB.EnumCase<DB.Integer>;
142
+ }, []>>, true>;
143
+ last_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
144
+ InsideCoverFront: DB.EnumCase<null>;
145
+ InsideCoverBack: DB.EnumCase<null>;
146
+ Numbered: DB.EnumCase<DB.Integer>;
147
+ }, []>>, false>;
148
+ }>, []>>>, true>;
149
+ isRemoved: DB.MemberDecl<DB.Boolean, false>;
150
+ }>, []>>, true>;
151
+ revisions: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.Enum<"Revision", {
152
+ Since: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"Since", DB.Object<{
153
+ printing: DB.MemberDecl<DB.Integer, true>;
154
+ pages: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"PageRange", DB.Object<{
155
+ first_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
156
+ InsideCoverFront: DB.EnumCase<null>;
157
+ InsideCoverBack: DB.EnumCase<null>;
158
+ Numbered: DB.EnumCase<DB.Integer>;
159
+ }, []>>, true>;
160
+ last_page: DB.MemberDecl<DB.IncludeIdentifier<[], DB.Enum<"Page", {
161
+ InsideCoverFront: DB.EnumCase<null>;
162
+ InsideCoverBack: DB.EnumCase<null>;
163
+ Numbered: DB.EnumCase<DB.Integer>;
164
+ }, []>>, false>;
165
+ }>, []>>>, true>;
166
+ }>, []>>>;
167
+ Deprecated: DB.EnumCase<DB.IncludeIdentifier<[], DB.TypeAlias<"Deprecation", DB.Object<{
168
+ printing: DB.MemberDecl<DB.Integer, true>;
169
+ }>, []>>>;
170
+ }, []>>>, false>;
171
+ }>, true>;
172
+ }>, []>>>, []>>, true>;
173
+ translations: DB.MemberDecl<DB.NestedEntityMap<"PlantTranslation", {
174
+ name: DB.MemberDecl<DB.String, true>;
175
+ alternative_names: DB.MemberDecl<DB.Array<DB.IncludeIdentifier<[], DB.TypeAlias<"AlternativeName", DB.Object<{
176
+ name: DB.MemberDecl<DB.String, true>;
177
+ region: DB.MemberDecl<DB.String, false>;
178
+ language: DB.MemberDecl<DB.ReferenceIdentifier, false>;
179
+ }>, []>>>, false>;
180
+ remedies_and_traditions: DB.MemberDecl<DB.String, true>;
181
+ knowledge: DB.MemberDecl<DB.Array<DB.String>, true>;
182
+ }>, true>;
183
+ }, undefined>;