@game-infra/story-schemas 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -31,11 +31,11 @@ All of it is the same shape — a keyed JSON payload, scoped to a parent, tagged
31
31
  ## Usage
32
32
 
33
33
  ```ts
34
- import { designContentListContract, designContentLoadContract } from "@game-infra/story-schemas";
35
- import { mapApiContractToPath } from "@toad-contracts/valibot";
34
+ import { designContentListContract, designContentLoadContract } from '@game-infra/story-schemas'
35
+ import { mapApiContractToPath } from '@toad-contracts/valibot'
36
36
 
37
- designContentListContract.pathResolver({ gameId: "g1" }); // '/games/g1/design-content'
38
- mapApiContractToPath(designContentLoadContract);
37
+ designContentListContract.pathResolver({ gameId: 'g1' }) // '/games/g1/design-content'
38
+ mapApiContractToPath(designContentLoadContract)
39
39
  // '/games/:gameId/design-content/:contentType/:scopeId/:contentId'
40
40
  ```
41
41
 
@@ -80,22 +80,22 @@ The listing answers every question story mode asks:
80
80
 
81
81
  A branching story and a multi-stage event are the same object seen from two angles: both are prose with gated, consequential branches out of it. So a story beat **is** an `EncounterStageDTO` and a branch **is** a `ChoiceDefinitionDTO`, straight from `@game-infra/event-schemas`:
82
82
 
83
- | Story mode | event-editor DTO |
84
- | ---------- | --------------------------------------------------------- |
85
- | arc | `EventDefinitionDTO` header (multi-stage) + `hook`/`tags` |
86
- | beat | `EncounterStageDTO` + `model`/`origin`/`revision`/`notes` |
87
- | branch | `ChoiceDefinitionDTO`, unchanged |
83
+ | Story mode | event-editor DTO |
84
+ | ---------- | --------------------------------------------------------------------------------------------------------------------- |
85
+ | arc | `EventDefinitionDTO` header (multi-stage) + `hook`/`tags` + story-specific player power, stat values, and skill ranks |
86
+ | beat | `EncounterStageDTO` + `model`/`origin`/`revision`/`notes` |
87
+ | branch | `ChoiceDefinitionDTO`, unchanged |
88
88
 
89
89
  A branch therefore carries `conditionsToShow`, `conditionsToEnable`, `consumableConditions`, `effects` and an outcome config exactly as an event's choice does, and a finished arc assembles into an `event_definitions` row by collecting its beats into `stages` — a copy, not a translation.
90
90
 
91
91
  `data` is opaque to the _service_, but two clients writing and reading the same rows still have to agree, so the shapes ship alongside the contract and are parsed client-side:
92
92
 
93
93
  ```ts
94
- import { StoryBeatPayloadSchema } from "@game-infra/story-schemas";
95
- import { safeParse } from "valibot";
94
+ import { StoryBeatPayloadSchema } from '@game-infra/story-schemas'
95
+ import { safeParse } from 'valibot'
96
96
 
97
- const parsed = safeParse(StoryBeatPayloadSchema, JSON.parse(row.data ?? "{}"));
98
- if (parsed.success) console.log(parsed.output.description, parsed.output.choices);
97
+ const parsed = safeParse(StoryBeatPayloadSchema, JSON.parse(row.data ?? '{}'))
98
+ if (parsed.success) console.log(parsed.output.description, parsed.output.choices)
99
99
  ```
100
100
 
101
101
  `WorldPayloadSchema`, `StoryArcPayloadSchema` and `StoryBeatPayloadSchema` are exported for this, along with the underlying `ChoiceDefinitionDTOSchema`, `PreconditionDTOSchema`, `ActivationDTOSchema` and `ConsumableConditionDTOSchema` so a story client needs one import rather than two. They are deliberately _not_ attached to any endpoint.
@@ -116,12 +116,12 @@ mode's turn journal and synapse memory live there, in
116
116
  A beat's identity is the trail of choices taken to reach it — that is what makes "has this branch been travelled before?" a lookup rather than a search. The client minting ids and the service sweeping subtrees import the same helpers:
117
117
 
118
118
  ```ts
119
- import { storyNodeId, childStoryNodeId, isStoryNodeAtOrBelow } from "@game-infra/story-schemas";
119
+ import { storyNodeId, childStoryNodeId, isStoryNodeAtOrBelow } from '@game-infra/story-schemas'
120
120
 
121
- storyNodeId([]); // 'root'
122
- childStoryNodeId("root", "take-the-tunnel"); // 'root.take-the-tunnel'
123
- isStoryNodeAtOrBelow("root.take.left", "root.take"); // true
124
- isStoryNodeAtOrBelow("root.taken", "root.take"); // false
121
+ storyNodeId([]) // 'root'
122
+ childStoryNodeId('root', 'take-the-tunnel') // 'root.take-the-tunnel'
123
+ isStoryNodeAtOrBelow('root.take.left', 'root.take') // true
124
+ isStoryNodeAtOrBelow('root.taken', 'root.take') // false
125
125
  ```
126
126
 
