@auto-engineer/narrative 0.26.0 → 0.26.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.
Files changed (36) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +5 -5
  3. package/.turbo/turbo-type-check.log +1 -1
  4. package/CHANGELOG.md +33 -0
  5. package/dist/src/id/addAutoIds.d.ts.map +1 -1
  6. package/dist/src/id/addAutoIds.js +0 -15
  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 +1 -6
  10. package/dist/src/id/hasAllIds.js.map +1 -1
  11. package/dist/src/schema.d.ts +86 -94
  12. package/dist/src/schema.d.ts.map +1 -1
  13. package/dist/src/schema.js +1 -2
  14. package/dist/src/schema.js.map +1 -1
  15. package/dist/src/transformers/model-to-narrative/cross-module-imports.js +1 -1
  16. package/dist/src/transformers/model-to-narrative/cross-module-imports.js.map +1 -1
  17. package/dist/src/transformers/model-to-narrative/validate-modules.d.ts +1 -1
  18. package/dist/src/transformers/model-to-narrative/validate-modules.d.ts.map +1 -1
  19. package/dist/src/transformers/model-to-narrative/validate-modules.js +16 -29
  20. package/dist/src/transformers/model-to-narrative/validate-modules.js.map +1 -1
  21. package/dist/src/transformers/narrative-to-model/derive-modules.d.ts.map +1 -1
  22. package/dist/src/transformers/narrative-to-model/derive-modules.js +0 -1
  23. package/dist/src/transformers/narrative-to-model/derive-modules.js.map +1 -1
  24. package/dist/tsconfig.tsbuildinfo +1 -1
  25. package/package.json +4 -4
  26. package/src/id/addAutoIds.specs.ts +0 -168
  27. package/src/id/addAutoIds.ts +1 -16
  28. package/src/id/hasAllIds.specs.ts +0 -78
  29. package/src/id/hasAllIds.ts +2 -10
  30. package/src/model-to-narrative.specs.ts +0 -13
  31. package/src/schema.ts +1 -2
  32. package/src/transformers/model-to-narrative/cross-module-imports.ts +1 -1
  33. package/src/transformers/model-to-narrative/modules.specs.ts +6 -52
  34. package/src/transformers/model-to-narrative/validate-modules.ts +17 -34
  35. package/src/transformers/narrative-to-model/derive-modules.specs.ts +0 -1
  36. package/src/transformers/narrative-to-model/derive-modules.ts +0 -1
@@ -3,8 +3,7 @@ import { toMessageKey } from './ordering';
3
3
 
