optolith-database-schema 0.21.0 → 0.21.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,27 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [0.21.2](https://github.com/elyukai/optolith-database-schema/compare/v0.21.1...v0.21.2) (2025-11-30)
6
+
7
+
8
+ ### Features
9
+
10
+ * allow three fraction digits for item weight ([9d2dc02](https://github.com/elyukai/optolith-database-schema/commit/9d2dc029c2a07ec3180b4d340ff5ea8afe67fcba))
11
+
12
+ ## [0.21.1](https://github.com/elyukai/optolith-database-schema/compare/v0.21.0...v0.21.1) (2025-11-27)
13
+
14
+
15
+ ### Features
16
+
17
+ * add trade secret option for diseases ([da69a79](https://github.com/elyukai/optolith-database-schema/commit/da69a793a65e7737505c4ff140f6be2132119d6c))
18
+ * add weight and complexity options to vehicles ([bfbf0c0](https://github.com/elyukai/optolith-database-schema/commit/bfbf0c017f0e7bd08bf0ebebe189a862796831ce)), closes [#59](https://github.com/elyukai/optolith-database-schema/issues/59)
19
+ * magical artifacts may define complexity and combat uses ([0a86d73](https://github.com/elyukai/optolith-database-schema/commit/0a86d7396b2fddd977e214ab8be283dd31353292)), closes [#62](https://github.com/elyukai/optolith-database-schema/issues/62)
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * ranged weapons may have a range of 0 ([fb34438](https://github.com/elyukai/optolith-database-schema/commit/fb3443816195b3079362d07c9bb3a261f98609c8)), closes [#63](https://github.com/elyukai/optolith-database-schema/issues/63)
25
+
5
26
  ## [0.21.0](https://github.com/elyukai/optolith-database-schema/compare/v0.20.6...v0.21.0) (2025-11-21)
6
27
 
7
28
 
package/gen/types.d.ts CHANGED
@@ -19241,6 +19241,11 @@ export interface Disease {
19241
19241
  */
19242
19242
  cause: Cause[]
19243
19243
 
19244
+ /**
19245
+ * AP value and prerequisites of the disease’s trade secret.
19246
+ */
19247
+ trade_secret?: RecipeTradeSecret
19248
+
19244
19249
  /**
19245
19250
  * All translations for the entry, identified by IETF language tag (BCP47).
19246
19251
  */
@@ -19308,6 +19313,18 @@ export interface DiseaseTranslation {
19308
19313
  errata?: Errata
19309
19314
  }
19310
19315
 
19316
+ export interface RecipeTradeSecret {
19317
+ /**
19318
+ * The AP value of the trade secret.
19319
+ */
19320
+ ap_value: number
19321
+
19322
+ /**
19323
+ * The prerequisites of the trade secret, if any.
19324
+ */
19325
+ prerequisites?: PlainGeneralPrerequisites
19326
+ }
19327
+
19311
19328
  export interface Elixir {
19312
19329
  /**
19313
19330
  * Effect type(s) of an alchemical poison.
@@ -19428,18 +19445,6 @@ export type LaboratoryLevel =
19428
19445
  kind: "AlchemistsLaboratory"
19429
19446
  }
19430
19447
 
19431
- export interface RecipeTradeSecret {
19432
- /**
19433
- * The AP value of the trade secret.
19434
- */
19435
- ap_value: number
19436
-
19437
- /**
19438
- * The prerequisites of the trade secret, if any.
19439
- */
19440
- prerequisites?: PlainGeneralPrerequisites
19441
- }
19442
-
19443
19448
  export interface EquipmentOfBlessedOnes {
19444
19449
  /**
19445
19450
  * The cost in silverthalers.
@@ -20178,6 +20183,16 @@ export interface MagicalArtifact {
20178
20183
  */
20179
20184
  weight?: Weight
20180
20185
 
20186
+ /**
20187
+ * The complexity of crafting the item.
20188
+ */
20189
+ complexity?: Complexity
20190
+
20191
+ /**
20192
+ * The item can also be used either as an improvised weapon or as an armor, although this is not the primary use case of the item.
20193
+ */
20194
+ combat_use?: CombatUse
20195
+
20181
20196
  /**
20182
20197
  * All translations for the entry, identified by IETF language tag (BCP47).
20183
20198
  */
@@ -21239,6 +21254,16 @@ export interface Vehicle {
21239
21254
  */
21240
21255
  cost: Cost
21241
21256
 
21257
+ /**
21258
+ * The weight in kg.
21259
+ */
21260
+ weight?: Weight
21261
+
21262
+ /**
21263
+ * The complexity of crafting the item.
21264
+ */
21265
+ complexity?: Complexity
21266
+
21242
21267
  /**
21243
21268
  * All translations for the entry, identified by IETF language tag (BCP47).
21244
21269
  */
@@ -1,12 +1,12 @@
1
- import { Entity, Object } from "tsondb/schema/def";
1
+ import { Entity, IncludeIdentifier, Object } from "tsondb/schema/def";
2
2
  export declare const Disease: Entity<"Disease", {
3
3
  level: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
4
- resistance: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").EnumDecl<"Resistance", {
4
+ resistance: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Resistance", {
5
5
  Spirit: import("tsondb/schema/def").EnumCaseDecl<null>;
6
6
  Toughness: import("tsondb/schema/def").EnumCaseDecl<null>;
7
7
  LowerOfSpiritAndToughness: import("tsondb/schema/def").EnumCaseDecl<null>;
8
8
  }, []>>, true>;
9
- cause: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"Cause", Object<{
9
+ cause: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Cause", Object<{
10
10
  chance: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
11
11
  translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<"CauseTranslation", {
12
12
  name: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
@@ -14,41 +14,68 @@ export declare const Disease: Entity<"Disease", {
14
14
  note: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
15
15
  }>, true>;
16
16
  }>, []>>>, true>;
17
- src: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRefs", import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRef", Object<{
17
+ trade_secret: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"RecipeTradeSecret", Object<{
18
+ ap_value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
19
+ prerequisites: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PlainGeneralPrerequisites", IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"PlainPrerequisites", import("tsondb/schema/def").ArrayType<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").EnumDecl<"PrerequisitesElement", {
20
+ Single: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>;
21
+ Disjunction: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"PrerequisitesDisjunction", Object<{
22
+ list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>, true>;
23
+ display_option: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"DisplayOption", {
24
+ Hide: import("tsondb/schema/def").EnumCaseDecl<null>;
25
+ ReplaceWith: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"ReplacementDisplayOption", Object<{
26
+ sentence_type: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"SentenceType", {
27
+ Standalone: import("tsondb/schema/def").EnumCaseDecl<null>;
28
+ Connected: import("tsondb/schema/def").EnumCaseDecl<null>;
29
+ }, []>>, false>;
30
+ translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<"ReplacementDisplayOptionTranslation", {
31
+ replacement: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
32
+ }>, true>;
33
+ }>, []>>>;
34
+ }, []>>, false>;
35
+ }>, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>>;
36
+ Group: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"PrerequisiteGroup", Object<{
37
+ list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>>>, true>;
38
+ translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<"PrerequisiteGroupTranslation", {
39
+ text: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
40
+ }>, true>;
41
+ }>, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>>;
42
+ }, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>>, [T: import("tsondb/schema/def").TypeParameter<"T", import("tsondb/schema/def").Type>]>>, []>>, false>;
43
+ }>, []>>, false>;
44
+ src: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRefs", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRef", Object<{
18
45
  id: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
19
46
  occurrences: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<string, {
20
- initial: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"InitialOccurrence", Object<{
47
+ initial: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"InitialOccurrence", Object<{
21
48
  printing: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
22
- pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"PageRange", Object<{
23
- first_page: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").EnumDecl<"Page", {
49
+ pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PageRange", Object<{
50
+ first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
24
51
  InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
25
52
  InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
26
53
  Numbered: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").IntegerType>;
27
54
  }, []>>, true>;
28
- last_page: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").EnumDecl<"Page", {
55
+ last_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
29
56
  InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
30
57
  InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
31
58
  Numbered: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").IntegerType>;
32
59
  }, []>>, false>;
33
60
  }>, []>>>, true>;
34
61
  }>, []>>, true>;
35
- revisions: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").EnumDecl<"Revision", {
36
- Since: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"Since", Object<{
62
+ revisions: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Revision", {
63
+ Since: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Since", Object<{
37
64
  printing: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
38
- pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"PageRange", Object<{
39
- first_page: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").EnumDecl<"Page", {
65
+ pages: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PageRange", Object<{
66
+ first_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
40
67
  InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
41
68
  InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
42
69
  Numbered: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").IntegerType>;
43
70
  }, []>>, true>;
44
- last_page: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").EnumDecl<"Page", {
71
+ last_page: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Page", {
45
72
  InsideCoverFront: import("tsondb/schema/def").EnumCaseDecl<null>;
46
73
  InsideCoverBack: import("tsondb/schema/def").EnumCaseDecl<null>;
47
74
  Numbered: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").IntegerType>;
48
75
  }, []>>, false>;
49
76
  }>, []>>>, true>;
50
77
  }>, []>>>;
51
- Deprecated: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"Deprecation", Object<{
78
+ Deprecated: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Deprecation", Object<{
52
79
  printing: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
53
80
  }>, []>>>;
54
81
  }, []>>>, false>;
@@ -56,24 +83,24 @@ export declare const Disease: Entity<"Disease", {
56
83
  }>, []>>>, []>>, true>;
57
84
  translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<"DiseaseTranslation", {
58
85
  name: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
59
- alternative_names: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"AlternativeName", Object<{
86
+ alternative_names: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"AlternativeName", Object<{
60
87
  name: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
61
88
  region: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
62
89
  }>, []>>>, false>;
63
90
  progress: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
64
91
  incubation_time: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
65
- damage: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"Reduceable", Object<{
92
+ damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"Reduceable", Object<{
66
93
  default: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"Content", import("tsondb/schema/def").Type>>, true>;
67
94
  reduced: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"Content", import("tsondb/schema/def").Type>>, false>;
68
95
  }>, [Content: import("tsondb/schema/def").TypeParameter<"Content", import("tsondb/schema/def").Type>]>>, true>;
69
- duration: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"Reduceable", Object<{
96
+ duration: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<import("tsondb/schema/def").TypeParameter<string, import("tsondb/schema/def").Type>[], import("tsondb/schema/def").TypeAliasDecl<"Reduceable", Object<{
70
97
  default: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"Content", import("tsondb/schema/def").Type>>, true>;
71
98
  reduced: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").TypeArgumentType<import("tsondb/schema/def").TypeParameter<"Content", import("tsondb/schema/def").Type>>, false>;
72
99
  }>, [Content: import("tsondb/schema/def").TypeParameter<"Content", import("tsondb/schema/def").Type>]>>, true>;
73
100
  special: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
74
101
  treatment: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
75
102
  cure: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
76
- errata: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"Errata", import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").IncludeIdentifierType<[], import("tsondb/schema/def").TypeAliasDecl<"Erratum", Object<{
103
+ errata: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Errata", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Erratum", Object<{
77
104
  date: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").DateType, true>;
78
105
  description: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, true>;
79
106
  }>, []>>>, []>>, false>;
@@ -1,6 +1,7 @@
1
- import { Entity, Object, Required } from "tsondb/schema/def";
1
+ import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { NestedTranslationMap } from "./Locale.js";
3
3
  import { cause, DiseaseTranslation, level, resistance } from "./_DiseasePoison.js";
4
+ import { RecipeTradeSecret } from "./equipment/item/_Herbary.js";
4
5
  import { src } from "./source/_PublicationRef.js";
5
6
  export const Disease = Entity(import.meta.url, {
6
7
  name: "Disease",
@@ -9,6 +10,10 @@ export const Disease = Entity(import.meta.url, {
9
10
  level,
10
11
  resistance,
11
12
  cause,
13
+ trade_secret: Optional({
14
+ comment: "AP value and prerequisites of the disease’s trade secret.",
15
+ type: IncludeIdentifier(RecipeTradeSecret),
16
+ }),
12
17
  src,
13
18
  translations: NestedTranslationMap(Required, "Disease", DiseaseTranslation),
14
19
  }),
@@ -1,4 +1,4 @@
1
- import { Boolean, Entity, MemberDecl, NestedEntityMap, ObjectType, String, TranslationObject, Type } from "tsondb/schema/def";
1
+ import { Boolean, Entity, type MemberDecl, NestedEntityMap, type ObjectType, String, TranslationObject, type Type } from "tsondb/schema/def";
2
2
  export declare const Locale: Entity<"Locale", {
3
3
  name: MemberDecl<String, true>;
4
4
  region: MemberDecl<String, true>;
@@ -1278,7 +1278,7 @@ export declare const Locale: Entity<"Locale", {
1278
1278
  "removed in {0}. printing": null;
1279
1279
  }>, false>;
1280
1280
  }, undefined>;
1281
- export declare const NestedTranslationMap: <Name extends string, T extends Record<string, MemberDecl<Type, boolean>>, R extends boolean>(MemberDeclCreator: <T_1 extends Type>(options: {
1281
+ export declare const NestedTranslationMap: <Name extends string, T extends Record<string, MemberDecl>, R extends boolean>(MemberDeclCreator: <T_1 extends Type>(options: {
1282
1282
  comment?: string;
1283
1283
  isDeprecated?: boolean;
1284
1284
  type: T_1;
@@ -35,7 +35,7 @@ export const Profession = Entity(import.meta.url, {
35
35
  }
36
36
  return {
37
37
  ...displayName,
38
- name: `${displayName.name} (+${otherProfessionVersions.length} version${otherProfessionVersions.length > 1 ? "s" : ""})`,
38
+ name: `${displayName.name} (+${otherProfessionVersions.length.toString()} version${otherProfessionVersions.length > 1 ? "s" : ""})`,
39
39
  };
40
40
  },
41
41
  });
@@ -133,17 +133,15 @@ export const ProfessionVersion = Entity(import.meta.url, {
133
133
  pathInLocaleMap: "name.default",
134
134
  },
135
135
  displayNameCustomizer: ({ instance, instanceId, locales }) => {
136
- if (typeof instance.translations === "object" && instance.translations !== null) {
137
- const translations = Object.entries(instance.translations);
138
- for (const locale of locales) {
139
- const translation = translations.find(([key]) => key === locale);
140
- if (translation) {
141
- const [, value] = translation;
142
- return {
143
- name: value.name.default + (value.specification ? ` (${value.specification.default})` : ""),
144
- localeId: locale,
145
- };
146
- }
136
+ const translations = Object.entries(instance.translations);
137
+ for (const locale of locales) {
138
+ const translation = translations.find(([key]) => key === locale);
139
+ if (translation) {
140
+ const [, value] = translation;
141
+ return {
142
+ name: value.name.default + (value.specification ? ` (${value.specification.default})` : ""),
143
+ localeId: locale,
144
+ };
147
145
  }
148
146
  }
149
147
  return {
@@ -28,9 +28,9 @@ export const SkillModificationLevel = Entity(import.meta.url, {
28
28
  }),
29
29
  displayName: null,
30
30
  displayNameCustomizer: ({ instance, locales }) => ({
31
- name: `${instance.fast.casting_time} Act. / ${instance.slow.casting_time.value} ${instance.slow.casting_time.unit.kind} (fast/slow) — ${instance.fast.range === instance.slow.range
32
- ? instance.fast.range
33
- : instance.fast.range + "/" + instance.slow.range + " (fast/slow)"} m — ${instance.fast.cost}/${instance.slow.cost} (fast/slow) AE or KP`,
31
+ name: `${instance.fast.casting_time.toString()} Act. / ${instance.slow.casting_time.value.toString()} ${instance.slow.casting_time.unit.kind} (fast/slow) — ${instance.fast.range === instance.slow.range
32
+ ? instance.fast.range.toString()
33
+ : `${instance.fast.range.toString()}/${instance.slow.range.toString()} (fast/slow)`} m — ${instance.fast.cost.toString()}/${instance.slow.cost.toString()} (fast/slow) AE or KP`,
34
34
  localeId: locales[0],
35
35
  }),
36
36
  });
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * General type specifications used by multiple activatable entries.
3
3
  */
4
- import { Array, Boolean, ChildEntities, Entity, Enum, EnumCase, IncludeIdentifier, Integer, Object, String, Type, TypeAlias, TypeArgument } from "tsondb/schema/def";
4
+ import { Array, Boolean, ChildEntities, Entity, Enum, EnumCase, IncludeIdentifier, Integer, Object, String, type Type, TypeAlias, TypeArgument } from "tsondb/schema/def";
5
5
  import { MathOperation } from "./_MathExpression.js";
6
6
  export declare const name: import("tsondb/schema/def").MemberDecl<String, true>;
7
7
  export declare const name_in_library: import("tsondb/schema/def").MemberDecl<String, false>;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * General type specifications used by multiple activatable entries.
3
3
  */
4
- import { Array, Boolean, ChildEntities, Entity, Enum, EnumCase, GenEnum, GenIncludeIdentifier, GenTypeAlias, IncludeIdentifier, Integer, Object, Optional, Param, Required, String, TypeAlias, TypeArgument, } from "tsondb/schema/def";
4
+ import { Array, Boolean, ChildEntities, Entity, Enum, EnumCase, GenEnum, GenIncludeIdentifier, GenTypeAlias, getAnyEnumCaseValue, IncludeIdentifier, Integer, Object, Optional, Param, Required, String, TypeAlias, TypeArgument, } from "tsondb/schema/def";
5
5
  import { NestedTranslationMap } from "./Locale.js";
6
6
  import { SelectOptionCategory } from "./_ActivatableSelectOptionCategory.js";
7
7
  import { DurationUnitValue } from "./_ActivatableSkillDuration.js";
@@ -115,7 +115,9 @@ export const GeneralSelectOption = Entity(import.meta.url, {
115
115
  parentReferenceKey: "parent",
116
116
  displayName: {},
117
117
  displayNameCustomizer: ({ instance, instanceDisplayName, instanceDisplayNameLocaleId, getDisplayNameForInstanceId, }) => ({
118
- name: `${getDisplayNameForInstanceId(instance.parent[instance.parent.kind])?.name} ${instanceDisplayName}`,
118
+ name: `${instanceDisplayName.length > 0
119
+ ? instanceDisplayName
120
+ : (getDisplayNameForInstanceId(getAnyEnumCaseValue(instance.parent))?.name ?? "")} — ${instanceDisplayName}`,
119
121
  localeId: instanceDisplayNameLocaleId,
120
122
  }),
121
123
  });
@@ -356,8 +358,9 @@ export const NewSkillApplication = Entity(import.meta.url, {
356
358
  parentReferenceKey: "parent",
357
359
  displayName: {},
358
360
  displayNameCustomizer: ({ instance, instanceDisplayName, instanceDisplayNameLocaleId, getDisplayNameForInstanceId, }) => ({
359
- name: `${instanceDisplayName ||
360
- getDisplayNameForInstanceId(instance.parent[instance.parent.kind])}`,
361
+ name: instanceDisplayName.length > 0
362
+ ? instanceDisplayName
363
+ : (getDisplayNameForInstanceId(getAnyEnumCaseValue(instance.parent))?.name ?? ""),
361
364
  localeId: instanceDisplayNameLocaleId,
362
365
  }),
363
366
  });
@@ -392,8 +395,9 @@ export const SkillUse = Entity(import.meta.url, {
392
395
  parentReferenceKey: "parent",
393
396
  displayName: {},
394
397
  displayNameCustomizer: ({ instance, instanceDisplayName, instanceDisplayNameLocaleId, getDisplayNameForInstanceId, }) => ({
395
- name: `${instanceDisplayName ||
396
- getDisplayNameForInstanceId(instance.parent[instance.parent.kind])}`,
398
+ name: instanceDisplayName.length > 0
399
+ ? instanceDisplayName
400
+ : (getDisplayNameForInstanceId(getAnyEnumCaseValue(instance.parent))?.name ?? ""),
397
401
  localeId: instanceDisplayNameLocaleId,
398
402
  }),
399
403
  });
@@ -782,17 +786,6 @@ const ArcaneEnergyCostDisjunctionOption = TypeAlias(import.meta.url, {
782
786
  }, { minProperties: 1 })),
783
787
  }),
784
788
  });
785
- const NoArcaneEnergyCost = TypeAlias(import.meta.url, {
786
- name: "NoArcaneEnergyCost",
787
- type: () => Object({
788
- translations: NestedTranslationMap(Optional, "NoArcaneEnergyCost", Object({
789
- note: Optional({
790
- comment: "A note, appended to the generated string in parenthesis.",
791
- type: IncludeIdentifier(ResponsiveTextOptional),
792
- }),
793
- }, { minProperties: 1 })),
794
- }),
795
- });
796
789
  const Volume = Enum(import.meta.url, {
797
790
  name: "Volume",
798
791
  comment: "The volume points the enchantment needs.",
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @title Enhancements
3
3
  */
4
- import { ChildEntities, Entity, IncludeIdentifier, Integer, Object, Optional, Required, String, TypeAlias, } from "tsondb/schema/def";
4
+ import { ChildEntities, Entity, getAnyEnumCaseValue, IncludeIdentifier, Integer, Object, Optional, Required, String, TypeAlias, } from "tsondb/schema/def";
5
5
  import { SkillWithEnhancementsIdentifier } from "./_IdentifierGroup.js";
6
6
  import { EnhancementPrerequisites } from "./_Prerequisite.js";
7
7
  import { NestedTranslationMap } from "./Locale.js";
@@ -63,7 +63,7 @@ export const Enhancement = Entity(import.meta.url, {
63
63
  parentReferenceKey: "parent",
64
64
  displayName: {},
65
65
  displayNameCustomizer: ({ instance, instanceDisplayName, instanceDisplayNameLocaleId, getDisplayNameForInstanceId, }) => ({
66
- name: `${getDisplayNameForInstanceId(instance.parent[instance.parent.kind])?.name} — ${instanceDisplayName}`,
66
+ name: `${getDisplayNameForInstanceId(getAnyEnumCaseValue(instance.parent))?.name ?? ""} — ${instanceDisplayName}`,
67
67
  localeId: instanceDisplayNameLocaleId,
68
68
  }),
69
69
  });
@@ -4,7 +4,7 @@ type BinaryMathOperation = {
4
4
  [K in BinaryMathOperationName]: EnumCase<Array<IncludeIdentifier<[Value: TypeParameter], MathOperation>>>;
5
5
  };
6
6
  export type MathOperation = Enum<"MathOperation", {
7
- Value: EnumCase<TypeArgument<TypeParameter>>;
7
+ Value: EnumCase<TypeArgument>;
8
8
  } & BinaryMathOperation, [
9
9
  Value: TypeParameter
10
10
  ]>;
@@ -19,6 +19,108 @@ export declare const MagicalArtifact: Entity<"MagicalArtifact", {
19
19
  }>, []>>>;
20
20
  }, []>>, true>;
21
21
  weight: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Weight", import("tsondb/schema/def").FloatType, []>>, false>;
22
+ complexity: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Complexity", {
23
+ Primitive: import("tsondb/schema/def").EnumCaseDecl<null>;
24
+ Simple: import("tsondb/schema/def").EnumCaseDecl<null>;
25
+ Complex: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"ComplexComplexity", Object<{
26
+ ap_value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
27
+ }>, []>>>;
28
+ }, []>>, false>;
29
+ combat_use: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"CombatUse", {
30
+ Weapon: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"ImprovisedWeapon", Object<{
31
+ melee_uses: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<string, {
32
+ damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"MeleeDamage", Object<{
33
+ dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Dice", Object<{
34
+ number: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
35
+ sides: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"DieType", import("tsondb/schema/def").IntegerType, []>>, true>;
36
+ }>, []>>, true>;
37
+ flat: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
38
+ }>, []>>, true>;
39
+ damage_threshold: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"PrimaryAttributeDamageThreshold", {
40
+ Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"DefaultPrimaryAttributeDamageThreshold", Object<{
41
+ threshold: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
42
+ }>, []>>>;
43
+ List: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PrimaryAttributeDamageThresholdList", Object<{
44
+ list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"SinglePrimaryAttributeDamageThreshold", Object<{
45
+ attribute: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
46
+ threshold: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
47
+ }>, []>>>, true>;
48
+ }>, []>>>;
49
+ }, []>>, false>;
50
+ attackModifier: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"AttackModifier", import("tsondb/schema/def").IntegerType, []>>, false>;
51
+ parryModifier: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"ParryModifier", import("tsondb/schema/def").IntegerType, []>>, false>;
52
+ reach: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, false>;
53
+ length: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Length", import("tsondb/schema/def").IntegerType, []>>, false>;
54
+ size: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"ShieldSize", {
55
+ Small: import("tsondb/schema/def").EnumCaseDecl<null>;
56
+ Medium: import("tsondb/schema/def").EnumCaseDecl<null>;
57
+ Large: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"LargeShieldSize", Object<{
58
+ attack_penalty: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
59
+ }>, []>>>;
60
+ }, []>>, false>;
61
+ is_parrying_weapon: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
62
+ is_two_handed_weapon: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
63
+ is_improvised_weapon: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
64
+ }>, false>;
65
+ ranged_uses: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<string, {
66
+ damage: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"RangedDamage", {
67
+ Default: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"DefaultRangedDamage", Object<{
68
+ dice: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Dice", Object<{
69
+ number: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
70
+ sides: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"DieType", import("tsondb/schema/def").IntegerType, []>>, true>;
71
+ }>, []>>, true>;
72
+ flat: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
73
+ }>, []>>>;
74
+ NotApplicable: import("tsondb/schema/def").EnumCaseDecl<null>;
75
+ Special: import("tsondb/schema/def").EnumCaseDecl<null>;
76
+ }, []>>, true>;
77
+ reload_time: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"ReloadTime", Object<{
78
+ value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
79
+ }>, []>>>, true>;
80
+ range: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"RangeBrackets", Object<{
81
+ close: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
82
+ medium: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
83
+ far: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
84
+ }>, []>>, true>;
85
+ ammunition: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, false>;
86
+ length: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Length", import("tsondb/schema/def").IntegerType, []>>, false>;
87
+ is_improvised_weapon: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").BooleanType, true>;
88
+ }>, false>;
89
+ sanctified_by: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"SanctifiedBy", import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, []>>, false>;
90
+ restricted_to_cultures: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"RestrictedToCultures", {
91
+ CulturesOfRace: import("tsondb/schema/def").EnumCaseDecl<import("tsondb/schema/def").ReferenceIdentifierType>;
92
+ Cultures: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"RestrictedToSpecificCultures", Object<{
93
+ list: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
94
+ }>, []>>>;
95
+ }, []>>, false>;
96
+ restricted_to_traditions: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, false>;
97
+ translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<"ImprovisedWeaponTranslation", {
98
+ advantage: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
99
+ disadvantage: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
100
+ }>, false>;
101
+ }>, []>>>;
102
+ Armor: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"SecondaryArmor", Object<{
103
+ protection: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Protection", import("tsondb/schema/def").IntegerType, []>>, true>;
104
+ encumbrance: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Encumbrance", import("tsondb/schema/def").IntegerType, []>>, true>;
105
+ has_additional_penalties: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"HasAdditionalPenalties", import("tsondb/schema/def").BooleanType, []>>, true>;
106
+ armor_type: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
107
+ hit_zone: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"HitZone", {
108
+ Head: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"HeadHitZone", Object<{
109
+ combination_possibilities: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"HeadHitZoneCombinationPossibilities", Object<{
110
+ armors: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ArrayType<import("tsondb/schema/def").ReferenceIdentifierType>, true>;
111
+ protection: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, false>;
112
+ }>, []>>, false>;
113
+ }>, []>>>;
114
+ Torso: import("tsondb/schema/def").EnumCaseDecl<null>;
115
+ Arms: import("tsondb/schema/def").EnumCaseDecl<null>;
116
+ Legs: import("tsondb/schema/def").EnumCaseDecl<null>;
117
+ }, []>>, false>;
118
+ translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<"SecondaryArmorTranslation", {
119
+ advantage: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
120
+ disadvantage: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").StringType, false>;
121
+ }>, false>;
122
+ }>, []>>>;
123
+ }, []>>, false>;
22
124
  src: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRefs", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRef", Object<{
23
125
  id: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
24
126
  occurrences: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<string, {
@@ -1,6 +1,6 @@
1
1
  import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
- import { Cost, DefaultItemTranslations, Weight } from "./_Item.js";
3
+ import { CombatUse, Complexity, Cost, DefaultItemTranslations, Weight } from "./_Item.js";
4
4
  export const MagicalArtifact = Entity(import.meta.url, {
5
5
  name: "MagicalArtifact",
6
6
  namePlural: "MagicalArtifacts",
@@ -13,6 +13,14 @@ export const MagicalArtifact = Entity(import.meta.url, {
13
13
  comment: "The weight in kg.",
14
14
  type: IncludeIdentifier(Weight),
15
15
  }),
16
+ complexity: Optional({
17
+ comment: "The complexity of crafting the item.",
18
+ type: IncludeIdentifier(Complexity),
19
+ }),
20
+ combat_use: Optional({
21
+ comment: "The item can also be used either as an improvised weapon or as an armor, although this is not the primary use case of the item.",
22
+ type: IncludeIdentifier(CombatUse),
23
+ }),
16
24
  src,
17
25
  translations: DefaultItemTranslations("MagicalArtifact"),
18
26
  }),
@@ -18,6 +18,14 @@ export declare const Vehicle: Entity<"Vehicle", {
18
18
  }>, false>;
19
19
  }>, []>>>;
20
20
  }, []>>, true>;
21
+ weight: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"Weight", import("tsondb/schema/def").FloatType, []>>, false>;
22
+ complexity: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").EnumDecl<"Complexity", {
23
+ Primitive: import("tsondb/schema/def").EnumCaseDecl<null>;
24
+ Simple: import("tsondb/schema/def").EnumCaseDecl<null>;
25
+ Complex: import("tsondb/schema/def").EnumCaseDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"ComplexComplexity", Object<{
26
+ ap_value: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").IntegerType, true>;
27
+ }>, []>>>;
28
+ }, []>>, false>;
21
29
  src: import("tsondb/schema/def").MemberDecl<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRefs", import("tsondb/schema/def").ArrayType<IncludeIdentifier<[], import("tsondb/schema/def").TypeAliasDecl<"PublicationRef", Object<{
22
30
  id: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").ReferenceIdentifierType, true>;
23
31
  occurrences: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<string, {
@@ -1,6 +1,6 @@
1
- import { Entity, IncludeIdentifier, Object, Required } from "tsondb/schema/def";
1
+ import { Entity, IncludeIdentifier, Object, Optional, Required } from "tsondb/schema/def";
2
2
  import { src } from "../../source/_PublicationRef.js";
3
- import { Cost, DefaultItemTranslations } from "./_Item.js";
3
+ import { Complexity, Cost, DefaultItemTranslations, Weight } from "./_Item.js";
4
4
  export const Vehicle = Entity(import.meta.url, {
5
5
  name: "Vehicle",
6
6
  namePlural: "Vehicles",
@@ -9,6 +9,14 @@ export const Vehicle = Entity(import.meta.url, {
9
9
  comment: "The cost in silverthalers.",
10
10
  type: IncludeIdentifier(Cost),
11
11
  }),
12
+ weight: Optional({
13
+ comment: "The weight in kg.",
14
+ type: IncludeIdentifier(Weight),
15
+ }),
16
+ complexity: Optional({
17
+ comment: "The complexity of crafting the item.",
18
+ type: IncludeIdentifier(Complexity),
19
+ }),
12
20
  src,
13
21
  translations: DefaultItemTranslations("Vehicle"),
14
22
  }),
@@ -122,7 +122,7 @@ const CostRange = TypeAlias(import.meta.url, {
122
122
  export const Weight = TypeAlias(import.meta.url, {
123
123
  name: "Weight",
124
124
  comment: "The weight in kg.",
125
- type: () => Float({ minimum: { value: 0, isExclusive: true } }),
125
+ type: () => Float({ minimum: { value: 0, isExclusive: true }, fractionDigits: 3 }),
126
126
  });
127
127
  export const Complexity = Enum(import.meta.url, {
128
128
  name: "Complexity",
@@ -65,15 +65,15 @@ const RangeBrackets = TypeAlias(import.meta.url, {
65
65
  type: () => Object({
66
66
  close: Required({
67
67
  comment: "The close range bracket for the weapon. Distance in m.",
68
- type: Integer({ minimum: 1 }),
68
+ type: Integer({ minimum: 0 }),
69
69
  }),
70
70
  medium: Required({
71
71
  comment: "The medium range bracket for the weapon. Distance in m.",
72
- type: Integer({ minimum: 1 }),
72
+ type: Integer({ minimum: 0 }),
73
73
  }),
74
74
  far: Required({
75
75
  comment: "The far range bracket for the weapon. Distance in m.",
76
- type: Integer({ minimum: 1 }),
76
+ type: Integer({ minimum: 0 }),
77
77
  }),
78
78
  }),
79
79
  });
@@ -1,4 +1,4 @@
1
- import { Enum, EnumCase, IncludeIdentifier, Object, ReferenceIdentifier, String, TypeAlias } from "tsondb/schema/def";
1
+ import { Enum, EnumCase, IncludeIdentifier, Object, type ReferenceIdentifier, String, TypeAlias } from "tsondb/schema/def";
2
2
  export declare const MusicTraditionReference: (traditionIdentifier: ReferenceIdentifier) => TypeAlias<string, Object<{
3
3
  id: import("tsondb/schema/def").MemberDecl<ReferenceIdentifier, true>;
4
4
  translations: import("tsondb/schema/def").MemberDecl<import("tsondb/schema/def").NestedEntityMapType<`${string}Translation`, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "optolith-database-schema",
3
- "version": "0.21.0",
3
+ "version": "0.21.2",
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",
@@ -28,9 +28,12 @@
28
28
  },
29
29
  "scripts": {
30
30
  "build": "tsc",
31
- "generate": "tsondb generate",
32
31
  "watch": "tsc -w",
32
+ "generate": "tsondb generate",
33
33
  "test": "node ./lib/test.js",
34
+ "lint": "eslint",
35
+ "format": "prettier \"src/{types/**/*.{ts,tsx},*.{ts,tsx}}\" --write",
36
+ "format:check": "prettier \"src/{types/**/*.{ts,tsx},*.{ts,tsx}}\" --check",
34
37
  "release": "commit-and-tag-version",
35
38
  "release:sign": "commit-and-tag-version --sign --signoff"
36
39
  },
@@ -38,13 +41,18 @@
38
41
  "license": "MPL-2.0",
39
42
  "dependencies": {
40
43
  "@optolith/helpers": "^0.2.2",
41
- "tsondb": "^0.12.2",
44
+ "tsondb": "^0.12.7",
42
45
  "yaml": "^2.8.1"
43
46
  },
44
47
  "devDependencies": {
45
- "@types/node": "^24.8.1",
48
+ "@eslint/js": "^9.39.1",
49
+ "@types/node": "^24.10.1",
46
50
  "commit-and-tag-version": "^12.6.0",
47
- "typescript": "^5.9.3"
51
+ "eslint": "^9.39.1",
52
+ "globals": "^16.5.0",
53
+ "prettier": "^3.7.3",
54
+ "typescript": "^5.9.3",
55
+ "typescript-eslint": "^8.48.0"
48
56
  },
49
57
  "repository": "github:elyukai/optolith-database-schema",
50
58
  "bugs": {