@miadi/ncp-story-studio 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/LICENSE +21 -0
  2. package/PHASES.md +160 -0
  3. package/README.md +140 -0
  4. package/assets/PROVENANCE.json +5 -0
  5. package/assets/examples/PROVENANCE.json +26 -0
  6. package/assets/examples/anora.json +228 -0
  7. package/assets/examples/example-story.json +112 -0
  8. package/assets/examples/the-shawshank-redemption.json +2068 -0
  9. package/assets/examples/weaver_of_words__the_catalyst_of_change_251101.json +1132 -0
  10. package/assets/ncp-schema.json +794 -0
  11. package/assets/terminology.json +2919 -0
  12. package/dist/agents/adapter.d.ts +60 -0
  13. package/dist/agents/adapter.d.ts.map +1 -0
  14. package/dist/agents/adapter.js +69 -0
  15. package/dist/agents/adapter.js.map +1 -0
  16. package/dist/agents/context.d.ts +19 -0
  17. package/dist/agents/context.d.ts.map +1 -0
  18. package/dist/agents/context.js +49 -0
  19. package/dist/agents/context.js.map +1 -0
  20. package/dist/agents/index.d.ts +5 -0
  21. package/dist/agents/index.d.ts.map +1 -0
  22. package/dist/agents/index.js +7 -0
  23. package/dist/agents/index.js.map +1 -0
  24. package/dist/agents/links.d.ts +41 -0
  25. package/dist/agents/links.d.ts.map +1 -0
  26. package/dist/agents/links.js +76 -0
  27. package/dist/agents/links.js.map +1 -0
  28. package/dist/agents/personas.d.ts +16 -0
  29. package/dist/agents/personas.d.ts.map +1 -0
  30. package/dist/agents/personas.js +34 -0
  31. package/dist/agents/personas.js.map +1 -0
  32. package/dist/fixtures/index.d.ts +27 -0
  33. package/dist/fixtures/index.d.ts.map +1 -0
  34. package/dist/fixtures/index.js +69 -0
  35. package/dist/fixtures/index.js.map +1 -0
  36. package/dist/graph/index.d.ts +60 -0
  37. package/dist/graph/index.d.ts.map +1 -0
  38. package/dist/graph/index.js +97 -0
  39. package/dist/graph/index.js.map +1 -0
  40. package/dist/graph/react/index.d.ts +2 -0
  41. package/dist/graph/react/index.d.ts.map +1 -0
  42. package/dist/graph/react/index.js +5 -0
  43. package/dist/graph/react/index.js.map +1 -0
  44. package/dist/graph/react/story-graph.d.ts +17 -0
  45. package/dist/graph/react/story-graph.d.ts.map +1 -0
  46. package/dist/graph/react/story-graph.js +26 -0
  47. package/dist/graph/react/story-graph.js.map +1 -0
  48. package/dist/graph/tones.d.ts +36 -0
  49. package/dist/graph/tones.d.ts.map +1 -0
  50. package/dist/graph/tones.js +38 -0
  51. package/dist/graph/tones.js.map +1 -0
  52. package/dist/index.d.ts +33 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +24 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/schema/constants.d.ts +3 -0
  57. package/dist/schema/constants.d.ts.map +1 -0
  58. package/dist/schema/constants.js +3 -0
  59. package/dist/schema/constants.js.map +1 -0
  60. package/dist/schema/extensions.d.ts +14 -0
  61. package/dist/schema/extensions.d.ts.map +1 -0
  62. package/dist/schema/extensions.js +61 -0
  63. package/dist/schema/extensions.js.map +1 -0
  64. package/dist/schema/generated-terms.d.ts +7 -0
  65. package/dist/schema/generated-terms.d.ts.map +1 -0
  66. package/dist/schema/generated-terms.js +518 -0
  67. package/dist/schema/generated-terms.js.map +1 -0
  68. package/dist/schema/generated.d.ts +64 -0
  69. package/dist/schema/generated.d.ts.map +1 -0
  70. package/dist/schema/generated.js +497 -0
  71. package/dist/schema/generated.js.map +1 -0
  72. package/dist/schema/index.d.ts +48 -0
  73. package/dist/schema/index.d.ts.map +1 -0
  74. package/dist/schema/index.js +92 -0
  75. package/dist/schema/index.js.map +1 -0
  76. package/dist/schema/normalize.d.ts +20 -0
  77. package/dist/schema/normalize.d.ts.map +1 -0
  78. package/dist/schema/normalize.js +88 -0
  79. package/dist/schema/normalize.js.map +1 -0
  80. package/dist/schema/read.d.ts +31 -0
  81. package/dist/schema/read.d.ts.map +1 -0
  82. package/dist/schema/read.js +640 -0
  83. package/dist/schema/read.js.map +1 -0
  84. package/dist/schema/terms.d.ts +11 -0
  85. package/dist/schema/terms.d.ts.map +1 -0
  86. package/dist/schema/terms.js +80 -0
  87. package/dist/schema/terms.js.map +1 -0
  88. package/dist/schema/types.d.ts +140 -0
  89. package/dist/schema/types.d.ts.map +1 -0
  90. package/dist/schema/types.js +2 -0
  91. package/dist/schema/types.js.map +1 -0
  92. package/dist/schema/validate.d.ts +54 -0
  93. package/dist/schema/validate.d.ts.map +1 -0
  94. package/dist/schema/validate.js +490 -0
  95. package/dist/schema/validate.js.map +1 -0
  96. package/dist/store/index.d.ts +76 -0
  97. package/dist/store/index.d.ts.map +1 -0
  98. package/dist/store/index.js +96 -0
  99. package/dist/store/index.js.map +1 -0
  100. package/dist/store/json.d.ts +35 -0
  101. package/dist/store/json.d.ts.map +1 -0
  102. package/dist/store/json.js +192 -0
  103. package/dist/store/json.js.map +1 -0
  104. package/dist/store/mutations.d.ts +45 -0
  105. package/dist/store/mutations.d.ts.map +1 -0
  106. package/dist/store/mutations.js +181 -0
  107. package/dist/store/mutations.js.map +1 -0
  108. package/dist/store/neon.d.ts +42 -0
  109. package/dist/store/neon.d.ts.map +1 -0
  110. package/dist/store/neon.js +167 -0
  111. package/dist/store/neon.js.map +1 -0
  112. package/dist/terminology/generated.d.ts +3 -0
  113. package/dist/terminology/generated.d.ts.map +1 -0
  114. package/dist/terminology/generated.js +2923 -0
  115. package/dist/terminology/generated.js.map +1 -0
  116. package/dist/terminology/index.d.ts +20 -0
  117. package/dist/terminology/index.d.ts.map +1 -0
  118. package/dist/terminology/index.js +71 -0
  119. package/dist/terminology/index.js.map +1 -0
  120. package/dist/terminology/types.d.ts +25 -0
  121. package/dist/terminology/types.d.ts.map +1 -0
  122. package/dist/terminology/types.js +2 -0
  123. package/dist/terminology/types.js.map +1 -0
  124. package/package.json +117 -0
  125. package/rispecs/README.rise.md +5 -0
  126. package/rispecs/RISPEC.md +9 -0
