glossarist 0.4.50 → 0.4.52

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 (709) hide show
  1. package/dist/compiled-format.d.ts +43 -0
  2. package/dist/compiled-format.d.ts.map +1 -0
  3. package/{src/compiled-format.ts → dist/compiled-format.js} +28 -46
  4. package/dist/compiled-format.js.map +1 -0
  5. package/dist/concept-collection.d.ts +39 -0
  6. package/dist/concept-collection.d.ts.map +1 -0
  7. package/dist/concept-collection.js +127 -0
  8. package/dist/concept-collection.js.map +1 -0
  9. package/dist/concept-diff.d.ts +14 -0
  10. package/dist/concept-diff.d.ts.map +1 -0
  11. package/{src/concept-diff.ts → dist/concept-diff.js} +2 -20
  12. package/dist/concept-diff.js.map +1 -0
  13. package/dist/concept-parser.d.ts +11 -0
  14. package/dist/concept-parser.d.ts.map +1 -0
  15. package/dist/concept-parser.js +209 -0
  16. package/dist/concept-parser.js.map +1 -0
  17. package/dist/concept-reader.d.ts +55 -0
  18. package/dist/concept-reader.d.ts.map +1 -0
  19. package/{src/concept-reader.ts → dist/concept-reader.js} +70 -76
  20. package/dist/concept-reader.js.map +1 -0
  21. package/dist/concept-serializer.d.ts +9 -0
  22. package/dist/concept-serializer.d.ts.map +1 -0
  23. package/dist/concept-serializer.js +87 -0
  24. package/dist/concept-serializer.js.map +1 -0
  25. package/dist/concept-writer.d.ts +10 -0
  26. package/dist/concept-writer.d.ts.map +1 -0
  27. package/dist/concept-writer.js +28 -0
  28. package/dist/concept-writer.js.map +1 -0
  29. package/dist/dataset-asset.d.ts +49 -0
  30. package/dist/dataset-asset.d.ts.map +1 -0
  31. package/{src/dataset-asset.ts → dist/dataset-asset.js} +16 -33
  32. package/dist/dataset-asset.js.map +1 -0
  33. package/dist/diff/canonical-json.d.ts +7 -0
  34. package/dist/diff/canonical-json.d.ts.map +1 -0
  35. package/dist/diff/canonical-json.js +28 -0
  36. package/dist/diff/canonical-json.js.map +1 -0
  37. package/dist/diff/change.d.ts +67 -0
  38. package/dist/diff/change.d.ts.map +1 -0
  39. package/dist/diff/change.js +131 -0
  40. package/dist/diff/change.js.map +1 -0
  41. package/dist/diff/collection-diff.d.ts +50 -0
  42. package/dist/diff/collection-diff.d.ts.map +1 -0
  43. package/dist/diff/collection-diff.js +182 -0
  44. package/dist/diff/collection-diff.js.map +1 -0
  45. package/dist/diff/concept-diff.d.ts +188 -0
  46. package/dist/diff/concept-diff.d.ts.map +1 -0
  47. package/dist/diff/concept-diff.js +624 -0
  48. package/dist/diff/concept-diff.js.map +1 -0
  49. package/dist/diff/diff-patch.d.ts +7 -0
  50. package/dist/diff/diff-patch.d.ts.map +1 -0
  51. package/dist/diff/diff-patch.js +225 -0
  52. package/dist/diff/diff-patch.js.map +1 -0
  53. package/dist/diff/diff-renderer.d.ts +44 -0
  54. package/dist/diff/diff-renderer.d.ts.map +1 -0
  55. package/dist/diff/diff-renderer.js +263 -0
  56. package/dist/diff/diff-renderer.js.map +1 -0
  57. package/dist/diff/identity.d.ts +2 -0
  58. package/dist/diff/identity.d.ts.map +1 -0
  59. package/dist/diff/identity.js +29 -0
  60. package/dist/diff/identity.js.map +1 -0
  61. package/dist/diff/index.d.ts +8 -0
  62. package/dist/diff/index.d.ts.map +1 -0
  63. package/dist/diff/index.js +8 -0
  64. package/dist/diff/index.js.map +1 -0
  65. package/dist/diff/list-diff.d.ts +36 -0
  66. package/dist/diff/list-diff.d.ts.map +1 -0
  67. package/dist/diff/list-diff.js +185 -0
  68. package/dist/diff/list-diff.js.map +1 -0
  69. package/dist/diff/similarity.d.ts +4 -0
  70. package/dist/diff/similarity.d.ts.map +1 -0
  71. package/dist/diff/similarity.js +20 -0
  72. package/dist/diff/similarity.js.map +1 -0
  73. package/dist/diff/text-diff.d.ts +42 -0
  74. package/dist/diff/text-diff.d.ts.map +1 -0
  75. package/dist/diff/text-diff.js +134 -0
  76. package/dist/diff/text-diff.js.map +1 -0
  77. package/dist/entity-directory.d.ts +13 -0
  78. package/dist/entity-directory.d.ts.map +1 -0
  79. package/dist/entity-directory.js +35 -0
  80. package/dist/entity-directory.js.map +1 -0
  81. package/dist/errors.d.ts +15 -0
  82. package/dist/errors.d.ts.map +1 -0
  83. package/dist/errors.js +23 -0
  84. package/dist/errors.js.map +1 -0
  85. package/dist/gcr-reader.d.ts +57 -0
  86. package/dist/gcr-reader.d.ts.map +1 -0
  87. package/dist/gcr-reader.js +264 -0
  88. package/dist/gcr-reader.js.map +1 -0
  89. package/dist/gcr-writer.d.ts +23 -0
  90. package/dist/gcr-writer.d.ts.map +1 -0
  91. package/dist/gcr-writer.js +84 -0
  92. package/dist/gcr-writer.js.map +1 -0
  93. package/dist/index.d.ts +25 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +38 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/managed-concept-collection.d.ts +31 -0
  98. package/dist/managed-concept-collection.d.ts.map +1 -0
  99. package/dist/managed-concept-collection.js +87 -0
  100. package/dist/managed-concept-collection.js.map +1 -0
  101. package/dist/migration/hyperedge-migrator.d.ts +33 -0
  102. package/dist/migration/hyperedge-migrator.d.ts.map +1 -0
  103. package/dist/migration/hyperedge-migrator.js +70 -0
  104. package/dist/migration/hyperedge-migrator.js.map +1 -0
  105. package/dist/models/abstract-hyperedge.d.ts +35 -0
  106. package/dist/models/abstract-hyperedge.d.ts.map +1 -0
  107. package/dist/models/abstract-hyperedge.js +112 -0
  108. package/dist/models/abstract-hyperedge.js.map +1 -0
  109. package/dist/models/base.d.ts +58 -0
  110. package/dist/models/base.d.ts.map +1 -0
  111. package/dist/models/base.js +77 -0
  112. package/dist/models/base.js.map +1 -0
  113. package/dist/models/bibliography-data.d.ts +20 -0
  114. package/dist/models/bibliography-data.d.ts.map +1 -0
  115. package/dist/models/bibliography-data.js +43 -0
  116. package/dist/models/bibliography-data.js.map +1 -0
  117. package/dist/models/bibliography-entry.d.ts +19 -0
  118. package/dist/models/bibliography-entry.d.ts.map +1 -0
  119. package/dist/models/bibliography-entry.js +34 -0
  120. package/dist/models/bibliography-entry.js.map +1 -0
  121. package/dist/models/citation.d.ts +40 -0
  122. package/dist/models/citation.d.ts.map +1 -0
  123. package/dist/models/citation.js +82 -0
  124. package/dist/models/citation.js.map +1 -0
  125. package/dist/models/completeness.d.ts +9 -0
  126. package/dist/models/completeness.d.ts.map +1 -0
  127. package/{src/models/completeness.ts → dist/models/completeness.js} +4 -9
  128. package/dist/models/completeness.js.map +1 -0
  129. package/dist/models/concept-date.d.ts +20 -0
  130. package/dist/models/concept-date.d.ts.map +1 -0
  131. package/dist/models/concept-date.js +36 -0
  132. package/dist/models/concept-date.js.map +1 -0
  133. package/dist/models/concept-ref.d.ts +32 -0
  134. package/dist/models/concept-ref.d.ts.map +1 -0
  135. package/dist/models/concept-ref.js +53 -0
  136. package/dist/models/concept-ref.js.map +1 -0
  137. package/dist/models/concept-reference.d.ts +22 -0
  138. package/dist/models/concept-reference.d.ts.map +1 -0
  139. package/dist/models/concept-reference.js +39 -0
  140. package/dist/models/concept-reference.js.map +1 -0
  141. package/dist/models/concept-source.d.ts +53 -0
  142. package/dist/models/concept-source.d.ts.map +1 -0
  143. package/dist/models/concept-source.js +66 -0
  144. package/dist/models/concept-source.js.map +1 -0
  145. package/dist/models/concept-system-type.d.ts +6 -0
  146. package/dist/models/concept-system-type.d.ts.map +1 -0
  147. package/dist/models/concept-system-type.js +22 -0
  148. package/dist/models/concept-system-type.js.map +1 -0
  149. package/dist/models/concept-system.d.ts +44 -0
  150. package/dist/models/concept-system.d.ts.map +1 -0
  151. package/dist/models/concept-system.js +115 -0
  152. package/dist/models/concept-system.js.map +1 -0
  153. package/dist/models/concept-type.d.ts +7 -0
  154. package/dist/models/concept-type.d.ts.map +1 -0
  155. package/{src/models/concept-type.ts → dist/models/concept-type.js} +8 -19
  156. package/dist/models/concept-type.js.map +1 -0
  157. package/dist/models/concept.d.ts +94 -0
  158. package/dist/models/concept.d.ts.map +1 -0
  159. package/dist/models/concept.js +368 -0
  160. package/dist/models/concept.js.map +1 -0
  161. package/dist/models/dataset-color.d.ts +28 -0
  162. package/dist/models/dataset-color.d.ts.map +1 -0
  163. package/dist/models/dataset-color.js +74 -0
  164. package/dist/models/dataset-color.js.map +1 -0
  165. package/dist/models/definition-type.d.ts +9 -0
  166. package/dist/models/definition-type.d.ts.map +1 -0
  167. package/{src/models/definition-type.ts → dist/models/definition-type.js} +6 -15
  168. package/dist/models/definition-type.js.map +1 -0
  169. package/dist/models/designation-relationship.d.ts +17 -0
  170. package/dist/models/designation-relationship.d.ts.map +1 -0
  171. package/dist/models/designation-relationship.js +30 -0
  172. package/dist/models/designation-relationship.js.map +1 -0
  173. package/dist/models/designation.d.ts +110 -0
  174. package/dist/models/designation.d.ts.map +1 -0
  175. package/dist/models/designation.js +224 -0
  176. package/dist/models/designation.js.map +1 -0
  177. package/dist/models/detailed-definition.d.ts +34 -0
  178. package/dist/models/detailed-definition.d.ts.map +1 -0
  179. package/dist/models/detailed-definition.js +63 -0
  180. package/dist/models/detailed-definition.js.map +1 -0
  181. package/dist/models/enum.d.ts +21 -0
  182. package/dist/models/enum.d.ts.map +1 -0
  183. package/dist/models/enum.js +39 -0
  184. package/dist/models/enum.js.map +1 -0
  185. package/dist/models/equivalence-degree.d.ts +7 -0
  186. package/dist/models/equivalence-degree.d.ts.map +1 -0
  187. package/dist/models/equivalence-degree.js +20 -0
  188. package/dist/models/equivalence-degree.js.map +1 -0
  189. package/dist/models/figure.d.ts +40 -0
  190. package/dist/models/figure.d.ts.map +1 -0
  191. package/dist/models/figure.js +82 -0
  192. package/dist/models/figure.js.map +1 -0
  193. package/dist/models/formula.d.ts +15 -0
  194. package/dist/models/formula.d.ts.map +1 -0
  195. package/dist/models/formula.js +27 -0
  196. package/dist/models/formula.js.map +1 -0
  197. package/dist/models/gcr-metadata.d.ts +62 -0
  198. package/dist/models/gcr-metadata.d.ts.map +1 -0
  199. package/dist/models/gcr-metadata.js +102 -0
  200. package/dist/models/gcr-metadata.js.map +1 -0
  201. package/dist/models/gcr-statistics.d.ts +30 -0
  202. package/dist/models/gcr-statistics.d.ts.map +1 -0
  203. package/dist/models/gcr-statistics.js +53 -0
  204. package/dist/models/gcr-statistics.js.map +1 -0
  205. package/dist/models/generic-hyperedge.d.ts +32 -0
  206. package/dist/models/generic-hyperedge.d.ts.map +1 -0
  207. package/dist/models/generic-hyperedge.js +51 -0
  208. package/dist/models/generic-hyperedge.js.map +1 -0
  209. package/dist/models/generic-member.d.ts +14 -0
  210. package/dist/models/generic-member.d.ts.map +1 -0
  211. package/dist/models/generic-member.js +51 -0
  212. package/dist/models/generic-member.js.map +1 -0
  213. package/dist/models/grammar-info.d.ts +34 -0
  214. package/dist/models/grammar-info.d.ts.map +1 -0
  215. package/dist/models/grammar-info.js +59 -0
  216. package/dist/models/grammar-info.js.map +1 -0
  217. package/dist/models/hyperedge-colors.d.ts +19 -0
  218. package/dist/models/hyperedge-colors.d.ts.map +1 -0
  219. package/dist/models/hyperedge-colors.js +61 -0
  220. package/dist/models/hyperedge-colors.js.map +1 -0
  221. package/dist/models/hyperedge-index.d.ts +34 -0
  222. package/dist/models/hyperedge-index.d.ts.map +1 -0
  223. package/dist/models/hyperedge-index.js +85 -0
  224. package/dist/models/hyperedge-index.js.map +1 -0
  225. package/dist/models/hyperedge-member.d.ts +28 -0
  226. package/dist/models/hyperedge-member.d.ts.map +1 -0
  227. package/dist/models/hyperedge-member.js +92 -0
  228. package/dist/models/hyperedge-member.js.map +1 -0
  229. package/dist/models/hyperedge-registry.d.ts +47 -0
  230. package/dist/models/hyperedge-registry.d.ts.map +1 -0
  231. package/dist/models/hyperedge-registry.js +118 -0
  232. package/dist/models/hyperedge-registry.js.map +1 -0
  233. package/dist/models/index.d.ts +53 -0
  234. package/dist/models/index.d.ts.map +1 -0
  235. package/{src/models/index.ts → dist/models/index.js} +11 -63
  236. package/dist/models/index.js.map +1 -0
  237. package/dist/models/locality.d.ts +17 -0
  238. package/dist/models/locality.d.ts.map +1 -0
  239. package/dist/models/locality.js +26 -0
  240. package/dist/models/locality.js.map +1 -0
  241. package/dist/models/localized-concept.d.ts +102 -0
  242. package/dist/models/localized-concept.d.ts.map +1 -0
  243. package/dist/models/localized-concept.js +195 -0
  244. package/dist/models/localized-concept.js.map +1 -0
  245. package/dist/models/localized-string.d.ts +5 -0
  246. package/dist/models/localized-string.d.ts.map +1 -0
  247. package/dist/models/localized-string.js +20 -0
  248. package/dist/models/localized-string.js.map +1 -0
  249. package/dist/models/multiplicity.d.ts +42 -0
  250. package/dist/models/multiplicity.d.ts.map +1 -0
  251. package/dist/models/multiplicity.js +84 -0
  252. package/dist/models/multiplicity.js.map +1 -0
  253. package/dist/models/non-verb-rep.d.ts +20 -0
  254. package/dist/models/non-verb-rep.d.ts.map +1 -0
  255. package/dist/models/non-verb-rep.js +32 -0
  256. package/dist/models/non-verb-rep.js.map +1 -0
  257. package/dist/models/non-verbal-entity.d.ts +30 -0
  258. package/dist/models/non-verbal-entity.d.ts.map +1 -0
  259. package/dist/models/non-verbal-entity.js +48 -0
  260. package/dist/models/non-verbal-entity.js.map +1 -0
  261. package/dist/models/non-verbal-reference.d.ts +23 -0
  262. package/dist/models/non-verbal-reference.d.ts.map +1 -0
  263. package/dist/models/non-verbal-reference.js +44 -0
  264. package/dist/models/non-verbal-reference.js.map +1 -0
  265. package/dist/models/non-verbal-references.d.ts +12 -0
  266. package/dist/models/non-verbal-references.d.ts.map +1 -0
  267. package/dist/models/non-verbal-references.js +20 -0
  268. package/dist/models/non-verbal-references.js.map +1 -0
  269. package/dist/models/partitive-count.d.ts +10 -0
  270. package/dist/models/partitive-count.d.ts.map +1 -0
  271. package/{src/models/partitive-count.ts → dist/models/partitive-count.js} +5 -9
  272. package/dist/models/partitive-count.js.map +1 -0
  273. package/dist/models/partitive-enumeration.d.ts +5 -0
  274. package/dist/models/partitive-enumeration.d.ts.map +1 -0
  275. package/dist/models/partitive-enumeration.js +16 -0
  276. package/dist/models/partitive-enumeration.js.map +1 -0
  277. package/dist/models/partitive-hyperedge.d.ts +43 -0
  278. package/dist/models/partitive-hyperedge.d.ts.map +1 -0
  279. package/dist/models/partitive-hyperedge.js +63 -0
  280. package/dist/models/partitive-hyperedge.js.map +1 -0
  281. package/dist/models/partitive-member.d.ts +14 -0
  282. package/dist/models/partitive-member.d.ts.map +1 -0
  283. package/dist/models/partitive-member.js +44 -0
  284. package/dist/models/partitive-member.js.map +1 -0
  285. package/dist/models/partitive-presence.d.ts +9 -0
  286. package/dist/models/partitive-presence.d.ts.map +1 -0
  287. package/{src/models/partitive-presence.ts → dist/models/partitive-presence.js} +4 -8
  288. package/dist/models/partitive-presence.js.map +1 -0
  289. package/dist/models/plurality-marker.d.ts +5 -0
  290. package/dist/models/plurality-marker.d.ts.map +1 -0
  291. package/dist/models/plurality-marker.js +20 -0
  292. package/dist/models/plurality-marker.js.map +1 -0
  293. package/dist/models/pronunciation.d.ts +19 -0
  294. package/dist/models/pronunciation.d.ts.map +1 -0
  295. package/dist/models/pronunciation.js +34 -0
  296. package/dist/models/pronunciation.js.map +1 -0
  297. package/dist/models/register.d.ts +104 -0
  298. package/dist/models/register.d.ts.map +1 -0
  299. package/dist/models/register.js +297 -0
  300. package/dist/models/register.js.map +1 -0
  301. package/dist/models/registrable.d.ts +25 -0
  302. package/dist/models/registrable.d.ts.map +1 -0
  303. package/dist/models/registrable.js +23 -0
  304. package/dist/models/registrable.js.map +1 -0
  305. package/dist/models/related-concept.d.ts +33 -0
  306. package/dist/models/related-concept.d.ts.map +1 -0
  307. package/dist/models/related-concept.js +95 -0
  308. package/dist/models/related-concept.js.map +1 -0
  309. package/dist/models/relation-categories.d.ts +38 -0
  310. package/dist/models/relation-categories.d.ts.map +1 -0
  311. package/dist/models/relation-categories.js +135 -0
  312. package/dist/models/relation-categories.js.map +1 -0
  313. package/dist/models/relation-colors.d.ts +35 -0
  314. package/dist/models/relation-colors.d.ts.map +1 -0
  315. package/dist/models/relation-colors.js +68 -0
  316. package/dist/models/relation-colors.js.map +1 -0
  317. package/dist/models/relation-loader.d.ts +41 -0
  318. package/dist/models/relation-loader.d.ts.map +1 -0
  319. package/dist/models/relation-loader.js +101 -0
  320. package/dist/models/relation-loader.js.map +1 -0
  321. package/dist/models/section.d.ts +22 -0
  322. package/dist/models/section.d.ts.map +1 -0
  323. package/dist/models/section.js +47 -0
  324. package/dist/models/section.js.map +1 -0
  325. package/dist/models/sequential-hyperedge.d.ts +32 -0
  326. package/dist/models/sequential-hyperedge.d.ts.map +1 -0
  327. package/dist/models/sequential-hyperedge.js +49 -0
  328. package/dist/models/sequential-hyperedge.js.map +1 -0
  329. package/dist/models/sequential-member.d.ts +8 -0
  330. package/dist/models/sequential-member.d.ts.map +1 -0
  331. package/{src/models/sequential-member.ts → dist/models/sequential-member.js} +4 -9
  332. package/dist/models/sequential-member.js.map +1 -0
  333. package/dist/models/shared-non-verbal-entity.d.ts +16 -0
  334. package/dist/models/shared-non-verbal-entity.d.ts.map +1 -0
  335. package/dist/models/shared-non-verbal-entity.js +28 -0
  336. package/dist/models/shared-non-verbal-entity.js.map +1 -0
  337. package/dist/models/table.d.ts +15 -0
  338. package/dist/models/table.d.ts.map +1 -0
  339. package/dist/models/table.js +27 -0
  340. package/dist/models/table.js.map +1 -0
  341. package/dist/rdf/agents-emitter.d.ts +37 -0
  342. package/dist/rdf/agents-emitter.d.ts.map +1 -0
  343. package/dist/rdf/agents-emitter.js +107 -0
  344. package/dist/rdf/agents-emitter.js.map +1 -0
  345. package/dist/rdf/bibliography-emitter.d.ts +16 -0
  346. package/dist/rdf/bibliography-emitter.d.ts.map +1 -0
  347. package/dist/rdf/bibliography-emitter.js +84 -0
  348. package/dist/rdf/bibliography-emitter.js.map +1 -0
  349. package/dist/rdf/bnode-id.d.ts +2 -0
  350. package/dist/rdf/bnode-id.d.ts.map +1 -0
  351. package/dist/rdf/bnode-id.js +57 -0
  352. package/dist/rdf/bnode-id.js.map +1 -0
  353. package/dist/rdf/build-activity-emitter.d.ts +42 -0
  354. package/dist/rdf/build-activity-emitter.d.ts.map +1 -0
  355. package/dist/rdf/build-activity-emitter.js +103 -0
  356. package/dist/rdf/build-activity-emitter.js.map +1 -0
  357. package/dist/rdf/curie.d.ts +7 -0
  358. package/dist/rdf/curie.d.ts.map +1 -0
  359. package/dist/rdf/curie.js +45 -0
  360. package/dist/rdf/curie.js.map +1 -0
  361. package/dist/rdf/dataset-emitter.d.ts +37 -0
  362. package/dist/rdf/dataset-emitter.d.ts.map +1 -0
  363. package/dist/rdf/dataset-emitter.js +126 -0
  364. package/dist/rdf/dataset-emitter.js.map +1 -0
  365. package/dist/rdf/deterministic-id.d.ts +3 -0
  366. package/dist/rdf/deterministic-id.d.ts.map +1 -0
  367. package/dist/rdf/deterministic-id.js +68 -0
  368. package/dist/rdf/deterministic-id.js.map +1 -0
  369. package/dist/rdf/document-writer.d.ts +11 -0
  370. package/dist/rdf/document-writer.d.ts.map +1 -0
  371. package/dist/rdf/document-writer.js +77 -0
  372. package/dist/rdf/document-writer.js.map +1 -0
  373. package/dist/rdf/gloss-concept.d.ts +27 -0
  374. package/dist/rdf/gloss-concept.d.ts.map +1 -0
  375. package/dist/rdf/gloss-concept.js +95 -0
  376. package/dist/rdf/gloss-concept.js.map +1 -0
  377. package/dist/rdf/gloss-designation.d.ts +17 -0
  378. package/dist/rdf/gloss-designation.d.ts.map +1 -0
  379. package/dist/rdf/gloss-designation.js +46 -0
  380. package/dist/rdf/gloss-designation.js.map +1 -0
  381. package/dist/rdf/gloss-detailed-definition.d.ts +14 -0
  382. package/dist/rdf/gloss-detailed-definition.d.ts.map +1 -0
  383. package/dist/rdf/gloss-detailed-definition.js +53 -0
  384. package/dist/rdf/gloss-detailed-definition.js.map +1 -0
  385. package/dist/rdf/gloss-generic-hyperedge.d.ts +27 -0
  386. package/dist/rdf/gloss-generic-hyperedge.d.ts.map +1 -0
  387. package/{src/rdf/gloss-generic-hyperedge.ts → dist/rdf/gloss-generic-hyperedge.js} +36 -50
  388. package/dist/rdf/gloss-generic-hyperedge.js.map +1 -0
  389. package/dist/rdf/gloss-localized-concept.d.ts +24 -0
  390. package/dist/rdf/gloss-localized-concept.d.ts.map +1 -0
  391. package/dist/rdf/gloss-localized-concept.js +71 -0
  392. package/dist/rdf/gloss-localized-concept.js.map +1 -0
  393. package/dist/rdf/gloss-non-verbal-rep.d.ts +33 -0
  394. package/dist/rdf/gloss-non-verbal-rep.d.ts.map +1 -0
  395. package/dist/rdf/gloss-non-verbal-rep.js +163 -0
  396. package/dist/rdf/gloss-non-verbal-rep.js.map +1 -0
  397. package/dist/rdf/gloss-partitive-member.d.ts +8 -0
  398. package/dist/rdf/gloss-partitive-member.d.ts.map +1 -0
  399. package/{src/rdf/gloss-partitive-member.ts → dist/rdf/gloss-partitive-member.js} +23 -41
  400. package/dist/rdf/gloss-partitive-member.js.map +1 -0
  401. package/dist/rdf/gloss-partitive-relation.d.ts +26 -0
  402. package/dist/rdf/gloss-partitive-relation.d.ts.map +1 -0
  403. package/dist/rdf/gloss-partitive-relation.js +73 -0
  404. package/dist/rdf/gloss-partitive-relation.js.map +1 -0
  405. package/dist/rdf/gloss-source.d.ts +23 -0
  406. package/dist/rdf/gloss-source.d.ts.map +1 -0
  407. package/dist/rdf/gloss-source.js +52 -0
  408. package/dist/rdf/gloss-source.js.map +1 -0
  409. package/dist/rdf/group-emitter.d.ts +46 -0
  410. package/dist/rdf/group-emitter.d.ts.map +1 -0
  411. package/dist/rdf/group-emitter.js +107 -0
  412. package/dist/rdf/group-emitter.js.map +1 -0
  413. package/dist/rdf/image-variant-emitter.d.ts +12 -0
  414. package/dist/rdf/image-variant-emitter.d.ts.map +1 -0
  415. package/dist/rdf/image-variant-emitter.js +55 -0
  416. package/dist/rdf/image-variant-emitter.js.map +1 -0
  417. package/dist/rdf/index.d.ts +26 -0
  418. package/dist/rdf/index.d.ts.map +1 -0
  419. package/{src/rdf/index.ts → dist/rdf/index.js} +8 -37
  420. package/dist/rdf/index.js.map +1 -0
  421. package/dist/rdf/normalize-enum.d.ts +3 -0
  422. package/dist/rdf/normalize-enum.d.ts.map +1 -0
  423. package/{src/rdf/normalize-enum.ts → dist/rdf/normalize-enum.js} +11 -10
  424. package/dist/rdf/normalize-enum.js.map +1 -0
  425. package/dist/rdf/predicates.d.ts +277 -0
  426. package/dist/rdf/predicates.d.ts.map +1 -0
  427. package/dist/rdf/predicates.js +279 -0
  428. package/dist/rdf/predicates.js.map +1 -0
  429. package/dist/rdf/prefixes.d.ts +16 -0
  430. package/dist/rdf/prefixes.d.ts.map +1 -0
  431. package/{src/rdf/prefixes.ts → dist/rdf/prefixes.js} +10 -12
  432. package/dist/rdf/prefixes.js.map +1 -0
  433. package/dist/rdf/provenance-emitter.d.ts +28 -0
  434. package/dist/rdf/provenance-emitter.d.ts.map +1 -0
  435. package/dist/rdf/provenance-emitter.js +74 -0
  436. package/dist/rdf/provenance-emitter.js.map +1 -0
  437. package/dist/rdf/sections-builder.d.ts +17 -0
  438. package/dist/rdf/sections-builder.d.ts.map +1 -0
  439. package/dist/rdf/sections-builder.js +137 -0
  440. package/dist/rdf/sections-builder.js.map +1 -0
  441. package/dist/rdf/shacl-entry.d.ts +2 -0
  442. package/dist/rdf/shacl-entry.d.ts.map +1 -0
  443. package/{src/rdf/shacl-entry.ts → dist/rdf/shacl-entry.js} +1 -1
  444. package/dist/rdf/shacl-entry.js.map +1 -0
  445. package/dist/rdf/shacl.d.ts +10 -0
  446. package/dist/rdf/shacl.d.ts.map +1 -0
  447. package/{src/rdf/shacl.ts → dist/rdf/shacl.js} +38 -57
  448. package/dist/rdf/shacl.js.map +1 -0
  449. package/dist/rdf/terms.d.ts +10 -0
  450. package/dist/rdf/terms.d.ts.map +1 -0
  451. package/{src/rdf/terms.ts → dist/rdf/terms.js} +6 -3
  452. package/dist/rdf/terms.js.map +1 -0
  453. package/dist/rdf/version-emitter.d.ts +57 -0
  454. package/dist/rdf/version-emitter.d.ts.map +1 -0
  455. package/dist/rdf/version-emitter.js +68 -0
  456. package/dist/rdf/version-emitter.js.map +1 -0
  457. package/dist/rdf/vocabulary-emitter.d.ts +32 -0
  458. package/dist/rdf/vocabulary-emitter.d.ts.map +1 -0
  459. package/dist/rdf/vocabulary-emitter.js +46 -0
  460. package/dist/rdf/vocabulary-emitter.js.map +1 -0
  461. package/dist/rdf/write-turtle-sync.d.ts +7 -0
  462. package/dist/rdf/write-turtle-sync.d.ts.map +1 -0
  463. package/dist/rdf/write-turtle-sync.js +130 -0
  464. package/dist/rdf/write-turtle-sync.js.map +1 -0
  465. package/dist/reference-mention.d.ts +49 -0
  466. package/dist/reference-mention.d.ts.map +1 -0
  467. package/dist/reference-mention.js +98 -0
  468. package/dist/reference-mention.js.map +1 -0
  469. package/dist/reference-resolver.d.ts +52 -0
  470. package/dist/reference-resolver.d.ts.map +1 -0
  471. package/dist/reference-resolver.js +311 -0
  472. package/dist/reference-resolver.js.map +1 -0
  473. package/dist/render-classification.d.ts +19 -0
  474. package/dist/render-classification.d.ts.map +1 -0
  475. package/dist/render-classification.js +82 -0
  476. package/dist/render-classification.js.map +1 -0
  477. package/dist/sort.d.ts +5 -0
  478. package/dist/sort.d.ts.map +1 -0
  479. package/dist/sort.js +25 -0
  480. package/dist/sort.js.map +1 -0
  481. package/dist/transforms/concept-to-gloss.transform.d.ts +32 -0
  482. package/dist/transforms/concept-to-gloss.transform.d.ts.map +1 -0
  483. package/dist/transforms/concept-to-gloss.transform.js +60 -0
  484. package/dist/transforms/concept-to-gloss.transform.js.map +1 -0
  485. package/dist/transforms/index.d.ts +2 -0
  486. package/dist/transforms/index.d.ts.map +1 -0
  487. package/{src/transforms/index.ts → dist/transforms/index.js} +1 -0
  488. package/dist/transforms/index.js.map +1 -0
  489. package/dist/utils/assertions.d.ts +4 -0
  490. package/dist/utils/assertions.d.ts.map +1 -0
  491. package/dist/utils/assertions.js +17 -0
  492. package/dist/utils/assertions.js.map +1 -0
  493. package/dist/utils/external-detection.d.ts +38 -0
  494. package/dist/utils/external-detection.d.ts.map +1 -0
  495. package/dist/utils/external-detection.js +55 -0
  496. package/dist/utils/external-detection.js.map +1 -0
  497. package/dist/uuid.d.ts +4 -0
  498. package/dist/uuid.d.ts.map +1 -0
  499. package/dist/uuid.js +23 -0
  500. package/dist/uuid.js.map +1 -0
  501. package/dist/v1-reader.d.ts +8 -0
  502. package/dist/v1-reader.d.ts.map +1 -0
  503. package/dist/v1-reader.js +56 -0
  504. package/dist/v1-reader.js.map +1 -0
  505. package/dist/validators/asset-index.d.ts +23 -0
  506. package/dist/validators/asset-index.d.ts.map +1 -0
  507. package/dist/validators/asset-index.js +58 -0
  508. package/dist/validators/asset-index.js.map +1 -0
  509. package/dist/validators/binary-has-part-redundancy-rule.d.ts +8 -0
  510. package/dist/validators/binary-has-part-redundancy-rule.d.ts.map +1 -0
  511. package/dist/validators/binary-has-part-redundancy-rule.js +57 -0
  512. package/dist/validators/binary-has-part-redundancy-rule.js.map +1 -0
  513. package/dist/validators/concept-validator.d.ts +21 -0
  514. package/dist/validators/concept-validator.d.ts.map +1 -0
  515. package/dist/validators/concept-validator.js +76 -0
  516. package/dist/validators/concept-validator.js.map +1 -0
  517. package/dist/validators/delimiting-coherence-rule.d.ts +8 -0
  518. package/dist/validators/delimiting-coherence-rule.d.ts.map +1 -0
  519. package/dist/validators/delimiting-coherence-rule.js +72 -0
  520. package/dist/validators/delimiting-coherence-rule.js.map +1 -0
  521. package/dist/validators/extensional-completeness.d.ts +18 -0
  522. package/dist/validators/extensional-completeness.d.ts.map +1 -0
  523. package/dist/validators/extensional-completeness.js +41 -0
  524. package/dist/validators/extensional-completeness.js.map +1 -0
  525. package/dist/validators/external-concept-shape-rule.d.ts +8 -0
  526. package/dist/validators/external-concept-shape-rule.d.ts.map +1 -0
  527. package/dist/validators/external-concept-shape-rule.js +48 -0
  528. package/dist/validators/external-concept-shape-rule.js.map +1 -0
  529. package/dist/validators/gcr-validator.d.ts +11 -0
  530. package/dist/validators/gcr-validator.d.ts.map +1 -0
  531. package/dist/validators/gcr-validator.js +76 -0
  532. package/dist/validators/gcr-validator.js.map +1 -0
  533. package/dist/validators/hyperedge-coherence-rule.d.ts +9 -0
  534. package/dist/validators/hyperedge-coherence-rule.d.ts.map +1 -0
  535. package/dist/validators/hyperedge-coherence-rule.js +78 -0
  536. package/dist/validators/hyperedge-coherence-rule.js.map +1 -0
  537. package/dist/validators/index.d.ts +21 -0
  538. package/dist/validators/index.d.ts.map +1 -0
  539. package/{src/validators/index.ts → dist/validators/index.js} +25 -51
  540. package/dist/validators/index.js.map +1 -0
  541. package/dist/validators/partitive-relation-coherence-rule.d.ts +2 -0
  542. package/dist/validators/partitive-relation-coherence-rule.d.ts.map +1 -0
  543. package/{src/validators/partitive-relation-coherence-rule.ts → dist/validators/partitive-relation-coherence-rule.js} +1 -1
  544. package/dist/validators/partitive-relation-coherence-rule.js.map +1 -0
  545. package/dist/validators/ref-keys.d.ts +8 -0
  546. package/dist/validators/ref-keys.d.ts.map +1 -0
  547. package/dist/validators/ref-keys.js +27 -0
  548. package/dist/validators/ref-keys.js.map +1 -0
  549. package/dist/validators/register-validator.d.ts +10 -0
  550. package/dist/validators/register-validator.d.ts.map +1 -0
  551. package/dist/validators/register-validator.js +18 -0
  552. package/dist/validators/register-validator.js.map +1 -0
  553. package/dist/validators/relationship-type-rule.d.ts +13 -0
  554. package/dist/validators/relationship-type-rule.d.ts.map +1 -0
  555. package/dist/validators/relationship-type-rule.js +34 -0
  556. package/dist/validators/relationship-type-rule.js.map +1 -0
  557. package/dist/validators/sourced-from-locality-rule.d.ts +8 -0
  558. package/dist/validators/sourced-from-locality-rule.d.ts.map +1 -0
  559. package/dist/validators/sourced-from-locality-rule.js +37 -0
  560. package/dist/validators/sourced-from-locality-rule.js.map +1 -0
  561. package/dist/validators/v3-rules.d.ts +60 -0
  562. package/dist/validators/v3-rules.d.ts.map +1 -0
  563. package/dist/validators/v3-rules.js +327 -0
  564. package/dist/validators/v3-rules.js.map +1 -0
  565. package/dist/validators/validation-error.d.ts +13 -0
  566. package/dist/validators/validation-error.d.ts.map +1 -0
  567. package/dist/validators/validation-error.js +17 -0
  568. package/dist/validators/validation-error.js.map +1 -0
  569. package/dist/validators/validation-result.d.ts +17 -0
  570. package/dist/validators/validation-result.d.ts.map +1 -0
  571. package/dist/validators/validation-result.js +47 -0
  572. package/dist/validators/validation-result.js.map +1 -0
  573. package/dist/validators/validation-rule.d.ts +10 -0
  574. package/dist/validators/validation-rule.d.ts.map +1 -0
  575. package/dist/validators/validation-rule.js +17 -0
  576. package/dist/validators/validation-rule.js.map +1 -0
  577. package/package.json +37 -42
  578. package/src/concept-collection.ts +0 -172
  579. package/src/concept-parser.ts +0 -235
  580. package/src/concept-reader.d.ts +0 -13
  581. package/src/concept-serializer.ts +0 -110
  582. package/src/concept-writer.d.ts +0 -7
  583. package/src/concept-writer.ts +0 -47
  584. package/src/diff/canonical-json.ts +0 -29
  585. package/src/diff/change.ts +0 -175
  586. package/src/diff/collection-diff.ts +0 -245
  587. package/src/diff/concept-diff.ts +0 -853
  588. package/src/diff/diff-patch.ts +0 -276
  589. package/src/diff/diff-renderer.ts +0 -348
  590. package/src/diff/identity.ts +0 -33
  591. package/src/diff/index.d.ts +0 -242
  592. package/src/diff/index.ts +0 -50
  593. package/src/diff/list-diff.ts +0 -231
  594. package/src/diff/similarity.ts +0 -20
  595. package/src/diff/text-diff.ts +0 -167
  596. package/src/entity-directory.ts +0 -43
  597. package/src/errors.d.ts +0 -11
  598. package/src/errors.ts +0 -24
  599. package/src/gcr-reader.d.ts +0 -65
  600. package/src/gcr-reader.ts +0 -512
  601. package/src/gcr-writer.d.ts +0 -22
  602. package/src/gcr-writer.ts +0 -99
  603. package/src/index.d.ts +0 -124
  604. package/src/index.ts +0 -92
  605. package/src/managed-concept-collection.ts +0 -130
  606. package/src/migration/hyperedge-migrator.ts +0 -104
  607. package/src/models/abstract-hyperedge.ts +0 -164
  608. package/src/models/base.ts +0 -110
  609. package/src/models/bibliography-data.ts +0 -64
  610. package/src/models/bibliography-entry.ts +0 -40
  611. package/src/models/citation.ts +0 -98
  612. package/src/models/concept-date.ts +0 -48
  613. package/src/models/concept-ref.ts +0 -64
  614. package/src/models/concept-reference.ts +0 -50
  615. package/src/models/concept-source.ts +0 -96
  616. package/src/models/concept-system-type.ts +0 -39
  617. package/src/models/concept-system.ts +0 -152
  618. package/src/models/concept.ts +0 -499
  619. package/src/models/dataset-color.ts +0 -88
  620. package/src/models/designation-relationship.ts +0 -39
  621. package/src/models/designation.ts +0 -297
  622. package/src/models/detailed-definition.ts +0 -92
  623. package/src/models/enum.ts +0 -60
  624. package/src/models/equivalence-degree.ts +0 -34
  625. package/src/models/figure.ts +0 -110
  626. package/src/models/formula.ts +0 -36
  627. package/src/models/gcr-metadata.ts +0 -118
  628. package/src/models/gcr-statistics.ts +0 -76
  629. package/src/models/generic-hyperedge.ts +0 -72
  630. package/src/models/generic-member.ts +0 -80
  631. package/src/models/grammar-info.ts +0 -78
  632. package/src/models/hyperedge-colors.ts +0 -87
  633. package/src/models/hyperedge-index.ts +0 -101
  634. package/src/models/hyperedge-member.ts +0 -121
  635. package/src/models/hyperedge-registry.ts +0 -145
  636. package/src/models/index.d.ts +0 -586
  637. package/src/models/locality.ts +0 -34
  638. package/src/models/localized-concept.ts +0 -284
  639. package/src/models/localized-string.ts +0 -32
  640. package/src/models/multiplicity.ts +0 -134
  641. package/src/models/non-verb-rep.ts +0 -48
  642. package/src/models/non-verbal-entity.ts +0 -65
  643. package/src/models/non-verbal-reference.ts +0 -73
  644. package/src/models/non-verbal-references.ts +0 -29
  645. package/src/models/partitive-enumeration.ts +0 -27
  646. package/src/models/partitive-hyperedge.ts +0 -90
  647. package/src/models/partitive-member.ts +0 -56
  648. package/src/models/plurality-marker.ts +0 -31
  649. package/src/models/pronunciation.ts +0 -40
  650. package/src/models/register.ts +0 -315
  651. package/src/models/registrable.ts +0 -48
  652. package/src/models/related-concept.ts +0 -117
  653. package/src/models/relation-categories.ts +0 -167
  654. package/src/models/relation-colors.ts +0 -90
  655. package/src/models/relation-loader.ts +0 -115
  656. package/src/models/section.ts +0 -61
  657. package/src/models/sequential-hyperedge.ts +0 -70
  658. package/src/models/shared-non-verbal-entity.ts +0 -36
  659. package/src/models/table.ts +0 -36
  660. package/src/rdf/agents-emitter.ts +0 -137
  661. package/src/rdf/bibliography-emitter.ts +0 -126
  662. package/src/rdf/bnode-id.ts +0 -55
  663. package/src/rdf/build-activity-emitter.ts +0 -129
  664. package/src/rdf/curie.ts +0 -46
  665. package/src/rdf/dataset-emitter.ts +0 -170
  666. package/src/rdf/deterministic-id.ts +0 -69
  667. package/src/rdf/document-writer.ts +0 -87
  668. package/src/rdf/gloss-concept.ts +0 -115
  669. package/src/rdf/gloss-designation.ts +0 -72
  670. package/src/rdf/gloss-detailed-definition.ts +0 -69
  671. package/src/rdf/gloss-localized-concept.ts +0 -79
  672. package/src/rdf/gloss-non-verbal-rep.ts +0 -202
  673. package/src/rdf/gloss-partitive-relation.ts +0 -89
  674. package/src/rdf/gloss-source.ts +0 -56
  675. package/src/rdf/group-emitter.ts +0 -133
  676. package/src/rdf/image-variant-emitter.ts +0 -80
  677. package/src/rdf/index.d.ts +0 -371
  678. package/src/rdf/predicates.d.ts +0 -527
  679. package/src/rdf/predicates.ts +0 -287
  680. package/src/rdf/provenance-emitter.ts +0 -87
  681. package/src/rdf/sections-builder.ts +0 -190
  682. package/src/rdf/shacl-entry.d.ts +0 -6
  683. package/src/rdf/version-emitter.ts +0 -97
  684. package/src/rdf/vocabulary-emitter.ts +0 -67
  685. package/src/rdf/write-turtle-sync.ts +0 -179
  686. package/src/reference-mention.ts +0 -114
  687. package/src/reference-resolver.ts +0 -361
  688. package/src/render-classification.ts +0 -85
  689. package/src/sort.ts +0 -22
  690. package/src/transforms/concept-to-gloss.transform.ts +0 -81
  691. package/src/transforms/index.d.ts +0 -26
  692. package/src/uuid.ts +0 -32
  693. package/src/v1-reader.ts +0 -66
  694. package/src/validators/asset-index.ts +0 -72
  695. package/src/validators/binary-has-part-redundancy-rule.ts +0 -67
  696. package/src/validators/concept-validator.ts +0 -93
  697. package/src/validators/delimiting-coherence-rule.ts +0 -105
  698. package/src/validators/external-concept-shape-rule.ts +0 -60
  699. package/src/validators/gcr-validator.ts +0 -76
  700. package/src/validators/hyperedge-coherence-rule.ts +0 -98
  701. package/src/validators/index.d.ts +0 -43
  702. package/src/validators/ref-keys.ts +0 -31
  703. package/src/validators/register-validator.ts +0 -18
  704. package/src/validators/relationship-type-rule.ts +0 -39
  705. package/src/validators/sourced-from-locality-rule.ts +0 -53
  706. package/src/validators/v3-rules.ts +0 -382
  707. package/src/validators/validation-error.ts +0 -19
  708. package/src/validators/validation-result.ts +0 -52
  709. package/src/validators/validation-rule.ts +0 -21
