@delali/narsil 0.1.15 → 0.2.1-next.25

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 (267) hide show
  1. package/NOTICE +54 -0
  2. package/README.md +38 -982
  3. package/dist/adapters/filesystem.d.ts +23 -1
  4. package/dist/adapters/filesystem.mjs +1 -1
  5. package/dist/adapters/indexeddb.d.ts +25 -1
  6. package/dist/adapters/indexeddb.mjs +1 -1
  7. package/dist/adapters/memory.d.ts +14 -1
  8. package/dist/adapters-CVqI5NBt.d.ts +149 -0
  9. package/dist/{chunk-HMO6OMZ3.mjs → chunk-ASI6AOW2.mjs} +1073 -506
  10. package/dist/{chunk-HRABJLPB.mjs → chunk-BKAI2WXI.mjs} +1 -0
  11. package/dist/{chunk-WISGW24C.mjs → chunk-FKK76OR7.mjs} +56 -55
  12. package/dist/chunk-GHJWC2E5.mjs +9 -0
  13. package/dist/chunk-KH3YGMVT.mjs +15 -0
  14. package/dist/chunk-TGP5M5R7.mjs +880 -0
  15. package/dist/chunk-U2BKYEC7.mjs +254 -0
  16. package/dist/{chunk-ALB35PRQ.mjs → chunk-UNJZ7ZDB.mjs} +18 -0
  17. package/dist/{chunk-MEW7HD75.mjs → chunk-WLR5BFL3.mjs} +2557 -1166
  18. package/dist/config-CAjTHzkH.d.ts +256 -0
  19. package/dist/direct-executor-3W4QRA4E.mjs +5 -0
  20. package/dist/distribution/coordinator/etcd.d.ts +44 -3
  21. package/dist/distribution/coordinator/etcd.mjs +2 -2
  22. package/dist/distribution/coordinator/in-memory.d.ts +14 -3
  23. package/dist/distribution.d.ts +318 -45
  24. package/dist/distribution.mjs +1875 -1772
  25. package/dist/embeddings/openai.d.ts +28 -1
  26. package/dist/embeddings/openai.mjs +1 -1
  27. package/dist/engine-CCrlfLyq.d.ts +431 -0
  28. package/dist/index.browser.mjs +4571 -1776
  29. package/dist/index.d.ts +180 -6
  30. package/dist/index.mjs +6 -5
  31. package/dist/invalidation/broadcast-channel.d.ts +20 -1
  32. package/dist/invalidation/filesystem.d.ts +24 -1
  33. package/dist/invalidation/noop.d.ts +14 -1
  34. package/dist/language-DB8KG1z5.d.ts +53 -0
  35. package/dist/languages/albanian.d.ts +15 -0
  36. package/dist/languages/albanian.mjs +103 -0
  37. package/dist/languages/amharic.d.ts +15 -0
  38. package/dist/languages/amharic.mjs +240 -0
  39. package/dist/languages/arabic.d.ts +10 -1
  40. package/dist/languages/arabic.mjs +939 -154
  41. package/dist/languages/armenian.d.ts +10 -1
  42. package/dist/languages/armenian.mjs +275 -243
  43. package/dist/languages/azerbaijani.d.ts +15 -0
  44. package/dist/languages/azerbaijani.mjs +152 -0
  45. package/dist/languages/bambara.d.ts +15 -0
  46. package/dist/languages/bambara.mjs +60 -0
  47. package/dist/languages/basque.d.ts +14 -0
  48. package/dist/languages/basque.mjs +726 -0
  49. package/dist/languages/belarusian.d.ts +15 -0
  50. package/dist/languages/belarusian.mjs +100 -0
  51. package/dist/languages/bengali.d.ts +15 -0
  52. package/dist/languages/bengali.mjs +128 -0
  53. package/dist/languages/bosnian.d.ts +15 -0
  54. package/dist/languages/bosnian.mjs +197 -0
  55. package/dist/languages/breton.d.ts +15 -0
  56. package/dist/languages/breton.mjs +96 -0
  57. package/dist/languages/bulgarian.d.ts +10 -1
  58. package/dist/languages/bulgarian.mjs +11 -2
  59. package/dist/languages/burmese.d.ts +15 -0
  60. package/dist/languages/burmese.mjs +57 -0
  61. package/dist/languages/catalan.d.ts +14 -0
  62. package/dist/languages/catalan.mjs +987 -0
  63. package/dist/languages/chinese.d.ts +11 -1
  64. package/dist/languages/chinese.mjs +4 -3
  65. package/dist/languages/croatian.d.ts +15 -0
  66. package/dist/languages/croatian.mjs +191 -0
  67. package/dist/languages/czech.d.ts +14 -0
  68. package/dist/languages/czech.mjs +628 -0
  69. package/dist/languages/dagbani.d.ts +11 -1
  70. package/dist/languages/dagbani.mjs +11 -2
  71. package/dist/languages/danish.d.ts +10 -1
  72. package/dist/languages/danish.mjs +215 -110
  73. package/dist/languages/dutch.d.ts +10 -1
  74. package/dist/languages/dutch.mjs +1248 -163
  75. package/dist/languages/english.d.ts +10 -1
  76. package/dist/languages/english.mjs +2 -1
  77. package/dist/languages/esperanto.d.ts +14 -0
  78. package/dist/languages/esperanto.mjs +689 -0
  79. package/dist/languages/estonian.d.ts +14 -0
  80. package/dist/languages/estonian.mjs +2160 -0
  81. package/dist/languages/ewe.d.ts +11 -1
  82. package/dist/languages/ewe.mjs +11 -2
  83. package/dist/languages/faroese.d.ts +15 -0
  84. package/dist/languages/faroese.mjs +93 -0
  85. package/dist/languages/fijian.d.ts +15 -0
  86. package/dist/languages/fijian.mjs +55 -0
  87. package/dist/languages/finnish.d.ts +10 -1
  88. package/dist/languages/finnish.mjs +528 -263
  89. package/dist/languages/french.d.ts +10 -1
  90. package/dist/languages/french.mjs +950 -437
  91. package/dist/languages/ga.d.ts +11 -1
  92. package/dist/languages/ga.mjs +2 -1
  93. package/dist/languages/galician.d.ts +15 -0
  94. package/dist/languages/galician.mjs +172 -0
  95. package/dist/languages/georgian.d.ts +15 -0
  96. package/dist/languages/georgian.mjs +91 -0
  97. package/dist/languages/german.d.ts +10 -1
  98. package/dist/languages/german.mjs +432 -162
  99. package/dist/languages/greek.d.ts +10 -1
  100. package/dist/languages/greek.mjs +1970 -281
  101. package/dist/languages/guarani.d.ts +15 -0
  102. package/dist/languages/guarani.mjs +132 -0
  103. package/dist/languages/gujarati.d.ts +15 -0
  104. package/dist/languages/gujarati.mjs +234 -0
  105. package/dist/languages/haitian-creole.d.ts +15 -0
  106. package/dist/languages/haitian-creole.mjs +106 -0
  107. package/dist/languages/hausa.d.ts +11 -1
  108. package/dist/languages/hausa.mjs +2 -1
  109. package/dist/languages/hawaiian.d.ts +15 -0
  110. package/dist/languages/hawaiian.mjs +69 -0
  111. package/dist/languages/hebrew.d.ts +15 -0
  112. package/dist/languages/hebrew.mjs +213 -0
  113. package/dist/languages/hindi.d.ts +10 -1
  114. package/dist/languages/hindi.mjs +175 -97
  115. package/dist/languages/hungarian.d.ts +10 -1
  116. package/dist/languages/hungarian.mjs +412 -326
  117. package/dist/languages/icelandic.d.ts +15 -0
  118. package/dist/languages/icelandic.mjs +161 -0
  119. package/dist/languages/igbo.d.ts +11 -1
  120. package/dist/languages/igbo.mjs +2 -1
  121. package/dist/languages/indonesian.d.ts +10 -1
  122. package/dist/languages/indonesian.mjs +329 -137
  123. package/dist/languages/irish.d.ts +10 -1
  124. package/dist/languages/irish.mjs +223 -139
  125. package/dist/languages/italian.d.ts +10 -1
  126. package/dist/languages/italian.mjs +703 -406
  127. package/dist/languages/japanese.d.ts +11 -1
  128. package/dist/languages/japanese.mjs +5 -108
  129. package/dist/languages/kannada.d.ts +15 -0
  130. package/dist/languages/kannada.mjs +94 -0
  131. package/dist/languages/kazakh.d.ts +15 -0
  132. package/dist/languages/kazakh.mjs +90 -0
  133. package/dist/languages/khmer.d.ts +15 -0
  134. package/dist/languages/khmer.mjs +181 -0
  135. package/dist/languages/kinyarwanda.d.ts +15 -0
  136. package/dist/languages/kinyarwanda.mjs +99 -0
  137. package/dist/languages/kirundi.d.ts +15 -0
  138. package/dist/languages/kirundi.mjs +92 -0
  139. package/dist/languages/korean.d.ts +15 -0
  140. package/dist/languages/korean.mjs +252 -0
  141. package/dist/languages/kurmanji.d.ts +15 -0
  142. package/dist/languages/kurmanji.mjs +50 -0
  143. package/dist/languages/kyrgyz.d.ts +15 -0
  144. package/dist/languages/kyrgyz.mjs +108 -0
  145. package/dist/languages/lao.d.ts +15 -0
  146. package/dist/languages/lao.mjs +63 -0
  147. package/dist/languages/latin.d.ts +15 -0
  148. package/dist/languages/latin.mjs +69 -0
  149. package/dist/languages/latvian.d.ts +15 -0
  150. package/dist/languages/latvian.mjs +173 -0
  151. package/dist/languages/lingala.d.ts +15 -0
  152. package/dist/languages/lingala.mjs +61 -0
  153. package/dist/languages/lithuanian.d.ts +14 -0
  154. package/dist/languages/lithuanian.mjs +571 -0
  155. package/dist/languages/luxembourgish.d.ts +15 -0
  156. package/dist/languages/luxembourgish.mjs +214 -0
  157. package/dist/languages/macedonian.d.ts +15 -0
  158. package/dist/languages/macedonian.mjs +808 -0
  159. package/dist/languages/malagasy.d.ts +15 -0
  160. package/dist/languages/malagasy.mjs +67 -0
  161. package/dist/languages/malay.d.ts +15 -0
  162. package/dist/languages/malay.mjs +482 -0
  163. package/dist/languages/malayalam.d.ts +15 -0
  164. package/dist/languages/malayalam.mjs +122 -0
  165. package/dist/languages/maltese.d.ts +15 -0
  166. package/dist/languages/maltese.mjs +139 -0
  167. package/dist/languages/maori.d.ts +15 -0
  168. package/dist/languages/maori.mjs +79 -0
  169. package/dist/languages/marathi.d.ts +15 -0
  170. package/dist/languages/marathi.mjs +111 -0
  171. package/dist/languages/nepali.d.ts +10 -1
  172. package/dist/languages/nepali.mjs +209 -99
  173. package/dist/languages/norwegian.d.ts +10 -1
  174. package/dist/languages/norwegian.mjs +218 -85
  175. package/dist/languages/oromo.d.ts +15 -0
  176. package/dist/languages/oromo.mjs +78 -0
  177. package/dist/languages/persian.d.ts +14 -0
  178. package/dist/languages/persian.mjs +710 -0
  179. package/dist/languages/polish.d.ts +14 -0
  180. package/dist/languages/polish.mjs +614 -0
  181. package/dist/languages/portuguese.d.ts +10 -1
  182. package/dist/languages/portuguese.mjs +613 -380
  183. package/dist/languages/punjabi.d.ts +15 -0
  184. package/dist/languages/punjabi.mjs +197 -0
  185. package/dist/languages/romanian.d.ts +10 -1
  186. package/dist/languages/romanian.mjs +561 -382
  187. package/dist/languages/russian.d.ts +10 -1
  188. package/dist/languages/russian.mjs +373 -244
  189. package/dist/languages/samoan.d.ts +15 -0
  190. package/dist/languages/samoan.mjs +63 -0
  191. package/dist/languages/sanskrit.d.ts +10 -1
  192. package/dist/languages/sanskrit.mjs +2 -2
  193. package/dist/languages/scottish-gaelic.d.ts +15 -0
  194. package/dist/languages/scottish-gaelic.mjs +370 -0
  195. package/dist/languages/serbian.d.ts +10 -1
  196. package/dist/languages/serbian.mjs +3635 -155
  197. package/dist/languages/shona.d.ts +15 -0
  198. package/dist/languages/shona.mjs +91 -0
  199. package/dist/languages/sinhala.d.ts +15 -0
  200. package/dist/languages/sinhala.mjs +182 -0
  201. package/dist/languages/slovak.d.ts +15 -0
  202. package/dist/languages/slovak.mjs +430 -0
  203. package/dist/languages/slovenian.d.ts +10 -1
  204. package/dist/languages/slovenian.mjs +11 -2
  205. package/dist/languages/sorani.d.ts +15 -0
  206. package/dist/languages/sorani.mjs +156 -0
  207. package/dist/languages/spanish.d.ts +10 -1
  208. package/dist/languages/spanish.mjs +676 -374
  209. package/dist/languages/swahili.d.ts +10 -1
  210. package/dist/languages/swahili.mjs +2 -1
  211. package/dist/languages/swedish.d.ts +10 -1
  212. package/dist/languages/swedish.mjs +237 -95
  213. package/dist/languages/tagalog.d.ts +15 -0
  214. package/dist/languages/tagalog.mjs +159 -0
  215. package/dist/languages/tamil.d.ts +10 -1
  216. package/dist/languages/tamil.mjs +836 -64
  217. package/dist/languages/tatar.d.ts +15 -0
  218. package/dist/languages/tatar.mjs +1017 -0
  219. package/dist/languages/telugu.d.ts +15 -0
  220. package/dist/languages/telugu.mjs +62 -0
  221. package/dist/languages/thai.d.ts +15 -0
  222. package/dist/languages/thai.mjs +65 -0
  223. package/dist/languages/tibetan.d.ts +15 -0
  224. package/dist/languages/tibetan.mjs +119 -0
  225. package/dist/languages/tigrinya.d.ts +15 -0
  226. package/dist/languages/tigrinya.mjs +194 -0
  227. package/dist/languages/tongan.d.ts +15 -0
  228. package/dist/languages/tongan.mjs +56 -0
  229. package/dist/languages/turkish.d.ts +10 -1
  230. package/dist/languages/turkish.mjs +1246 -393
  231. package/dist/languages/twi.d.ts +11 -1
  232. package/dist/languages/twi.mjs +13 -2
  233. package/dist/languages/ukrainian.d.ts +10 -1
  234. package/dist/languages/ukrainian.mjs +125 -47
  235. package/dist/languages/urdu.d.ts +15 -0
  236. package/dist/languages/urdu.mjs +528 -0
  237. package/dist/languages/vietnamese.d.ts +15 -0
  238. package/dist/languages/vietnamese.mjs +277 -0
  239. package/dist/languages/welsh.d.ts +15 -0
  240. package/dist/languages/welsh.mjs +446 -0
  241. package/dist/languages/wolof.d.ts +15 -0
  242. package/dist/languages/wolof.mjs +79 -0
  243. package/dist/languages/xhosa.d.ts +15 -0
  244. package/dist/languages/xhosa.mjs +95 -0
  245. package/dist/languages/yoruba.d.ts +11 -1
  246. package/dist/languages/yoruba.mjs +1 -0
  247. package/dist/languages/zulu.d.ts +11 -1
  248. package/dist/languages/zulu.mjs +2 -1
  249. package/dist/persistence/durability/checkpoint-worker.d.ts +13 -0
  250. package/dist/persistence/durability/checkpoint-worker.mjs +6 -5
  251. package/dist/schema-CE6S_aAr.d.ts +208 -0
  252. package/dist/search-CgQQIciB.d.ts +786 -0
  253. package/dist/server.d.ts +214 -12
  254. package/dist/server.mjs +41 -2
  255. package/dist/types-BV3nAKTL.d.ts +302 -0
  256. package/dist/vector/hnsw-build-worker.d.ts +68 -2
  257. package/dist/vector/hnsw-build-worker.mjs +0 -2
  258. package/dist/workers/entry.mjs +2 -2
  259. package/package.json +14 -4
  260. package/dist/adapters-Bo2JQg8b.d.ts +0 -37
  261. package/dist/chunk-TW6BXTOL.mjs +0 -338
  262. package/dist/config-CojEPOgS.d.ts +0 -481
  263. package/dist/direct-executor-E52FFGDE.mjs +0 -4
  264. package/dist/language-ONQ3iVDf.d.ts +0 -14
  265. package/dist/narsil-D-84Nvm4.d.ts +0 -72
  266. package/dist/schema-DCgkO1j4.d.ts +0 -65
  267. package/dist/types-DHX6zGeD.d.ts +0 -73
