@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.
- package/.turbo/turbo-build.log +1 -1
- package/.turbo/turbo-test.log +5 -5
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +33 -0
- package/dist/src/id/addAutoIds.d.ts.map +1 -1
- package/dist/src/id/addAutoIds.js +0 -15
- package/dist/src/id/addAutoIds.js.map +1 -1
- package/dist/src/id/hasAllIds.d.ts.map +1 -1
- package/dist/src/id/hasAllIds.js +1 -6
- package/dist/src/id/hasAllIds.js.map +1 -1
- package/dist/src/schema.d.ts +86 -94
- package/dist/src/schema.d.ts.map +1 -1
- package/dist/src/schema.js +1 -2
- package/dist/src/schema.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/cross-module-imports.js +1 -1
- package/dist/src/transformers/model-to-narrative/cross-module-imports.js.map +1 -1
- package/dist/src/transformers/model-to-narrative/validate-modules.d.ts +1 -1
- package/dist/src/transformers/model-to-narrative/validate-modules.d.ts.map +1 -1
- package/dist/src/transformers/model-to-narrative/validate-modules.js +16 -29
- package/dist/src/transformers/model-to-narrative/validate-modules.js.map +1 -1
- package/dist/src/transformers/narrative-to-model/derive-modules.d.ts.map +1 -1
- package/dist/src/transformers/narrative-to-model/derive-modules.js +0 -1
- package/dist/src/transformers/narrative-to-model/derive-modules.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/src/id/addAutoIds.specs.ts +0 -168
- package/src/id/addAutoIds.ts +1 -16
- package/src/id/hasAllIds.specs.ts +0 -78
- package/src/id/hasAllIds.ts +2 -10
- package/src/model-to-narrative.specs.ts +0 -13
- package/src/schema.ts +1 -2
- package/src/transformers/model-to-narrative/cross-module-imports.ts +1 -1
- package/src/transformers/model-to-narrative/modules.specs.ts +6 -52
- package/src/transformers/model-to-narrative/validate-modules.ts +17 -34
- package/src/transformers/narrative-to-model/derive-modules.specs.ts +0 -1
- 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
|
-
| '
|
|
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(...
|
|
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
|
|
36
|
+
function validateUniqueSourceFiles(modules: Model['modules']): ValidationError[] {
|
|
39
37
|
const errors: ValidationError[] = [];
|
|
40
|
-
const
|
|
38
|
+
const sourceFileCounts = new Map<string, number>();
|
|
41
39
|
|
|
42
40
|
for (const module of modules) {
|
|
43
|
-
|
|
41
|
+
sourceFileCounts.set(module.sourceFile, (sourceFileCounts.get(module.sourceFile) ?? 0) + 1);
|
|
44
42
|
}
|
|
45
43
|
|
|
46
|
-
for (const [
|
|
44
|
+
for (const [sourceFile, count] of sourceFileCounts) {
|
|
47
45
|
if (count > 1) {
|
|
48
46
|
errors.push({
|
|
49
|
-
type: '
|
|
50
|
-
message: `Module
|
|
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.
|
|
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,
|
|
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) [${
|
|
75
|
+
message: `Narrative '${narrativeId}' referenced by module(s) [${moduleSourceFiles.join(', ')}] does not exist`,
|
|
93
76
|
});
|
|
94
77
|
}
|
|
95
|
-
if (
|
|
78
|
+
if (moduleSourceFiles.length > 1) {
|
|
96
79
|
errors.push({
|
|
97
80
|
type: 'narrative_multi_assigned',
|
|
98
|
-
message: `Narrative '${narrativeId}' is assigned to multiple modules: [${
|
|
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.
|
|
109
|
+
messageDeclarations.get(key)!.push(module.sourceFile);
|
|
127
110
|
}
|
|
128
111
|
}
|
|
129
112
|
|
|
130
|
-
for (const [msgKey,
|
|
131
|
-
if (
|
|
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: [${
|
|
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', () => {
|