127
127
  Segments join with `.` rather than `/` because a beat id travels as a single URL path segment, which a slash would split; the dot is also what `cascade=prefix` sweeps on.
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AA8DA;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;QAKX,GAAG;;;;;;;;;;;;;;;CAC5B,CAAC;AAEH,yEAAyE;AACzE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;QAKX,GAAG;;;;;;;;;;;;;;;CAC5B,CAAC;AAEH,+EAA+E;AAC/E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;QAKX,GAAG;;;;;;;CAC5B,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;QAKf,GAAG;;;;;;;;CAC5B,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;QAMb,GAAG;;;;;;;CAC5B,CAAC"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AA+DA;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;QAKX,GAAG;;;;;;;;;;;;;;;CAC5B,CAAA;AAEF,yEAAyE;AACzE,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;QAKX,GAAG;;;;;;;;;;;;;;;CAC5B,CAAA;AAEF,+EAA+E;AAC/E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;QAKX,GAAG;;;;;;;CAC5B,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;QAKf,GAAG;;;;;;;;CAC5B,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;QAMb,GAAG;;;;;;;CAC5B,CAAA"}
package/dist/contracts.js CHANGED
@@ -1,6 +1,6 @@
1
- import { defineApiContract, withObjectKeys } from "@toad-contracts/valibot";
2
- import { object, optional, string } from "valibot";
3
- import { DesignContentBulkSaveRequestSchema, DesignContentBulkSaveResponseSchema, DesignContentDeleteResponseSchema, DesignContentListResponseSchema, DesignContentLoadResponseSchema, DesignContentSaveRequestSchema, DesignContentSaveResponseSchema, } from "./designContent.js";
1
+ import { defineApiContract, withObjectKeys } from '@toad-contracts/valibot';
2
+ import { object, optional, string } from 'valibot';
3
+ import { DesignContentBulkSaveRequestSchema, DesignContentBulkSaveResponseSchema, DesignContentDeleteResponseSchema, DesignContentListResponseSchema, DesignContentLoadResponseSchema, DesignContentSaveRequestSchema, DesignContentSaveResponseSchema, } from './designContent.js';
4
4
  /**
5
5
  * Typed endpoint contracts for authored design content — worlds, the content
6
6
  * written against them, story arcs, and story beats.
@@ -56,7 +56,7 @@ const deleteQuery = object({ cascade: optional(string()) });
56
56
  * which is the map of what is pregenerated and must not be generated again.
57
57
  */