@@ -32,6 +32,7 @@ var KNOWN_ACTION_TYPES = [
32
32
  "serialize",
33
33
  "deserialize",
34
34
  "memoryReport",
35
+ "bootstrap",
35
36
  "shutdown"
36
37
  ];
37
38
  function createRequestId() {
@@ -1,6 +1,42 @@
1
- import { NarsilError, ErrorCodes } from './chunk-ALB35PRQ.mjs';
1
+ import { NarsilError, ErrorCodes } from './chunk-UNJZ7ZDB.mjs';
2
2
  import { decode, encode } from '@msgpack/msgpack';
3
3
 
4
+ // src/distribution/coordinator/etcd/types.ts
5
+ var DEFAULT_ETCD_CONFIG = {
6
+ endpoints: ["http://localhost:2379"],
7
+ keyPrefix: "_narsil",
8
+ nodeHeartbeatTtlSeconds: 30,
9
+ leaseTtlSeconds: 15
10
+ };
11
+ var ETCD_KEY_NODES = "nodes";
12
+ var ETCD_KEY_ALLOCATION = "allocation";
13
+ var ETCD_KEY_PARTITION = "partition";
14
+ var ETCD_KEY_SCHEMA = "schema";
15
+ function buildKey(prefix, ...segments) {
16
+ return [prefix, ...segments].join("/");
17
+ }
18
+
19
+ // src/distribution/coordinator/etcd/keys.ts
20
+ var ETCD_KEY_LEASE = "lease";
21
+ var ETCD_KEY_GENERIC = "kv";
22
+ function coordinatorKeys(config) {
23
+ const prefix = config.keyPrefix;
24
+ return {
25
+ node: (nodeId) => buildKey(prefix, ETCD_KEY_NODES, nodeId),
26
+ nodePrefix: () => buildKey(prefix, ETCD_KEY_NODES),
27
+ allocation: (indexName) => buildKey(prefix, ETCD_KEY_ALLOCATION, indexName),
28
+ allocationPrefix: () => buildKey(prefix, ETCD_KEY_ALLOCATION),
29
+ partition: (indexName, partitionId) => buildKey(prefix, ETCD_KEY_PARTITION, indexName, String(partitionId)),
30
+ schema: (indexName) => buildKey(prefix, ETCD_KEY_SCHEMA, indexName),
31
+ schemaPrefix: () => buildKey(prefix, ETCD_KEY_SCHEMA),
32
+ lease: (key) => buildKey(prefix, ETCD_KEY_LEASE, key),
33
+ generic: (key) => buildKey(prefix, ETCD_KEY_GENERIC, key)
34
+ };
35
+ }
36
+ function extractSuffix(fullKey, prefix) {
37
+ return fullKey.slice(prefix.length + 1);
38
+ }
39
+
4
40
  // src/distribution/coordinator/etcd/leases.ts
5
41
  var LeaseManager = class {
6
42
  leases = /* @__PURE__ */ new Map();
@@ -99,21 +135,6 @@ function deserializeSchema(data) {
99
135
  return decode(data);
100
136
  }
101
137
 
102
- // src/distribution/coordinator/etcd/types.ts
103
- var DEFAULT_ETCD_CONFIG = {
104
- endpoints: ["http://localhost:2379"],
105
- keyPrefix: "_narsil",
106
- nodeHeartbeatTtlSeconds: 30,
107
- leaseTtlSeconds: 15
108
- };
109
- var ETCD_KEY_NODES = "nodes";
110
- var ETCD_KEY_ALLOCATION = "allocation";
111
- var ETCD_KEY_PARTITION = "partition";
112
- var ETCD_KEY_SCHEMA = "schema";
113
- function buildKey(prefix, ...segments) {
114
- return [prefix, ...segments].join("/");
115
- }
116
-
117
138
  // src/distribution/coordinator/etcd/validation.ts
118
139
  var MAX_NODE_ID_LENGTH = 255;
119
140
  var VALID_PARTITION_STATES = /* @__PURE__ */ new Set(["UNASSIGNED", "INITIALISING", "ACTIVE", "MIGRATING", "DECOMMISSIONING"]);
@@ -164,27 +185,7 @@ async function createEtcdCoordinator(config) {
164
185
  throw new NarsilError(ErrorCodes.CONFIG_INVALID, "Coordinator has been shut down");
165
186
  }
166
187
  }
167
- function nodeKey(nodeId) {
168
- return buildKey(resolvedConfig.keyPrefix, ETCD_KEY_NODES, nodeId);
169
- }
170
- function allocationKey(indexName) {
171
- return buildKey(resolvedConfig.keyPrefix, ETCD_KEY_ALLOCATION, indexName);
172
- }
173
- function partitionKey(indexName, partitionId) {
174
- return buildKey(resolvedConfig.keyPrefix, ETCD_KEY_PARTITION, indexName, String(partitionId));
175
- }
176
- function schemaKey(indexName) {
177
- return buildKey(resolvedConfig.keyPrefix, ETCD_KEY_SCHEMA, indexName);
178
- }
179
- function leaseKey(key) {
180
- return buildKey(resolvedConfig.keyPrefix, "lease", key);
181
- }
182
- function genericKey(key) {
183
- return buildKey(resolvedConfig.keyPrefix, "kv", key);
184
- }
185
- function extractSuffix(fullKey, prefix) {
186
- return fullKey.slice(prefix.length + 1);
187
- }
188
+ const keys = coordinatorKeys(resolvedConfig);
188
189
  function addWatcher(watcher) {
189
190
  if (watchers.size >= MAX_WATCHERS) {
190
191
  watcher.cancel().catch(() => {
@@ -207,7 +208,7 @@ async function createEtcdCoordinator(config) {
207
208
  const ttl = resolvedConfig.nodeHeartbeatTtlSeconds;
208
209
  const lease = client.lease(ttl);
209
210
  await lease.grant();
210
- const key = nodeKey(registration.nodeId);
211
+ const key = keys.node(registration.nodeId);
211
212
  const data = Buffer.from(serializeNodeRegistration(registration));
212
213
  await lease.put(key).value(data).exec();
213
214
  const existing = leaseManager.get(key);
@@ -220,7 +221,7 @@ async function createEtcdCoordinator(config) {
220
221
  async deregisterNode(nodeId) {
221
222
  assertNotShutdown();
222
223
  validateNodeId(nodeId);
223
- const key = nodeKey(nodeId);
224
+ const key = keys.node(nodeId);
224
225
  const entry = leaseManager.remove(key);
225
226
  if (entry !== void 0) {
226
227
  await entry.lease.revoke().catch(() => {
@@ -230,7 +231,7 @@ async function createEtcdCoordinator(config) {
230
231
  },
231
232
  async listNodes() {
232
233
  assertNotShutdown();
233
- const prefix = buildKey(resolvedConfig.keyPrefix, ETCD_KEY_NODES);
234
+ const prefix = keys.nodePrefix();
234
235
  const result = await client.getAll().prefix(prefix).buffers();
235
236
  const nodes = [];
236
237
  for (const key of Object.keys(result)) {
@@ -243,7 +244,7 @@ async function createEtcdCoordinator(config) {
243
244
  },
244
245
  async watchNodes(handler) {
245
246
  assertNotShutdown();
246
- const prefix = buildKey(resolvedConfig.keyPrefix, ETCD_KEY_NODES);
247
+ const prefix = keys.nodePrefix();
247
248
  const watcher = await client.watch().prefix(prefix).create();
248
249
  addWatcher(watcher);
249
250
  watcher.on("put", (kv) => {
@@ -262,7 +263,7 @@ async function createEtcdCoordinator(config) {
262
263
  },
263
264
  async getAllocation(indexName) {
264
265
  assertNotShutdown();
265
- const key = allocationKey(indexName);
266
+ const key = keys.allocation(indexName);
266
267
  const buf = await client.get(key).buffer();
267
268
  if (buf === null) {
268
269
  return null;
@@ -271,7 +272,7 @@ async function createEtcdCoordinator(config) {
271
272
  },
272
273
  async putAllocation(indexName, table, expectedVersion) {
273
274
  assertNotShutdown();
274
- const key = allocationKey(indexName);
275
+ const key = keys.allocation(indexName);
275
276
  const data = Buffer.from(serializeAllocationTable(table));
276
277
  if (expectedVersion === void 0) {
277
278
  await client.put(key).value(data).exec();
@@ -295,7 +296,7 @@ async function createEtcdCoordinator(config) {
295
296
  },
296
297
  async watchAllocation(handler) {
297
298
  assertNotShutdown();
298
- const prefix = buildKey(resolvedConfig.keyPrefix, ETCD_KEY_ALLOCATION);
299
+ const prefix = keys.allocationPrefix();
299
300
  const watcher = await client.watch().prefix(prefix).create();
300
301
  addWatcher(watcher);
301
302
  watcher.on("put", (kv) => {
@@ -309,7 +310,7 @@ async function createEtcdCoordinator(config) {
309
310
  },
310
311
  async getPartitionState(indexName, partitionId) {
311
312
  assertNotShutdown();
312
- const key = partitionKey(indexName, partitionId);
313
+ const key = keys.partition(indexName, partitionId);
313
314
  const value = await client.get(key).string();
314
315
  if (value === null) {
315
316
  return "UNASSIGNED";
@@ -318,12 +319,12 @@ async function createEtcdCoordinator(config) {
318
319
  },
319
320
  async putPartitionState(indexName, partitionId, state) {
320
321
  assertNotShutdown();
321
- const key = partitionKey(indexName, partitionId);
322
+ const key = keys.partition(indexName, partitionId);
322
323
  await client.put(key).value(state).exec();
323
324
  },
324
325
  async acquireLease(key, nodeId, ttlMs) {
325
326
  assertNotShutdown();
326
- const etcdKey = leaseKey(key);
327
+ const etcdKey = keys.lease(key);
327
328
  const ttlSeconds = Math.max(1, Math.ceil(ttlMs / 1e3));
328
329
  const existing = leaseManager.get(etcdKey);
329
330
  if (existing !== void 0 && existing.nodeId === nodeId) {
@@ -348,7 +349,7 @@ async function createEtcdCoordinator(config) {
348
349
  },
349
350
  async renewLease(key, nodeId, _ttlMs) {
350
351
  assertNotShutdown();
351
- const etcdKey = leaseKey(key);
352
+ const etcdKey = keys.lease(key);
352
353
  const entry = leaseManager.getByNodeId(etcdKey, nodeId);
353
354
  if (entry === void 0) {
354
355
  return false;
@@ -363,7 +364,7 @@ async function createEtcdCoordinator(config) {
363
364
  },
364
365
  async releaseLease(key) {
365
366
  assertNotShutdown();
366
- const etcdKey = leaseKey(key);
367
+ const etcdKey = keys.lease(key);
367
368
  const entry = leaseManager.remove(etcdKey);
368
369
  if (entry !== void 0) {
369
370
  await entry.lease.revoke().catch(() => {
@@ -373,7 +374,7 @@ async function createEtcdCoordinator(config) {
373
374
  },
374
375
  async get(key) {
375
376
  assertNotShutdown();
376
- const etcdKey = genericKey(key);
377
+ const etcdKey = keys.generic(key);
377
378
  const buf = await client.get(etcdKey).buffer();
378
379
  if (buf === null) {
379
380
  return null;
@@ -382,7 +383,7 @@ async function createEtcdCoordinator(config) {
382
383
  },
383
384
  async compareAndSet(key, expected, value) {
384
385
  assertNotShutdown();
385
- const etcdKey = genericKey(key);
386
+ const etcdKey = keys.generic(key);
386
387
  const newValue = Buffer.from(value);
387
388
  if (expected === null) {
388
389
  const txn2 = await client.if(etcdKey, "Create", "==", 0).then(client.put(etcdKey).value(newValue)).commit();
@@ -394,7 +395,7 @@ async function createEtcdCoordinator(config) {
394
395
  },
395
396
  async getSchema(indexName) {
396
397
  assertNotShutdown();
397
- const key = schemaKey(indexName);
398
+ const key = keys.schema(indexName);
398
399
  const buf = await client.get(key).buffer();
399
400
  if (buf === null) {
400
401
  return null;
@@ -403,12 +404,12 @@ async function createEtcdCoordinator(config) {
403
404
  },
404
405
  async putSchema(indexName, schema) {
405
406
  assertNotShutdown();
406
- const key = schemaKey(indexName);
407
+ const key = keys.schema(indexName);
407
408
  await client.put(key).value(serializeSchema(schema)).exec();
408
409
  },
409
410
  async watchSchemas(handler) {
410
411
  assertNotShutdown();
411
- const prefix = buildKey(resolvedConfig.keyPrefix, ETCD_KEY_SCHEMA);
412
+ const prefix = keys.schemaPrefix();
412
413
  const watcher = await client.watch().prefix(prefix).create();
413
414
  addWatcher(watcher);
414
415
  watcher.on("put", (kv) => {
@@ -429,7 +430,7 @@ async function createEtcdCoordinator(config) {
429
430
  },
430
431
  async getLeaseHolder(key) {
431
432
  assertNotShutdown();
432
- const etcdKey = leaseKey(key);
433
+ const etcdKey = keys.lease(key);
433
434
  const value = await client.get(etcdKey).string();
434
435
  return value ?? null;
435
436
  },
@@ -0,0 +1,9 @@
1
+ // src/languages/support/spellings.ts
2
+ function withNormalisedSpellings(words, normalize) {
3
+ const listed = [...words];
4
+ const expanded = new Set(listed);
5
+ for (const word of listed) expanded.add(normalize(word));
6
+ return expanded;
7
+ }
8
+
9
+ export { withNormalisedSpellings };
@@ -0,0 +1,15 @@
1
+ // src/languages/support/marks.ts
2
+ function isAscii(token) {
3
+ for (let i = 0; i < token.length; i++) {
4
+ if (token.charCodeAt(i) > 127) return false;
5
+ }
6
+ return true;
7
+ }
8
+ function removeMarks(token, marks) {
9
+ if (isAscii(token)) return token;
10
+ const decomposed = token.normalize("NFD");
11
+ const stripped = decomposed.replace(marks, "");
12
+ return stripped === decomposed ? token : stripped.normalize("NFC");
13
+ }
14
+
15
+ export { removeMarks };