@@ -1,853 +0,0 @@
1
- import { GlossaristModel } from '../models/base.js';
2
- import { PartitiveHyperedge } from '../models/partitive-hyperedge.js';
3
- import { GenericHyperedge } from '../models/generic-hyperedge.js';
4
- import { Added, Removed, Changed } from './change.js';
5
- import { ListDiff, diffList, diffSet } from './list-diff.js';
6
- import { identityOf } from './identity.js';
7
- import { canonicalJson } from './canonical-json.js';
8
- import { computeSimilarity } from './similarity.js';
9
-
10
- // Metadata field lists for the diff layer.
11
- //
12
- // Concept and LocalizedConcept also expose static DIFF_FIELDS that
13
- // mirror these arrays. The duplication is intentional: concept-diff.js
14
- // cannot import Concept (Concept imports diffConcepts from this module,
15
- // creating a cycle). Instead, a spec (test/diff/field-sync.test.js)
16
- // asserts the two stay in sync. Adding a new scalar metadata field
17
- // requires editing both sites; forgetting one fails the test loudly.
18
- //
19
- // (Invariant N2 — TODO.hyperedges-v2/07.)
20
- const CONCEPT_METADATA_FIELDS = Object.freeze([
21
- 'status', 'term', 'uri', 'schemaVersion',
22
- ]);
23
-
24
- const LOCALIZATION_METADATA_FIELDS = Object.freeze([
25
- 'entryStatus', 'classification', 'reviewType', 'domain', 'release',
26
- 'lineageSourceSimilarity', 'script', 'system',
27
- 'reviewDate', 'reviewDecisionDate', 'reviewDecisionEvent',
28
- 'reviewStatus', 'reviewDecision', 'reviewDecisionNotes',
29
- ]);
30
-
31
- // Metadata field lists are sourced from the models per invariant N2.
32
- // (See file-top comment about why they're duplicated rather than imported.)
33
-
34
- export class DiffStats extends GlossaristModel {
35
- constructor(data: Record<string, unknown> = {}) {
36
- super();
37
- // @ts-expect-error TODO(Phase 2e): type this fully
38
- this._added = data.added ?? 0;
39
- // @ts-expect-error TODO(Phase 2e): type this fully
40
- this._removed = data.removed ?? 0;
41
- // @ts-expect-error TODO(Phase 2e): type this fully
42
- this._changed = data.changed ?? 0;
43
- }
44
-
45
- // @ts-expect-error TODO(Phase 2e): type this fully
46
- get added() { return this._added; }
47
- // @ts-expect-error TODO(Phase 2e): type this fully
48
- get removed() { return this._removed; }
49
- // @ts-expect-error TODO(Phase 2e): type this fully
50
- get changed() { return this._changed; }
51
- // @ts-expect-error TODO(Phase 2e): type this fully
52
- get total() { return this._added + this._removed + this._changed; }
53
-
54
- toJSON() {
55
- // @ts-expect-error TODO(Phase 2e): type this fully
56
- return { added: this._added, removed: this._removed, changed: this._changed };
57
- }
58
-
59
- static fromJSON(data) {
60
- return new DiffStats(data ?? {});
61
- }
62
- }
63
-
64
- export class MetadataDiff extends GlossaristModel {
65
- constructor(data: Record<string, unknown> = {}) {
66
- super();
67
- // @ts-expect-error TODO(Phase 2e): type this fully
68
- this._changes = {};
69
- const raw = data.changes ?? data ?? {};
70
- for (const [field, change] of Object.entries(raw)) {
71
- // @ts-expect-error TODO(Phase 2e): type this fully
72
- this._changes[field] = change instanceof Changed ? change : Changed.fromJSON(change);
73
- }
74
- }
75
-
76
- get changes() {
77
- // @ts-expect-error TODO(Phase 2e): type this fully
78
- return this._changes;
79
- }
80
-
81
- get hasChanges() {
82
- // @ts-expect-error TODO(Phase 2e): type this fully
83
- return Object.keys(this._changes).length > 0;
84
- }
85
-
86
- get count() {
87
- // @ts-expect-error TODO(Phase 2e): type this fully
88
- return Object.keys(this._changes).length;
89
- }
90
-
91
- *walk(section) {
92
- // @ts-expect-error TODO(Phase 2e): type this fully
93
- for (const [field, change] of Object.entries(this._changes)) {
94
- const path = section ? `${section}.${field}` : field;
95
- yield { path, change };
96
- }
97
- }
98
-
99
- toJSON() {
100
- const obj = {};
101
- // @ts-expect-error TODO(Phase 2e): type this fully
102
- for (const [field, change] of Object.entries(this._changes)) {
103
- // @ts-expect-error TODO(Phase 2e): type this fully
104
- obj[field] = change.toJSON();
105
- }
106
- return obj;
107
- }
108
-
109
- static fromJSON(data) {
110
- return new MetadataDiff({ changes: data ?? {} });
111
- }
112
- }
113
-
114
- export class ConceptLevelDiff extends GlossaristModel {
115
- constructor(data: Record<string, unknown> = {}) {
116
- super();
117
- // @ts-expect-error TODO(Phase 2e): type this fully
118
- this._sources = wrapListDiff(data.sources);
119
- // @ts-expect-error TODO(Phase 2e): type this fully
120
- this._dates = wrapListDiff(data.dates);
121
- // @ts-expect-error TODO(Phase 2e): type this fully
122
- this._relatedConcepts = wrapListDiff(data.relatedConcepts ?? data.related_concepts);
123
- // Unified hyperedge diff. Accepts:
124
- // - data.relations (new unified shape)
125
- // - data.partitiveRelations /
126
- // data.partitive_relations /
127
- // data.partitiveHyperedges /
128
- // data.partitive_hyperedges (legacy partitive-only shape)
129
- // Old diffs only had partitive, so the legacy fallback treats them
130
- // as a unified list with one type present.
131
- // @ts-expect-error TODO(Phase 2e): type this fully
132
- this._relations = wrapListDiff(
133
- data.relations
134
- ?? data.partitiveRelations
135
- ?? data.partitive_relations
136
- ?? data.partitiveHyperedges
137
- ?? data.partitive_hyperedges,
138
- );
139
- // @ts-expect-error TODO(Phase 2e): type this fully
140
- this._groups = wrapListDiff(data.groups);
141
- // @ts-expect-error TODO(Phase 2e): type this fully
142
- this._sections = wrapListDiff(data.sections);
143
- // @ts-expect-error TODO(Phase 2e): type this fully
144
- this._tags = wrapListDiff(data.tags);
145
- // @ts-expect-error TODO(Phase 2e): type this fully
146
- this._metadata = data.metadata instanceof MetadataDiff
147
- ? data.metadata
148
- : MetadataDiff.fromJSON(data.metadata ?? {});
149
- }
150
-
151
- // @ts-expect-error TODO(Phase 2e): type this fully
152
- get sources() { return this._sources; }
153
- // @ts-expect-error TODO(Phase 2e): type this fully
154
- get dates() { return this._dates; }
155
- // @ts-expect-error TODO(Phase 2e): type this fully
156
- get relatedConcepts() { return this._relatedConcepts; }
157
- /** Unified hyperedge diff (PartitiveHyperedge + GenericHyperedge). */
158
- // @ts-expect-error TODO(Phase 2e): type this fully
159
- get relations() { return this._relations; }
160
- /**
161
- * Filtered view of `relations` containing only PartitiveHyperedge
162
- * entries. Backward compat for callers that read .partitiveRelations
163
- * directly on a ConceptLevelDiff.
164
- */
165
- get partitiveRelations() {
166
- // @ts-expect-error TODO(Phase 2e): type this fully
167
- return filterListDiffByType(this._relations, PartitiveHyperedge);
168
- }
169
- /** @deprecated use .relations */ get partitiveHyperedges() { return this.partitiveRelations; }
170
- /**
171
- * Filtered view of `relations` containing only GenericHyperedge
172
- * entries. Backward compat for callers that read .genericRelations
173
- * directly on a ConceptLevelDiff.
174
- */
175
- get genericRelations() {
176
- // @ts-expect-error TODO(Phase 2e): type this fully
177
- return filterListDiffByType(this._relations, GenericHyperedge);
178
- }
179
- // @ts-expect-error TODO(Phase 2e): type this fully
180
- get groups() { return this._groups; }
181
- // @ts-expect-error TODO(Phase 2e): type this fully
182
- get sections() { return this._sections; }
183
- // @ts-expect-error TODO(Phase 2e): type this fully
184
- get tags() { return this._tags; }
185
- // @ts-expect-error TODO(Phase 2e): type this fully
186
- get metadata() { return this._metadata; }
187
-
188
- get hasChanges() {
189
- // @ts-expect-error TODO(Phase 2e): type this fully
190
- return this._sources.hasChanges
191
- // @ts-expect-error TODO(Phase 2e): type this fully
192
- || this._dates.hasChanges
193
- // @ts-expect-error TODO(Phase 2e): type this fully
194
- || this._relatedConcepts.hasChanges
195
- // @ts-expect-error TODO(Phase 2e): type this fully
196
- || this._relations.hasChanges
197
- // @ts-expect-error TODO(Phase 2e): type this fully
198
- || this._groups.hasChanges
199
- // @ts-expect-error TODO(Phase 2e): type this fully
200
- || this._sections.hasChanges
201
- // @ts-expect-error TODO(Phase 2e): type this fully
202
- || this._tags.hasChanges
203
- // @ts-expect-error TODO(Phase 2e): type this fully
204
- || this._metadata.hasChanges;
205
- }
206
-
207
- *walk() {
208
- // @ts-expect-error TODO(Phase 2e): type this fully
209
- yield* walkList('concept.sources', this._sources);
210
- // @ts-expect-error TODO(Phase 2e): type this fully
211
- yield* walkList('concept.dates', this._dates);
212
- // @ts-expect-error TODO(Phase 2e): type this fully
213
- yield* walkList('concept.relatedConcepts', this._relatedConcepts);
214
- // @ts-expect-error TODO(Phase 2e): type this fully
215
- yield* walkList('concept.relations', this._relations);
216
- // @ts-expect-error TODO(Phase 2e): type this fully
217
- yield* walkList('concept.groups', this._groups);
218
- // @ts-expect-error TODO(Phase 2e): type this fully
219
- yield* walkList('concept.sections', this._sections);
220
- // @ts-expect-error TODO(Phase 2e): type this fully
221
- yield* walkList('concept.tags', this._tags);
222
- // @ts-expect-error TODO(Phase 2e): type this fully
223
- yield* this._metadata.walk('concept.metadata');
224
- }
225
-
226
- toJSON() {
227
- return {
228
- // @ts-expect-error TODO(Phase 2e): type this fully
229
- sources: this._sources.toJSON(),
230
- // @ts-expect-error TODO(Phase 2e): type this fully
231
- dates: this._dates.toJSON(),
232
- // @ts-expect-error TODO(Phase 2e): type this fully
233
- related_concepts: this._relatedConcepts.toJSON(),
234
- // @ts-expect-error TODO(Phase 2e): type this fully
235
- relations: this._relations.toJSON(),
236
- // @ts-expect-error TODO(Phase 2e): type this fully
237
- groups: this._groups.toJSON(),
238
- // @ts-expect-error TODO(Phase 2e): type this fully
239
- sections: this._sections.toJSON(),
240
- // @ts-expect-error TODO(Phase 2e): type this fully
241
- tags: this._tags.toJSON(),
242
- // @ts-expect-error TODO(Phase 2e): type this fully
243
- metadata: this._metadata.toJSON(),
244
- };
245
- }
246
-
247
- static fromJSON(data) {
248
- return new ConceptLevelDiff(data);
249
- }
250
- }
251
-
252
- export class LocalizedConceptDiff extends GlossaristModel {
253
- constructor(data: Record<string, unknown> = {}) {
254
- super();
255
- // @ts-expect-error TODO(Phase 2e): type this fully
256
- this.languageCode = data.languageCode ?? data.language_code ?? null;
257
- // @ts-expect-error TODO(Phase 2e): type this fully
258
- this._designations = wrapListDiff(data.designations);
259
- // @ts-expect-error TODO(Phase 2e): type this fully
260
- this._definitions = wrapListDiff(data.definitions);
261
- // @ts-expect-error TODO(Phase 2e): type this fully
262
- this._notes = wrapListDiff(data.notes);
263
- // @ts-expect-error TODO(Phase 2e): type this fully
264
- this._examples = wrapListDiff(data.examples);
265
- // @ts-expect-error TODO(Phase 2e): type this fully
266
- this._sources = wrapListDiff(data.sources);
267
- // @ts-expect-error TODO(Phase 2e): type this fully
268
- this._dates = wrapListDiff(data.dates);
269
- // @ts-expect-error TODO(Phase 2e): type this fully
270
- this._related = wrapListDiff(data.related);
271
- // @ts-expect-error TODO(Phase 2e): type this fully
272
- this._metadata = data.metadata instanceof MetadataDiff
273
- ? data.metadata
274
- : MetadataDiff.fromJSON(data.metadata ?? {});
275
- // @ts-expect-error TODO(Phase 2e): type this fully
276
- this._totalItems = data.totalItems ?? data.total_items ?? 0;
277
- // @ts-expect-error TODO(Phase 2e): type this fully
278
- this._statsCache = undefined;
279
- // @ts-expect-error TODO(Phase 2e): type this fully
280
- this._similarityCache = undefined;
281
- }
282
-
283
- // @ts-expect-error TODO(Phase 2e): type this fully
284
- get designations() { return this._designations; }
285
- // @ts-expect-error TODO(Phase 2e): type this fully
286
- get definitions() { return this._definitions; }
287
- // @ts-expect-error TODO(Phase 2e): type this fully
288
- get notes() { return this._notes; }
289
- // @ts-expect-error TODO(Phase 2e): type this fully
290
- get examples() { return this._examples; }
291
- // @ts-expect-error TODO(Phase 2e): type this fully
292
- get sources() { return this._sources; }
293
- // @ts-expect-error TODO(Phase 2e): type this fully
294
- get dates() { return this._dates; }
295
- // @ts-expect-error TODO(Phase 2e): type this fully
296
- get related() { return this._related; }
297
- // @ts-expect-error TODO(Phase 2e): type this fully
298
- get metadata() { return this._metadata; }
299
- // @ts-expect-error TODO(Phase 2e): type this fully
300
- get totalItems() { return this._totalItems; }
301
-
302
- get hasChanges() {
303
- // @ts-expect-error TODO(Phase 2e): type this fully
304
- return this._designations.hasChanges
305
- // @ts-expect-error TODO(Phase 2e): type this fully
306
- || this._definitions.hasChanges
307
- // @ts-expect-error TODO(Phase 2e): type this fully
308
- || this._notes.hasChanges
309
- // @ts-expect-error TODO(Phase 2e): type this fully
310
- || this._examples.hasChanges
311
- // @ts-expect-error TODO(Phase 2e): type this fully
312
- || this._sources.hasChanges
313
- // @ts-expect-error TODO(Phase 2e): type this fully
314
- || this._dates.hasChanges
315
- // @ts-expect-error TODO(Phase 2e): type this fully
316
- || this._related.hasChanges
317
- // @ts-expect-error TODO(Phase 2e): type this fully
318
- || this._metadata.hasChanges;
319
- }
320
-
321
- get stats() {
322
- // @ts-expect-error TODO(Phase 2e): type this fully
323
- if (this._statsCache === undefined) {
324
- // @ts-expect-error TODO(Phase 2e): type this fully
325
- this._statsCache = collectStats(this.walk());
326
- }
327
- // @ts-expect-error TODO(Phase 2e): type this fully
328
- return this._statsCache;
329
- }
330
-
331
- get similarity() {
332
- // @ts-expect-error TODO(Phase 2e): type this fully
333
- if (this._similarityCache === undefined) {
334
- // @ts-expect-error TODO(Phase 2e): type this fully
335
- this._similarityCache = computeSimilarity(this.stats.total, this._totalItems);
336
- }
337
- // @ts-expect-error TODO(Phase 2e): type this fully
338
- return this._similarityCache;
339
- }
340
-
341
- *walk(prefix) {
342
- const base = prefix ?? '';
343
- // @ts-expect-error TODO(Phase 2e): type this fully
344
- yield* walkList(`${base}.designations`, this._designations);
345
- // @ts-expect-error TODO(Phase 2e): type this fully
346
- yield* walkList(`${base}.definitions`, this._definitions);
347
- // @ts-expect-error TODO(Phase 2e): type this fully
348
- yield* walkList(`${base}.notes`, this._notes);
349
- // @ts-expect-error TODO(Phase 2e): type this fully
350
- yield* walkList(`${base}.examples`, this._examples);
351
- // @ts-expect-error TODO(Phase 2e): type this fully
352
- yield* walkList(`${base}.sources`, this._sources);
353
- // @ts-expect-error TODO(Phase 2e): type this fully
354
- yield* walkList(`${base}.dates`, this._dates);
355
- // @ts-expect-error TODO(Phase 2e): type this fully
356
- yield* walkList(`${base}.related`, this._related);
357
- // @ts-expect-error TODO(Phase 2e): type this fully
358
- yield* this._metadata.walk(`${base}.metadata`);
359
- }
360
-
361
- toJSON() {
362
- const obj = {};
363
- // @ts-expect-error TODO(Phase 2e): type this fully
364
- if (this.languageCode != null) obj.language_code = this.languageCode;
365
- // @ts-expect-error TODO(Phase 2e): type this fully
366
- obj.designations = this._designations.toJSON();
367
- // @ts-expect-error TODO(Phase 2e): type this fully
368
- obj.definitions = this._definitions.toJSON();
369
- // @ts-expect-error TODO(Phase 2e): type this fully
370
- obj.notes = this._notes.toJSON();
371
- // @ts-expect-error TODO(Phase 2e): type this fully
372
- obj.examples = this._examples.toJSON();
373
- // @ts-expect-error TODO(Phase 2e): type this fully
374
- obj.sources = this._sources.toJSON();
375
- // @ts-expect-error TODO(Phase 2e): type this fully
376
- obj.dates = this._dates.toJSON();
377
- // @ts-expect-error TODO(Phase 2e): type this fully
378
- obj.related = this._related.toJSON();
379
- // @ts-expect-error TODO(Phase 2e): type this fully
380
- obj.metadata = this._metadata.toJSON();
381
- // @ts-expect-error TODO(Phase 2e): type this fully
382
- obj.total_items = this._totalItems;
383
- return obj;
384
- }
385
-
386
- static fromJSON(data) {
387
- return new LocalizedConceptDiff(data);
388
- }
389
- }
390
-
391
- export class ConceptDiff extends GlossaristModel {
392
- constructor(data: Record<string, unknown> = {}) {
393
- super();
394
- // @ts-expect-error TODO(Phase 2e): type this fully
395
- this._oldId = data.oldId ?? data.old_id ?? null;
396
- // @ts-expect-error TODO(Phase 2e): type this fully
397
- this._newId = data.newId ?? data.new_id ?? null;
398
- // @ts-expect-error TODO(Phase 2e): type this fully
399
- this._concept = data.concept instanceof ConceptLevelDiff
400
- ? data.concept
401
- : ConceptLevelDiff.fromJSON(data.concept ?? {});
402
- // @ts-expect-error TODO(Phase 2e): type this fully
403
- this._languages = wrapListDiff(data.languages);
404
- // @ts-expect-error TODO(Phase 2e): type this fully
405
- this._localizations = {};
406
- const raw = data.localizations ?? {};
407
- for (const [lang, lcDiff] of Object.entries(raw)) {
408
- // @ts-expect-error TODO(Phase 2e): type this fully
409
- this._localizations[lang] = lcDiff instanceof LocalizedConceptDiff
410
- ? lcDiff
411
- : LocalizedConceptDiff.fromJSON(lcDiff);
412
- }
413
- // @ts-expect-error TODO(Phase 2e): type this fully
414
- this._totalItems = data.totalItems ?? data.total_items ?? 0;
415
- // @ts-expect-error TODO(Phase 2e): type this fully
416
- this._statsCache = undefined;
417
- // @ts-expect-error TODO(Phase 2e): type this fully
418
- this._similarityCache = undefined;
419
- }
420
-
421
- // @ts-expect-error TODO(Phase 2e): type this fully
422
- get oldId() { return this._oldId; }
423
- // @ts-expect-error TODO(Phase 2e): type this fully
424
- get newId() { return this._newId; }
425
- // @ts-expect-error TODO(Phase 2e): type this fully
426
- get concept() { return this._concept; }
427
- // @ts-expect-error TODO(Phase 2e): type this fully
428
- get languages() { return this._languages; }
429
- // @ts-expect-error TODO(Phase 2e): type this fully
430
- get localizations() { return this._localizations; }
431
- // @ts-expect-error TODO(Phase 2e): type this fully
432
- get totalItems() { return this._totalItems; }
433
-
434
- get localizationLanguages() {
435
- // @ts-expect-error TODO(Phase 2e): type this fully
436
- return Object.keys(this._localizations);
437
- }
438
-
439
- get hasChanges() {
440
- // @ts-expect-error TODO(Phase 2e): type this fully
441
- return this._concept.hasChanges
442
- // @ts-expect-error TODO(Phase 2e): type this fully
443
- || this._languages.hasChanges
444
- // @ts-expect-error TODO(Phase 2e): type this fully
445
- || Object.values(this._localizations).some(lc => lc.hasChanges);
446
- }
447
-
448
- localization(lang) {
449
- // @ts-expect-error TODO(Phase 2e): type this fully
450
- return this._localizations[lang] ?? null;
451
- }
452
-
453
- get stats() {
454
- // @ts-expect-error TODO(Phase 2e): type this fully
455
- if (this._statsCache === undefined) {
456
- // @ts-expect-error TODO(Phase 2e): type this fully
457
- this._statsCache = collectStats(this.walk());
458
- }
459
- // @ts-expect-error TODO(Phase 2e): type this fully
460
- return this._statsCache;
461
- }
462
-
463
- get similarity() {
464
- // @ts-expect-error TODO(Phase 2e): type this fully
465
- if (this._similarityCache === undefined) {
466
- // @ts-expect-error TODO(Phase 2e): type this fully
467
- this._similarityCache = computeSimilarity(this.stats.total, this._totalItems);
468
- }
469
- // @ts-expect-error TODO(Phase 2e): type this fully
470
- return this._similarityCache;
471
- }
472
-
473
- *walk() {
474
- // @ts-expect-error TODO(Phase 2e): type this fully
475
- yield* this._concept.walk();
476
- // @ts-expect-error TODO(Phase 2e): type this fully
477
- yield* walkList('languages', this._languages);
478
- // @ts-expect-error TODO(Phase 2e): type this fully
479
- for (const [lang, lc] of Object.entries(this._localizations)) {
480
- // @ts-expect-error TODO(Phase 2e): type this fully
481
- for (const { path, change } of lc.walk(`localizations.${lang}`)) {
482
- yield { path, change, language: lang };
483
- }
484
- }
485
- }
486
-
487
- toJSON() {
488
- const obj = {};
489
- // @ts-expect-error TODO(Phase 2e): type this fully
490
- if (this._oldId != null) obj.old_id = this._oldId;
491
- // @ts-expect-error TODO(Phase 2e): type this fully
492
- if (this._newId != null) obj.new_id = this._newId;
493
- // @ts-expect-error TODO(Phase 2e): type this fully
494
- obj.concept = this._concept.toJSON();
495
- // @ts-expect-error TODO(Phase 2e): type this fully
496
- obj.languages = this._languages.toJSON();
497
- // @ts-expect-error TODO(Phase 2e): type this fully
498
- obj.localizations = {};
499
- // @ts-expect-error TODO(Phase 2e): type this fully
500
- for (const [lang, lc] of Object.entries(this._localizations)) {
501
- // @ts-expect-error TODO(Phase 2e): type this fully
502
- obj.localizations[lang] = lc.toJSON();
503
- }
504
- // @ts-expect-error TODO(Phase 2e): type this fully
505
- obj.total_items = this._totalItems;
506
- return obj;
507
- }
508
-
509
- static fromJSON(data) {
510
- return new ConceptDiff(data);
511
- }
512
- }
513
-
514
- export function diffConcepts(oldConcept, newConcept, language) {
515
- if (!oldConcept && !newConcept) {
516
- return new ConceptDiff({});
517
- }
518
-
519
- const oldId = oldConcept?.id ?? null;
520
- const newId = newConcept?.id ?? null;
521
- const oldLangs = oldConcept?.languages ?? [];
522
- const newLangs = newConcept?.languages ?? [];
523
-
524
- let langs;
525
- if (language === 'all') {
526
- langs = union(oldLangs, newLangs);
527
- } else if (language) {
528
- if (!oldLangs.includes(language) && !newLangs.includes(language)) {
529
- throw new Error(
530
- `diffConcepts: language '${language}' not present in either concept ` +
531
- `(available: ${union(oldLangs, newLangs).join(', ') || 'none'})`,
532
- );
533
- }
534
- langs = [language];
535
- } else {
536
- // No language specified: diff everything that exists. Avoids the
537
- // silent 'eng' fallback that masked changes in concepts without an
538
- // English localization.
539
- langs = union(oldLangs, newLangs);
540
- }
541
-
542
- const conceptDiff = diffConceptLevel(oldConcept ?? null, newConcept ?? null);
543
- const languageDiff = diffLanguageSets(oldLangs, newLangs);
544
- const localizations = {};
545
- for (const lang of langs) {
546
- const oldLoc = oldConcept?.localization(lang) ?? null;
547
- const newLoc = newConcept?.localization(lang) ?? null;
548
- const lcDiff = diffLocalizedConcepts(oldLoc, newLoc);
549
- localizations[lang] = lcDiff;
550
- }
551
-
552
- const totalItems = countConceptItems(oldConcept ?? null, newConcept ?? null, langs);
553
-
554
- return new ConceptDiff({
555
- oldId,
556
- newId,
557
- concept: conceptDiff,
558
- languages: languageDiff,
559
- localizations,
560
- totalItems,
561
- });
562
- }
563
-
564
- export function diffLocalizedConcepts(oldLoc, newLoc) {
565
- if (!oldLoc && !newLoc) {
566
- return new LocalizedConceptDiff({ languageCode: null });
567
- }
568
-
569
- const lang = newLoc?.languageCode ?? oldLoc?.languageCode ?? null;
570
-
571
- if (!oldLoc) {
572
- return fullyDiff(newLoc, lang, 'added');
573
- }
574
- if (!newLoc) {
575
- return fullyDiff(oldLoc, lang, 'removed');
576
- }
577
-
578
- return new LocalizedConceptDiff({
579
- languageCode: lang,
580
- designations: diffDesignations(oldLoc.terms ?? [], newLoc.terms ?? []),
581
- definitions: diffTextList(oldLoc.definitions ?? [], newLoc.definitions ?? []),
582
- notes: diffTextList(oldLoc.notes ?? [], newLoc.notes ?? []),
583
- examples: diffTextList(oldLoc.examples ?? [], newLoc.examples ?? []),
584
- sources: diffSources(oldLoc.sources ?? [], newLoc.sources ?? []),
585
- dates: diffDates(oldLoc.dates ?? [], newLoc.dates ?? []),
586
- related: diffRelated(oldLoc.related ?? [], newLoc.related ?? []),
587
- metadata: diffMetadata(oldLoc, newLoc, LOCALIZATION_METADATA_FIELDS),
588
- totalItems: countLocalizedItems(oldLoc, newLoc),
589
- });
590
- }
591
-
592
- function diffConceptLevel(oldConcept, newConcept) {
593
- if (!oldConcept && !newConcept) {
594
- return new ConceptLevelDiff({});
595
- }
596
-
597
- const Direction = !oldConcept ? 'added' : !newConcept ? 'removed' : null;
598
-
599
- if (Direction) {
600
- const c = (oldConcept ?? newConcept);
601
- return new ConceptLevelDiff({
602
- sources: fullListDiff(c.sources ?? [], Direction),
603
- dates: fullListDiff(c.dates ?? [], Direction),
604
- relatedConcepts: fullListDiff(c.relatedConcepts ?? [], Direction),
605
- relations: fullListDiff(c.relations ?? [], Direction),
606
- groups: fullListDiff(c.groups ?? [], Direction),
607
- sections: fullListDiff(c.sections ?? [], Direction),
608
- tags: fullListDiff(c.tags ?? [], Direction),
609
- metadata: fullMetadataDiff(c, CONCEPT_METADATA_FIELDS, Direction),
610
- });
611
- }
612
-
613
- return new ConceptLevelDiff({
614
- sources: diffSources(oldConcept.sources ?? [], newConcept.sources ?? []),
615
- dates: diffDates(oldConcept.dates ?? [], newConcept.dates ?? []),
616
- relatedConcepts: diffRelatedConcepts(oldConcept.relatedConcepts ?? [], newConcept.relatedConcepts ?? []),
617
- relations: diffHyperedges(
618
- oldConcept.relations ?? [],
619
- newConcept.relations ?? [],
620
- ),
621
- groups: diffStringSet(oldConcept.groups ?? [], newConcept.groups ?? []),
622
- sections: diffStringSet(oldConcept.sections ?? [], newConcept.sections ?? []),
623
- tags: diffStringSet(oldConcept.tags ?? [], newConcept.tags ?? []),
624
- metadata: diffMetadata(oldConcept, newConcept, CONCEPT_METADATA_FIELDS),
625
- });
626
- }
627
-
628
- function diffLanguageSets(oldLangs, newLangs) {
629
- const oldSet = new Set(oldLangs);
630
- const newSet = new Set(newLangs);
631
- const added = newLangs
632
- .filter(l => !oldSet.has(l))
633
- .sort()
634
- .map(l => new Added({ value: l }));
635
- const removed = oldLangs
636
- .filter(l => !newSet.has(l))
637
- .sort()
638
- .map(l => new Removed({ value: l }));
639
- return new ListDiff({ added, removed, changed: [] });
640
- }
641
-
642
- function fullyDiff(loc, lang, direction) {
643
- const ChangeClass = direction === 'added' ? Added : Removed;
644
- const key = direction;
645
- const lc = new LocalizedConceptDiff({
646
- languageCode: lang,
647
- designations: new ListDiff({ [key]: (loc.terms ?? []).map(v => new ChangeClass({ value: v })) }),
648
- definitions: new ListDiff({ [key]: (loc.definitions ?? []).map(v => new ChangeClass({ value: v })) }),
649
- notes: new ListDiff({ [key]: (loc.notes ?? []).map(v => new ChangeClass({ value: v })) }),
650
- examples: new ListDiff({ [key]: (loc.examples ?? []).map(v => new ChangeClass({ value: v })) }),
651
- sources: new ListDiff({ [key]: (loc.sources ?? []).map(v => new ChangeClass({ value: v })) }),
652
- dates: new ListDiff({ [key]: (loc.dates ?? []).map(v => new ChangeClass({ value: v })) }),
653
- related: new ListDiff({ [key]: (loc.related ?? []).map(v => new ChangeClass({ value: v })) }),
654
- metadata: fullMetadataDiff(loc, LOCALIZATION_METADATA_FIELDS, direction),
655
- totalItems: countLocalizedItems(direction === 'added' ? null : loc, direction === 'added' ? loc : null),
656
- });
657
- return lc;
658
- }
659
-
660
- function fullListDiff(items, direction) {
661
- const ChangeClass = direction === 'added' ? Added : Removed;
662
- return new ListDiff({ [direction]: items.map(v => new ChangeClass({ value: v })) });
663
- }
664
-
665
- function fullMetadataDiff(obj, fields, direction) {
666
- const changes = {};
667
- for (const field of fields) {
668
- const val = obj[field];
669
- if (val != null) {
670
- changes[field] = new Changed({
671
- oldValue: direction === 'added' ? null : val,
672
- newValue: direction === 'added' ? val : null,
673
- });
674
- }
675
- }
676
- return new MetadataDiff({ changes });
677
- }
678
-
679
- function diffDesignations(oldTerms, newTerms) {
680
- return diffSet(oldTerms, newTerms, {
681
- identityKey: identityOf,
682
- // @ts-expect-error TODO(Phase 2e): type this fully
683
- textKey: d => d?.designation ?? '',
684
- });
685
- }
686
-
687
- function diffTextList(oldItems, newItems) {
688
- return diffList(oldItems, newItems, {
689
- // @ts-expect-error TODO(Phase 2e): type this fully
690
- textKey: d => d?.content ?? '',
691
- });
692
- }
693
-
694
- function diffSources(oldSources, newSources) {
695
- return diffSet(oldSources, newSources, {
696
- identityKey: identityOf,
697
- });
698
- }
699
-
700
- function diffDates(oldDates, newDates) {
701
- return diffSet(oldDates, newDates, {
702
- identityKey: identityOf,
703
- // @ts-expect-error TODO(Phase 2e): type this fully
704
- textKey: d => d?.date ?? '',
705
- });
706
- }
707
-
708
- function diffRelated(oldRelated, newRelated) {
709
- return diffSet(oldRelated, newRelated, {
710
- identityKey: identityOf,
711
- });
712
- }
713
-
714
- function diffRelatedConcepts(oldRC, newRC) {
715
- return diffSet(oldRC, newRC, {
716
- identityKey: identityOf,
717
- });
718
- }
719
-
720
- // Diff two unified hyperedge arrays. Identity is polymorphic —
721
- // dispatches via value.constructor.identityOf so PartitiveHyperedge
722
- // and GenericHyperedge (and any future hyperedge subclass) coexist in
723
- // the same list. Cross-type entries with matching identity are still
724
- // treated as different (because their constructor differs and they
725
- // live under different wire keys).
726
- function diffHyperedges(oldR, newR) {
727
- return diffSet(oldR, newR, {
728
- identityKey: relationIdentityOf,
729
- textKey: relationText,
730
- });
731
- }
732
-
733
- function relationIdentityOf(value) {
734
- if (value == null) return '';
735
- const Cls = value.constructor;
736
- if (typeof Cls?.identityOf === 'function') {
737
- const typed = Cls.identityOf(value);
738
- return `${Cls.name}::${typed}`;
739
- }
740
- return identityOf(value);
741
- }
742
-
743
- function filterListDiffByType(listDiff, Cls) {
744
- if (!listDiff) return listDiff;
745
- return new ListDiff({
746
- added: listDiff.added.filter(e => e.value instanceof Cls),
747
- removed: listDiff.removed.filter(e => e.value instanceof Cls),
748
- changed: listDiff.changed.filter(e =>
749
- (e.oldValue == null || e.oldValue instanceof Cls) &&
750
- (e.newValue == null || e.newValue instanceof Cls)),
751
- });
752
- }
753
-
754
- function relationText(r) {
755
- if (!r) return '';
756
- return canonicalJson(typeof r.toJSON === 'function' ? r.toJSON() : r);
757
- }
758
-
759
- function diffStringSet(oldStrings, newStrings) {
760
- return diffSet(oldStrings, newStrings, {
761
- identityKey: identityOf,
762
- });
763
- }
764
-
765
- function diffMetadata(oldObj, newObj, fields) {
766
- const changes = {};
767
- for (const field of fields) {
768
- const oldVal = oldObj[field];
769
- const newVal = newObj[field];
770
- if (oldVal !== newVal) {
771
- changes[field] = new Changed({ oldValue: oldVal, newValue: newVal });
772
- }
773
- }
774
- return new MetadataDiff({ changes });
775
- }
776
-
777
- function wrapListDiff(data) {
778
- if (data instanceof ListDiff) return data;
779
- return ListDiff.fromJSON(data ?? {});
780
- }
781
-
782
- function collectStats(walker) {
783
- let added = 0;
784
- let removed = 0;
785
- let changed = 0;
786
- for (const { change } of walker) {
787
- if (change.type === 'added') added++;
788
- else if (change.type === 'removed') removed++;
789
- else if (change.type === 'changed') changed++;
790
- }
791
- return new DiffStats({ added, removed, changed });
792
- }
793
-
794
- function maxOf(a, b) {
795
- return Math.max(a ?? 0, b ?? 0);
796
- }
797
-
798
- function countConceptItems(oldConcept, newConcept, langs) {
799
- let count = 0;
800
-
801
- count += maxOf(oldConcept?.sources?.length, newConcept?.sources?.length);
802
- count += maxOf(oldConcept?.dates?.length, newConcept?.dates?.length);
803
- count += maxOf(oldConcept?.relatedConcepts?.length, newConcept?.relatedConcepts?.length);
804
- count += maxOf(
805
- oldConcept?.relations?.length,
806
- newConcept?.relations?.length,
807
- );
808
- count += maxOf(oldConcept?.groups?.length, newConcept?.groups?.length);
809
- count += maxOf(oldConcept?.sections?.length, newConcept?.sections?.length);
810
- count += maxOf(oldConcept?.tags?.length, newConcept?.tags?.length);
811
- count += CONCEPT_METADATA_FIELDS.length;
812
-
813
- const oldLangs = oldConcept?.languages ?? [];
814
- const newLangs = newConcept?.languages ?? [];
815
- count += maxOf(oldLangs.length, newLangs.length);
816
-
817
- for (const lang of langs) {
818
- const oldLoc = oldConcept?.localization(lang) ?? null;
819
- const newLoc = newConcept?.localization(lang) ?? null;
820
- count += countLocalizedItems(oldLoc, newLoc);
821
- }
822
-
823
- return count;
824
- }
825
-
826
- function countLocalizedItems(oldLoc, newLoc) {
827
- let count = 0;
828
- count += maxOf(oldLoc?.terms?.length, newLoc?.terms?.length);
829
- count += maxOf(oldLoc?.definitions?.length, newLoc?.definitions?.length);
830
- count += maxOf(oldLoc?.notes?.length, newLoc?.notes?.length);
831
- count += maxOf(oldLoc?.examples?.length, newLoc?.examples?.length);
832
- count += maxOf(oldLoc?.sources?.length, newLoc?.sources?.length);
833
- count += maxOf(oldLoc?.dates?.length, newLoc?.dates?.length);
834
- count += maxOf(oldLoc?.related?.length, newLoc?.related?.length);
835
- count += LOCALIZATION_METADATA_FIELDS.length;
836
- return count;
837
- }
838
-
839
- function* walkList(section, listDiff) {
840
- for (let i = 0; i < listDiff.added.length; i++) {
841
- yield { path: `${section}.added[${i}]`, change: listDiff.added[i] };
842
- }
843
- for (let i = 0; i < listDiff.removed.length; i++) {
844
- yield { path: `${section}.removed[${i}]`, change: listDiff.removed[i] };
845
- }
846
- for (let i = 0; i < listDiff.changed.length; i++) {
847
- yield { path: `${section}.changed[${i}]`, change: listDiff.changed[i] };
848
- }
849
- }
850
-
851
- function union(a, b) {
852
- return [...new Set([...a, ...b])].sort();
853
- }