@sharpee/lang-en-us 1.1.2 → 1.5.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 (171) hide show
  1. package/actions/about.d.ts.map +1 -1
  2. package/actions/about.js.map +1 -1
  3. package/actions/again.d.ts.map +1 -1
  4. package/actions/again.js.map +1 -1
  5. package/actions/answering.d.ts.map +1 -1
  6. package/actions/answering.js.map +1 -1
  7. package/actions/asking.d.ts.map +1 -1
  8. package/actions/asking.js.map +1 -1
  9. package/actions/attacking.d.ts.map +1 -1
  10. package/actions/attacking.js.map +1 -1
  11. package/actions/climbing.d.ts.map +1 -1
  12. package/actions/climbing.js.map +1 -1
  13. package/actions/closing.d.ts.map +1 -1
  14. package/actions/closing.js.map +1 -1
  15. package/actions/drinking.d.ts.map +1 -1
  16. package/actions/drinking.js.map +1 -1
  17. package/actions/dropping.d.ts.map +1 -1
  18. package/actions/dropping.js.map +1 -1
  19. package/actions/eating.d.ts.map +1 -1
  20. package/actions/eating.js.map +1 -1
  21. package/actions/entering.d.ts.map +1 -1
  22. package/actions/entering.js.map +1 -1
  23. package/actions/examining.d.ts.map +1 -1
  24. package/actions/examining.js.map +1 -1
  25. package/actions/exiting.d.ts.map +1 -1
  26. package/actions/exiting.js.map +1 -1
  27. package/actions/giving.d.ts.map +1 -1
  28. package/actions/giving.js.map +1 -1
  29. package/actions/going.d.ts.map +1 -1
  30. package/actions/going.js.map +1 -1
  31. package/actions/help.d.ts.map +1 -1
  32. package/actions/help.js.map +1 -1
  33. package/actions/hiding.d.ts.map +1 -1
  34. package/actions/hiding.js.map +1 -1
  35. package/actions/index.d.ts.map +1 -1
  36. package/actions/index.js.map +1 -1
  37. package/actions/inserting.d.ts.map +1 -1
  38. package/actions/inserting.js.map +1 -1
  39. package/actions/inventory.d.ts.map +1 -1
  40. package/actions/inventory.js.map +1 -1
  41. package/actions/listening.d.ts.map +1 -1
  42. package/actions/listening.js.map +1 -1
  43. package/actions/locking.d.ts.map +1 -1
  44. package/actions/locking.js.map +1 -1
  45. package/actions/looking.d.ts.map +1 -1
  46. package/actions/looking.js.map +1 -1
  47. package/actions/lowering.d.ts.map +1 -1
  48. package/actions/lowering.js.map +1 -1
  49. package/actions/opening.d.ts.map +1 -1
  50. package/actions/opening.js.map +1 -1
  51. package/actions/pulling.d.ts.map +1 -1
  52. package/actions/pulling.js.map +1 -1
  53. package/actions/pushing.d.ts.map +1 -1
  54. package/actions/pushing.js.map +1 -1
  55. package/actions/putting.d.ts.map +1 -1
  56. package/actions/putting.js.map +1 -1
  57. package/actions/quitting.d.ts.map +1 -1
  58. package/actions/quitting.js.map +1 -1
  59. package/actions/raising.d.ts.map +1 -1
  60. package/actions/raising.js.map +1 -1
  61. package/actions/reading.d.ts.map +1 -1
  62. package/actions/reading.js.map +1 -1
  63. package/actions/removing.d.ts.map +1 -1
  64. package/actions/removing.js.map +1 -1
  65. package/actions/restoring.d.ts.map +1 -1
  66. package/actions/restoring.js.map +1 -1
  67. package/actions/saving.d.ts.map +1 -1
  68. package/actions/saving.js.map +1 -1
  69. package/actions/scoring.d.ts.map +1 -1
  70. package/actions/scoring.js.map +1 -1
  71. package/actions/searching.d.ts.map +1 -1
  72. package/actions/searching.js.map +1 -1
  73. package/actions/showing.d.ts.map +1 -1
  74. package/actions/showing.js.map +1 -1
  75. package/actions/sleeping.d.ts.map +1 -1
  76. package/actions/sleeping.js.map +1 -1
  77. package/actions/smelling.d.ts.map +1 -1
  78. package/actions/smelling.js.map +1 -1
  79. package/actions/switching-off.d.ts.map +1 -1
  80. package/actions/switching-off.js.map +1 -1
  81. package/actions/switching-on.d.ts.map +1 -1
  82. package/actions/switching-on.js.map +1 -1
  83. package/actions/taking-off.d.ts.map +1 -1
  84. package/actions/taking-off.js.map +1 -1
  85. package/actions/taking.d.ts.map +1 -1
  86. package/actions/taking.js.map +1 -1
  87. package/actions/talking.d.ts.map +1 -1
  88. package/actions/talking.js.map +1 -1
  89. package/actions/telling.d.ts.map +1 -1
  90. package/actions/telling.js.map +1 -1
  91. package/actions/throwing.d.ts.map +1 -1
  92. package/actions/throwing.js.map +1 -1
  93. package/actions/touching.d.ts.map +1 -1
  94. package/actions/touching.js.map +1 -1
  95. package/actions/turning.d.ts.map +1 -1
  96. package/actions/turning.js.map +1 -1
  97. package/actions/undoing.d.ts.map +1 -1
  98. package/actions/undoing.js.map +1 -1
  99. package/actions/unlocking.d.ts.map +1 -1
  100. package/actions/unlocking.js.map +1 -1
  101. package/actions/version.d.ts.map +1 -1
  102. package/actions/version.js.map +1 -1
  103. package/actions/waiting.d.ts.map +1 -1
  104. package/actions/waiting.js.map +1 -1
  105. package/actions/wearing.d.ts.map +1 -1
  106. package/actions/wearing.js.map +1 -1
  107. package/data/events.d.ts.map +1 -1
  108. package/data/events.js.map +1 -1
  109. package/data/messages.d.ts.map +1 -1
  110. package/data/messages.js.map +1 -1
  111. package/data/verbs.d.ts.map +1 -1
  112. package/data/verbs.js.map +1 -1
  113. package/data/words.d.ts.map +1 -1
  114. package/data/words.js.map +1 -1
  115. package/formatters/article.d.ts.map +1 -1
  116. package/formatters/article.js.map +1 -1
  117. package/formatters/index.d.ts +3 -3
  118. package/formatters/index.d.ts.map +1 -1
  119. package/formatters/index.js +3 -3
  120. package/formatters/index.js.map +1 -1
  121. package/formatters/list.d.ts +25 -7
  122. package/formatters/list.d.ts.map +1 -1
  123. package/formatters/list.js +107 -23
  124. package/formatters/list.js.map +1 -1
  125. package/formatters/registry.d.ts +2 -1
  126. package/formatters/registry.d.ts.map +1 -1
  127. package/formatters/registry.js +4 -1
  128. package/formatters/registry.js.map +1 -1
  129. package/formatters/text.d.ts.map +1 -1
  130. package/formatters/text.js.map +1 -1
  131. package/formatters/types.d.ts +13 -2
  132. package/formatters/types.d.ts.map +1 -1
  133. package/formatters/types.js +2 -2
  134. package/formatters/types.js.map +1 -1
  135. package/formatters/verb.d.ts.map +1 -1
  136. package/formatters/verb.js.map +1 -1
  137. package/grammar.d.ts.map +1 -1
  138. package/grammar.js.map +1 -1
  139. package/index.d.ts +2 -0
  140. package/index.d.ts.map +1 -1
  141. package/index.js +6 -1
  142. package/index.js.map +1 -1
  143. package/language-provider.d.ts +7 -1
  144. package/language-provider.d.ts.map +1 -1
  145. package/language-provider.js +16 -37
  146. package/language-provider.js.map +1 -1
  147. package/npc/conversation.d.ts.map +1 -1
  148. package/npc/conversation.js.map +1 -1
  149. package/npc/index.d.ts.map +1 -1
  150. package/npc/index.js.map +1 -1
  151. package/npc/influence.d.ts.map +1 -1
  152. package/npc/influence.js.map +1 -1
  153. package/npc/npc.d.ts.map +1 -1
  154. package/npc/npc.js.map +1 -1
  155. package/npc/propagation.d.ts.map +1 -1
  156. package/npc/propagation.js.map +1 -1
  157. package/number-words.d.ts +8 -0
  158. package/number-words.d.ts.map +1 -0
  159. package/number-words.js +24 -0
  160. package/number-words.js.map +1 -0
  161. package/package.json +3 -3
  162. package/perspective/index.d.ts.map +1 -1
  163. package/perspective/index.js.map +1 -1
  164. package/perspective/placeholder-resolver.d.ts.map +1 -1
  165. package/perspective/placeholder-resolver.js.map +1 -1
  166. package/pluralize.d.ts +9 -0
  167. package/pluralize.d.ts.map +1 -0
  168. package/pluralize.js +46 -0
  169. package/pluralize.js.map +1 -0
  170. package/sound-messages.d.ts.map +1 -1
  171. package/sound-messages.js.map +1 -1
