@nowline/core 0.2.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 (69) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +84 -0
  3. package/dist/generated/ast.d.ts +958 -0
  4. package/dist/generated/ast.d.ts.map +1 -0
  5. package/dist/generated/ast.js +795 -0
  6. package/dist/generated/ast.js.map +1 -0
  7. package/dist/generated/grammar.d.ts +7 -0
  8. package/dist/generated/grammar.d.ts.map +1 -0
  9. package/dist/generated/grammar.js +2509 -0
  10. package/dist/generated/grammar.js.map +1 -0
  11. package/dist/generated/module.d.ts +14 -0
  12. package/dist/generated/module.d.ts.map +1 -0
  13. package/dist/generated/module.js +21 -0
  14. package/dist/generated/module.js.map +1 -0
  15. package/dist/i18n/codes.d.ts +3 -0
  16. package/dist/i18n/codes.d.ts.map +1 -0
  17. package/dist/i18n/codes.js +54 -0
  18. package/dist/i18n/codes.js.map +1 -0
  19. package/dist/i18n/index.d.ts +17 -0
  20. package/dist/i18n/index.d.ts.map +1 -0
  21. package/dist/i18n/index.js +82 -0
  22. package/dist/i18n/index.js.map +1 -0
  23. package/dist/i18n/messages.en.d.ts +96 -0
  24. package/dist/i18n/messages.en.d.ts.map +1 -0
  25. package/dist/i18n/messages.en.js +57 -0
  26. package/dist/i18n/messages.en.js.map +1 -0
  27. package/dist/i18n/messages.fr-CA.d.ts +3 -0
  28. package/dist/i18n/messages.fr-CA.d.ts.map +1 -0
  29. package/dist/i18n/messages.fr-CA.js +11 -0
  30. package/dist/i18n/messages.fr-CA.js.map +1 -0
  31. package/dist/i18n/messages.fr-FR.d.ts +3 -0
  32. package/dist/i18n/messages.fr-FR.d.ts.map +1 -0
  33. package/dist/i18n/messages.fr-FR.js +11 -0
  34. package/dist/i18n/messages.fr-FR.js.map +1 -0
  35. package/dist/i18n/messages.fr.d.ts +3 -0
  36. package/dist/i18n/messages.fr.d.ts.map +1 -0
  37. package/dist/i18n/messages.fr.js +55 -0
  38. package/dist/i18n/messages.fr.js.map +1 -0
  39. package/dist/index.d.ts +9 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +8 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/language/include-resolver.d.ts +46 -0
  44. package/dist/language/include-resolver.d.ts.map +1 -0
  45. package/dist/language/include-resolver.js +306 -0
  46. package/dist/language/include-resolver.js.map +1 -0
  47. package/dist/language/nowline-module.d.ts +18 -0
  48. package/dist/language/nowline-module.d.ts.map +1 -0
  49. package/dist/language/nowline-module.js +63 -0
  50. package/dist/language/nowline-module.js.map +1 -0
  51. package/dist/language/nowline-validator.d.ts +65 -0
  52. package/dist/language/nowline-validator.d.ts.map +1 -0
  53. package/dist/language/nowline-validator.js +1654 -0
  54. package/dist/language/nowline-validator.js.map +1 -0
  55. package/package.json +37 -0
  56. package/src/generated/ast.ts +1178 -0
  57. package/src/generated/grammar.ts +2511 -0
  58. package/src/generated/module.ts +25 -0
  59. package/src/i18n/codes.ts +102 -0
  60. package/src/i18n/index.ts +102 -0
  61. package/src/i18n/messages.en.ts +86 -0
  62. package/src/i18n/messages.fr-CA.ts +13 -0
  63. package/src/i18n/messages.fr-FR.ts +13 -0
  64. package/src/i18n/messages.fr.ts +91 -0
  65. package/src/index.ts +22 -0
  66. package/src/language/include-resolver.ts +470 -0
  67. package/src/language/nowline-module.ts +114 -0
  68. package/src/language/nowline-validator.ts +1991 -0
  69. package/src/language/nowline.langium +217 -0