@@ -0,0 +1,88 @@
1
+ // Real NCP files in the wild are not all shaped the same way. The canonical
2
+ // examples ship in three layouts, and older exports omit whole collections.
3
+ // Normalizing them is fine; doing it silently is not, so every adaptation is
4
+ // reported as a note the caller can show.
5
+ import { NCP_SCHEMA_VERSION } from './constants.js';
6
+ const EMPTY_SUBTEXT = {
7
+ perspectives: [],
8
+ players: [],
9
+ dynamics: [],
10
+ storypoints: [],
11
+ storybeats: [],
12
+ };
13
+ /**
14
+ * Accepts:
15
+ * - `{ schema_version, story }` — canonical, passed through
16
+ * - `{ story, narratives }` — the layout `anora.json` and `the-shawshank-redemption.json` use
17
+ * - `{ story }` without a schema version
18
+ * - a bare story object
19
+ */
20
+ export function normalizeNcpInput(input, options) {
21
+ const notes = [];
22
+ if (typeof input !== 'object' || input === null) {
23
+ throw new TypeError('an NCP document must be an object');
24
+ }
25
+ const raw = input;
26
+ let storyRaw;
27
+ if (typeof raw['story'] === 'object' && raw['story'] !== null) {
28
+ storyRaw = { ...raw['story'] };
29
+ }
30
+ else if (Array.isArray(raw['narratives'])) {
31
+ storyRaw = { ...raw };
32
+ notes.push({ path: '$', action: 'treated the top-level object as the story' });
33
+ }
34
+ else {
35
+ throw new TypeError('no `story` object and no `narratives` array: this is not an NCP document');
36
+ }
37
+ if (!Array.isArray(storyRaw['narratives']) && Array.isArray(raw['narratives'])) {
38
+ storyRaw['narratives'] = raw['narratives'];
39
+ notes.push({ path: '$.narratives', action: 'moved top-level `narratives` under `story`' });
40
+ }
41
+ if (!Array.isArray(storyRaw['narratives'])) {
42
+ storyRaw['narratives'] = [];
43
+ notes.push({ path: '$.story.narratives', action: 'added an empty `narratives` array' });
44
+ }
45
+ const narratives = storyRaw['narratives'].map((narrativeRaw, index) => normalizeNarrative(narrativeRaw, `$.story.narratives[${index}]`, notes));
46
+ const schemaVersion = typeof raw['schema_version'] === 'string' ? raw['schema_version'] : (options?.schemaVersion ?? NCP_SCHEMA_VERSION);
47
+ if (typeof raw['schema_version'] !== 'string') {
48
+ notes.push({ path: '$.schema_version', action: `assumed \`${schemaVersion}\`` });
49
+ }
50
+ const story = { ...storyRaw, narratives };
51
+ return { document: { schema_version: schemaVersion, story }, notes };
52
+ }
53
+ function normalizeNarrative(input, path, notes) {
54
+ if (typeof input !== 'object' || input === null) {
55
+ throw new TypeError(`${path} is not a narrative object`);
56
+ }
57
+ const raw = { ...input };
58
+ const subtextRaw = (typeof raw['subtext'] === 'object' && raw['subtext'] !== null ? raw['subtext'] : {});
59
+ if (typeof raw['subtext'] !== 'object' || raw['subtext'] === null) {
60
+ notes.push({ path: `${path}.subtext`, action: 'added an empty `subtext`' });
61
+ }
62
+ const subtext = {};
63
+ for (const key of Object.keys(EMPTY_SUBTEXT)) {
64
+ if (Array.isArray(subtextRaw[key])) {
65
+ subtext[key] = subtextRaw[key];
66
+ }
67
+ else {
68
+ subtext[key] = [];
69
+ notes.push({ path: `${path}.subtext.${key}`, action: 'added an empty array' });
70
+ }
71
+ }
72
+ const storytellingRaw = (typeof raw['storytelling'] === 'object' && raw['storytelling'] !== null ? raw['storytelling'] : {});
73
+ if (typeof raw['storytelling'] !== 'object' || raw['storytelling'] === null) {
74
+ notes.push({ path: `${path}.storytelling`, action: 'added an empty `storytelling`' });
75
+ }
76
+ const storytelling = {};
77
+ for (const key of ['overviews', 'moments']) {
78
+ if (Array.isArray(storytellingRaw[key])) {
79
+ storytelling[key] = storytellingRaw[key];
80
+ }
81
+ else {
82
+ storytelling[key] = [];
83
+ notes.push({ path: `${path}.storytelling.${key}`, action: 'added an empty array' });
84
+ }
85
+ }
86
+ return { ...raw, subtext, storytelling };
87
+ }
88
+ //# sourceMappingURL=normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/schema/normalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type NormalizeNote } from './normalize.js';
2
+ import type { NcpDocument, Story } from './types.js';
3
+ export type NcpDialect = 'canonical' | 'subtxt-export' | 'miadi-design' | 'unknown';
4
+ export interface ReadOptions {
5
+ /** Skip detection and read as this dialect. */
6
+ assume?: NcpDialect;
7
+ /** Fields the source does not carry, supplied by the caller. */
8
+ storyOverrides?: Partial<Pick<Story, 'title' | 'genre' | 'logline' | 'created_at'>>;
9
+ /** Fallback id when the source has none. */
10
+ fallbackId?: string;
11
+ }
12
+ export interface ReadResult {
13
+ document: NcpDocument;
14
+ dialect: NcpDialect;
15
+ notes: NormalizeNote[];
16
+ }
17
+ /** Which dialect an input is written in. */
18
+ export declare function detectDialect(input: unknown): NcpDialect;
19
+ /** Read any recognized dialect and return canonical NCP. */
20
+ export declare function readNcp(input: unknown, options?: ReadOptions): ReadResult;
21
+ /**
22
+ * A canonical-layout document can still carry Dramatica display labels where
23
+ * the schema declares identifiers — `example-story.json` does. This maps them
24
+ * and declares whatever it cannot map, so a consumer never has to guess whether
25
+ * `"Success"` and `"success"` are the same value.
26
+ */
27
+ export declare function canonicalizeTerms(document: NcpDocument): {
28
+ document: NcpDocument;
29
+ notes: NormalizeNote[];
30
+ };
31
+ //# sourceMappingURL=read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../../src/schema/read.ts"],"names":[],"mappings":"AAWA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAStE,OAAO,KAAK,EAIV,WAAW,EAIX,KAAK,EAGN,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,eAAe,GAAG,cAAc,GAAG,SAAS,CAAA;AAEnF,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gEAAgE;IAChE,cAAc,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC,CAAC,CAAA;IACnF,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,WAAW,CAAA;IACrB,OAAO,EAAE,UAAU,CAAA;IACnB,KAAK,EAAE,aAAa,EAAE,CAAA;CACvB;AA+BD,4CAA4C;AAC5C,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAwBxD;AAED,4DAA4D;AAC5D,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,UAAU,CAmBzE;AA0eD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,WAAW,GAAG;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,aAAa,EAAE,CAAA;CAAE,CAwF1G"}