@@ -7,7 +7,10 @@
7
7
  * @see ADR-095 Message Templates with Formatters
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.countFormatter = exports.commaListFormatter = exports.orListFormatter = exports.listFormatter = void 0;
10
+ exports.countFormatter = exports.commaListFormatter = exports.orListFormatter = exports.namesFormatter = exports.theListFormatter = exports.listFormatter = void 0;
11
+ const article_js_1 = require("./article.js");
12
+ const pluralize_js_1 = require("../pluralize.js");
13
+ const number_words_js_1 = require("../number-words.js");
11
14
  /**
12
15
  * Extract name from value (string or EntityInfo)
13
16
  */
@@ -23,26 +26,94 @@ function ensureArray(value) {
23
26
  }
24
27
  return [getName(value)];
25
28
  }
29
+ /** True for a bare string element (no entity metadata to article/group). */
30
+ function isBare(v) {
31
+ return typeof v === 'string';
32
+ }
33
+ /** A common noun groups by name; proper/mass/unique/plural do not. */
34
+ function isCommonNoun(ei) {
35
+ const nounType = ei.nounType ?? (ei.properName ? 'proper' : 'common');
36
+ return nounType === 'common';
37
+ }
26
38
  /**
27
- * "list" formatter - join with commas and "and"
39
+ * Render each element into a phrase. In indefinite mode, identical common-noun
40
+ * entities group and pluralize ("two goats"); bare strings render as-is (no
41
+ * article), preserving plain name lists. In definite mode, every entity becomes
42
+ * "the X" with no grouping.
43
+ */
44
+ function renderListParts(value, mode, context) {
45
+ const arr = Array.isArray(value) ? value : value == null ? [] : [value];
46
+ if (mode === 'definite') {
47
+ return arr.map((v) => (isBare(v) ? v : (0, article_js_1.theFormatter)(v, context)));
48
+ }
49
+ const parts = [];
50
+ const groupIndex = new Map();
51
+ for (const v of arr) {
52
+ if (!isBare(v) && isCommonNoun(v)) {
53
+ const ei = v;
54
+ const existing = groupIndex.get(ei.name);
55
+ if (existing !== undefined) {
56
+ parts[existing].count++;
57
+ continue;
58
+ }
59
+ groupIndex.set(ei.name, parts.length);
60
+ parts.push({ value: v, ei, count: 1 });
61
+ }
62
+ else {
63
+ parts.push({ value: v, count: 1 });
64
+ }
65
+ }
66
+ return parts.map((p) => {
67
+ if (p.count > 1 && p.ei) {
68
+ const plural = p.ei.plural ?? (0, pluralize_js_1.pluralize)(p.ei.name);
69
+ return `${(0, number_words_js_1.countWord)(p.count)} ${plural}`;
70
+ }
71
+ return isBare(p.value) ? p.value : (0, article_js_1.aFormatter)(p.value, context);
72
+ });
73
+ }
74
+ /** Join rendered parts with commas and a conjunction; serial comma per setting. */
75
+ function joinList(parts, conjunction, context) {
76
+ if (parts.length === 0)
77
+ return 'nothing';
78
+ if (parts.length === 1)
79
+ return parts[0];
80
+ if (parts.length === 2)
81
+ return `${parts[0]} ${conjunction} ${parts[1]}`;
82
+ const serial = context?.settings?.serialComma ?? true;
83
+ const head = parts.slice(0, -1).join(', ');
84
+ const last = parts[parts.length - 1];
85
+ return serial ? `${head}, ${conjunction} ${last}` : `${head} ${conjunction} ${last}`;
86
+ }
87
+ /**
88
+ * "list" formatter — natural-language list of entities (ADR-190).
89
+ *
90
+ * Each `EntityInfo` element gets its indefinite article ("a goat", "an apple",
91
+ * "some sand"); identical common nouns group and pluralize ("two goats"); the
92
+ * parts join with commas and "and", with the serial (Oxford) comma controlled by
93
+ * the story's `serialComma` setting (default on). Bare strings render as-is.
94
+ * Empty → "nothing".
28
95
  *
29
- * Single: "a sword"
30
- * Two: "a sword and a key"
31
- * Three+: "a sword, a key, and a coin"
96
+ * {list:items} "a goat, two rabbits, and a parrot"
97
+ */
98
+ const listFormatter = (value, context) => joinList(renderListParts(value, 'indefinite', context), 'and', context);
99
+ exports.listFormatter = listFormatter;
100
+ /**
101
+ * "the-list" formatter — definite variant: "the goat, the rabbit, and the parrot".
102
+ * No count-grouping (definite items are individuated); proper names take no article.
32
103
  */
