@auto-engineer/narrative 0.15.0 → 0.17.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 (124) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +28 -0
  3. package/dist/src/getNarratives.js +1 -1
  4. package/dist/src/getNarratives.js.map +1 -1
  5. package/dist/src/id/addAutoIds.d.ts.map +1 -1
  6. package/dist/src/id/addAutoIds.js +15 -0
  7. package/dist/src/id/addAutoIds.js.map +1 -1
  8. package/dist/src/id/hasAllIds.d.ts.map +1 -1
  9. package/dist/src/id/hasAllIds.js +6 -1
  10. package/dist/src/id/hasAllIds.js.map +1 -1
  11. package/dist/src/index.d.ts +5 -2
  12. package/dist/src/index.d.ts.map +1 -1
  13. package/dist/src/index.js +1 -1
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/loader/runtime-cjs.d.ts.map +1 -1
  16. package/dist/src/loader/runtime-cjs.js +3 -2
  17. package/dist/src/loader/runtime-cjs.js.map +1 -1
  18. package/dist/src/schema.d.ts +301 -143
  19. package/dist/src/schema.d.ts.map +1 -1
  20. package/dist/src/schema.js +26 -0
  21. package/dist/src/schema.js.map +1 -1
  22. package/dist/src/transformers/model-to-narrative/cross-module-imports.d.ts +6 -0
  23. package/dist/src/transformers/model-to-narrative/cross-module-imports.d.ts.map +1 -0
  24. package/dist/src/transformers/model-to-narrative/cross-module-imports.js +63 -0
  25. package/dist/src/transformers/model-to-narrative/cross-module-imports.js.map +1 -0
  26. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts +1 -4
  27. package/dist/src/transformers/model-to-narrative/generators/flow.d.ts.map +1 -1
  28. package/dist/src/transformers/model-to-narrative/generators/flow.js.map +1 -1
  29. package/dist/src/transformers/model-to-narrative/generators/module-code.d.ts +9 -0
  30. package/dist/src/transformers/model-to-narrative/generators/module-code.d.ts.map +1 -0
  31. package/dist/src/transformers/model-to-narrative/generators/module-code.js +102 -0
  32. package/dist/src/transformers/model-to-narrative/generators/module-code.js.map +1 -0
  33. package/dist/src/transformers/model-to-narrative/index.d.ts +6 -4
  34. package/dist/src/transformers/model-to-narrative/index.d.ts.map +1 -1
  35. package/dist/src/transformers/model-to-narrative/index.js +10 -6
  36. package/dist/src/transformers/model-to-narrative/index.js.map +1 -1
  37. package/dist/src/transformers/model-to-narrative/ordering.d.ts +10 -0
  38. package/dist/src/transformers/model-to-narrative/ordering.d.ts.map +1 -0
  39. package/dist/src/transformers/model-to-narrative/ordering.js +37 -0
  40. package/dist/src/transformers/model-to-narrative/ordering.js.map +1 -0
  41. package/dist/src/transformers/model-to-narrative/spec-traversal.d.ts +3 -0
  42. package/dist/src/transformers/model-to-narrative/spec-traversal.d.ts.map +1 -0
  43. package/dist/src/transformers/model-to-narrative/spec-traversal.js +54 -0
  44. package/dist/src/transformers/model-to-narrative/spec-traversal.js.map +1 -0
  45. package/dist/src/transformers/model-to-narrative/types.d.ts +12 -0
  46. package/dist/src/transformers/model-to-narrative/types.d.ts.map +1 -0
  47. package/dist/src/transformers/model-to-narrative/types.js +2 -0
  48. package/dist/src/transformers/model-to-narrative/types.js.map +1 -0
  49. package/dist/src/transformers/model-to-narrative/validate-modules.d.ts +8 -0
  50. package/dist/src/transformers/model-to-narrative/validate-modules.d.ts.map +1 -0
  51. package/dist/src/transformers/model-to-narrative/validate-modules.js +121 -0
  52. package/dist/src/transformers/model-to-narrative/validate-modules.js.map +1 -0
  53. package/dist/src/transformers/narrative-to-model/assemble.d.ts.map +1 -1
  54. package/dist/src/transformers/narrative-to-model/assemble.js +5 -1
  55. package/dist/src/transformers/narrative-to-model/assemble.js.map +1 -1
  56. package/dist/src/transformers/narrative-to-model/derive-modules.d.ts +3 -0
  57. package/dist/src/transformers/narrative-to-model/derive-modules.d.ts.map +1 -0
  58. package/dist/src/transformers/narrative-to-model/derive-modules.js +29 -0
  59. package/dist/src/transformers/narrative-to-model/derive-modules.js.map +1 -0
  60. package/dist/tsconfig.tsbuildinfo +1 -1
  61. package/package.json +5 -4
  62. package/src/getNarratives.specs.ts +214 -1
  63. package/src/getNarratives.ts +1 -1
  64. package/src/id/addAutoIds.specs.ts +180 -0
  65. package/src/id/addAutoIds.ts +16 -1
  66. package/src/id/hasAllIds.specs.ts +87 -0
  67. package/src/id/hasAllIds.ts +10 -2
  68. package/src/index.ts +7 -0
  69. package/src/loader/runtime-cjs.ts +3 -2
  70. package/src/model-to-narrative.specs.ts +467 -17
  71. package/src/schema.ts +28 -0
  72. package/src/transformers/model-to-narrative/cross-module-imports.specs.ts +450 -0
  73. package/src/transformers/model-to-narrative/cross-module-imports.ts +83 -0
  74. package/src/transformers/model-to-narrative/generators/flow.ts +11 -10
  75. package/src/transformers/model-to-narrative/generators/module-code.ts +186 -0
  76. package/src/transformers/model-to-narrative/index.ts +19 -7
  77. package/src/transformers/model-to-narrative/modules.specs.ts +625 -0
  78. package/src/transformers/model-to-narrative/ordering.specs.ts +104 -0
  79. package/src/transformers/model-to-narrative/ordering.ts +46 -0
  80. package/src/transformers/model-to-narrative/spec-traversal.specs.ts +418 -0
  81. package/src/transformers/model-to-narrative/spec-traversal.ts +63 -0
  82. package/src/transformers/model-to-narrative/types.ts +13 -0
  83. package/src/transformers/model-to-narrative/validate-modules.ts +159 -0
  84. package/src/transformers/narrative-to-model/assemble.ts +7 -2
  85. package/src/transformers/narrative-to-model/derive-modules.specs.ts +121 -0
  86. package/src/transformers/narrative-to-model/derive-modules.ts +36 -0
  87. package/tsconfig.json +1 -1
  88. package/tsconfig.test.json +2 -1
  89. package/dist/src/fluent-builder.specs.d.ts +0 -2
  90. package/dist/src/fluent-builder.specs.d.ts.map +0 -1
  91. package/dist/src/fluent-builder.specs.js +0 -28
  92. package/dist/src/fluent-builder.specs.js.map +0 -1
  93. package/dist/src/getNarratives.cache.specs.d.ts +0 -2
  94. package/dist/src/getNarratives.cache.specs.d.ts.map +0 -1
  95. package/dist/src/getNarratives.cache.specs.js +0 -234
  96. package/dist/src/getNarratives.cache.specs.js.map +0 -1
  97. package/dist/src/getNarratives.specs.d.ts +0 -2
  98. package/dist/src/getNarratives.specs.d.ts.map +0 -1
  99. package/dist/src/getNarratives.specs.js +0 -1307
  100. package/dist/src/getNarratives.specs.js.map +0 -1
  101. package/dist/src/id/addAutoIds.specs.d.ts +0 -2
  102. package/dist/src/id/addAutoIds.specs.d.ts.map +0 -1
  103. package/dist/src/id/addAutoIds.specs.js +0 -602
  104. package/dist/src/id/addAutoIds.specs.js.map +0 -1
  105. package/dist/src/id/hasAllIds.specs.d.ts +0 -2
  106. package/dist/src/id/hasAllIds.specs.d.ts.map +0 -1
  107. package/dist/src/id/hasAllIds.specs.js +0 -424
  108. package/dist/src/id/hasAllIds.specs.js.map +0 -1
  109. package/dist/src/model-to-narrative.specs.d.ts +0 -2
  110. package/dist/src/model-to-narrative.specs.d.ts.map +0 -1
  111. package/dist/src/model-to-narrative.specs.js +0 -2437
  112. package/dist/src/model-to-narrative.specs.js.map +0 -1
  113. package/dist/src/narrative-context.specs.d.ts +0 -2
  114. package/dist/src/narrative-context.specs.d.ts.map +0 -1
  115. package/dist/src/narrative-context.specs.js +0 -260
  116. package/dist/src/narrative-context.specs.js.map +0 -1
  117. package/dist/src/transformers/model-to-narrative/generators/gwt.specs.d.ts +0 -2
  118. package/dist/src/transformers/model-to-narrative/generators/gwt.specs.d.ts.map +0 -1
  119. package/dist/src/transformers/model-to-narrative/generators/gwt.specs.js +0 -142
  120. package/dist/src/transformers/model-to-narrative/generators/gwt.specs.js.map +0 -1
  121. package/dist/src/transformers/narrative-to-model/type-inference.specs.d.ts +0 -2
  122. package/dist/src/transformers/narrative-to-model/type-inference.specs.d.ts.map +0 -1
  123. package/dist/src/transformers/narrative-to-model/type-inference.specs.js +0 -177
  124. package/dist/src/transformers/narrative-to-model/type-inference.specs.js.map +0 -1