58
58
  export const designContentListContract = defineApiContract({
59
- method: "get",
59
+ method: 'get',
60
60
  requestPathParamsSchema: gameParams,
61
61
  requestQuerySchema: listQuery,
62
62
  pathResolver: ({ gameId }) => `/games/${gameId}/design-content`,
@@ -64,14 +64,14 @@ export const designContentListContract = defineApiContract({
64
64
  });
65
65
  /** One row by key, or `item: undefined` when nothing is stored there. */
66
66
  export const designContentLoadContract = defineApiContract({
67
- method: "get",
67
+ method: 'get',
68
68
  requestPathParamsSchema: itemParams,
69
69
  pathResolver: ({ gameId, contentType, scopeId, contentId }) => `/games/${gameId}/design-content/${contentType}/${scopeId}/${contentId}`,
70
70
  responsesByStatusCode: { 200: DesignContentLoadResponseSchema },
71
71
  });
72
72
  /** Create or replace one row. Re-saving the same key keeps its `createdAt`. */
73
73
  export const designContentSaveContract = defineApiContract({
74
- method: "post",
74
+ method: 'post',
75
75
  requestPathParamsSchema: gameParams,
76
76
  pathResolver: ({ gameId }) => `/games/${gameId}/design-content`,
77
77
  requestBodySchema: DesignContentSaveRequestSchema,
@@ -82,7 +82,7 @@ export const designContentSaveContract = defineApiContract({
82
82
  * which is how a whole design document lands in one request.
83
83
  */
84
84
  export const designContentBulkSaveContract = defineApiContract({
85
- method: "post",
85
+ method: 'post',
86
86
  requestPathParamsSchema: gameParams,
87
87
  pathResolver: ({ gameId }) => `/games/${gameId}/design-content/bulk`,
88
88
  requestBodySchema: DesignContentBulkSaveRequestSchema,
@@ -95,7 +95,7 @@ export const designContentBulkSaveContract = defineApiContract({
95
95
  * transitively (a world, its content, its arcs, and their beats).
96
96
  */
97
97
  export const designContentDeleteContract = defineApiContract({
98
- method: "delete",
98
+ method: 'delete',
99
99
  requestPathParamsSchema: itemParams,
100
100
  requestQuerySchema: deleteQuery,
101
101
  pathResolver: ({ gameId, contentType, scopeId, contentId }) => `/games/${gameId}/design-content/${contentType}/${scopeId}/${contentId}`,
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EACL,kCAAkC,EAClC,mCAAmC,EACnC,iCAAiC,EACjC,+BAA+B,EAC/B,+BAA+B,EAC/B,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAChE,MAAM,UAAU,GAAG,cAAc,CAC/B,MAAM,CAAC;IACL,MAAM,EAAE,MAAM,EAAE;IAChB,WAAW,EAAE,MAAM,EAAE;IACrB,OAAO,EAAE,MAAM,EAAE;IACjB,SAAS,EAAE,MAAM,EAAE;CACpB,CAAC,CACH,CAAC;AAEF;;;GAGG;AACH,MAAM,SAAS,GAAG,MAAM,CAAC;IACvB,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC/B,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC3B,WAAW,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;CAChC,CAAC,CAAC;AAEH,kEAAkE;AAClE,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAE5D;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;IACzD,MAAM,EAAE,KAAK;IACb,uBAAuB,EAAE,UAAU;IACnC,kBAAkB,EAAE,SAAS;IAC7B,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,MAAM,iBAAiB;IAC/D,qBAAqB,EAAE,EAAE,GAAG,EAAE,+BAA+B,EAAE;CAChE,CAAC,CAAC;AAEH,yEAAyE;AACzE,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;IACzD,MAAM,EAAE,KAAK;IACb,uBAAuB,EAAE,UAAU;IACnC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAC5D,UAAU,MAAM,mBAAmB,WAAW,IAAI,OAAO,IAAI,SAAS,EAAE;IAC1E,qBAAqB,EAAE,EAAE,GAAG,EAAE,+BAA+B,EAAE;CAChE,CAAC,CAAC;AAEH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;IACzD,MAAM,EAAE,MAAM;IACd,uBAAuB,EAAE,UAAU;IACnC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,MAAM,iBAAiB;IAC/D,iBAAiB,EAAE,8BAA8B;IACjD,qBAAqB,EAAE,EAAE,GAAG,EAAE,+BAA+B,EAAE;CAChE,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,iBAAiB,CAAC;IAC7D,MAAM,EAAE,MAAM;IACd,uBAAuB,EAAE,UAAU;IACnC,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,UAAU,MAAM,sBAAsB;IACpE,iBAAiB,EAAE,kCAAkC;IACrD,qBAAqB,EAAE,EAAE,GAAG,EAAE,mCAAmC,EAAE;CACpE,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAAC;IAC3D,MAAM,EAAE,QAAQ;IAChB,uBAAuB,EAAE,UAAU;IACnC,kBAAkB,EAAE,WAAW;IAC/B,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAC5D,UAAU,MAAM,mBAAmB,WAAW,IAAI,OAAO,IAAI,SAAS,EAAE;IAC1E,qBAAqB,EAAE,EAAE,GAAG,EAAE,iCAAiC,EAAE;CAClE,CAAC,CAAC"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type InferOutput } from "valibot";
1
+ import { type InferOutput } from 'valibot';
2
2
  /**
3
3
  * The transport for everything an author writes: worlds, the content written
4
4
  * against them (locations, characters, skill definitions, lore entries), the
@@ -50,7 +50,7 @@ export declare const ROOT_SCOPE = "-";
50
50
  * DESIGN_CONTENT_TYPES.includes('story-node') // true
51
51
  * ```
52
52
  */
53
- export declare const DESIGN_CONTENT_TYPES: readonly ["world", "locations", "characters", "events", "stats", "skills", "perks", "resources", "lore", "story-arc", "story-node"];
53
+ export declare const DESIGN_CONTENT_TYPES: readonly ['world', 'locations', 'characters', 'events', 'stats', 'skills', 'perks', 'resources', 'lore', 'story-arc', 'story-node'];
54
54
  /** One of {@link DESIGN_CONTENT_TYPES}, widened to `string` at the wire boundary. */
55
55
  export type DesignContentType = (typeof DESIGN_CONTENT_TYPES)[number];
56
56
  /**
@@ -171,7 +171,7 @@ export type DesignContentBulkSaveRequest = InferOutput<typeof DesignContentBulkS
171
171
  * - `scope` — the row and everything scoped to it, transitively. Deleting a
172
172
  * world this way also removes its content, its story arcs, and their beats.
173
173
  */
174
- export declare const DESIGN_CONTENT_CASCADES: readonly ["none", "prefix", "scope"];
174
+ export declare const DESIGN_CONTENT_CASCADES: readonly ['none', 'prefix', 'scope'];
175
175
  export declare const DesignContentCascadeSchema: import("valibot").PicklistSchema<readonly ["none", "prefix", "scope"], undefined>;
176
176
  export type DesignContentCascade = InferOutput<typeof DesignContentCascadeSchema>;
177
177
  /** Rows matching the listing, most recently edited first. */
@@ -1 +1 @@
1
- {"version":3,"file":"designContent.d.ts","sourceRoot":"","sources":["../src/designContent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAqD,MAAM,SAAS,CAAC;AAE9F;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,MAAM,CAAC;AAE9B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,oBAAoB,YAC/B,OAAO,EACP,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,OAAO,EACP,WAAW,EACX,MAAM,EACN,WAAW,EACX,YAAY,CACJ,CAAC;AAEX,qFAAqF;AACrF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,yBAAyB;;;;IAIpC,iFAAiF;;;;;aAKjF,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEhF;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,8BAA8B;;;;;;aAMzC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,WAAW,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAE1F;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B;;;aAG1C,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,kCAAkC;;;;;;;;;;;;aAG7C,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,WAAW,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAElG;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,YAAI,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AAE5E,eAAO,MAAM,0BAA0B,mFAAoC,CAAC;AAE5E,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAElF,6DAA6D;AAC7D,eAAO,MAAM,+BAA+B;;;;;;;;QAlG1C,iFAAiF;;;;;;aAoGjF,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAE5F,6DAA6D;AAC7D,eAAO,MAAM,+BAA+B;;;;;;;;QAzG1C,iFAAiF;;;;;;aA2GjF,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAE5F,uCAAuC;AACvC,eAAO,MAAM,+BAA+B;;;;;aAE1C,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAE5F,iFAAiF;AACjF,eAAO,MAAM,mCAAmC;;;;;;aAG9C,CAAC;AAEH,MAAM,MAAM,6BAA6B,GAAG,WAAW,CAAC,OAAO,mCAAmC,CAAC,CAAC;AAEpG,iEAAiE;AACjE,eAAO,MAAM,iCAAiC;;;;;aAE5C,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,WAAW,CAAC,OAAO,iCAAiC,CAAC,CAAC"}
1
+ {"version":3,"file":"designContent.d.ts","sourceRoot":"","sources":["../src/designContent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAqD,MAAM,SAAS,CAAA;AAE7F;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,MAAM,CAAA;AAE7B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,oBAAoB,YAC/B,OAAO,EACP,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,OAAO,EACP,WAAW,EACX,MAAM,EACN,WAAW,EACX,YAAY,CACJ,CAAA;AAEV,qFAAqF;AACrF,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAErE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,yBAAyB;;;;IAIpC,iFAAiF;;;;;aAKjF,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE/E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,8BAA8B;;;;;;aAMzC,CAAA;AAEF,MAAM,MAAM,wBAAwB,GAAG,WAAW,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAEzF;;;;;;;GAOG;AACH,eAAO,MAAM,+BAA+B;;;aAG1C,CAAA;AAEF,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAE3F;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,eAAO,MAAM,kCAAkC;;;;;;;;;;;;aAG7C,CAAA;AAEF,MAAM,MAAM,4BAA4B,GAAG,WAAW,CAAC,OAAO,kCAAkC,CAAC,CAAA;AAEjG;;;;;;;;;GASG;AACH,eAAO,MAAM,uBAAuB,YAAI,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAA;AAE3E,eAAO,MAAM,0BAA0B,mFAAoC,CAAA;AAE3E,MAAM,MAAM,oBAAoB,GAAG,WAAW,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAEjF,6DAA6D;AAC7D,eAAO,MAAM,+BAA+B;;;;;;;;QAlG1C,iFAAiF;;;;;;aAoGjF,CAAA;AAEF,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAE3F,6DAA6D;AAC7D,eAAO,MAAM,+BAA+B;;;;;;;;QAzG1C,iFAAiF;;;;;;aA2GjF,CAAA;AAEF,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAE3F,uCAAuC;AACvC,eAAO,MAAM,+BAA+B;;;;;aAE1C,CAAA;AAEF,MAAM,MAAM,yBAAyB,GAAG,WAAW,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAE3F,iFAAiF;AACjF,eAAO,MAAM,mCAAmC;;;;;;aAG9C,CAAA;AAEF,MAAM,MAAM,6BAA6B,GAAG,WAAW,CAAC,OAAO,mCAAmC,CAAC,CAAA;AAEnG,iEAAiE;AACjE,eAAO,MAAM,iCAAiC;;;;;aAE5C,CAAA;AAEF,MAAM,MAAM,2BAA2B,GAAG,WAAW,CAAC,OAAO,iCAAiC,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
- import { createSuccessResponseSchema } from "@game-infra/api-schemas-core";
2
- import { array, number, object, optional, picklist, string } from "valibot";
1
+ import { createSuccessResponseSchema } from '@game-infra/api-schemas-core';
2
+ import { array, number, object, optional, picklist, string } from 'valibot';
3
3
  /**
4
4
  * The transport for everything an author writes: worlds, the content written
5
5
  * against them (locations, characters, skill definitions, lore entries), the
@@ -28,7 +28,7 @@ import { array, number, object, optional, picklist, string } from "valibot";
28
28
  * }) // '/games/g1/design-content/world/-/the-ash-reckoning'
29
29
  * ```
30
30
  */
31
- export const ROOT_SCOPE = "-";
31
+ export const ROOT_SCOPE = '-';
32
32
  /**
33
33
  * The vocabulary this contract was written against, and how each type is scoped:
34
34
  *
@@ -52,17 +52,17 @@ export const ROOT_SCOPE = "-";
52
52
  * ```
53
53
  */
54
54
  export const DESIGN_CONTENT_TYPES = [
55
- "world",
56
- "locations",
57
- "characters",
58
- "events",
59
- "stats",
60
- "skills",
61
- "perks",
62
- "resources",
63
- "lore",
64
- "story-arc",
65
- "story-node",
55
+ 'world',
56
+ 'locations',
57
+ 'characters',
58
+ 'events',
59
+ 'stats',
60
+ 'skills',
61
+ 'perks',
62
+ 'resources',
63
+ 'lore',
64
+ 'story-arc',
65
+ 'story-node',
66
66
  ];
67
67
  /**
68
68
  * One row.
@@ -169,7 +169,7 @@ export const DesignContentBulkSaveRequestSchema = object({
169
169
  * - `scope` — the row and everything scoped to it, transitively. Deleting a
170
170
  * world this way also removes its content, its story arcs, and their beats.
171
171
  */
172
- export const DESIGN_CONTENT_CASCADES = ["none", "prefix", "scope"];
172
+ export const DESIGN_CONTENT_CASCADES = ['none', 'prefix', 'scope'];
173
173
  export const DesignContentCascadeSchema = picklist(DESIGN_CONTENT_CASCADES);
174
174
  /** Rows matching the listing, most recently edited first. */
175
175
  export const DesignContentListResponseSchema = createSuccessResponseSchema({
@@ -1 +1 @@
1
- {"version":3,"file":"designContent.js","sourceRoot":"","sources":["../src/designContent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"designContent.js","sourceRoot":"","sources":["../src/designContent.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export { DESIGN_CONTENT_CASCADES, DESIGN_CONTENT_TYPES, DesignContentBulkSaveRequestSchema, DesignContentBulkSaveResponseSchema, DesignContentCascadeSchema, DesignContentDeleteResponseSchema, DesignContentListResponseSchema, DesignContentLoadResponseSchema, DesignContentRecordSchema, DesignContentReplaceScopeSchema, DesignContentSaveRequestSchema, DesignContentSaveResponseSchema, ROOT_SCOPE, } from "./designContent.js";
2
- export type { DesignContentBulkSaveRequest, DesignContentBulkSaveResponse, DesignContentCascade, DesignContentDeleteResponse, DesignContentListResponse, DesignContentLoadResponse, DesignContentRecord, DesignContentReplaceScope, DesignContentSaveRequest, DesignContentSaveResponse, DesignContentType, } from "./designContent.js";
3
- export { ActivationDTOSchema, ChoiceDefinitionDTOSchema, ConditionalTextDTOSchema, ConsumableConditionDTOSchema, EncounterStageDTOSchema, PreconditionDTOSchema, STORY_BEAT_ORIGINS, TextFragmentDTOSchema, TextVariantDTOSchema, conditionalTextFrom, flattenConditionalText, resolveConditionalText, resolveConditionalTextParts, StoryArcPayloadSchema, StoryBeatOriginSchema, StoryBeatPayloadSchema, WorldPayloadSchema, } from "./storyPayloads.js";
4
- export type { ActivationDTO, ChoiceDefinitionDTO, ConditionalTextDTO, ConsumableConditionDTO, EncounterStageDTO, PreconditionDTO, PreconditionPredicate, ResolvedTextFragment, StoryArcPayload, StoryBeatOrigin, StoryBeatPayload, WorldPayload, } from "./storyPayloads.js";
5
- export { NODE_ID_SEPARATOR, ROOT_NODE_ID, childStoryNodeId, isStoryNodeAtOrBelow, parentStoryNodeId, storyNodeChoiceIds, storyNodeDepth, storyNodeId, storyNodePath, } from "./nodePaths.js";
6
- export { designContentBulkSaveContract, designContentDeleteContract, designContentListContract, designContentLoadContract, designContentSaveContract, } from "./contracts.js";
1
+ export { DESIGN_CONTENT_CASCADES, DESIGN_CONTENT_TYPES, DesignContentBulkSaveRequestSchema, DesignContentBulkSaveResponseSchema, DesignContentCascadeSchema, DesignContentDeleteResponseSchema, DesignContentListResponseSchema, DesignContentLoadResponseSchema, DesignContentRecordSchema, DesignContentReplaceScopeSchema, DesignContentSaveRequestSchema, DesignContentSaveResponseSchema, ROOT_SCOPE, } from './designContent.js';
2
+ export type { DesignContentBulkSaveRequest, DesignContentBulkSaveResponse, DesignContentCascade, DesignContentDeleteResponse, DesignContentListResponse, DesignContentLoadResponse, DesignContentRecord, DesignContentReplaceScope, DesignContentSaveRequest, DesignContentSaveResponse, DesignContentType, } from './designContent.js';
3
+ export { ActivationDTOSchema, ChoiceDefinitionDTOSchema, ConditionalTextDTOSchema, ConsumableConditionDTOSchema, EncounterStageDTOSchema, PreconditionDTOSchema, STORY_BEAT_ORIGINS, TextFragmentDTOSchema, TextVariantDTOSchema, conditionalTextFrom, flattenConditionalText, resolveConditionalText, resolveConditionalTextParts, StoryArcPayloadSchema, StoryBeatOriginSchema, StoryBeatPayloadSchema, WorldPayloadSchema, } from './storyPayloads.js';
4
+ export type { ActivationDTO, ChoiceDefinitionDTO, ConditionalTextDTO, ConsumableConditionDTO, EncounterStageDTO, PreconditionDTO, PreconditionPredicate, ResolvedTextFragment, StoryArcPayload, StoryBeatOrigin, StoryBeatPayload, WorldPayload, } from './storyPayloads.js';
5
+ export { NODE_ID_SEPARATOR, ROOT_NODE_ID, childStoryNodeId, isStoryNodeAtOrBelow, parentStoryNodeId, storyNodeChoiceIds, storyNodeDepth, storyNodeId, storyNodePath, } from './nodePaths.js';
6
+ export { designContentBulkSaveContract, designContentDeleteContract, designContentListContract, designContentLoadContract, designContentSaveContract, } from './contracts.js';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,kCAAkC,EAClC,mCAAmC,EACnC,0BAA0B,EAC1B,iCAAiC,EACjC,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAC/B,8BAA8B,EAC9B,+BAA+B,EAC/B,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,4BAA4B,EAC5B,6BAA6B,EAC7B,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,aAAa,GACd,MAAM,gBAAgB,CAAC;AAKxB,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,kCAAkC,EAClC,mCAAmC,EACnC,0BAA0B,EAC1B,iCAAiC,EACjC,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAC/B,8BAA8B,EAC9B,+BAA+B,EAC/B,UAAU,GACX,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,4BAA4B,EAC5B,6BAA6B,EAC7B,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,oBAAoB,CAAA;AAO3B,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,oBAAoB,CAAA;AAC3B,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,YAAY,GACb,MAAM,oBAAoB,CAAA;AAI3B,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,aAAa,GACd,MAAM,gBAAgB,CAAA;AAKvB,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -1,18 +1,18 @@
1
1
  // Explicit barrel (no export *). Every public symbol is re-exported by name.
2
2
  // The transport: one keyed, scoped, typed JSON row for every kind of authored
3
3
  // design content.
4
- export { DESIGN_CONTENT_CASCADES, DESIGN_CONTENT_TYPES, DesignContentBulkSaveRequestSchema, DesignContentBulkSaveResponseSchema, DesignContentCascadeSchema, DesignContentDeleteResponseSchema, DesignContentListResponseSchema, DesignContentLoadResponseSchema, DesignContentRecordSchema, DesignContentReplaceScopeSchema, DesignContentSaveRequestSchema, DesignContentSaveResponseSchema, ROOT_SCOPE, } from "./designContent.js";
4
+ export { DESIGN_CONTENT_CASCADES, DESIGN_CONTENT_TYPES, DesignContentBulkSaveRequestSchema, DesignContentBulkSaveResponseSchema, DesignContentCascadeSchema, DesignContentDeleteResponseSchema, DesignContentListResponseSchema, DesignContentLoadResponseSchema, DesignContentRecordSchema, DesignContentReplaceScopeSchema, DesignContentSaveRequestSchema, DesignContentSaveResponseSchema, ROOT_SCOPE, } from './designContent.js';
5
5
  // What goes inside a row's `data`. Not part of any endpoint — the service never
6
6
  // parses it — but shared so two clients agree on the shapes.
7
7
  //
8
8
  // A beat is an encounter stage and a branch is a choice: the event editor's own
9
9
  // DTOs, re-exported here so a story client needs one import rather than two.
10
- export { ActivationDTOSchema, ChoiceDefinitionDTOSchema, ConditionalTextDTOSchema, ConsumableConditionDTOSchema, EncounterStageDTOSchema, PreconditionDTOSchema, STORY_BEAT_ORIGINS, TextFragmentDTOSchema, TextVariantDTOSchema, conditionalTextFrom, flattenConditionalText, resolveConditionalText, resolveConditionalTextParts, StoryArcPayloadSchema, StoryBeatOriginSchema, StoryBeatPayloadSchema, WorldPayloadSchema, } from "./storyPayloads.js";
10
+ export { ActivationDTOSchema, ChoiceDefinitionDTOSchema, ConditionalTextDTOSchema, ConsumableConditionDTOSchema, EncounterStageDTOSchema, PreconditionDTOSchema, STORY_BEAT_ORIGINS, TextFragmentDTOSchema, TextVariantDTOSchema, conditionalTextFrom, flattenConditionalText, resolveConditionalText, resolveConditionalTextParts, StoryArcPayloadSchema, StoryBeatOriginSchema, StoryBeatPayloadSchema, WorldPayloadSchema, } from './storyPayloads.js';
11
11
  // Beat addressing, shared by the client that mints ids and the service that
12
12
  // sweeps subtrees.
13
- export { NODE_ID_SEPARATOR, ROOT_NODE_ID, childStoryNodeId, isStoryNodeAtOrBelow, parentStoryNodeId, storyNodeChoiceIds, storyNodeDepth, storyNodeId, storyNodePath, } from "./nodePaths.js";
13
+ export { NODE_ID_SEPARATOR, ROOT_NODE_ID, childStoryNodeId, isStoryNodeAtOrBelow, parentStoryNodeId, storyNodeChoiceIds, storyNodeDepth, storyNodeId, storyNodePath, } from './nodePaths.js';
14
14
  // Typed endpoint contracts (toad-contracts). Each contract carries its own
15
15
  // `pathResolver`; wire them into a client via @toad-contracts/frontend-http-client
16
16
  // and into a Hono service via @toad-contracts/hono.
17
- export { designContentBulkSaveContract, designContentDeleteContract, designContentListContract, designContentLoadContract, designContentSaveContract, } from "./contracts.js";
17
+ export { designContentBulkSaveContract, designContentDeleteContract, designContentListContract, designContentLoadContract, designContentSaveContract, } from './contracts.js';
18
18
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,8EAA8E;AAC9E,kBAAkB;AAClB,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,kCAAkC,EAClC,mCAAmC,EACnC,0BAA0B,EAC1B,iCAAiC,EACjC,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAC/B,8BAA8B,EAC9B,+BAA+B,EAC/B,UAAU,GACX,MAAM,oBAAoB,CAAC;AAe5B,gFAAgF;AAChF,6DAA6D;AAC7D,EAAE;AACF,gFAAgF;AAChF,6EAA6E;AAC7E,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAgB5B,4EAA4E;AAC5E,mBAAmB;AACnB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB,2EAA2E;AAC3E,mFAAmF;AACnF,oDAAoD;AACpD,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,8EAA8E;AAC9E,kBAAkB;AAClB,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,kCAAkC,EAClC,mCAAmC,EACnC,0BAA0B,EAC1B,iCAAiC,EACjC,+BAA+B,EAC/B,+BAA+B,EAC/B,yBAAyB,EACzB,+BAA+B,EAC/B,8BAA8B,EAC9B,+BAA+B,EAC/B,UAAU,GACX,MAAM,oBAAoB,CAAA;AAe3B,gFAAgF;AAChF,6DAA6D;AAC7D,EAAE;AACF,gFAAgF;AAChF,6EAA6E;AAC7E,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,EAC3B,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,oBAAoB,CAAA;AAgB3B,4EAA4E;AAC5E,mBAAmB;AACnB,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,aAAa,GACd,MAAM,gBAAgB,CAAA;AAEvB,2EAA2E;AAC3E,mFAAmF;AACnF,oDAAoD;AACpD,OAAO,EACL,6BAA6B,EAC7B,2BAA2B,EAC3B,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,gBAAgB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"nodePaths.d.ts","sourceRoot":"","sources":["../src/nodePaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,uCAAuC;AACvC,eAAO,MAAM,YAAY,SAAS,CAAC;AAEnC,qDAAqD;AACrD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAEhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAElE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAGpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAEhF"}
1
+ {"version":3,"file":"nodePaths.d.ts","sourceRoot":"","sources":["../src/nodePaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,uCAAuC;AACvC,eAAO,MAAM,YAAY,SAAS,CAAA;AAElC,qDAAqD;AACrD,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAEpC;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAEhE;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAElE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAGpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAEhF"}
package/dist/nodePaths.js CHANGED
@@ -16,9 +16,9 @@
16
16
  * for reading: it is what a breadcrumb shows.
17
17
  */
18
18
  /** The opening beat of every story. */
19
- export const ROOT_NODE_ID = "root";
19
+ export const ROOT_NODE_ID = 'root';
20
20
  /** Separator between choice ids inside a node id. */
21
- export const NODE_ID_SEPARATOR = ".";
21
+ export const NODE_ID_SEPARATOR = '.';
22
22
  /**
23
23
  * The id of the beat reached by taking `choiceIds` in order.
24
24
  *
@@ -44,7 +44,7 @@ export function storyNodeId(choiceIds) {
44
44
  * ```
45
45
  */
46
46
  export function storyNodePath(choiceIds) {
47
- return choiceIds.join("/");
47
+ return choiceIds.join('/');
48
48
  }
49
49
  /**
50
50
  * The choice trail a node id encodes. The inverse of {@link storyNodeId}.
@@ -1 +1 @@
1
- {"version":3,"file":"nodePaths.js","sourceRoot":"","sources":["../src/nodePaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,uCAAuC;AACvC,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;AAEnC,qDAAqD;AACrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAErC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,SAA4B;IACtD,OAAO,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,SAA4B;IACxD,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACjD,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AACrE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAoB,EAAE,QAAgB;IACrE,OAAO,GAAG,YAAY,GAAG,iBAAiB,GAAG,QAAQ,EAAE,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAClD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;AAC3C,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,UAAkB;IACrE,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,iBAAiB,EAAE,CAAC,CAAC;AACzF,CAAC"}
1
+ {"version":3,"file":"nodePaths.js","sourceRoot":"","sources":["../src/nodePaths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,uCAAuC;AACvC,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAA;AAElC,qDAAqD;AACrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAA;AAEpC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,SAA4B;IACtD,OAAO,CAAC,YAAY,EAAE,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;AAC7D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,SAA4B;IACxD,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC5B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;IAChD,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;AACpE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,YAAoB,EAAE,QAAgB;IACrE,OAAO,GAAG,YAAY,GAAG,iBAAiB,GAAG,QAAQ,EAAE,CAAA;AACzD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAA;IACjD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AACtD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC,MAAM,CAAA;AAC1C,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,UAAkB;IACrE,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,iBAAiB,EAAE,CAAC,CAAA;AACxF,CAAC"}
@@ -1,4 +1,4 @@
1
- import { type InferOutput } from "valibot";
1
+ import { type InferOutput } from 'valibot';
2
2
  /**
3
3
  * What goes *inside* a design-content row's `data` for story mode.
4
4
  *
@@ -62,6 +62,9 @@ export type WorldPayload = InferOutput<typeof WorldPayloadSchema>;
62
62
  * tags: ['mystery', 'descent'],
63
63
  * protagonistId: 'tallow',
64
64
  * openingLocationId: 'quiet-forge',
65
+ * playerPowerLevel: 5,
66
+ * playerStatValues: [{ statId: 'wits', value: 7 }],
67
+ * playerSkillValues: [{ skillId: 'salvage', rank: 5 }],
65
68
  * }
66
69
  * ```
67
70
  */
@@ -97,10 +100,22 @@ export declare const StoryArcPayloadSchema: import("valibot").ObjectSchema<{
97
100
  readonly protagonistId: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
98
101
  /** A location id from the world, when the arc opens somewhere in particular. */
99
102
  readonly openingLocationId: import("valibot").OptionalSchema<import("valibot").StringSchema<undefined>, undefined>;
103
+ /** The player's story-specific capability, from ordinary novice to world-shaping. */
104
+ readonly playerPowerLevel: import("valibot").SchemaWithPipe<readonly [import("valibot").NumberSchema<undefined>, import("valibot").IntegerAction<number, undefined>, import("valibot").MinValueAction<number, 1, undefined>, import("valibot").MaxValueAction<number, 10, undefined>]>;
105
+ /** Story-specific starting stats, calibrated to the protagonist described by this arc. */
106
+ readonly playerStatValues: import("valibot").ArraySchema<import("valibot").ObjectSchema<{
107
+ readonly statId: import("valibot").StringSchema<undefined>;
108
+ readonly value: import("valibot").NumberSchema<undefined>;
109
+ }, undefined>, undefined>;
110
+ /** Story-specific starting skill ranks, calibrated to the protagonist described by this arc. */
111
+ readonly playerSkillValues: import("valibot").ArraySchema<import("valibot").ObjectSchema<{
112
+ readonly skillId: import("valibot").StringSchema<undefined>;
113
+ readonly rank: import("valibot").SchemaWithPipe<readonly [import("valibot").NumberSchema<undefined>, import("valibot").IntegerAction<number, undefined>, import("valibot").MinValueAction<number, 0, undefined>, import("valibot").MaxValueAction<number, 10, undefined>]>;
114
+ }, undefined>, undefined>;
100
115
  }, undefined>;
101
116
  export type StoryArcPayload = InferOutput<typeof StoryArcPayloadSchema>;
102
117
  /** Whether a beat's narration came from a model or from the player's own words. */
103
- export declare const STORY_BEAT_ORIGINS: readonly ["generated", "authored"];
118
+ export declare const STORY_BEAT_ORIGINS: readonly ['generated', 'authored'];
104
119
  export declare const StoryBeatOriginSchema: import("valibot").PicklistSchema<readonly ["generated", "authored"], undefined>;
105
120
  export type StoryBeatOrigin = InferOutput<typeof StoryBeatOriginSchema>;
106
121
  /**
@@ -281,6 +296,6 @@ export type StoryBeatPayload = InferOutput<typeof StoryBeatPayloadSchema>;
281
296
  * Re-exported so a story client needs one import, not two, for the shapes it
282
297
  * reads out of a beat.
283
298
  */
284
- export { ActivationDTOSchema, ChoiceDefinitionDTOSchema, ConditionalTextDTOSchema, ConsumableConditionDTOSchema, EncounterStageDTOSchema, PreconditionDTOSchema, TextFragmentDTOSchema, TextVariantDTOSchema, conditionalTextFrom, flattenConditionalText, resolveConditionalText, resolveConditionalTextParts, } from "@game-infra/event-schemas";
285
- export type { ActivationDTO, ChoiceDefinitionDTO, ConditionalTextDTO, ConsumableConditionDTO, EncounterStageDTO, PreconditionDTO, PreconditionPredicate, ResolvedTextFragment, } from "@game-infra/event-schemas";
299
+ export { ActivationDTOSchema, ChoiceDefinitionDTOSchema, ConditionalTextDTOSchema, ConsumableConditionDTOSchema, EncounterStageDTOSchema, PreconditionDTOSchema, TextFragmentDTOSchema, TextVariantDTOSchema, conditionalTextFrom, flattenConditionalText, resolveConditionalText, resolveConditionalTextParts, } from '@game-infra/event-schemas';
300
+ export type { ActivationDTO, ChoiceDefinitionDTO, ConditionalTextDTO, ConsumableConditionDTO, EncounterStageDTO, PreconditionDTO, PreconditionPredicate, ResolvedTextFragment, } from '@game-infra/event-schemas';
286
301
  //# sourceMappingURL=storyPayloads.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"storyPayloads.d.ts","sourceRoot":"","sources":["../src/storyPayloads.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,WAAW,EASjB,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;IAE7B,+BAA+B;;;;;aAK/B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,qBAAqB;;;;;;IAMhC,sFAAsF;;;;;;;;;;;;;;IAGtF,mEAAmE;;;;;IAKnE,wEAAwE;;;IAGxE,mEAAmE;;IAEnE,gFAAgF;;aAEhF,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAExE,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,YAAI,WAAW,EAAE,UAAU,CAAU,CAAC;AAErE,eAAO,MAAM,qBAAqB,iFAA+B,CAAC;AAElE,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEjC,6EAA6E;;;IAG7E,wDAAwD;;IAExD,qDAAqD;;aAErD,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE1E;;;GAGG;AACH,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"storyPayloads.d.ts","sourceRoot":"","sources":["../src/storyPayloads.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,WAAW,EAajB,MAAM,SAAS,CAAA;AAEhB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;IAE7B,+BAA+B;;;;;aAK/B,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,qBAAqB;;;;;;IAMhC,sFAAsF;;;;;;;;;;;;;;IAGtF,mEAAmE;;;;;IAKnE,wEAAwE;;;IAGxE,mEAAmE;;IAEnE,gFAAgF;;IAEhF,qFAAqF;;IAErF,0FAA0F;;;;;IAO1F,gGAAgG;;;;;aAOhG,CAAA;AAEF,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEvE,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,YAAI,WAAW,EAAE,UAAU,CAAU,CAAA;AAEpE,eAAO,MAAM,qBAAqB,iFAA+B,CAAA;AAEjE,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEjC,6EAA6E;;;IAG7E,wDAAwD;;IAExD,qDAAqD;;aAErD,CAAA;AAEF,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAEzE;;;GAGG;AACH,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAA;AAClC,YAAY,EACV,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,2BAA2B,CAAA"}
@@ -1,5 +1,5 @@
1
- import { ActivationDTOSchema, EncounterStageDTOSchema, EventDescriptionSchema, EventRaritySchema, EventParticipantPersonaDTOSchema, PreconditionDTOSchema, } from "@game-infra/event-schemas";
2
- import { array, boolean, number, object, optional, picklist, record, string, } from "valibot";
1
+ import { ActivationDTOSchema, EncounterStageDTOSchema, EventDescriptionSchema, EventRaritySchema, EventParticipantPersonaDTOSchema, PreconditionDTOSchema, } from '@game-infra/event-schemas';
2
+ import { array, boolean, integer, maxValue, minValue, number, object, optional, picklist, pipe, record, string, } from 'valibot';
3
3
  /**
4
4
  * What goes *inside* a design-content row's `data` for story mode.
5
5
  *
@@ -62,6 +62,9 @@ export const WorldPayloadSchema = object({
62
62
  * tags: ['mystery', 'descent'],
63
63
  * protagonistId: 'tallow',
64
64
  * openingLocationId: 'quiet-forge',
65
+ * playerPowerLevel: 5,
66
+ * playerStatValues: [{ statId: 'wits', value: 7 }],
67
+ * playerSkillValues: [{ skillId: 'salvage', rank: 5 }],
65
68
  * }
66
69
  * ```
67
70
  */
@@ -84,9 +87,21 @@ export const StoryArcPayloadSchema = object({
84
87
  protagonistId: optional(string()),
85
88
  /** A location id from the world, when the arc opens somewhere in particular. */
86
89
  openingLocationId: optional(string()),
90
+ /** The player's story-specific capability, from ordinary novice to world-shaping. */
91
+ playerPowerLevel: pipe(number(), integer(), minValue(1), maxValue(10)),
92
+ /** Story-specific starting stats, calibrated to the protagonist described by this arc. */
93
+ playerStatValues: array(object({
94
+ statId: string(),
95
+ value: number(),
96
+ })),
97
+ /** Story-specific starting skill ranks, calibrated to the protagonist described by this arc. */
98
+ playerSkillValues: array(object({
99
+ skillId: string(),
100
+ rank: pipe(number(), integer(), minValue(0), maxValue(10)),
101
+ })),
87
102
  });
88
103
  /** Whether a beat's narration came from a model or from the player's own words. */
89
- export const STORY_BEAT_ORIGINS = ["generated", "authored"];
104
+ export const STORY_BEAT_ORIGINS = ['generated', 'authored'];
90
105
  export const StoryBeatOriginSchema = picklist(STORY_BEAT_ORIGINS);
91
106
  /**
92
107
  * One beat of a story: an `EncounterStageDTO`, plus how it came to exist.
@@ -144,5 +159,5 @@ export const StoryBeatPayloadSchema = object({
144
159
  * Re-exported so a story client needs one import, not two, for the shapes it
145
160
  * reads out of a beat.
146
161
  */
147
- export { ActivationDTOSchema, ChoiceDefinitionDTOSchema, ConditionalTextDTOSchema, ConsumableConditionDTOSchema, EncounterStageDTOSchema, PreconditionDTOSchema, TextFragmentDTOSchema, TextVariantDTOSchema, conditionalTextFrom, flattenConditionalText, resolveConditionalText, resolveConditionalTextParts, } from "@game-infra/event-schemas";
162
+ export { ActivationDTOSchema, ChoiceDefinitionDTOSchema, ConditionalTextDTOSchema, ConsumableConditionDTOSchema, EncounterStageDTOSchema, PreconditionDTOSchema, TextFragmentDTOSchema, TextVariantDTOSchema, conditionalTextFrom, flattenConditionalText, resolveConditionalText, resolveConditionalTextParts, } from '@game-infra/event-schemas';
148
163
  //# sourceMappingURL=storyPayloads.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storyPayloads.js","sourceRoot":"","sources":["../src/storyPayloads.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,gCAAgC,EAChC,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,KAAK,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,GACP,MAAM,SAAS,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;IACvC,KAAK,EAAE,MAAM,EAAE;IACf,+BAA+B;IAC/B,OAAO,EAAE,MAAM,EAAE;IACjB,OAAO,EAAE,MAAM,EAAE;IACjB,IAAI,EAAE,MAAM,EAAE;IACd,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;CACxB,CAAC,CAAC;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC;IAC1C,KAAK,EAAE,MAAM,EAAE;IACf,WAAW,EAAE,sBAAsB;IACnC,MAAM,EAAE,iBAAiB;IACzB,WAAW,EAAE,OAAO,EAAE;IACtB,YAAY,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;IACjC,sFAAsF;IACtF,mBAAmB,EAAE,QAAQ,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC3D,wBAAwB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,gCAAgC,CAAC,CAAC;IACtF,mEAAmE;IACnE,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAEnD,oEAAoE;IAEpE,wEAAwE;IACxE,IAAI,EAAE,MAAM,EAAE;IACd,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IACrB,mEAAmE;IACnE,aAAa,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACjC,gFAAgF;IAChF,iBAAiB,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;CACtC,CAAC,CAAC;AAIH,mFAAmF;AACnF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,WAAW,EAAE,UAAU,CAAU,CAAC;AAErE,MAAM,CAAC,MAAM,qBAAqB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAIlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC;IAC3C,GAAG,uBAAuB,CAAC,OAAO;IAClC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,EAAE;IACf,MAAM,EAAE,qBAAqB;IAC7B,wDAAwD;IACxD,QAAQ,EAAE,MAAM,EAAE;IAClB,qDAAqD;IACrD,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;CACvB,CAAC,CAAC;AAIH;;;GAGG;AACH,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,4BAA4B,EAC5B,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"storyPayloads.js","sourceRoot":"","sources":["../src/storyPayloads.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@game-infra/story-schemas",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Story-mode API contract: branching arcs and beats built on the event-editor's encounter-stage and choice DTOs, behind one design-content resource",
5
5
  "homepage": "https://github.com/kibertoad/game-infra/tree/main/packages/schemas/story-schemas#readme",
6
6
  "bugs": {
@@ -33,11 +33,11 @@
33
33
  "@game-infra/event-schemas": "1.1.0"
34
34
  },
35
35
  "devDependencies": {
36
- "@types/node": "^26.1.2",
36
+ "@types/node": "^26.4.1",
37
37
  "rimraf": "^6.1.3",
38
38
  "typescript": "^7.0.2",
39
39
  "valibot": "^1.4.2",
40
- "vitest": "^4.1.10"
40
+ "vitest": "^4.1.11"
41
41
  },
42
42
  "peerDependencies": {
43
43
  "valibot": "^1.4.0"