@@ -0,0 +1,306 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { URI } from 'langium';
4
+ import { isAnchorDeclaration, isCalendarBlock, isDefaultDeclaration, isFootnoteDeclaration, isLabelDeclaration, isMilestoneDeclaration, isPersonDeclaration, isScaleBlock, isSizeDeclaration, isStatusDeclaration, isStyleDeclaration, isSwimlaneDeclaration, isSymbolDeclaration, isTeamDeclaration, } from '../generated/ast.js';
5
+ const DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
6
+ function readStartProp(decl) {
7
+ const prop = decl?.properties.find((p) => p.key === 'start');
8
+ if (!prop?.value)
9
+ return undefined;
10
+ if (!DATE_RE.test(prop.value))
11
+ return undefined;
12
+ if (Number.isNaN(new Date(prop.value).getTime()))
13
+ return undefined;
14
+ return prop.value;
15
+ }
16
+ function formatStartMismatch(childRelPath, parentStart, childStart) {
17
+ if (parentStart && childStart) {
18
+ return `Included "${childRelPath}" declares start:${childStart}, which doesn't match this file's start:${parentStart}. Both files must declare the same start date, or neither should.`;
19
+ }
20
+ if (parentStart) {
21
+ return `Included "${childRelPath}" has no start:, but this file declares start:${parentStart}. Both files must declare the same start date, or neither should.`;
22
+ }
23
+ return `Included "${childRelPath}" declares start:${childStart}, but this file has no start:. Both files must declare the same start date, or neither should.`;
24
+ }
25
+ function emptyConfig() {
26
+ return {
27
+ styles: new Map(),
28
+ defaults: new Map(),
29
+ symbols: new Map(),
30
+ };
31
+ }
32
+ function emptyContent() {
33
+ return {
34
+ persons: new Map(),
35
+ teams: new Map(),
36
+ anchors: new Map(),
37
+ labels: new Map(),
38
+ sizes: new Map(),
39
+ statuses: new Map(),
40
+ swimlanes: new Map(),
41
+ milestones: new Map(),
42
+ footnotes: new Map(),
43
+ isolatedRegions: [],
44
+ };
45
+ }
46
+ export async function resolveIncludes(file, filePath, options) {
47
+ const readFile = options.readFile ?? ((p) => fs.readFile(p, 'utf-8'));
48
+ const ctx = {
49
+ services: options.services,
50
+ diagnostics: [],
51
+ resolving: [],
52
+ processed: new Map(),
53
+ readFile,
54
+ };
55
+ const absPath = path.resolve(filePath);
56
+ const { config, content } = await resolveFile(file, absPath, ctx);
57
+ return {
58
+ config,
59
+ content,
60
+ diagnostics: ctx.diagnostics,
61
+ processedFiles: new Set(ctx.processed.keys()),
62
+ };
63
+ }
64
+ async function resolveFile(file, absPath, ctx) {
65
+ if (ctx.processed.has(absPath)) {
66
+ return ctx.processed.get(absPath);
67
+ }
68
+ if (ctx.resolving.includes(absPath)) {
69
+ ctx.diagnostics.push({
70
+ severity: 'error',
71
+ message: `Circular include detected: ${[...ctx.resolving, absPath].join(' → ')}`,
72
+ sourcePath: absPath,
73
+ });
74
+ const empty = { config: emptyConfig(), content: emptyContent() };
75
+ ctx.processed.set(absPath, empty);
76
+ return empty;
77
+ }
78
+ ctx.resolving.push(absPath);
79
+ const config = emptyConfig();
80
+ const content = emptyContent();
81
+ // Seed with the parent's own declarations first so that collisions from included
82
+ // files shadow to the parent (parent wins) and produce a warning pointing at the child.
83
+ mergeLocalConfig(config, file);
84
+ mergeLocalContent(content, file);
85
+ const seenIncludes = new Set();
86
+ for (const inc of file.includes) {
87
+ const childRelPath = inc.path;
88
+ const childAbsPath = path.resolve(path.dirname(absPath), childRelPath);
89
+ if (seenIncludes.has(childAbsPath)) {
90
+ ctx.diagnostics.push({
91
+ severity: 'error',
92
+ message: `Duplicate include "${childRelPath}" in ${path.basename(absPath)}.`,
93
+ sourcePath: absPath,
94
+ line: inc.$cstNode?.range.start.line,
95
+ });
96
+ continue;
97
+ }
98
+ seenIncludes.add(childAbsPath);
99
+ const configMode = getIncludeMode(inc, 'config') ?? 'merge';
100
+ const roadmapMode = getIncludeMode(inc, 'roadmap') ?? 'merge';
101
+ let childFile;
102
+ try {
103
+ const text = await ctx.readFile(childAbsPath);
104
+ childFile = await parseString(ctx.services, text, childAbsPath);
105
+ }
106
+ catch (err) {
107
+ ctx.diagnostics.push({
108
+ severity: 'error',
109
+ message: `Could not read include "${childRelPath}": ${err.message}`,
110
+ sourcePath: absPath,
111
+ line: inc.$cstNode?.range.start.line,
112
+ });
113
+ continue;
114
+ }
115
+ const { config: childConfig, content: childContent } = await resolveFile(childFile, childAbsPath, ctx);
116
+ applyConfigMode(config, childConfig, configMode, childAbsPath, ctx.diagnostics);
117
+ applyRoadmapMode(content, childContent, childConfig, roadmapMode, childAbsPath, childRelPath, ctx.diagnostics);
118
+ if (roadmapMode === 'isolate' && !childContent.roadmap) {
119
+ ctx.diagnostics.push({
120
+ severity: 'error',
121
+ message: `Cannot isolate "${childRelPath}": it has no roadmap declaration.`,
122
+ sourcePath: absPath,
123
+ line: inc.$cstNode?.range.start.line,
124
+ });
125
+ }
126
+ // Non-ignored includes with a child roadmap must agree on start: with the parent.
127
+ // Deliberate divergence from the usual "parent wins with warning" merge behaviour
128
+ // because start: defines the shared timeline baseline.
129
+ if (roadmapMode !== 'ignore' && childFile.roadmapDecl) {
130
+ const parentStart = readStartProp(file.roadmapDecl);
131
+ const childStart = readStartProp(childFile.roadmapDecl);
132
+ if (parentStart !== childStart) {
133
+ ctx.diagnostics.push({
134
+ severity: 'error',
135
+ message: formatStartMismatch(childRelPath, parentStart, childStart),
136
+ sourcePath: absPath,
137
+ line: inc.$cstNode?.range.start.line,
138
+ });
139
+ }
140
+ }
141
+ }
142
+ ctx.resolving.pop();
143
+ const result = { config, content };
144
+ ctx.processed.set(absPath, result);
145
+ return result;
146
+ }
147
+ function getIncludeMode(inc, key) {
148
+ const opt = inc.options.find((o) => o.key === key);
149
+ if (!opt)
150
+ return undefined;
151
+ if (opt.value === 'merge' || opt.value === 'ignore' || opt.value === 'isolate') {
152
+ return opt.value;
153
+ }
154
+ return undefined;
155
+ }
156
+ async function parseString(services, text, absPath) {
157
+ const uri = URI.file(absPath);
158
+ const docFactory = services.shared.workspace.LangiumDocumentFactory;
159
+ const doc = docFactory.fromString(text, uri);
160
+ await services.shared.workspace.DocumentBuilder.build([doc], { validation: false });
161
+ return doc.parseResult.value;
162
+ }
163
+ function applyConfigMode(target, child, mode, childPath, diagnostics) {
164
+ if (mode === 'ignore' || mode === 'isolate')
165
+ return;
166
+ const warn = (name, category) => diagnostics.push({
167
+ severity: 'warning',
168
+ message: `${category} "${name}" from ${path.basename(childPath)} is shadowed by the parent's definition.`,
169
+ sourcePath: childPath,
170
+ });
171
+ mergeMap(target.styles, child.styles, (name) => warn(name, 'Style'));
172
+ mergeMap(target.defaults, child.defaults, (name) => warn(name, 'Default'));
173
+ mergeMap(target.symbols, child.symbols, (name) => warn(name, 'Symbol'));
174
+ if (child.scale && !target.scale) {
175
+ target.scale = child.scale;
176
+ }
177
+ if (child.calendar && !target.calendar) {
178
+ target.calendar = child.calendar;
179
+ }
180
+ }
181
+ function applyRoadmapMode(target, child, childConfig, mode, childPath, childRelPath, diagnostics) {
182
+ if (mode === 'ignore')
183
+ return;
184
+ if (mode === 'isolate') {
185
+ if (child.roadmap) {
186
+ target.isolatedRegions.push({
187
+ sourcePath: childRelPath,
188
+ config: childConfig,
189
+ content: child,
190
+ });
191
+ }
192
+ return;
193
+ }
194
+ const warn = (name, category) => diagnostics.push({
195
+ severity: 'warning',
196
+ message: `${category} "${name}" from ${path.basename(childPath)} is shadowed by the parent's definition.`,
197
+ sourcePath: childPath,
198
+ });
199
+ mergeMap(target.persons, child.persons, (name) => warn(name, 'Person'));
200
+ mergeMap(target.teams, child.teams, (name) => warn(name, 'Team'));
201
+ mergeMap(target.anchors, child.anchors, (name) => warn(name, 'Anchor'));
202
+ mergeMap(target.labels, child.labels, (name) => warn(name, 'Label'));
203
+ mergeMap(target.sizes, child.sizes, (name) => warn(name, 'Size'));
204
+ mergeMap(target.statuses, child.statuses, (name) => warn(name, 'Status'));
205
+ mergeMap(target.swimlanes, child.swimlanes, (name) => warn(name, 'Swimlane'));
206
+ mergeMap(target.milestones, child.milestones, (name) => warn(name, 'Milestone'));
207
+ mergeMap(target.footnotes, child.footnotes, (name) => warn(name, 'Footnote'));
208
+ if (child.roadmap && !target.roadmap) {
209
+ target.roadmap = child.roadmap;
210
+ }
211
+ }
212
+ function mergeMap(target, source, onConflict) {
213
+ for (const [name, value] of source) {
214
+ if (target.has(name)) {
215
+ onConflict(name);
216
+ continue;
217
+ }
218
+ target.set(name, value);
219
+ }
220
+ }
221
+ function mergeLocalConfig(config, file) {
222
+ for (const entry of file.configEntries) {
223
+ addConfigEntry(config, entry);
224
+ }
225
+ }
226
+ function addConfigEntry(config, entry) {
227
+ if (isScaleBlock(entry)) {
228
+ if (!config.scale)
229
+ config.scale = entry;
230
+ }
231
+ else if (isCalendarBlock(entry)) {
232
+ if (!config.calendar)
233
+ config.calendar = entry;
234
+ }
235
+ else if (isStyleDeclaration(entry)) {
236
+ if (entry.name && !config.styles.has(entry.name)) {
237
+ config.styles.set(entry.name, entry);
238
+ }
239
+ }
240
+ else if (isSymbolDeclaration(entry)) {
241
+ if (entry.name && !config.symbols.has(entry.name)) {
242
+ config.symbols.set(entry.name, entry);
243
+ }
244
+ }
245
+ else if (isDefaultDeclaration(entry)) {
246
+ if (!config.defaults.has(entry.entityType)) {
247
+ config.defaults.set(entry.entityType, entry);
248
+ }
249
+ }
250
+ }
251
+ function mergeLocalContent(content, file) {
252
+ if (file.roadmapDecl && !content.roadmap) {
253
+ content.roadmap = file.roadmapDecl;
254
+ }
255
+ for (const entry of file.roadmapEntries) {
256
+ addRoadmapEntry(content, entry);
257
+ }
258
+ }
259
+ function addRoadmapEntry(content, entry) {
260
+ if (isSwimlaneDeclaration(entry)) {
261
+ if (entry.name && !content.swimlanes.has(entry.name)) {
262
+ content.swimlanes.set(entry.name, entry);
263
+ }
264
+ }
265
+ else if (isPersonDeclaration(entry)) {
266
+ if (entry.name && !content.persons.has(entry.name)) {
267
+ content.persons.set(entry.name, entry);
268
+ }
269
+ }
270
+ else if (isTeamDeclaration(entry)) {
271
+ if (entry.name && !content.teams.has(entry.name)) {
272
+ content.teams.set(entry.name, entry);
273
+ }
274
+ }
275
+ else if (isAnchorDeclaration(entry)) {
276
+ if (entry.name && !content.anchors.has(entry.name)) {
277
+ content.anchors.set(entry.name, entry);
278
+ }
279
+ }
280
+ else if (isLabelDeclaration(entry)) {
281
+ if (entry.name && !content.labels.has(entry.name)) {
282
+ content.labels.set(entry.name, entry);
283
+ }
284
+ }
285
+ else if (isSizeDeclaration(entry)) {
286
+ if (entry.name && !content.sizes.has(entry.name)) {
287
+ content.sizes.set(entry.name, entry);
288
+ }
289
+ }
290
+ else if (isStatusDeclaration(entry)) {
291
+ if (entry.name && !content.statuses.has(entry.name)) {
292
+ content.statuses.set(entry.name, entry);
293
+ }
294
+ }
295
+ else if (isMilestoneDeclaration(entry)) {
296
+ if (entry.name && !content.milestones.has(entry.name)) {
297
+ content.milestones.set(entry.name, entry);
298
+ }
299
+ }
300
+ else if (isFootnoteDeclaration(entry)) {
301
+ if (entry.name && !content.footnotes.has(entry.name)) {
302
+ content.footnotes.set(entry.name, entry);
303
+ }
304
+ }
305
+ }
306
+ //# sourceMappingURL=include-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"include-resolver.js","sourceRoot":"","sources":["../../src/language/include-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { LangiumCoreServices, LangiumSharedCoreServices, Module, PartialLangiumCoreServices } from 'langium';
2
+ import type { NowlineAstType } from '../generated/ast.js';
3
+ import { NowlineValidator } from './nowline-validator.js';
4
+ export type NowlineAddedServices = {
5
+ validation: {
6
+ NowlineValidator: NowlineValidator;
7
+ };
8
+ };
9
+ export type NowlineServices = LangiumCoreServices & NowlineAddedServices;
10
+ export type { NowlineAstType };
11
+ export declare const NowlineModule: Module<NowlineServices, PartialLangiumCoreServices & NowlineAddedServices>;
12
+ export declare function createNowlineServices(context?: {
13
+ shared?: LangiumSharedCoreServices;
14
+ }): {
15
+ shared: LangiumSharedCoreServices;
16
+ Nowline: NowlineServices;
17
+ };
18
+ //# sourceMappingURL=nowline-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nowline-module.d.ts","sourceRoot":"","sources":["../../src/language/nowline-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGR,mBAAmB,EACnB,yBAAyB,EACzB,MAAM,EACN,0BAA0B,EAE7B,MAAM,SAAS,CAAC;AAUjB,OAAO,KAAK,EACR,cAAc,EAGjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAA4B,MAAM,wBAAwB,CAAC;AAyCpF,MAAM,MAAM,oBAAoB,GAAG;IAC/B,UAAU,EAAE;QACR,gBAAgB,EAAE,gBAAgB,CAAC;KACtC,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAAG,oBAAoB,CAAC;AAEzE,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,eAAO,MAAM,aAAa,EAAE,MAAM,CAC9B,eAAe,EACf,0BAA0B,GAAG,oBAAoB,CAmBpD,CAAC;AAEF,wBAAgB,qBAAqB,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,yBAAyB,CAAA;CAAO,GAAG;IACzF,MAAM,EAAE,yBAAyB,CAAC;IAClC,OAAO,EAAE,eAAe,CAAC;CAC5B,CAYA"}
@@ -0,0 +1,63 @@
1
+ import { createDefaultCoreModule, createDefaultSharedCoreModule, DefaultValueConverter, EmptyFileSystem, IndentationAwareLexer, IndentationAwareTokenBuilder, inject, } from 'langium';
2
+ import { NowlineGeneratedModule, NowlineGeneratedSharedModule } from '../generated/module.js';
3
+ import { NowlineValidator, registerValidationChecks } from './nowline-validator.js';
4
+ // Strip trailing ':' from property key tokens so AST nodes carry clean keys
5
+ // (e.g. `duration` instead of `duration:`). The grammar uses a single key-with-colon
6
+ // terminal to resolve lexer ambiguity between bare keywords like `duration` and
7
+ // property keys like `duration:`; this converter keeps that token-level workaround
8
+ // out of the AST surface.
9
+ class NowlinePropertyKeyValueConverter extends DefaultValueConverter {
10
+ runConverter(rule, input, cstNode) {
11
+ if (rule.name === 'PROPERTY_KEY_WITH_COLON' || rule.name === 'INCLUDE_OPTION_KEY') {
12
+ return input.endsWith(':') ? input.slice(0, -1) : input;
13
+ }
14
+ return super.runConverter(rule, input, cstNode);
15
+ }
16
+ }
17
+ // Override `isStartOfLine` so that a position immediately following a
18
+ // `\`-line-continuation (handled by the LINE_CONTINUATION hidden terminal) is
19
+ // NOT treated as the start of a new logical line. Without this, a continuation
20
+ // line with zero leading whitespace would trigger a spurious DEDENT because the
21
+ // base implementation only inspects the single character at `text[offset - 1]`.
22
+ class NowlineIndentationAwareTokenBuilder extends IndentationAwareTokenBuilder {
23
+ isStartOfLine(text, offset) {
24
+ if (!super.isStartOfLine(text, offset)) {
25
+ return false;
26
+ }
27
+ let i = offset - 1;
28
+ while (i >= 0 && (text[i] === ' ' || text[i] === '\t'))
29
+ i--;
30
+ while (i >= 0 && (text[i] === '\r' || text[i] === '\n'))
31
+ i--;
32
+ while (i >= 0 && (text[i] === ' ' || text[i] === '\t'))
33
+ i--;
34
+ return i < 0 || text[i] !== '\\';
35
+ }
36
+ }
37
+ export const NowlineModule = {
38
+ parser: {
39
+ TokenBuilder: () => new NowlineIndentationAwareTokenBuilder({
40
+ indentTokenName: 'INDENT',
41
+ dedentTokenName: 'DEDENT',
42
+ whitespaceTokenName: 'WS',
43
+ ignoreIndentationDelimiters: [['[', ']']],
44
+ }),
45
+ Lexer: (services) => new IndentationAwareLexer(services),
46
+ ParserConfig: () => ({
47
+ maxLookahead: 4,
48
+ }),
49
+ ValueConverter: () => new NowlinePropertyKeyValueConverter(),
50
+ },
51
+ validation: {
52
+ NowlineValidator: () => new NowlineValidator(),
53
+ },
54
+ };
55
+ export function createNowlineServices(context = {}) {
56
+ const shared = context.shared ??
57
+ inject(createDefaultSharedCoreModule(EmptyFileSystem), NowlineGeneratedSharedModule);
58
+ const Nowline = inject(createDefaultCoreModule({ shared }), NowlineGeneratedModule, NowlineModule);
59
+ shared.ServiceRegistry.register(Nowline);
60
+ registerValidationChecks(Nowline);
61
+ return { shared, Nowline };
62
+ }
63
+ //# sourceMappingURL=nowline-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nowline-module.js","sourceRoot":"","sources":["../../src/language/nowline-module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { AstNode, ValidationAcceptor } from 'langium';
2
+ import type { AnchorDeclaration, CalendarBlock, DefaultDeclaration, EntityProperty, FootnoteDeclaration, GroupBlock, IncludeDeclaration, IncludeOption, ItemDeclaration, MilestoneDeclaration, NowlineDirective, NowlineFile, ParallelBlock, RoadmapDeclaration, ScaleBlock, SizeDeclaration, StatusDeclaration, StyleProperty, SwimlaneDeclaration, SymbolDeclaration } from '../generated/ast.js';
3
+ import type { NowlineServices } from './nowline-module.js';
4
+ export declare function registerValidationChecks(services: NowlineServices): void;
5
+ export declare class NowlineValidator {
6
+ checkFileStructure(file: NowlineFile, accept: ValidationAcceptor): void;
7
+ checkRoadmapOnlyKeywordsPosition(_file: NowlineFile, _accept: ValidationAcceptor): void;
8
+ checkDirectiveVersion(directive: NowlineDirective, accept: ValidationAcceptor): void;
9
+ checkDirectiveProperties(directive: NowlineDirective, accept: ValidationAcceptor): void;
10
+ checkEntityIdOrTitle(node: AstNode & {
11
+ name?: string;
12
+ title?: string;
13
+ }, accept: ValidationAcceptor): void;
14
+ checkUniqueIdentifiers(file: NowlineFile, accept: ValidationAcceptor): void;
15
+ checkIndentationConsistency(file: NowlineFile, accept: ValidationAcceptor): void;
16
+ checkSwimlaneRequired(file: NowlineFile, accept: ValidationAcceptor): void;
17
+ checkIncludeMode(option: IncludeOption, accept: ValidationAcceptor): void;
18
+ checkIncludeDuplicateOptions(inc: IncludeDeclaration, accept: ValidationAcceptor): void;
19
+ checkPropertyValues(prop: EntityProperty, accept: ValidationAcceptor): void;
20
+ checkAnchorRequiredDate(anchor: AnchorDeclaration, accept: ValidationAcceptor): void;
21
+ checkAnchorAgainstStart(anchor: AnchorDeclaration, accept: ValidationAcceptor): void;
22
+ checkMilestoneRequirement(milestone: MilestoneDeclaration, accept: ValidationAcceptor): void;
23
+ checkMilestoneAgainstStart(milestone: MilestoneDeclaration, accept: ValidationAcceptor): void;
24
+ checkFootnoteOn(footnote: FootnoteDeclaration, accept: ValidationAcceptor): void;
25
+ checkNoFootnoteProperty(node: {
26
+ $type: string;
27
+ properties: EntityProperty[];
28
+ name?: string;
29
+ title?: string;
30
+ }, accept: ValidationAcceptor): void;
31
+ checkItemRequiredDuration(item: ItemDeclaration, accept: ValidationAcceptor): void;
32
+ checkNoComputedProperties(node: ParallelBlock | GroupBlock, accept: ValidationAcceptor): void;
33
+ checkParallelMinChildren(node: ParallelBlock, accept: ValidationAcceptor): void;
34
+ checkGroupMinChildren(node: GroupBlock, accept: ValidationAcceptor): void;
35
+ checkNoRawStyleProperties(node: {
36
+ $type: string;
37
+ properties: EntityProperty[];
38
+ name?: string;
39
+ title?: string;
40
+ }, accept: ValidationAcceptor): void;
41
+ checkUnknownEntityProperties(node: {
42
+ $type: string;
43
+ properties: EntityProperty[];
44
+ name?: string;
45
+ title?: string;
46
+ }, accept: ValidationAcceptor): void;
47
+ checkRoadmapProperties(_roadmap: RoadmapDeclaration, _accept: ValidationAcceptor): void;
48
+ checkStylePropertyEnum(prop: StyleProperty, accept: ValidationAcceptor): void;
49
+ checkSizeDeclaration(decl: SizeDeclaration, accept: ValidationAcceptor): void;
50
+ checkStatusDeclaration(decl: StatusDeclaration, accept: ValidationAcceptor): void;
51
+ checkDuplicateSizeIds(file: NowlineFile, accept: ValidationAcceptor): void;
52
+ checkUtilizationOrdering(decl: SwimlaneDeclaration | DefaultDeclaration, accept: ValidationAcceptor): void;
53
+ checkDefaultDeclaration(decl: DefaultDeclaration, accept: ValidationAcceptor): void;
54
+ checkCalendarBlockConsistency(file: NowlineFile, accept: ValidationAcceptor): void;
55
+ checkCalendarBlock(block: CalendarBlock, accept: ValidationAcceptor): void;
56
+ checkScaleBlock(block: ScaleBlock, accept: ValidationAcceptor): void;
57
+ checkForwardReferences(file: NowlineFile, accept: ValidationAcceptor): void;
58
+ checkReferenceResolution(file: NowlineFile, accept: ValidationAcceptor): void;
59
+ checkCircularDependencies(file: NowlineFile, accept: ValidationAcceptor): void;
60
+ checkPersonDeclarations(file: NowlineFile, accept: ValidationAcceptor): void;
61
+ checkSymbolDeclaration(decl: SymbolDeclaration, accept: ValidationAcceptor): void;
62
+ checkDuplicateSymbolIds(file: NowlineFile, accept: ValidationAcceptor): void;
63
+ checkSymbolReferences(file: NowlineFile, accept: ValidationAcceptor): void;
64
+ }
65
+ //# sourceMappingURL=nowline-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nowline-validator.d.ts","sourceRoot":"","sources":["../../src/language/nowline-validator.ts"],"names":[],"mappings":"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"}