@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 @@
1
+ {"version":3,"file":"grammar.js","sourceRoot":"","sources":["../../src/generated/grammar.ts"],"names":[],"mappings":"AAAA;;;gFAGgF;AAGhF,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAE9C,IAAI,oBAAyC,CAAC;AAC9C,MAAM,CAAC,MAAM,cAAc,GAAG,GAAY,EAAE,CAAC,oBAAoB,IAAI,CAAC,oBAAoB,GAAG,mBAAmB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAq8E/G,CAAC,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /******************************************************************************
2
+ * This file was generated by langium-cli 4.2.0.
3
+ * DO NOT EDIT MANUALLY!
4
+ ******************************************************************************/
5
+ import type { LangiumSharedCoreServices, LangiumCoreServices, LangiumGeneratedCoreServices, LangiumGeneratedSharedCoreServices, Module } from 'langium';
6
+ export declare const NowlineLanguageMetaData: {
7
+ readonly languageId: "nowline";
8
+ readonly fileExtensions: readonly [".nowline"];
9
+ readonly caseInsensitive: false;
10
+ readonly mode: "development";
11
+ };
12
+ export declare const NowlineGeneratedSharedModule: Module<LangiumSharedCoreServices, LangiumGeneratedSharedCoreServices>;
13
+ export declare const NowlineGeneratedModule: Module<LangiumCoreServices, LangiumGeneratedCoreServices>;
14
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../src/generated/module.ts"],"names":[],"mappings":"AAAA;;;gFAGgF;AAEhF,OAAO,KAAK,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,kCAAkC,EAAoB,MAAM,EAAE,MAAM,SAAS,CAAC;AAI1K,eAAO,MAAM,uBAAuB;;;;;CAKC,CAAC;AAEtC,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,yBAAyB,EAAE,kCAAkC,CAE9G,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,CAI5F,CAAC"}
@@ -0,0 +1,21 @@
1
+ /******************************************************************************
2
+ * This file was generated by langium-cli 4.2.0.
3
+ * DO NOT EDIT MANUALLY!
4
+ ******************************************************************************/
5
+ import { NowlineAstReflection } from './ast.js';
6
+ import { NowlineGrammar } from './grammar.js';
7
+ export const NowlineLanguageMetaData = {
8
+ languageId: 'nowline',
9
+ fileExtensions: ['.nowline'],
10
+ caseInsensitive: false,
11
+ mode: 'development'
12
+ };
13
+ export const NowlineGeneratedSharedModule = {
14
+ AstReflection: () => new NowlineAstReflection()
15
+ };
16
+ export const NowlineGeneratedModule = {
17
+ Grammar: () => NowlineGrammar(),
18
+ LanguageMetaData: () => NowlineLanguageMetaData,
19
+ parser: {}
20
+ };
21
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/generated/module.ts"],"names":[],"mappings":"AAAA;;;gFAGgF;AAGhF,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACnC,UAAU,EAAE,SAAS;IACrB,cAAc,EAAE,CAAC,UAAU,CAAC;IAC5B,eAAe,EAAE,KAAK;IACtB,IAAI,EAAE,aAAa;CACc,CAAC;AAEtC,MAAM,CAAC,MAAM,4BAA4B,GAA0E;IAC/G,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI,oBAAoB,EAAE;CAClD,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAA8D;IAC7F,OAAO,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE;IAC/B,gBAAgB,EAAE,GAAG,EAAE,CAAC,uBAAuB;IAC/C,MAAM,EAAE,EAAE;CACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type MessageCode = 'NL.E0001' | 'NL.E0002' | 'NL.E0003' | 'NL.E0004' | 'NL.E0005' | 'NL.E0100' | 'NL.E0101' | 'NL.E0102' | 'NL.E0103' | 'NL.E0104' | 'NL.E0200' | 'NL.E0201' | 'NL.E0300' | 'NL.E0301' | 'NL.E0400' | 'NL.E0401' | 'NL.E0402' | 'NL.E0403' | 'NL.E0404' | 'NL.E0405' | 'NL.E0406' | 'NL.E0407' | 'NL.E0408' | 'NL.E0500' | 'NL.E0501' | 'NL.E0502' | 'NL.E0503' | 'NL.E0504' | 'NL.E0505' | 'NL.E0600' | 'NL.W0700';
2
+ export declare const ALL_CODES: ReadonlyArray<MessageCode>;
3
+ //# sourceMappingURL=codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../src/i18n/codes.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,WAAW,GAEjB,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GAGV,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GAGV,UAAU,GACV,UAAU,GAGV,UAAU,GACV,UAAU,GAGV,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GAGV,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GACV,UAAU,GAGV,UAAU,GAGV,UAAU,CAAC;AAEjB,eAAO,MAAM,SAAS,EAAE,aAAa,CAAC,WAAW,CAgCvC,CAAC"}
@@ -0,0 +1,54 @@
1
+ // Stable error codes for validator messages. Codes never change once shipped:
2
+ // renumbering is a major-version concern. Adding a new code is always
3
+ // safe; deleting one means the rule was removed entirely.
4
+ //
5
+ // Code ranges are reserved by category to keep the table scannable:
6
+ // NL.E0001–E0099 structural / file-level
7
+ // NL.E0100–E0199 directive
8
+ // NL.E0200–E0299 include
9
+ // NL.E0300–E0399 identifier / id-or-title / indentation
10
+ // NL.E0400–E0499 property values (duration, size, date, scale, etc.)
11
+ // NL.E0500–E0599 anchor / milestone / footnote
12
+ // NL.E0600–E0699 item / swimlane
13
+ // NL.E0700–E0799 capacity / utilization
14
+ // NL.E0800–E0899 style / color / symbol
15
+ // NL.E0900–E0999 config blocks (calendar, scale, default)
16
+ // NL.W0700–W0799 warnings (silently-ignored input)
17
+ //
18
+ // The full list of allocated codes lives in `messages.en.ts` (one entry
19
+ // per code). The runtime walks the locale fallback chain and falls
20
+ // through to en-US when a key is missing — see `i18n/index.ts`.
21
+ export const ALL_CODES = [
22
+ 'NL.E0001',
23
+ 'NL.E0002',
24
+ 'NL.E0003',
25
+ 'NL.E0004',
26
+ 'NL.E0005',
27
+ 'NL.E0100',
28
+ 'NL.E0101',
29
+ 'NL.E0102',
30
+ 'NL.E0103',
31
+ 'NL.E0104',
32
+ 'NL.E0200',
33
+ 'NL.E0201',
34
+ 'NL.E0300',
35
+ 'NL.E0301',
36
+ 'NL.E0400',
37
+ 'NL.E0401',
38
+ 'NL.E0402',
39
+ 'NL.E0403',
40
+ 'NL.E0404',
41
+ 'NL.E0405',
42
+ 'NL.E0406',
43
+ 'NL.E0407',
44
+ 'NL.E0408',
45
+ 'NL.E0500',
46
+ 'NL.E0501',
47
+ 'NL.E0502',
48
+ 'NL.E0503',
49
+ 'NL.E0504',
50
+ 'NL.E0505',
51
+ 'NL.E0600',
52
+ 'NL.W0700',
53
+ ];
54
+ //# sourceMappingURL=codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codes.js","sourceRoot":"","sources":["../../src/i18n/codes.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,0DAA0D;AAC1D,EAAE;AACF,oEAAoE;AACpE,4CAA4C;AAC5C,8BAA8B;AAC9B,4BAA4B;AAC5B,2DAA2D;AAC3D,wEAAwE;AACxE,kDAAkD;AAClD,oCAAoC;AACpC,2CAA2C;AAC3C,2CAA2C;AAC3C,6DAA6D;AAC7D,sDAAsD;AACtD,EAAE;AACF,wEAAwE;AACxE,mEAAmE;AACnE,gEAAgE;AAkDhE,MAAM,CAAC,MAAM,SAAS,GAA+B;IACjD,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;CACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { MessageCode } from './codes.js';
2
+ import { messages as enMessages } from './messages.en.js';
3
+ export type { MessageCode } from './codes.js';
4
+ export type MessageBundle = {
5
+ [K in MessageCode]?: (...args: never[]) => string;
6
+ };
7
+ export declare function registerBundle(locale: string, bundle: MessageBundle): void;
8
+ /**
9
+ * Format a message in the resolved locale.
10
+ *
11
+ * Walks the locale fallback chain (`fr-CA → fr → en-US`) and returns
12
+ * the first match. Always returns a string because `en-US` is
13
+ * guaranteed to define every code.
14
+ */
15
+ export declare function tr<K extends MessageCode>(locale: string, code: K, ...args: MessageArgs<K>): string;
16
+ export type MessageArgs<K extends MessageCode> = Parameters<(typeof enMessages)[K]>;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAK1D,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK9C,MAAM,MAAM,aAAa,GAAG;KACvB,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,MAAM;CACpD,CAAC;AAkBF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAE1E;AAED;;;;;;GAMG;AACH,wBAAgB,EAAE,CAAC,CAAC,SAAS,WAAW,EACpC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,CAAC,EACP,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GACxB,MAAM,CAWR;AAKD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,IAAI,UAAU,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,82 @@
1
+ // Validator message registry. Walks the BCP-47 fallback chain, falling
2
+ // through to `en-US` for any missing key. Other locales (fr, fr-CA,
3
+ // fr-FR, …) plug in via `registerBundle` so the renderer in `@nowline/cli`
4
+ // can wire them at startup without forcing `@nowline/core` to import
5
+ // every locale file at build time.
6
+ //
7
+ // Coverage contract: `messages.en.ts` is the source of truth — every
8
+ // `MessageCode` MUST have an entry there. Coverage CI lives in
9
+ // `test/i18n/messages-coverage.test.ts`.
10
+ import { messages as enMessages } from './messages.en.js';
11
+ import { messages as frMessages } from './messages.fr.js';
12
+ import { messages as frCAMessages } from './messages.fr-CA.js';
13
+ import { messages as frFRMessages } from './messages.fr-FR.js';
14
+ // Bundles are keyed by the BCP-47 tag. `en-US` is the canonical root and
15
+ // `fr` is the neutral French base; `fr-CA` and `fr-FR` are overlay shells
16
+ // that ship empty by design. The fallback walker (`fr-CA → fr → en-US`)
17
+ // fills in any missing keys, so authors only have to populate the
18
+ // overlays when a regional divergence actually exists.
19
+ //
20
+ // Empty overlays are intentional — they establish the contract for
21
+ // where regional divergences go when they appear, and keep the
22
+ // distribution surface uniform across locales.
23
+ const bundles = new Map([
24
+ ['en-US', enMessages],
25
+ ['fr', frMessages],
26
+ ['fr-CA', frCAMessages],
27
+ ['fr-FR', frFRMessages],
28
+ ]);
29
+ export function registerBundle(locale, bundle) {
30
+ bundles.set(locale, bundle);
31
+ }
32
+ /**
33
+ * Format a message in the resolved locale.
34
+ *
35
+ * Walks the locale fallback chain (`fr-CA → fr → en-US`) and returns
36
+ * the first match. Always returns a string because `en-US` is
37
+ * guaranteed to define every code.
38
+ */
39
+ export function tr(locale, code, ...args) {
40
+ for (const tag of fallbackChain(locale)) {
41
+ const bundle = bundles.get(tag);
42
+ const fn = bundle?.[code];
43
+ if (fn)
44
+ return fn(...args);
45
+ }
46
+ // Defensive fallback: en-US must define every code, but if a future
47
+ // refactor accidentally forgets one, surface the code itself rather
48
+ // than throwing — partial localization is recoverable; a thrown
49
+ // exception during validation is not.
50
+ return code;
51
+ }
52
+ const DEFAULT_LOCALE = 'en-US';
53
+ // Local copy of the BCP-47 fallback walker. Intentionally duplicated
54
+ // from `@nowline/layout/i18n` (which has the same logic) so that
55
+ // `@nowline/core` doesn't depend on `@nowline/layout`. The two
56
+ // implementations should evolve together — see `specs/localization.md`.
57
+ function fallbackChain(locale) {
58
+ const chain = [];
59
+ let current = normalize(locale);
60
+ while (current.length > 0) {
61
+ if (!chain.includes(current))
62
+ chain.push(current);
63
+ const dash = current.lastIndexOf('-');
64
+ if (dash <= 0)
65
+ break;
66
+ current = current.slice(0, dash);
67
+ }
68
+ if (!chain.includes(DEFAULT_LOCALE))
69
+ chain.push(DEFAULT_LOCALE);
70
+ return chain;
71
+ }
72
+ function normalize(locale) {
73
+ const parts = locale.split('-');
74
+ return parts
75
+ .map((part, i) => {
76
+ if (i === 0)
77
+ return part.toLowerCase();
78
+ return /^[a-zA-Z]{2}$/.test(part) ? part.toUpperCase() : part;
79
+ })
80
+ .join('-');
81
+ }
82
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ export declare const messages: {
2
+ 'NL.E0001': () => string;
3
+ 'NL.E0002': () => string;
4
+ 'NL.E0003': () => string;
5
+ 'NL.E0004': () => string;
6
+ 'NL.E0005': (a: {
7
+ line: number;
8
+ }) => string;
9
+ 'NL.E0100': (a: {
10
+ version: string;
11
+ }) => string;
12
+ 'NL.E0101': (a: {
13
+ version: string;
14
+ supported: string;
15
+ }) => string;
16
+ 'NL.E0102': (a: {
17
+ key: string;
18
+ allowed: string;
19
+ }) => string;
20
+ 'NL.E0103': (a: {
21
+ key: string;
22
+ }) => string;
23
+ 'NL.E0104': (a: {
24
+ value: string;
25
+ }) => string;
26
+ 'NL.E0200': (a: {
27
+ value: string;
28
+ }) => string;
29
+ 'NL.E0201': (a: {
30
+ key: string;
31
+ }) => string;
32
+ 'NL.E0300': (a: {
33
+ name: string;
34
+ location: string;
35
+ }) => string;
36
+ 'NL.E0301': (a: {
37
+ type: string;
38
+ }) => string;
39
+ 'NL.E0400': (a: {
40
+ value: string;
41
+ }) => string;
42
+ 'NL.E0401': (a: {
43
+ value: string;
44
+ }) => string;
45
+ 'NL.E0402': (a: {
46
+ value: string;
47
+ }) => string;
48
+ 'NL.E0403': (a: {
49
+ value: string;
50
+ }) => string;
51
+ 'NL.E0404': (a: {
52
+ value: string;
53
+ }) => string;
54
+ 'NL.E0405': (a: {
55
+ key: string;
56
+ value: string;
57
+ }) => string;
58
+ 'NL.E0406': (a: {
59
+ value: string;
60
+ }) => string;
61
+ 'NL.E0407': (a: {
62
+ value: string;
63
+ }) => string;
64
+ 'NL.E0408': (a: {
65
+ key: string;
66
+ }) => string;
67
+ 'NL.E0500': (a: {
68
+ name: string;
69
+ }) => string;
70
+ 'NL.E0501': (a: {
71
+ name: string;
72
+ }) => string;
73
+ 'NL.E0502': (a: {
74
+ name: string;
75
+ date: string;
76
+ start: string;
77
+ }) => string;
78
+ 'NL.E0503': (a: {
79
+ name: string;
80
+ }) => string;
81
+ 'NL.E0504': (a: {
82
+ name: string;
83
+ date: string;
84
+ start: string;
85
+ }) => string;
86
+ 'NL.E0505': () => string;
87
+ 'NL.E0600': (a: {
88
+ name: string;
89
+ }) => string;
90
+ 'NL.W0700': (a: {
91
+ key: string;
92
+ entity: string;
93
+ suggested: string;
94
+ }) => string;
95
+ };
96
+ //# sourceMappingURL=messages.en.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.en.d.ts","sourceRoot":"","sources":["../../src/i18n/messages.en.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,QAAQ;;;;;oBAMD;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;oBAIhB;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE;oBAEnB;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;oBAEtC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;oBAEhC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;oBACf;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;oBAIjB;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;oBAEjB;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;oBAGf;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;oBAElC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;oBAGhB;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;oBAEjB;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;oBAEjB;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;oBAEjB;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;oBAEjB;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;oBACjB;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;oBAE9B;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;oBAEjB;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;oBAEjB;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;oBAGf;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;oBAChB;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;oBAEhB;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;oBAE7C;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;oBAEhB;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;;oBAK7C;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;oBAIhB;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CAIrE,CAAC"}
@@ -0,0 +1,57 @@
1
+ // English message bundle. The root locale — every key here MUST exist
2
+ // (CI enforces this in `messages-coverage.test.ts`). Other locales may
3
+ // omit keys; the loader falls through to en-US for any missing entry.
4
+ //
5
+ // Each entry is a plain function taking strongly-typed args. This keeps
6
+ // translation reviewable (no positional `{0}` / `{1}` indirection) and
7
+ // gives every placeholder a name. Authors translating to fr only have
8
+ // to swap the function body — the signature stays identical.
9
+ //
10
+ // We deliberately do NOT use `satisfies Record<MessageCode, ...>` here:
11
+ // the type of each entry is what `MessageArgs<K>` (in `index.ts`) reads
12
+ // to type-check call sites. A `satisfies` constraint would widen each
13
+ // entry to a uniform `(...args: never[]) => string` signature and break
14
+ // per-code argument inference. Coverage of `MessageCode` is enforced by
15
+ // the runtime test in `test/i18n/messages-coverage.test.ts`.
16
+ export const messages = {
17
+ // Structural
18
+ 'NL.E0001': () => 'Config section must appear before roadmap.',
19
+ 'NL.E0002': () => 'Include declarations must appear before the config section.',
20
+ 'NL.E0003': () => 'Include declarations must appear before the roadmap section.',
21
+ 'NL.E0004': () => 'At least one swimlane is required.',
22
+ 'NL.E0005': (a) => `Line ${a.line}: mixed tabs and spaces in indentation. Use either tabs or spaces consistently.`,
23
+ // Directive
24
+ 'NL.E0100': (a) => `Invalid version format "${a.version}". Expected format: v1, v2, etc.`,
25
+ 'NL.E0101': (a) => `This file requires Nowline ${a.version}, but the parser only supports up to ${a.supported}.`,
26
+ 'NL.E0102': (a) => `Unknown directive property "${a.key}". Allowed: ${a.allowed}.`,
27
+ 'NL.E0103': (a) => `Duplicate directive property "${a.key}".`,
28
+ 'NL.E0104': (a) => `Invalid locale "${a.value}". Use a BCP-47 tag like "en-US", "fr", or "fr-CA".`,
29
+ // Include
30
+ 'NL.E0200': (a) => `Invalid include mode "${a.value}". Must be merge, ignore, or isolate.`,
31
+ 'NL.E0201': (a) => `Duplicate "${a.key}" option on include.`,
32
+ // Identifier
33
+ 'NL.E0300': (a) => `Duplicate identifier "${a.name}". First declared at ${a.location}.`,
34
+ 'NL.E0301': (a) => `${a.type} must have an identifier, a title, or both.`,
35
+ // Property values
36
+ 'NL.E0400': (a) => `Invalid duration "${a.value}". Use a raw duration literal like 0.5d, 2w, 1m, 2q. Use "size:NAME" to reference a declared size.`,
37
+ 'NL.E0401': (a) => `Invalid size "${a.value}". Use the id of a declared size (e.g. xs, m, lg).`,
38
+ 'NL.E0402': (a) => `Invalid effort "${a.value}". Use a raw duration literal like 0.5d, 2w, 1m, 2q.`,
39
+ 'NL.E0403': (a) => `Invalid remaining value "${a.value}". Use a percentage like 30% or a duration literal like 1w, 0.5d.`,
40
+ 'NL.E0404': (a) => `Remaining must be between 0% and 100%, got ${a.value}.`,
41
+ 'NL.E0405': (a) => `Invalid ${a.key} "${a.value}". Use ISO 8601 format: YYYY-MM-DD.`,
42
+ 'NL.E0406': (a) => `Invalid scale "${a.value}". Use a raw duration literal like 1w, 2w, 1q (no name lookup).`,
43
+ 'NL.E0407': (a) => `Invalid calendar "${a.value}". Must be business, full, or custom.`,
44
+ 'NL.E0408': (a) => `Property "${a.key}" requires at least one reference.`,
45
+ // Anchor / milestone / footnote
46
+ 'NL.E0500': (a) => `Anchor "${a.name}" requires a "date:" property.`,
47
+ 'NL.E0501': (a) => `Anchor "${a.name}" has a date but the roadmap is missing "start:". Add start:YYYY-MM-DD to the roadmap.`,
48
+ 'NL.E0502': (a) => `Anchor "${a.name}" date ${a.date} is before roadmap start ${a.start}.`,
49
+ 'NL.E0503': (a) => `Milestone "${a.name}" requires at least one of "date:" or "after:".`,
50
+ 'NL.E0504': (a) => `Milestone "${a.name}" date ${a.date} is before roadmap start ${a.start}.`,
51
+ 'NL.E0505': () => 'Footnote requires an "on:" property referencing one or more entities.',
52
+ // Item
53
+ 'NL.E0600': (a) => `Item "${a.name}" requires a "size:" or "duration:" property.`,
54
+ // Warnings
55
+ 'NL.W0700': (a) => `Unknown property "${a.key}" on ${a.entity}. The renderer ignores it.${a.suggested ? ` Did you mean "${a.suggested}"?` : ''}`,
56
+ };
57
+ //# sourceMappingURL=messages.en.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.en.js","sourceRoot":"","sources":["../../src/i18n/messages.en.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { MessageBundle } from './index.js';
2
+ export declare const messages: MessageBundle;
3
+ //# sourceMappingURL=messages.fr-CA.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.fr-CA.d.ts","sourceRoot":"","sources":["../../src/i18n/messages.fr-CA.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,eAAO,MAAM,QAAQ,EAAE,aAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ // Bundle de messages — surcouche fr-CA (Québec).
2
+ //
3
+ // Vide à la conception. Cette surcouche existe pour héberger les
4
+ // divergences spécifiques au Québec lorsqu'elles apparaissent\ : une
5
+ // terminologie OQLF qui s'écarte du français neutre est rejetée de
6
+ // `messages.fr.ts` et atterrit ici.
7
+ //
8
+ // Les clés absentes redescendent automatiquement la chaîne de repli
9
+ // BCP-47\ : `fr-CA → fr → en-US`. Voir `specs/localization.md`.
10
+ export const messages = {};
11
+ //# sourceMappingURL=messages.fr-CA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.fr-CA.js","sourceRoot":"","sources":["../../src/i18n/messages.fr-CA.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,iEAAiE;AACjE,qEAAqE;AACrE,mEAAmE;AACnE,oCAAoC;AACpC,EAAE;AACF,oEAAoE;AACpE,gEAAgE;AAIhE,MAAM,CAAC,MAAM,QAAQ,GAAkB,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { MessageBundle } from './index.js';
2
+ export declare const messages: MessageBundle;
3
+ //# sourceMappingURL=messages.fr-FR.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.fr-FR.d.ts","sourceRoot":"","sources":["../../src/i18n/messages.fr-FR.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,eAAO,MAAM,QAAQ,EAAE,aAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ // Bundle de messages — surcouche fr-FR (France).
2
+ //
3
+ // Vide à la conception. Cette surcouche existe pour héberger les
4
+ // divergences spécifiques à la France hexagonale lorsqu'elles
5
+ // apparaissent\ : une terminologie qui s'écarte du français neutre est
6
+ // rejetée de `messages.fr.ts` et atterrit ici.
7
+ //
8
+ // Les clés absentes redescendent automatiquement la chaîne de repli
9
+ // BCP-47\ : `fr-FR → fr → en-US`. Voir `specs/localization.md`.
10
+ export const messages = {};
11
+ //# sourceMappingURL=messages.fr-FR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.fr-FR.js","sourceRoot":"","sources":["../../src/i18n/messages.fr-FR.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,iEAAiE;AACjE,8DAA8D;AAC9D,uEAAuE;AACvE,+CAA+C;AAC/C,EAAE;AACF,oEAAoE;AACpE,gEAAgE;AAIhE,MAAM,CAAC,MAAM,QAAQ,GAAkB,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { MessageBundle } from './index.js';
2
+ export declare const messages: MessageBundle;
3
+ //# sourceMappingURL=messages.fr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.fr.d.ts","sourceRoot":"","sources":["../../src/i18n/messages.fr.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,eAAO,MAAM,QAAQ,EAAE,aA0EtB,CAAC"}
@@ -0,0 +1,55 @@
1
+ // Bundle de messages français — base régionalement neutre.
2
+ //
3
+ // Les divergences spécifiques au Québec ou à la France vont dans
4
+ // `messages.fr-CA.ts` / `messages.fr-FR.ts`, qui se superposent par-dessus
5
+ // celui-ci via la chaîne de repli BCP-47 (`fr-CA → fr → en-US`).
6
+ //
7
+ // Origine\ : traduction automatique amorcée, puis relecture humaine
8
+ // francophone du Québec (terminologie OQLF, Grand dictionnaire
9
+ // terminologique). Toute formulation typiquement québécoise doit
10
+ // descendre dans `messages.fr-CA.ts` plutôt que de polluer cette base.
11
+ //
12
+ // Les clés manquantes ici font silencieusement repli sur `messages.en.ts`,
13
+ // donc une couverture partielle est sûre.
14
+ export const messages = {
15
+ // Structurel
16
+ 'NL.E0001': () => 'La section config doit précéder la section roadmap.',
17
+ 'NL.E0002': () => 'Les déclarations include doivent précéder la section config.',
18
+ 'NL.E0003': () => 'Les déclarations include doivent précéder la section roadmap.',
19
+ 'NL.E0004': () => 'Au moins une swimlane est requise.',
20
+ 'NL.E0005': (a) => `Ligne ${a.line}\u00A0: tabulations et espaces mélangés dans l'indentation. Utilisez l'un ou l'autre, mais pas les deux.`,
21
+ // Directive
22
+ 'NL.E0100': (a) => `Format de version invalide «\u00A0${a.version}\u00A0». Format attendu\u00A0: v1, v2, etc.`,
23
+ 'NL.E0101': (a) => `Ce fichier requiert Nowline ${a.version}, mais l'analyseur ne prend en charge que jusqu'à ${a.supported}.`,
24
+ 'NL.E0102': (a) => `Propriété de directive inconnue «\u00A0${a.key}\u00A0». Valeurs admises\u00A0: ${a.allowed}.`,
25
+ 'NL.E0103': (a) => `Propriété de directive «\u00A0${a.key}\u00A0» en double.`,
26
+ 'NL.E0104': (a) => `Locale invalide «\u00A0${a.value}\u00A0». Utilisez une étiquette BCP-47 telle que «\u00A0en-US\u00A0», «\u00A0fr\u00A0» ou «\u00A0fr-CA\u00A0».`,
27
+ // Include
28
+ 'NL.E0200': (a) => `Mode d'include invalide «\u00A0${a.value}\u00A0». Doit être merge, ignore ou isolate.`,
29
+ 'NL.E0201': (a) => `Option «\u00A0${a.key}\u00A0» en double sur include.`,
30
+ // Identifiant
31
+ 'NL.E0300': (a) => `Identifiant en double «\u00A0${a.name}\u00A0». Première déclaration à ${a.location}.`,
32
+ 'NL.E0301': (a) => `${a.type} doit comporter un identifiant, un titre, ou les deux.`,
33
+ // Valeurs de propriété
34
+ 'NL.E0400': (a) => `Durée invalide «\u00A0${a.value}\u00A0». Utilisez un littéral de durée brut comme 0.5d, 2w, 1m, 2q. Utilisez «\u00A0size:NOM\u00A0» pour référencer une taille déclarée.`,
35
+ 'NL.E0401': (a) => `Taille invalide «\u00A0${a.value}\u00A0». Utilisez l'identifiant d'une taille déclarée (p.\u00A0ex. xs, m, lg).`,
36
+ 'NL.E0402': (a) => `Effort invalide «\u00A0${a.value}\u00A0». Utilisez un littéral de durée brut comme 0.5d, 2w, 1m, 2q.`,
37
+ 'NL.E0403': (a) => `Valeur restante invalide «\u00A0${a.value}\u00A0». Utilisez un pourcentage tel que 30% ou un littéral de durée comme 1w, 0.5d.`,
38
+ 'NL.E0404': (a) => `La valeur restante doit être comprise entre 0 % et 100 %, reçu ${a.value}.`,
39
+ 'NL.E0405': (a) => `${a.key} invalide «\u00A0${a.value}\u00A0». Utilisez le format ISO 8601\u00A0: AAAA-MM-JJ.`,
40
+ 'NL.E0406': (a) => `Échelle invalide «\u00A0${a.value}\u00A0». Utilisez un littéral de durée brut comme 1w, 2w, 1q (pas de recherche par nom).`,
41
+ 'NL.E0407': (a) => `Calendrier invalide «\u00A0${a.value}\u00A0». Doit être business, full ou custom.`,
42
+ 'NL.E0408': (a) => `La propriété «\u00A0${a.key}\u00A0» exige au moins une référence.`,
43
+ // Ancre / jalon / note de bas de page
44
+ 'NL.E0500': (a) => `L'ancre «\u00A0${a.name}\u00A0» exige une propriété «\u00A0date:\u00A0».`,
45
+ 'NL.E0501': (a) => `L'ancre «\u00A0${a.name}\u00A0» a une date, mais «\u00A0start:\u00A0» manque sur la roadmap. Ajoutez start:AAAA-MM-JJ à la roadmap.`,
46
+ 'NL.E0502': (a) => `La date ${a.date} de l'ancre «\u00A0${a.name}\u00A0» précède le début de la roadmap (${a.start}).`,
47
+ 'NL.E0503': (a) => `Le jalon «\u00A0${a.name}\u00A0» exige au moins l'une des propriétés «\u00A0date:\u00A0» ou «\u00A0after:\u00A0».`,
48
+ 'NL.E0504': (a) => `La date ${a.date} du jalon «\u00A0${a.name}\u00A0» précède le début de la roadmap (${a.start}).`,
49
+ 'NL.E0505': () => 'Une note de bas de page exige une propriété «\u00A0on:\u00A0» référençant au moins une entité.',
50
+ // Élément
51
+ 'NL.E0600': (a) => `L'élément «\u00A0${a.name}\u00A0» exige une propriété «\u00A0size:\u00A0» ou «\u00A0duration:\u00A0».`,
52
+ // Avertissements
53
+ 'NL.W0700': (a) => `Propriété inconnue «\u00A0${a.key}\u00A0» sur ${a.entity}. Le moteur de rendu l'ignore.${a.suggested ? ` Vouliez-vous dire «\u00A0${a.suggested}\u00A0»\u00A0?` : ''}`,
54
+ };
55
+ //# sourceMappingURL=messages.fr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.fr.js","sourceRoot":"","sources":["../../src/i18n/messages.fr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export * from './generated/ast.js';
2
+ export * from './generated/module.js';
3
+ export { ALL_CODES, type MessageCode } from './i18n/codes.js';
4
+ export { type MessageArgs, type MessageBundle, registerBundle, tr, } from './i18n/index.js';
5
+ export { type IncludeMode, type IsolatedRegion, type ResolveDiagnostic, type ResolvedConfig, type ResolvedContent, type ResolveIncludesOptions, type ResolveResult, resolveIncludes, } from './language/include-resolver.js';
6
+ export type { NowlineAddedServices, NowlineServices } from './language/nowline-module.js';
7
+ export { createNowlineServices, NowlineModule } from './language/nowline-module.js';
8
+ export { NowlineValidator, registerValidationChecks } from './language/nowline-validator.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,cAAc,EACd,EAAE,GACL,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,eAAe,GAClB,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export * from './generated/ast.js';
2
+ export * from './generated/module.js';
3
+ export { ALL_CODES } from './i18n/codes.js';
4
+ export { registerBundle, tr, } from './i18n/index.js';
5
+ export { resolveIncludes, } from './language/include-resolver.js';
6
+ export { createNowlineServices, NowlineModule } from './language/nowline-module.js';
7
+ export { NowlineValidator, registerValidationChecks } from './language/nowline-validator.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAoB,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAGH,cAAc,EACd,EAAE,GACL,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAQH,eAAe,GAClB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,46 @@
1
+ import type { AnchorDeclaration, CalendarBlock, DefaultDeclaration, FootnoteDeclaration, LabelDeclaration, MilestoneDeclaration, NowlineFile, PersonDeclaration, RoadmapDeclaration, ScaleBlock, SizeDeclaration, StatusDeclaration, StyleDeclaration, SwimlaneDeclaration, SymbolDeclaration, TeamDeclaration } from '../generated/ast.js';
2
+ import type { NowlineServices } from './nowline-module.js';
3
+ export type IncludeMode = 'merge' | 'ignore' | 'isolate';
4
+ export interface ResolvedConfig {
5
+ scale?: ScaleBlock;
6
+ calendar?: CalendarBlock;
7
+ styles: Map<string, StyleDeclaration>;
8
+ defaults: Map<string, DefaultDeclaration>;
9
+ symbols: Map<string, SymbolDeclaration>;
10
+ }
11
+ export interface ResolvedContent {
12
+ roadmap?: RoadmapDeclaration;
13
+ persons: Map<string, PersonDeclaration>;
14
+ teams: Map<string, TeamDeclaration>;
15
+ anchors: Map<string, AnchorDeclaration>;
16
+ labels: Map<string, LabelDeclaration>;
17
+ sizes: Map<string, SizeDeclaration>;
18
+ statuses: Map<string, StatusDeclaration>;
19
+ swimlanes: Map<string, SwimlaneDeclaration>;
20
+ milestones: Map<string, MilestoneDeclaration>;
21
+ footnotes: Map<string, FootnoteDeclaration>;
22
+ isolatedRegions: IsolatedRegion[];
23
+ }
24
+ export interface IsolatedRegion {
25
+ sourcePath: string;
26
+ config: ResolvedConfig;
27
+ content: ResolvedContent;
28
+ }
29
+ export interface ResolveDiagnostic {
30
+ severity: 'error' | 'warning';
31
+ message: string;
32
+ sourcePath: string;
33
+ line?: number;
34
+ }
35
+ export interface ResolveResult {
36
+ config: ResolvedConfig;
37
+ content: ResolvedContent;
38
+ diagnostics: ResolveDiagnostic[];
39
+ processedFiles: Set<string>;
40
+ }
41
+ export interface ResolveIncludesOptions {
42
+ services: NowlineServices;
43
+ readFile?: (absPath: string) => Promise<string>;
44
+ }
45
+ export declare function resolveIncludes(file: NowlineFile, filePath: string, options: ResolveIncludesOptions): Promise<ResolveResult>;
46
+ //# sourceMappingURL=include-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"include-resolver.d.ts","sourceRoot":"","sources":["../../src/language/include-resolver.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACR,iBAAiB,EACjB,aAAa,EAEb,kBAAkB,EAClB,mBAAmB,EAEnB,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAElB,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EAClB,MAAM,qBAAqB,CAAC;AAiB7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AA0BzD,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACtC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAK1C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,eAAe;IAC5B,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACxC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACpC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACtC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACpC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACzC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAC9C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5C,eAAe,EAAE,cAAc,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,cAAc;IAK3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,eAAe,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAiCD,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD;AAED,wBAAsB,eAAe,CACjC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,sBAAsB,GAChC,OAAO,CAAC,aAAa,CAAC,CAiBxB"}