4
4
  export interface ValidationError {
5
5
  type:
6
- | 'duplicate_id'
7
- | 'derived_id_mismatch'
6
+ | 'duplicate_sourceFile'
8
7
  | 'narrative_unassigned'
9
8
  | 'narrative_multi_assigned'
10
9
  | 'message_multi_declared'
@@ -21,8 +20,7 @@ export function validateModules(model: Model): ValidationError[] {
21
20
  return errors;
22
21
  }
23
22
 
24
- errors.push(...validateUniqueModuleIds(modules));
25
- errors.push(...validateDerivedModuleIds(modules));
23
+ errors.push(...validateUniqueSourceFiles(modules));
26
24
 
27
25
  const authoredModules = modules.filter((m) => !m.isDerived);
28
26
  if (authoredModules.length === 0) {
@@ -35,34 +33,19 @@ export function validateModules(model: Model): ValidationError[] {
35
33
  return errors;
36
34
  }
37
35
 
38
- function validateUniqueModuleIds(modules: Model['modules']): ValidationError[] {
36
+ function validateUniqueSourceFiles(modules: Model['modules']): ValidationError[] {
39
37
  const errors: ValidationError[] = [];
40
- const idCounts = new Map<string, number>();
38
+ const sourceFileCounts = new Map<string, number>();
41
39
 
42
40
  for (const module of modules) {
43
- idCounts.set(module.id, (idCounts.get(module.id) ?? 0) + 1);
41
+ sourceFileCounts.set(module.sourceFile, (sourceFileCounts.get(module.sourceFile) ?? 0) + 1);
44
42
  }
45
43
 
46
- for (const [id, count] of idCounts) {
44
+ for (const [sourceFile, count] of sourceFileCounts) {
47
45
  if (count > 1) {
48
46
  errors.push({
49
- type: 'duplicate_id',
50
- message: `Module ID '${id}' is used by ${count} modules`,
51
- });
52
- }
53
- }
54
-
55
- return errors;
56
- }
57
-
58
- function validateDerivedModuleIds(modules: Model['modules']): ValidationError[] {
59
- const errors: ValidationError[] = [];
60
-
61
- for (const module of modules) {
62
- if (module.isDerived && module.id !== module.sourceFile) {
63
- errors.push({
64
- type: 'derived_id_mismatch',
65
- message: `Derived module ID '${module.id}' must equal sourceFile '${module.sourceFile}'`,
47
+ type: 'duplicate_sourceFile',
48
+ message: `Module sourceFile '${sourceFile}' is used by ${count} modules`,
66
49
  });
67
50
  }
68
51
  }
@@ -79,23 +62,23 @@ function validateNarrativeAssignments(authoredModules: Model['modules'], model:
79
62
  if (!narrativeAssignments.has(narrativeId)) {
80
63
  narrativeAssignments.set(narrativeId, []);
81
64
  }
82
- narrativeAssignments.get(narrativeId)!.push(module.id);
65
+ narrativeAssignments.get(narrativeId)!.push(module.sourceFile);
83
66
  }
84
67
  }
85
68
 
86
69
  const modelNarrativeIds = new Set(model.narratives.map((n) => n.id).filter((id): id is string => id !== undefined));
87
70
 
88
- for (const [narrativeId, moduleIds] of narrativeAssignments) {
71
+ for (const [narrativeId, moduleSourceFiles] of narrativeAssignments) {
89
72
  if (!modelNarrativeIds.has(narrativeId)) {
90
73
  errors.push({
91
74
  type: 'narrative_not_found',
92
- message: `Narrative '${narrativeId}' referenced by module(s) [${moduleIds.join(', ')}] does not exist`,
75
+ message: `Narrative '${narrativeId}' referenced by module(s) [${moduleSourceFiles.join(', ')}] does not exist`,
93
76
  });
94
77
  }
95
- if (moduleIds.length > 1) {
78
+ if (moduleSourceFiles.length > 1) {
96
79
  errors.push({
97
80
  type: 'narrative_multi_assigned',
98
- message: `Narrative '${narrativeId}' is assigned to multiple modules: [${moduleIds.join(', ')}]`,
81
+ message: `Narrative '${narrativeId}' is assigned to multiple modules: [${moduleSourceFiles.join(', ')}]`,
99
82
  });
100
83
  }
101
84
  }
@@ -123,15 +106,15 @@ function validateMessageDeclarations(authoredModules: Model['modules'], model: M
123
106
  if (!messageDeclarations.has(key)) {
124
107
  messageDeclarations.set(key, []);
125
108
  }
126
- messageDeclarations.get(key)!.push(module.id);
109
+ messageDeclarations.get(key)!.push(module.sourceFile);
127
110
  }
128
111
  }
129
112
 
130
- for (const [msgKey, moduleIds] of messageDeclarations) {
131
- if (moduleIds.length > 1) {
113
+ for (const [msgKey, moduleSourceFiles] of messageDeclarations) {
114
+ if (moduleSourceFiles.length > 1) {
132
115
  errors.push({
133
116
  type: 'message_multi_declared',
134
- message: `Message '${msgKey}' is declared by multiple modules: [${moduleIds.join(', ')}]`,
117
+ message: `Message '${msgKey}' is declared by multiple modules: [${moduleSourceFiles.join(', ')}]`,
135
118
  });
136
119
  }
137
120
  }
@@ -24,7 +24,6 @@ describe('deriveModules', () => {
24
24
 
25
25
  expect(modules).toHaveLength(1);
26
26
  expect(modules[0].sourceFile).toBe('generated.narrative.ts');
27
- expect(modules[0].id).toBe('generated.narrative.ts');
28
27
  });
29
28
 
30
29
  it('generates synthetic narrative IDs when narratives have no ID', () => {
@@ -12,7 +12,6 @@ export function deriveModules(narratives: Narrative[], messages: Message[]): Mod
12
12
  .sort((a, b) => `${a.kind}:${a.name}`.localeCompare(`${b.kind}:${b.name}`));
13
13
 
14
14
  return {
15
- id: sourceFile,
16
15
  sourceFile,
17
16
  isDerived: true,
18
17
  contains: { narrativeIds },