33
- const listFormatter = (value, _context) => {
104
+ const theListFormatter = (value, context) => joinList(renderListParts(value, 'definite', context), 'and', context);
105
+ exports.theListFormatter = theListFormatter;
106
+ /**
107
+ * "names" formatter — plain name join (the pre-ADR-190 `list` behavior) for
108
+ * non-entity string lists: no articles, no grouping. Empty → "".
109
+ */
110
+ const namesFormatter = (value, context) => {
34
111
  const items = ensureArray(value);
35
112
  if (items.length === 0)
36
113
  return '';
37
- if (items.length === 1)
38
- return items[0];
39
- if (items.length === 2)
40
- return `${items[0]} and ${items[1]}`;
41
- const allButLast = items.slice(0, -1);
42
- const last = items[items.length - 1];
43
- return `${allButLast.join(', ')}, and ${last}`;
114
+ return joinList(items, 'and', context);
44
115
  };
45
- exports.listFormatter = listFormatter;
116
+ exports.namesFormatter = namesFormatter;
46
117
  /**
47
118
  * "or-list" formatter - join with commas and "or"
48
119
  *
@@ -73,22 +144,35 @@ const commaListFormatter = (value, _context) => {
73
144
  return items.join(', ');
74
145
  };
75
146
  exports.commaListFormatter = commaListFormatter;
147
+ /** First element's noun name and optional plural override (EntityInfo or string). */
148
+ function firstNoun(value) {
149
+ const arr = Array.isArray(value) ? value : value == null ? [] : [value];
150
+ const first = arr[0];
151
+ if (first && typeof first === 'object' && 'name' in first) {
152
+ const ei = first;
153
+ return { name: ei.name, plural: ei.plural };
154
+ }
155
+ return { name: first == null ? '' : String(first) };
156
+ }
76
157
  /**
77
- * "count" formatter - number + noun (with pluralization)
158
+ * "count" formatter - a count word plus the (pluralized) noun.
159
+ *
160
+ * Spells out 1–10, numeric for 11+ (ADR-190). Uses the entity's `plural` override
161
+ * (from `IdentityTrait.plural`) when present, else the `pluralize()` heuristic.
78
162
  *
79
- * Example: {items:count} with 3 swords → "3 swords"
80
- * Example: {items:count} with 1 sword → "1 sword"
163
+ * Example: {count:items} with 3 swords → "three swords"
164
+ * Example: {count:items} with 1 sword → "one sword"
165
+ * Example: {count:items} with 0 → "nothing"
81
166
  */
82
167
  const countFormatter = (value, _context) => {
83
- const items = ensureArray(value);
84
- const count = items.length;
168
+ const count = Array.isArray(value) ? value.length : value == null ? 0 : 1;
85
169
  if (count === 0)
86
170
  return 'nothing';
171
+ const { name, plural } = firstNoun(value);
87
172
  if (count === 1)
88
- return `1 ${items[0]}`;
89
- // For count > 1, assume the items are already formatted
90
- // The item name should be pluralized by caller or be inherently plural
91
- return `${count} items`;
173
+ return `one ${name}`;
174
+ const pluralNoun = plural ?? (0, pluralize_js_1.pluralize)(name);
175
+ return `${(0, number_words_js_1.countWord)(count)} ${pluralNoun}`;
92
176
  };
93
177
  exports.countFormatter = countFormatter;
94
178
  //# sourceMappingURL=list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/lang-en-us/src/formatters/list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v1/packages/lang-en-us/src/formatters/list.ts"],"names":[],"mappings":"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"}
@@ -36,7 +36,8 @@ export declare function applyFormatters(value: string | number | boolean | strin
36
36
  *
37
37
  * Supports both:
38
38
  * - Simple placeholders: {item}
39
- * - Formatted placeholders: {a:item}, {items:list}, {a:items:list}
39
+ * - Formatted placeholders: {a:item}, {list:items}, {the:cap:item}
40
+ * (the placeholder is the last colon segment)
40
41
  *
41
42
  * @param template - Message template with {placeholder} syntax
42
43
  * @param params - Values for placeholders
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/lang-en-us/src/formatters/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAa,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAM7F;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CA4B3D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;IACrD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAYA;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,UAAU,GAAG,UAAU,EAAE,EACvE,UAAU,EAAE,MAAM,EAAE,EACpB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAuBR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,UAAU,GAAG,UAAU,EAAE,CAAC,EACxF,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,gBAAqB,GAC7B,MAAM,CA8BR"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v1/packages/lang-en-us/src/formatters/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAa,iBAAiB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAM7F;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CA8B3D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;IACrD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd,CAYA;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,UAAU,GAAG,UAAU,EAAE,EACvE,UAAU,EAAE,MAAM,EAAE,EACpB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAuBR;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,UAAU,GAAG,UAAU,EAAE,CAAC,EACxF,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE,gBAAqB,GAC7B,MAAM,CA8BR"}
@@ -28,6 +28,8 @@ function createFormatterRegistry() {
28
28
  registry.set('your', article_js_1.yourFormatter);
29
29
  // List formatters
30
30
  registry.set('list', list_js_1.listFormatter);
31
+ registry.set('the-list', list_js_1.theListFormatter);
32
+ registry.set('names', list_js_1.namesFormatter);
31
33
  registry.set('or-list', list_js_1.orListFormatter);
32
34
  registry.set('comma-list', list_js_1.commaListFormatter);
33
35
  registry.set('count', list_js_1.countFormatter);
@@ -94,7 +96,8 @@ function applyFormatters(value, formatters, registry, context) {
94
96
  *
95
97
  * Supports both:
96
98
  * - Simple placeholders: {item}
97
- * - Formatted placeholders: {a:item}, {items:list}, {a:items:list}
99
+ * - Formatted placeholders: {a:item}, {list:items}, {the:cap:item}
100
+ * (the placeholder is the last colon segment)
98
101
  *
99
102
  * @param template - Message template with {placeholder} syntax
100
103
  * @param params - Values for placeholders
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/lang-en-us/src/formatters/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v1/packages/lang-en-us/src/formatters/registry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/lang-en-us/src/formatters/text.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,YAAY,CAAC;AASxD;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,SAU1B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,SAQ5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,SAQ5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,SAa5B,CAAC"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v1/packages/lang-en-us/src/formatters/text.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,YAAY,CAAC;AASxD;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,SAU1B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,SAQ5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,SAQ5B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,SAa5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/lang-en-us/src/formatters/text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v1/packages/lang-en-us/src/formatters/text.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,9 @@
3
3
  *
4
4
  * Formatters transform placeholder values in message templates.
5
5
  *
6
- * Syntax: {formatter:formatter:...:placeholder}
6
+ * Syntax: {formatter:formatter:...:placeholder} (the placeholder is the last segment)
7
7
  * Example: {a:item} → "a sword"
8
- * Example: {items:list} → "a sword, a key, and a coin"
8
+ * Example: {list:items} → "a sword, a key, and a coin"
9
9
  *
10
10
  * @see ADR-095 Message Templates with Formatters
11
11
  */
@@ -15,6 +15,11 @@
15
15
  export interface FormatterContext {
16
16
  /** Get entity by ID for nounType/article lookup */
17
17
  getEntity?: (id: string) => EntityInfo | undefined;
18
+ /** Render-time settings the language layer reads (ADR-190). */
19
+ settings?: {
20
+ /** Serial (Oxford) comma in lists. Default true when absent. */
21
+ serialComma?: boolean;
22
+ };
18
23
  }
19
24
  /**
20
25
  * Minimal entity info for formatting
@@ -25,6 +30,12 @@ export interface EntityInfo {
25
30
  properName?: boolean;
26
31
  article?: string;
27
32
  grammaticalNumber?: 'singular' | 'plural';
33
+ /**
34
+ * Author-supplied plural form for irregular nouns (ADR-190). Populated from
35
+ * `IdentityTrait.plural` by `entityInfoFrom`. The `list`/`count` formatters use
36
+ * it when present, else fall back to the `pluralize()` heuristic.
37
+ */
38
+ plural?: string;
28
39
  }
29
40
  /**
30
41
  * Formatter function signature
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/lang-en-us/src/formatters/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;CAC3C;AAED;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,GAAG,UAAU,EAAE,EACpD,OAAO,EAAE,gBAAgB,KACtB,MAAM,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v1/packages/lang-en-us/src/formatters/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mDAAmD;IACnD,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,UAAU,GAAG,SAAS,CAAC;IACnD,+DAA+D;IAC/D,QAAQ,CAAC,EAAE;QACT,gEAAgE;QAChE,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC9D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC1C;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,GAAG,CACtB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,GAAG,UAAU,EAAE,EACpD,OAAO,EAAE,gBAAgB,KACtB,MAAM,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC"}
@@ -4,9 +4,9 @@
4
4
  *
5
5
  * Formatters transform placeholder values in message templates.
6
6
  *
7
- * Syntax: {formatter:formatter:...:placeholder}
7
+ * Syntax: {formatter:formatter:...:placeholder} (the placeholder is the last segment)
8
8
  * Example: {a:item} → "a sword"
9
- * Example: {items:list} → "a sword, a key, and a coin"
9
+ * Example: {list:items} → "a sword, a key, and a coin"
10
10
  *
11
11
  * @see ADR-095 Message Templates with Formatters
12
12
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/lang-en-us/src/formatters/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v1/packages/lang-en-us/src/formatters/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG"}
@@ -1 +1 @@
1
- {"version":3,"file":"verb.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/lang-en-us/src/formatters/verb.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,YAAY,CAAC;AA+BxD,gEAAgE;AAChE,eAAO,MAAM,WAAW,EAAE,SAA+C,CAAC;AAE1E,mEAAmE;AACnE,eAAO,MAAM,YAAY,EAAE,SAAiD,CAAC;AAE7E,mEAAmE;AACnE,eAAO,MAAM,YAAY,EAAE,SAAiD,CAAC"}
1
+ {"version":3,"file":"verb.d.ts","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v1/packages/lang-en-us/src/formatters/verb.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,YAAY,CAAC;AA+BxD,gEAAgE;AAChE,eAAO,MAAM,WAAW,EAAE,SAA+C,CAAC;AAE1E,mEAAmE;AACnE,eAAO,MAAM,YAAY,EAAE,SAAiD,CAAC;AAE7E,mEAAmE;AACnE,eAAO,MAAM,YAAY,EAAE,SAAiD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"verb.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee/packages/lang-en-us/src/formatters/verb.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AAIH;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,KAAoD;IACpE,uEAAuE;IACvE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,CAAC,sDAAsD;IACtE,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,iBAAiB,KAAK,QAAQ,CAAC;AAC7E,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAAC,QAAgB,EAAE,MAAc;IAC9D,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACpE,CAAC;AAED,gEAAgE;AACnD,QAAA,WAAW,GAAc,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAE1E,mEAAmE;AACtD,QAAA,YAAY,GAAc,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAE7E,mEAAmE;AACtD,QAAA,YAAY,GAAc,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"verb.js","sourceRoot":"","sources":["../../../../../../../repos/sharpee_v1/packages/lang-en-us/src/formatters/verb.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AAIH;;;;;GAKG;AACH,SAAS,QAAQ,CAAC,KAAoD;IACpE,uEAAuE;IACvE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,CAAC,sDAAsD;IACtE,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,iBAAiB,KAAK,QAAQ,CAAC;AAC7E,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,sBAAsB,CAAC,QAAgB,EAAE,MAAc;IAC9D,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AACpE,CAAC;AAED,gEAAgE;AACnD,QAAA,WAAW,GAAc,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAE1E,mEAAmE;AACtD,QAAA,YAAY,GAAc,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAE7E,mEAAmE;AACtD,QAAA,YAAY,GAAc,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC"}
package/grammar.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"grammar.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/lang-en-us/src/grammar.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;EAatB,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,oBAAoB,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEjG;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDzB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,MAAM,OAAO,sBAAsB,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,uCAAuC;IACvC,WAAW,CAAC,EAAE;QACZ,6BAA6B;QAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,mCAAmC;QACnC,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,sCAAsC;QACtC,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,4BAA4B;QAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,gBAAgB,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IAC/D,qDAAqD;IACrD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;IAC9B;;OAEG;oBACa,MAAM,GAAG,OAAO;IAKhC;;OAEG;uBACgB,MAAM,GAAG,OAAO;IAUnC;;OAEG;oBACa,MAAM,GAAG,OAAO;IAYhC;;OAEG;wBACiB,MAAM,GAAG,OAAO;IASpC;;OAEG;+BACwB,MAAM,GAAG,GAAG,GAAG,IAAI;CAqD/C,CAAC;AAEF;;GAEG;AACH,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"grammar.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee_v1/packages/lang-en-us/src/grammar.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;EAatB,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,oBAAoB,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEjG;;;;GAIG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDzB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG,MAAM,OAAO,sBAAsB,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,aAAa,EAAE,mBAAmB,EAAE,CAAC;IACrC,uCAAuC;IACvC,WAAW,CAAC,EAAE;QACZ,6BAA6B;QAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,mCAAmC;QACnC,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,sCAAsC;QACtC,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,4BAA4B;QAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,oBAAoB;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,sBAAsB;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,gBAAgB,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IAC/D,qDAAqD;IACrD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;IAC9B;;OAEG;oBACa,MAAM,GAAG,OAAO;IAKhC;;OAEG;uBACgB,MAAM,GAAG,OAAO;IAUnC;;OAEG;oBACa,MAAM,GAAG,OAAO;IAYhC;;OAEG;wBACiB,MAAM,GAAG,OAAO;IASpC;;OAEG;+BACwB,MAAM,GAAG,GAAG,GAAG,IAAI;CAqD/C,CAAC;AAEF;;GAEG;AACH,cAAc,SAAS,CAAC"}
package/grammar.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"grammar.js","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/lang-en-us/src/grammar.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;AAEH;;;;;GAKG;AACU,QAAA,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IAChD,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;CACd,CAAC,CAAC;AAOZ;;;;GAIG;AACU,QAAA,sBAAsB,GAAG;IACpC,SAAS,EAAE;QACT,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,0BAA0B;KACxC;IACD,SAAS,EAAE;QACT,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;QACjC,OAAO,EAAE,WAAW;QACpB,WAAW,EAAE,oCAAoC;KAClD;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,CAAC;QACxD,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EAAE,oDAAoD;KAClE;IACD,cAAc,EAAE;QACd,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC;QACzC,OAAO,EAAE,kBAAkB;QAC3B,WAAW,EAAE,gCAAgC;KAC9C;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC;QAC7C,OAAO,EAAE,cAAc;QACvB,WAAW,EAAE,iCAAiC;KAC/C;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,oBAAoB;QAC1B,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC;QAC7C,OAAO,EAAE,eAAe;QACxB,WAAW,EAAE,0CAA0C;KACxD;IACD,cAAc,EAAE;QACd,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;QAC/B,OAAO,EAAE,UAAU;QACnB,WAAW,EAAE,8BAA8B;KAC5C;IACD,cAAc,EAAE;QACd,IAAI,EAAE,gBAAgB;QACtB,QAAQ,EAAE,CAAC,WAAW,CAAC;QACvB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,2BAA2B;KACzC;CACO,CAAC;AAgFX;;GAEG;AACU,QAAA,mBAAmB,GAAG;IACjC;;OAEG;IACH,SAAS,CAAC,IAAY;QACpB,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QACpC,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,IAAY;QACvB,MAAM,WAAW,GAAG;YAClB,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM;YAC3C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;YAChC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;YACjD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS;SAC3C,CAAC;QACF,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,IAAY;QACpB,MAAM,QAAQ,GAAG;YACf,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI;YACjD,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;YAC1B,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ;YACpD,WAAW,EAAE,YAAY,EAAE,YAAY;YACvC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;YAChC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM;SACxC,CAAC;QACF,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,IAAY;QACxB,MAAM,YAAY,GAAG;YACnB,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI;YAC7C,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ;YACxC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI;SAC/B,CAAC;QACF,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,IAAY;QAC/B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAEzC,4BAA4B;QAC5B,MAAM,YAAY,GAA+B;YAC/C,GAAG,EAAE,IAAI,EAAE,UAAU;YACrB,IAAI,EAAE,IAAI,EAAE,WAAW;YACvB,IAAI,EAAE,IAAI,EAAE,aAAa;YACzB,IAAI,EAAE,IAAI,EAAE,WAAW;YACvB,KAAK,EAAE,IAAI,EAAE,kBAAkB;YAC/B,GAAG,EAAE,GAAG,EAAE,QAAQ;YAClB,GAAG,EAAE,GAAG,EAAE,QAAQ;YAClB,GAAG,EAAE,GAAG,EAAE,UAAU;YACpB,GAAG,EAAE,GAAG,EAAE,SAAS;YACnB,GAAG,EAAE,GAAG,EAAE,SAAS;YACnB,GAAG,EAAE,GAAG,EAAE,QAAQ;YAClB,GAAG,EAAE,GAAG,EAAE,UAAU;YACpB,GAAG,EAAE,GAAG,EAAE,SAAS;YACnB,IAAI,EAAE,GAAG,EAAE,QAAQ;YACnB,IAAI,EAAE,GAAG,EAAE,WAAW;YACtB,IAAI,EAAE,GAAG,EAAE,aAAa;YACxB,IAAI,EAAE,GAAG,EAAE,aAAa;YACxB,IAAI,EAAE,GAAG,EAAE,YAAY;YACvB,IAAI,EAAE,GAAG,EAAE,YAAY;YACvB,IAAI,EAAE,GAAG,EAAE,cAAc;YACzB,IAAI,EAAE,GAAG,EAAE,aAAa;SACzB,CAAC;QAEF,yBAAyB;QACzB,IAAI,IAAI,IAAI,YAAY,EAAE,CAAC;YACzB,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAED,mDAAmD;QACnD,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kEAAkE;QAClE,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACnE,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IACjD,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,0CAAwB"}
1
+ {"version":3,"file":"grammar.js","sourceRoot":"","sources":["../../../../../../repos/sharpee_v1/packages/lang-en-us/src/grammar.ts"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -17,6 +17,8 @@ export * from './actions';
17
17
  export * from './npc';
18
18
  export * from './perspective';
19
19
  export * from './formatters';
20
+ export { pluralize } from './pluralize';
21
+ export { countWord } from './number-words';
20
22
  export { cardinalNumbers, ordinalNumbers, directionMap, englishWords, abbreviations, irregularPlurals } from './data/words';
21
23
  export { parserErrors, getParserErrorMessage } from './data/messages';
22
24
  export { soundMessages, soundMessageId, soundFallbackMessageId, type SoundMessageId, type RenderableAudibilityTier, } from './sound-messages';
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/lang-en-us/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGlF,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD,cAAc,WAAW,CAAC;AAG1B,cAAc,WAAW,CAAC;AAG1B,cAAc,OAAO,CAAC;AAGtB,cAAc,eAAe,CAAC;AAG9B,cAAc,cAAc,CAAC;AAG7B,OAAO,EACL,eAAe,EACf,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGtE,OAAO,EACL,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,wBAAwB,GAC9B,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee_v1/packages/lang-en-us/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGlF,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD,cAAc,WAAW,CAAC;AAG1B,cAAc,WAAW,CAAC;AAG1B,cAAc,OAAO,CAAC;AAGtB,cAAc,eAAe,CAAC;AAG9B,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EACL,eAAe,EACf,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAGtE,OAAO,EACL,aAAa,EACb,cAAc,EACd,sBAAsB,EACtB,KAAK,cAAc,EACnB,KAAK,wBAAwB,GAC9B,MAAM,kBAAkB,CAAC"}
package/index.js CHANGED
@@ -28,7 +28,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  return (mod && mod.__esModule) ? mod : { "default": mod };
29
29
  };
30
30
  Object.defineProperty(exports, "__esModule", { value: true });
31
- exports.soundFallbackMessageId = exports.soundMessageId = exports.soundMessages = exports.getParserErrorMessage = exports.parserErrors = exports.irregularPlurals = exports.abbreviations = exports.englishWords = exports.directionMap = exports.ordinalNumbers = exports.cardinalNumbers = exports.LanguageProvider = exports.default = exports.EnglishLanguageProvider = void 0;
31
+ exports.soundFallbackMessageId = exports.soundMessageId = exports.soundMessages = exports.getParserErrorMessage = exports.parserErrors = exports.irregularPlurals = exports.abbreviations = exports.englishWords = exports.directionMap = exports.ordinalNumbers = exports.cardinalNumbers = exports.countWord = exports.pluralize = exports.LanguageProvider = exports.default = exports.EnglishLanguageProvider = void 0;
32
32
  var language_provider_1 = require("./language-provider");
33
33
  Object.defineProperty(exports, "EnglishLanguageProvider", { enumerable: true, get: function () { return language_provider_1.EnglishLanguageProvider; } });
34
34
  Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(language_provider_1).default; } });
@@ -44,6 +44,11 @@ __exportStar(require("./npc"), exports);
44
44
  __exportStar(require("./perspective"), exports);
45
45
  // Export formatter system (ADR-095)
46
46
  __exportStar(require("./formatters"), exports);
47
+ // English grammar helpers (ADR-190): pluralization + count-word spelling
48
+ var pluralize_1 = require("./pluralize");
49
+ Object.defineProperty(exports, "pluralize", { enumerable: true, get: function () { return pluralize_1.pluralize; } });
50
+ var number_words_1 = require("./number-words");
51
+ Object.defineProperty(exports, "countWord", { enumerable: true, get: function () { return number_words_1.countWord; } });
47
52
  // Export vocabulary data for parser use (ADR-082)
48
53
  var words_1 = require("./data/words");
49
54
  Object.defineProperty(exports, "cardinalNumbers", { enumerable: true, get: function () { return words_1.cardinalNumbers; } });
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/lang-en-us/src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;AAEH,yDAAuE;AAA9D,4HAAA,uBAAuB,OAAA;AAAE,6HAAA,OAAO,OAAA;AACzC,yDAAkF,CAAC,kBAAkB;AAA5F,qHAAA,uBAAuB,OAAoB;AAKpD,qCAAqC;AACrC,4CAA0B;AAE1B,qCAAqC;AACrC,4CAA0B;AAE1B,4CAA4C;AAC5C,wCAAsB;AAEtB,sDAAsD;AACtD,gDAA8B;AAE9B,oCAAoC;AACpC,+CAA6B;AAE7B,kDAAkD;AAClD,sCAOsB;AANpB,wGAAA,eAAe,OAAA;AACf,uGAAA,cAAc,OAAA;AACd,qGAAA,YAAY,OAAA;AACZ,qGAAA,YAAY,OAAA;AACZ,sGAAA,aAAa,OAAA;AACb,yGAAA,gBAAgB,OAAA;AAGlB,2DAA2D;AAC3D,4CAAsE;AAA7D,wGAAA,YAAY,OAAA;AAAE,iHAAA,qBAAqB,OAAA;AAE5C,gDAAgD;AAChD,mDAM0B;AALxB,+GAAA,aAAa,OAAA;AACb,gHAAA,cAAc,OAAA;AACd,wHAAA,sBAAsB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../repos/sharpee_v1/packages/lang-en-us/src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;;;;;AAEH,yDAAuE;AAA9D,4HAAA,uBAAuB,OAAA;AAAE,6HAAA,OAAO,OAAA;AACzC,yDAAkF,CAAC,kBAAkB;AAA5F,qHAAA,uBAAuB,OAAoB;AAKpD,qCAAqC;AACrC,4CAA0B;AAE1B,qCAAqC;AACrC,4CAA0B;AAE1B,4CAA4C;AAC5C,wCAAsB;AAEtB,sDAAsD;AACtD,gDAA8B;AAE9B,oCAAoC;AACpC,+CAA6B;AAE7B,yEAAyE;AACzE,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,+CAA2C;AAAlC,yGAAA,SAAS,OAAA;AAElB,kDAAkD;AAClD,sCAOsB;AANpB,wGAAA,eAAe,OAAA;AACf,uGAAA,cAAc,OAAA;AACd,qGAAA,YAAY,OAAA;AACZ,qGAAA,YAAY,OAAA;AACZ,sGAAA,aAAa,OAAA;AACb,yGAAA,gBAAgB,OAAA;AAGlB,2DAA2D;AAC3D,4CAAsE;AAA7D,wGAAA,YAAY,OAAA;AAAE,iHAAA,qBAAqB,OAAA;AAE5C,gDAAgD;AAChD,mDAM0B;AALxB,+GAAA,aAAa,OAAA;AACb,gHAAA,cAAc,OAAA;AACd,wHAAA,sBAAsB,OAAA"}
@@ -19,6 +19,7 @@ export declare class EnglishLanguageProvider implements ParserLanguageProvider {
19
19
  private narrativeContext;
20
20
  private formatterRegistry;
21
21
  private entityLookup?;
22
+ private serialComma;
22
23
  constructor();
23
24
  /**
24
25
  * Load core system messages (command failures, etc.)
@@ -65,7 +66,7 @@ export declare class EnglishLanguageProvider implements ParserLanguageProvider {
65
66
  * Supports three types of placeholders:
66
67
  * 1. Perspective placeholders (ADR-089): {You}, {your}, {take}, etc.
67
68
  * - Resolved based on narrative context (1st/2nd/3rd person)
68
- * 2. Formatted placeholders (ADR-095): {a:item}, {items:list}, etc.
69
+ * 2. Formatted placeholders (ADR-095): {a:item}, {list:items}, etc.
69
70
  * - Applies formatters before substitution
70
71
  * 3. Simple placeholders: {item}, {target}, etc.
71
72
  * - Replaced with values from params object
@@ -84,6 +85,11 @@ export declare class EnglishLanguageProvider implements ParserLanguageProvider {
84
85
  * @param lookup Function that returns EntityInfo for an entity ID
85
86
  */
86
87
  setEntityLookup(lookup: (id: string) => EntityInfo | undefined): void;
88
+ /**
89
+ * Set whether lists use the serial (Oxford) comma (ADR-190). Default true.
90
+ * @param on true → "a, b, and c"; false → "a, b and c"
91
+ */
92
+ setSerialComma(on: boolean): void;
87
93
  /**
88
94
  * Register a custom formatter (ADR-095)
89
95
  *
@@ -1 +1 @@
1
- {"version":3,"file":"language-provider.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee/packages/lang-en-us/src/language-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"language-provider.d.ts","sourceRoot":"","sources":["../../../../../../repos/sharpee_v1/packages/lang-en-us/src/language-provider.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.EnglishLanguageProvider = void 0;
10
10
  const verbs_1 = require("./data/verbs");
11
11
  const words_1 = require("./data/words");
12
+ const pluralize_1 = require("./pluralize");
12
13
  const actions_1 = require("./actions");
13
14
  const npc_1 = require("./npc");
14
15
  const sound_messages_1 = require("./sound-messages");
@@ -27,10 +28,12 @@ class EnglishLanguageProvider {
27
28
  customActionPatterns = new Map();
28
29
  // Narrative context for perspective-aware message resolution (ADR-089)
29
30
  narrativeContext = perspective_1.DEFAULT_NARRATIVE_CONTEXT;
30
- // Formatter registry for {a:item}, {items:list}, etc. (ADR-095)
31
+ // Formatter registry for {a:item}, {list:items}, etc. (ADR-095)
31
32
  formatterRegistry;
32
33
  // Entity lookup function for formatters (set by engine)
33
34
  entityLookup;
35
+ // Serial (Oxford) comma in lists (ADR-190); story-configurable, default on.
36
+ serialComma = true;
34
37
  constructor() {
35
38
  // Initialize formatter registry
36
39
  this.formatterRegistry = (0, formatters_1.createFormatterRegistry)();
@@ -137,7 +140,7 @@ class EnglishLanguageProvider {
137
140
  * Supports three types of placeholders:
138
141
  * 1. Perspective placeholders (ADR-089): {You}, {your}, {take}, etc.
139
142
  * - Resolved based on narrative context (1st/2nd/3rd person)
140
- * 2. Formatted placeholders (ADR-095): {a:item}, {items:list}, etc.
143
+ * 2. Formatted placeholders (ADR-095): {a:item}, {list:items}, etc.
141
144
  * - Applies formatters before substitution
142
145
  * 3. Simple placeholders: {item}, {target}, etc.
143
146
  * - Replaced with values from params object
@@ -158,6 +161,7 @@ class EnglishLanguageProvider {
158
161
  if (params) {
159
162
  const context = {
160
163
  getEntity: this.entityLookup,
164
+ settings: { serialComma: this.serialComma },
161
165
  };
162
166
  message = (0, formatters_1.formatMessage)(message, params, this.formatterRegistry, context);
163
167
  }
@@ -174,6 +178,13 @@ class EnglishLanguageProvider {
174
178
  setEntityLookup(lookup) {
175
179
  this.entityLookup = lookup;
176
180
  }
181
+ /**
182
+ * Set whether lists use the serial (Oxford) comma (ADR-190). Default true.
183
+ * @param on true → "a, b, and c"; false → "a, b and c"
184
+ */
185
+ setSerialComma(on) {
186
+ this.serialComma = on;
187
+ }
177
188
  /**
178
189
  * Register a custom formatter (ADR-095)
179
190
  *
@@ -475,41 +486,9 @@ class EnglishLanguageProvider {
475
486
  return vowels.includes(firstChar) ? 'an' : 'a';
476
487
  }
477
488
  pluralize(noun) {
478
- if (!noun)
479
- return 's';
480
- const lower = noun.toLowerCase();
481
- // Check irregular plurals - the map is plural->singular, so we need to reverse lookup
482
- for (const [plural, singular] of words_1.irregularPlurals) {
483
- if (singular === lower) {
484
- // Preserve the case pattern of the original noun
485
- if (noun === noun.toUpperCase()) {
486
- return plural.toUpperCase();
487
- }
488
- else if (noun[0] === noun[0].toUpperCase()) {
489
- return plural[0].toUpperCase() + plural.slice(1);
490
- }
491
- return plural;
492
- }
493
- }
494
- // Regular rules
495
- if (lower.endsWith('s') || lower.endsWith('x') || lower.endsWith('z') ||
496
- lower.endsWith('ch') || lower.endsWith('sh')) {
497
- return noun + 'es';
498
- }
499
- if (lower.endsWith('y') && !['a', 'e', 'i', 'o', 'u'].includes(lower[lower.length - 2])) {
500
- // Special handling for case preservation with -ies
501
- if (noun === noun.toUpperCase()) {
502
- return noun.slice(0, -1) + 'IES';
503
- }
504
- return noun.slice(0, -1) + 'ies';
505
- }
506
- if (lower.endsWith('f')) {
507
- return noun.slice(0, -1) + 'ves';
508
- }
509
- if (lower.endsWith('fe')) {
510
- return noun.slice(0, -2) + 'ves';
511
- }
512
- return noun + 's';
489
+ // Delegates to the free `pluralize` (src/pluralize.ts), the single source of
490
+ // truth shared with the list/count formatters.
491
+ return (0, pluralize_1.pluralize)(noun);
513
492
  }
514
493
  isIgnoreWord(word) {
515
494
  return words_1.englishWords.ignoreWords.includes(word.toLowerCase());