@@ -0,0 +1,37 @@
1
+ export function toMessageKey(kind, name) {
2
+ return `${kind}:${name}`;
3
+ }
4
+ function isMessageKind(value) {
5
+ return value === 'command' || value === 'event' || value === 'state';
6
+ }
7
+ export function parseMessageKey(key) {
8
+ const colonIndex = key.indexOf(':');
9
+ if (colonIndex === -1) {
10
+ throw new Error(`Invalid message key format: ${key}`);
11
+ }
12
+ const kindStr = key.slice(0, colonIndex);
13
+ if (!isMessageKind(kindStr)) {
14
+ throw new Error(`Invalid message kind: ${kindStr}`);
15
+ }
16
+ const name = key.slice(colonIndex + 1);
17
+ return { kind: kindStr, name };
18
+ }
19
+ export function sortMessagesByKey(messages) {
20
+ return [...messages].sort((a, b) => {
21
+ const keyA = toMessageKey(a.kind, a.name);
22
+ const keyB = toMessageKey(b.kind, b.name);
23
+ return keyA.localeCompare(keyB);
24
+ });
25
+ }
26
+ export function sortFilesByPath(files) {
27
+ return [...files].sort((a, b) => a.path.localeCompare(b.path));
28
+ }
29
+ export function sortImportsBySource(imports) {
30
+ return [...imports]
31
+ .map((imp) => ({
32
+ ...imp,
33
+ typeNames: [...imp.typeNames].sort((a, b) => a.localeCompare(b)),
34
+ }))
35
+ .sort((a, b) => a.fromPath.localeCompare(b.fromPath));
36
+ }
37
+ //# sourceMappingURL=ordering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ordering.js","sourceRoot":"","sources":["../../../../src/transformers/model-to-narrative/ordering.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,YAAY,CAAC,IAAiB,EAAE,IAAY;IAC1D,OAAO,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACzC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAuB,QAAa;IACnE,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAA0B,KAAU;IACjE,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAA4B;IAC9D,OAAO,CAAC,GAAG,OAAO,CAAC;SAChB,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACb,GAAG,GAAG;QACN,SAAS,EAAE,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;KACjE,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Narrative } from '../../index';
2
+ export declare function collectMessageKeysFromNarratives(narratives: Narrative[]): Set<string>;
3
+ //# sourceMappingURL=spec-traversal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-traversal.d.ts","sourceRoot":"","sources":["../../../../src/transformers/model-to-narrative/spec-traversal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,wBAAgB,gCAAgC,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAUrF"}
@@ -0,0 +1,54 @@
1
+ export function collectMessageKeysFromNarratives(narratives) {
2
+ const usedKeys = new Set();
3
+ for (const narrative of narratives) {
4
+ for (const slice of narrative.slices) {
5
+ collectMessageKeysFromSlice(slice, usedKeys);
6
+ }
7
+ }
8
+ return usedKeys;
9
+ }
10
+ function collectMessageKeysFromSlice(slice, usedKeys) {
11
+ if (slice.type !== 'command' && slice.type !== 'query' && slice.type !== 'react') {
12
+ return;
13
+ }
14
+ const specs = slice.server?.specs;
15
+ if (!Array.isArray(specs)) {
16
+ return;
17
+ }
18
+ for (const spec of specs) {
19
+ if (!spec.rules || !Array.isArray(spec.rules)) {
20
+ continue;
21
+ }
22
+ for (const rule of spec.rules) {
23
+ if (!rule.examples || !Array.isArray(rule.examples)) {
24
+ continue;
25
+ }
26
+ for (const example of rule.examples) {
27
+ if (!example.steps || !Array.isArray(example.steps)) {
28
+ continue;
29
+ }
30
+ for (const step of example.steps) {
31
+ collectMessageKeyFromStep(step, usedKeys);
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ function collectMessageKeyFromStep(step, usedKeys) {
38
+ if (!('text' in step) || !step.text) {
39
+ return;
40
+ }
41
+ const keyword = step.keyword;
42
+ if (keyword === 'Given' || keyword === 'And') {
43
+ usedKeys.add(`event:${step.text}`);
44
+ usedKeys.add(`state:${step.text}`);
45
+ }
46
+ else if (keyword === 'When') {
47
+ usedKeys.add(`command:${step.text}`);
48
+ }
49
+ else if (keyword === 'Then') {
50
+ usedKeys.add(`event:${step.text}`);
51
+ usedKeys.add(`state:${step.text}`);
52
+ }
53
+ }
54
+ //# sourceMappingURL=spec-traversal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-traversal.js","sourceRoot":"","sources":["../../../../src/transformers/model-to-narrative/spec-traversal.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,gCAAgC,CAAC,UAAuB;IACtE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACrC,2BAA2B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAkC,EAAE,QAAqB;IAC5F,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACjF,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,SAAS;QACX,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpD,SAAS;YACX,CAAC;YAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACpD,SAAS;gBACX,CAAC;gBAED,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;oBACjC,yBAAyB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAAC,IAAyC,EAAE,QAAqB;IACjG,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QAC7C,QAAQ,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,QAAQ,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,QAAQ,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;SAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9B,QAAQ,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,QAAQ,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface GeneratedFile {
2
+ path: string;
3
+ code: string;
4
+ }
5
+ export interface GeneratedNarratives {
6
+ files: GeneratedFile[];
7
+ }
8
+ export interface CrossModuleImport {
9
+ fromPath: string;
10
+ typeNames: string[];
11
+ }
12
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/transformers/model-to-narrative/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/transformers/model-to-narrative/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { Model } from '../../index';
2
+ export interface ValidationError {
3
+ type: 'duplicate_id' | 'derived_id_mismatch' | 'narrative_unassigned' | 'narrative_multi_assigned' | 'message_multi_declared' | 'message_undeclared' | 'narrative_not_found';
4
+ message: string;
5
+ }
6
+ export declare function validateModules(model: Model): ValidationError[];
7
+ export declare function throwOnValidationErrors(errors: ValidationError[]): void;
8
+ //# sourceMappingURL=validate-modules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-modules.d.ts","sourceRoot":"","sources":["../../../../src/transformers/model-to-narrative/validate-modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,WAAW,eAAe;IAC9B,IAAI,EACA,cAAc,GACd,qBAAqB,GACrB,sBAAsB,GACtB,0BAA0B,GAC1B,wBAAwB,GACxB,oBAAoB,GACpB,qBAAqB,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,EAAE,CAoB/D;AAsHD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAKvE"}
@@ -0,0 +1,121 @@
1
+ import { toMessageKey } from './ordering.js';
2
+ export function validateModules(model) {
3
+ const errors = [];
4
+ const modules = model.modules ?? [];
5
+ if (modules.length === 0) {
6
+ return errors;
7
+ }
8
+ errors.push(...validateUniqueModuleIds(modules));
9
+ errors.push(...validateDerivedModuleIds(modules));
10
+ const authoredModules = modules.filter((m) => !m.isDerived);
11
+ if (authoredModules.length === 0) {
12
+ return errors;
13
+ }
14
+ errors.push(...validateNarrativeAssignments(authoredModules, model));
15
+ errors.push(...validateMessageDeclarations(authoredModules, model));
16
+ return errors;
17
+ }
18
+ function validateUniqueModuleIds(modules) {
19
+ const errors = [];
20
+ const idCounts = new Map();
21
+ for (const module of modules) {
22
+ idCounts.set(module.id, (idCounts.get(module.id) ?? 0) + 1);
23
+ }
24
+ for (const [id, count] of idCounts) {
25
+ if (count > 1) {
26
+ errors.push({
27
+ type: 'duplicate_id',
28
+ message: `Module ID '${id}' is used by ${count} modules`,
29
+ });
30
+ }
31
+ }
32
+ return errors;
33
+ }
34
+ function validateDerivedModuleIds(modules) {
35
+ const errors = [];
36
+ for (const module of modules) {
37
+ if (module.isDerived && module.id !== module.sourceFile) {
38
+ errors.push({
39
+ type: 'derived_id_mismatch',
40
+ message: `Derived module ID '${module.id}' must equal sourceFile '${module.sourceFile}'`,
41
+ });
42
+ }
43
+ }
44
+ return errors;
45
+ }
46
+ function validateNarrativeAssignments(authoredModules, model) {
47
+ const errors = [];
48
+ const narrativeAssignments = new Map();
49
+ for (const module of authoredModules) {
50
+ for (const narrativeId of module.contains.narrativeIds) {
51
+ if (!narrativeAssignments.has(narrativeId)) {
52
+ narrativeAssignments.set(narrativeId, []);
53
+ }
54
+ narrativeAssignments.get(narrativeId).push(module.id);
55
+ }
56
+ }
57
+ const modelNarrativeIds = new Set(model.narratives.map((n) => n.id).filter((id) => id !== undefined));
58
+ for (const [narrativeId, moduleIds] of narrativeAssignments) {
59
+ if (!modelNarrativeIds.has(narrativeId)) {
60
+ errors.push({
61
+ type: 'narrative_not_found',
62
+ message: `Narrative '${narrativeId}' referenced by module(s) [${moduleIds.join(', ')}] does not exist`,
63
+ });
64
+ }
65
+ if (moduleIds.length > 1) {
66
+ errors.push({
67
+ type: 'narrative_multi_assigned',
68
+ message: `Narrative '${narrativeId}' is assigned to multiple modules: [${moduleIds.join(', ')}]`,
69
+ });
70
+ }
71
+ }
72
+ const assignedNarrativeIds = new Set(narrativeAssignments.keys());
73
+ for (const narrative of model.narratives) {
74
+ if (narrative.id && !assignedNarrativeIds.has(narrative.id)) {
75
+ errors.push({
76
+ type: 'narrative_unassigned',
77
+ message: `Narrative '${narrative.id}' (${narrative.name}) is not assigned to any module`,
78
+ });
79
+ }
80
+ }
81
+ return errors;
82
+ }
83
+ function validateMessageDeclarations(authoredModules, model) {
84
+ const errors = [];
85
+ const messageDeclarations = new Map();
86
+ for (const module of authoredModules) {
87
+ for (const msg of module.declares.messages) {
88
+ const key = toMessageKey(msg.kind, msg.name);
89
+ if (!messageDeclarations.has(key)) {
90
+ messageDeclarations.set(key, []);
91
+ }
92
+ messageDeclarations.get(key).push(module.id);
93
+ }
94
+ }
95
+ for (const [msgKey, moduleIds] of messageDeclarations) {
96
+ if (moduleIds.length > 1) {
97
+ errors.push({
98
+ type: 'message_multi_declared',
99
+ message: `Message '${msgKey}' is declared by multiple modules: [${moduleIds.join(', ')}]`,
100
+ });
101
+ }
102
+ }
103
+ const declaredMessages = new Set(messageDeclarations.keys());
104
+ const modelMessageKeys = new Set(model.messages.map((m) => toMessageKey(m.type, m.name)));
105
+ for (const msgKey of modelMessageKeys) {
106
+ if (!declaredMessages.has(msgKey)) {
107
+ errors.push({
108
+ type: 'message_undeclared',
109
+ message: `Message '${msgKey}' exists in model but is not declared by any authored module`,
110
+ });
111
+ }
112
+ }
113
+ return errors;
114
+ }
115
+ export function throwOnValidationErrors(errors) {
116
+ if (errors.length > 0) {
117
+ const messages = errors.map((e) => ` - ${e.message}`).join('\n');
118
+ throw new Error(`Module validation failed:\n${messages}`);
119
+ }
120
+ }
121
+ //# sourceMappingURL=validate-modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-modules.js","sourceRoot":"","sources":["../../../../src/transformers/model-to-narrative/validate-modules.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../../../../src/transformers/narrative-to-model/assemble.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,KAAK,CAO1G"}
1
+ {"version":3,"file":"assemble.d.ts","sourceRoot":"","sources":["../../../../src/transformers/narrative-to-model/assemble.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAG7D,wBAAgB,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,KAAK,CAW1G"}
@@ -1,9 +1,13 @@
1
+ import { deriveModules } from './derive-modules.js';
1
2
  export function assembleSpecs(narratives, messages, integrations) {
3
+ const typedMessages = messages;
4
+ const modules = deriveModules(narratives, typedMessages);
2
5
  return {
3
6
  variant: 'specs',
4
7
  narratives,
5
- messages: messages,
8
+ messages: typedMessages,
6
9
  integrations: integrations,
10
+ modules,
7
11
  };
8
12
  }
9
13
  //# sourceMappingURL=assemble.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../../../../src/transformers/narrative-to-model/assemble.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,aAAa,CAAC,UAAuB,EAAE,QAAmB,EAAE,YAAuB;IACjG,OAAO;QACL,OAAO,EAAE,OAAgB;QACzB,UAAU;QACV,QAAQ,EAAE,QAA6B;QACvC,YAAY,EAAE,YAAqC;KACpD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"assemble.js","sourceRoot":"","sources":["../../../../src/transformers/narrative-to-model/assemble.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,UAAU,aAAa,CAAC,UAAuB,EAAE,QAAmB,EAAE,YAAuB;IACjG,MAAM,aAAa,GAAG,QAAqB,CAAC;IAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAEzD,OAAO;QACL,OAAO,EAAE,OAAgB;QACzB,UAAU;QACV,QAAQ,EAAE,aAAa;QACvB,YAAY,EAAE,YAAqC;QACnD,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Message, Module, Narrative } from '../../index';
2
+ export declare function deriveModules(narratives: Narrative[], messages: Message[]): Module[];
3
+ //# sourceMappingURL=derive-modules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-modules.d.ts","sourceRoot":"","sources":["../../../../src/transformers/narrative-to-model/derive-modules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI9D,wBAAgB,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAiBpF"}
@@ -0,0 +1,29 @@
1
+ const DEFAULT_SOURCE_FILE = 'generated.narrative.ts';
2
+ export function deriveModules(narratives, messages) {
3
+ const bySourceFile = groupNarrativesBySourceFile(narratives);
4
+ return Array.from(bySourceFile.entries()).map(([sourceFile, narrs], index) => {
5
+ const narrativeIds = narrs.map((n, i) => n.id ?? `__derived_${index}_${i}_${n.name}`);
6
+ const messageRefs = messages
7
+ .map((m) => ({ kind: m.type, name: m.name }))
8
+ .sort((a, b) => `${a.kind}:${a.name}`.localeCompare(`${b.kind}:${b.name}`));
9
+ return {
10
+ id: sourceFile,
11
+ sourceFile,
12
+ isDerived: true,
13
+ contains: { narrativeIds },
14
+ declares: { messages: messageRefs },
15
+ };
16
+ });
17
+ }
18
+ function groupNarrativesBySourceFile(narratives) {
19
+ const groups = new Map();
20
+ for (const narrative of narratives) {
21
+ const sourceFile = narrative.sourceFile ?? DEFAULT_SOURCE_FILE;
22
+ if (!groups.has(sourceFile)) {
23
+ groups.set(sourceFile, []);
24
+ }
25
+ groups.get(sourceFile).push(narrative);
26
+ }
27
+ return groups;
28
+ }
29
+ //# sourceMappingURL=derive-modules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-modules.js","sourceRoot":"","sources":["../../../../src/transformers/narrative-to-model/derive-modules.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,wBAAwB,CAAC;AAErD,MAAM,UAAU,aAAa,CAAC,UAAuB,EAAE,QAAmB;IACxE,MAAM,YAAY,GAAG,2BAA2B,CAAC,UAAU,CAAC,CAAC;IAE7D,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;QAC3E,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,aAAa,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACtF,MAAM,WAAW,GAAG,QAAQ;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;aAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAE9E,OAAO;YACL,EAAE,EAAE,UAAU;YACd,UAAU;YACV,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,EAAE,YAAY,EAAE;YAC1B,QAAQ,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,2BAA2B,CAAC,UAAuB;IAC1D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE9C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,IAAI,mBAAmB,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}