@deepseek-harness-tui/dsh-tui 0.9.0 → 0.9.2

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 (307) hide show
  1. package/README.md +69 -256
  2. package/bin/dsh-tui.js +172 -5
  3. package/cordis.patch.yml +16 -4
  4. package/dsh-ecosystem-spec/protocols/profile-definitions.d.ts +13 -13
  5. package/dsh-ecosystem-spec/protocols/profile-definitions.js +59 -59
  6. package/dsh-ecosystem-spec/protocols/tui-channel-http.d.ts +15 -15
  7. package/dsh-ecosystem-spec/protocols/tui-channel-http.js +32 -32
  8. package/dsh-ecosystem-spec/protocols/tui-channel.d.ts +59 -59
  9. package/dsh-ecosystem-spec/protocols/tui-channel.js +166 -166
  10. package/dsh-ecosystem-spec/protocols/tui-contributions.d.ts +42 -42
  11. package/dsh-ecosystem-spec/protocols/tui-contributions.js +143 -143
  12. package/dsh-ecosystem-spec/registry/README.md +14 -14
  13. package/dsh-ecosystem-spec/registry/host-descriptor.tui.example.json +56 -56
  14. package/dsh-ecosystem-spec/registry/permissions-0.1.json +13 -13
  15. package/dsh-ecosystem-spec/registry/registry-0.15.json +149 -149
  16. package/lib/types/cc/hyperlink.d.ts +7 -1
  17. package/lib/types/cc/hyperlink.d.ts.map +1 -1
  18. package/lib/types/cc/hyperlink.js +3 -2
  19. package/lib/types/cc/markdown.d.ts.map +1 -1
  20. package/lib/types/cc/markdown.js +33 -3
  21. package/lib/types/cc/sessionColors.d.ts +27 -0
  22. package/lib/types/cc/sessionColors.d.ts.map +1 -0
  23. package/lib/types/cc/sessionColors.js +39 -0
  24. package/lib/types/commands.d.ts.map +1 -1
  25. package/lib/types/commands.js +6 -0
  26. package/lib/types/components/AutoRecapRow.d.ts +23 -0
  27. package/lib/types/components/AutoRecapRow.d.ts.map +1 -0
  28. package/lib/types/components/AutoRecapRow.js +23 -0
  29. package/lib/types/components/ColorPicker.d.ts +17 -0
  30. package/lib/types/components/ColorPicker.d.ts.map +1 -0
  31. package/lib/types/components/ColorPicker.js +20 -0
  32. package/lib/types/components/CommandSuggestions.d.ts +3 -1
  33. package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
  34. package/lib/types/components/ContextBarView.d.ts +33 -0
  35. package/lib/types/components/ContextBarView.d.ts.map +1 -0
  36. package/lib/types/components/ContextBarView.js +46 -0
  37. package/lib/types/components/EffortInputBorder.d.ts +12 -1
  38. package/lib/types/components/EffortInputBorder.d.ts.map +1 -1
  39. package/lib/types/components/EffortInputBorder.js +22 -5
  40. package/lib/types/components/FileActionsPanel.d.ts +22 -0
  41. package/lib/types/components/FileActionsPanel.d.ts.map +1 -0
  42. package/lib/types/components/FileActionsPanel.js +28 -0
  43. package/lib/types/components/FileSuggestions.d.ts +3 -1
  44. package/lib/types/components/FileSuggestions.d.ts.map +1 -1
  45. package/lib/types/components/MessageList.d.ts +3 -1
  46. package/lib/types/components/MessageList.d.ts.map +1 -1
  47. package/lib/types/components/MessageList.js +13 -6
  48. package/lib/types/components/ModelPicker.d.ts +26 -4
  49. package/lib/types/components/ModelPicker.d.ts.map +1 -1
  50. package/lib/types/components/ModelPicker.js +26 -6
  51. package/lib/types/components/PromptInput.d.ts.map +1 -1
  52. package/lib/types/components/PromptInput.js +365 -57
  53. package/lib/types/components/RecapPanel.d.ts +25 -0
  54. package/lib/types/components/RecapPanel.d.ts.map +1 -0
  55. package/lib/types/components/RecapPanel.js +55 -0
  56. package/lib/types/components/ScrollbarGutter.d.ts.map +1 -1
  57. package/lib/types/components/ScrollbarGutter.js +55 -4
  58. package/lib/types/components/SubagentCard.d.ts.map +1 -1
  59. package/lib/types/components/SubagentCard.js +6 -4
  60. package/lib/types/components/SuggestionCard.d.ts +4 -2
  61. package/lib/types/components/SuggestionCard.d.ts.map +1 -1
  62. package/lib/types/components/TimelineRail.d.ts.map +1 -1
  63. package/lib/types/components/TimelineRail.js +9 -2
  64. package/lib/types/components/design-system/ThemeProvider.d.ts +7 -0
  65. package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
  66. package/lib/types/components/design-system/ThemeProvider.js +2 -1
  67. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +8 -1
  68. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  69. package/lib/types/components/messages/AssistantToolUseMessage.js +36 -8
  70. package/lib/types/components/questions/AskUserQuestionPanel.d.ts +7 -3
  71. package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
  72. package/lib/types/components/questions/AskUserQuestionPanel.js +41 -9
  73. package/lib/types/dsh-adapter/channel.d.ts +101 -2
  74. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  75. package/lib/types/dsh-adapter/channel.js +969 -93
  76. package/lib/types/dsh-adapter/compat/index.d.ts +8 -6
  77. package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -1
  78. package/lib/types/dsh-adapter/compat/index.js +8 -6
  79. package/lib/types/dsh-adapter/compat/sessionLog.d.ts +150 -0
  80. package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
  81. package/lib/types/dsh-adapter/compat/sessionLog.js +518 -41
  82. package/lib/types/dsh-adapter/contract.d.ts +1 -1
  83. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  84. package/lib/types/dsh-adapter/contract.js +1 -0
  85. package/lib/types/dsh-adapter/extension-events.d.ts +1 -1
  86. package/lib/types/dsh-adapter/extension-events.d.ts.map +1 -1
  87. package/lib/types/dsh-adapter/index.d.ts +10 -0
  88. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  89. package/lib/types/dsh-adapter/index.js +5 -0
  90. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  91. package/lib/types/dsh-adapter/plugin.js +317 -8
  92. package/lib/types/dsh-adapter/presets.d.ts +18 -0
  93. package/lib/types/dsh-adapter/presets.d.ts.map +1 -1
  94. package/lib/types/dsh-adapter/presets.js +31 -0
  95. package/lib/types/dsh-adapter/providerWizard.d.ts +29 -1
  96. package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
  97. package/lib/types/dsh-adapter/providerWizard.js +89 -5
  98. package/lib/types/dsh-adapter/questions.d.ts +19 -2
  99. package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
  100. package/lib/types/dsh-adapter/questions.js +53 -10
  101. package/lib/types/dsh-adapter/recap.d.ts +49 -0
  102. package/lib/types/dsh-adapter/recap.d.ts.map +1 -0
  103. package/lib/types/dsh-adapter/recap.js +121 -0
  104. package/lib/types/dsh-adapter/sessionTree.d.ts +314 -0
  105. package/lib/types/dsh-adapter/sessionTree.d.ts.map +1 -0
  106. package/lib/types/dsh-adapter/sessionTree.js +954 -0
  107. package/lib/types/dsh-adapter/shortcuts.d.ts +15 -44
  108. package/lib/types/dsh-adapter/shortcuts.d.ts.map +1 -1
  109. package/lib/types/dsh-adapter/shortcuts.js +28 -165
  110. package/lib/types/dsh-adapter/types.d.ts +1 -1
  111. package/lib/types/dsh-adapter/types.d.ts.map +1 -1
  112. package/lib/types/herdr.js +1 -1
  113. package/lib/types/i18n.d.ts +604 -176
  114. package/lib/types/i18n.d.ts.map +1 -1
  115. package/lib/types/i18n.js +206 -72
  116. package/lib/types/ink/log-update.d.ts.map +1 -1
  117. package/lib/types/ink/log-update.js +21 -0
  118. package/lib/types/migrationPrefs.d.ts +60 -0
  119. package/lib/types/migrationPrefs.d.ts.map +1 -0
  120. package/lib/types/migrationPrefs.js +97 -0
  121. package/lib/types/modelGroups.d.ts +72 -0
  122. package/lib/types/modelGroups.d.ts.map +1 -0
  123. package/lib/types/modelGroups.js +97 -0
  124. package/lib/types/modelRecents.d.ts +39 -0
  125. package/lib/types/modelRecents.d.ts.map +1 -0
  126. package/lib/types/modelRecents.js +97 -0
  127. package/lib/types/native-ts/yoga-layout/index.d.ts +11 -0
  128. package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
  129. package/lib/types/native-ts/yoga-layout/index.js +31 -1
  130. package/lib/types/oauth.d.ts +15 -0
  131. package/lib/types/oauth.d.ts.map +1 -0
  132. package/lib/types/oauth.js +14 -0
  133. package/lib/types/plugin-spec/registry.d.ts +1 -1
  134. package/lib/types/plugin-spec/registry.js +1 -1
  135. package/lib/types/reload.d.ts +109 -0
  136. package/lib/types/reload.d.ts.map +1 -0
  137. package/lib/types/reload.js +118 -0
  138. package/lib/types/screens/Chat.d.ts +3 -1
  139. package/lib/types/screens/Chat.d.ts.map +1 -1
  140. package/lib/types/screens/Chat.js +588 -64
  141. package/lib/types/screens/SessionTree.d.ts +27 -0
  142. package/lib/types/screens/SessionTree.d.ts.map +1 -0
  143. package/lib/types/screens/SessionTree.js +555 -0
  144. package/lib/types/screens/StatusLine.d.ts +0 -9
  145. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  146. package/lib/types/screens/StatusLine.js +215 -52
  147. package/lib/types/screens/StatusMetrics.d.ts +35 -3
  148. package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
  149. package/lib/types/screens/StatusMetrics.js +63 -8
  150. package/lib/types/screens/chatOverlay.d.ts +17 -1
  151. package/lib/types/screens/chatOverlay.d.ts.map +1 -1
  152. package/lib/types/screens/chatOverlay.js +3 -1
  153. package/lib/types/tips.d.ts.map +1 -1
  154. package/lib/types/tips.js +22 -4
  155. package/lib/types/update.d.ts +159 -0
  156. package/lib/types/update.d.ts.map +1 -1
  157. package/lib/types/update.js +496 -30
  158. package/lib/types/utils/debug.d.ts +1 -1
  159. package/lib/types/utils/debug.js +3 -3
  160. package/lib/types/utils/fileTarget.d.ts +46 -0
  161. package/lib/types/utils/fileTarget.d.ts.map +1 -0
  162. package/lib/types/utils/fileTarget.js +178 -0
  163. package/lib/types/utils/keymap.d.ts +134 -0
  164. package/lib/types/utils/keymap.d.ts.map +1 -0
  165. package/lib/types/utils/keymap.js +311 -0
  166. package/lib/types/utils/mentions.d.ts +25 -2
  167. package/lib/types/utils/mentions.d.ts.map +1 -1
  168. package/lib/types/utils/mentions.js +69 -10
  169. package/lib/types/utils/openExternal.d.ts +50 -0
  170. package/lib/types/utils/openExternal.d.ts.map +1 -0
  171. package/lib/types/utils/openExternal.js +170 -0
  172. package/node_modules/@deepseek-harness-tui/dsh-auth/LICENSE +21 -0
  173. package/node_modules/@deepseek-harness-tui/dsh-auth/README.md +140 -0
  174. package/node_modules/@deepseek-harness-tui/dsh-auth/cordis.patch.yml +11 -0
  175. package/node_modules/@deepseek-harness-tui/dsh-auth/dsh-plugin.json +44 -0
  176. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/command.d.ts +14 -0
  177. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/command.js +67 -0
  178. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/credentials.d.ts +64 -0
  179. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/credentials.js +170 -0
  180. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/index.d.ts +79 -0
  181. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/index.js +196 -0
  182. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.d.ts +68 -0
  183. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/interaction.js +193 -0
  184. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/opener.d.ts +32 -0
  185. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/opener.js +101 -0
  186. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.d.ts +31 -0
  187. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/profiles.js +68 -0
  188. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.d.ts +69 -0
  189. package/node_modules/@deepseek-harness-tui/dsh-auth/lib/service.js +129 -0
  190. package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +70 -0
  191. package/node_modules/@dsh-std/command/CHANGELOG.md +8 -8
  192. package/node_modules/@dsh-std/command/LICENSE +21 -21
  193. package/node_modules/@dsh-std/command/README.md +26 -26
  194. package/node_modules/@dsh-std/command/README.zh.md +28 -28
  195. package/node_modules/@dsh-std/command/lib/index.js.map +1 -1
  196. package/node_modules/@dsh-std/command/package.json +22 -22
  197. package/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  198. package/node_modules/@dsh-std/connection/LICENSE +21 -21
  199. package/node_modules/@dsh-std/connection/README.md +42 -42
  200. package/node_modules/@dsh-std/connection/README.zh.md +42 -42
  201. package/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  202. package/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  203. package/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  204. package/node_modules/@dsh-std/connection/package.json +20 -20
  205. package/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  206. package/node_modules/@dsh-std/core/LICENSE +21 -21
  207. package/node_modules/@dsh-std/core/README.md +13 -13
  208. package/node_modules/@dsh-std/core/README.zh.md +13 -13
  209. package/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  210. package/node_modules/@dsh-std/core/package.json +21 -21
  211. package/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
  212. package/node_modules/@dsh-std/manifest/LICENSE +21 -21
  213. package/node_modules/@dsh-std/manifest/README.md +5 -5
  214. package/node_modules/@dsh-std/manifest/README.zh.md +5 -5
  215. package/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
  216. package/node_modules/@dsh-std/manifest/package.json +20 -20
  217. package/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
  218. package/node_modules/@dsh-std/messages/CHANGELOG.md +8 -8
  219. package/node_modules/@dsh-std/messages/LICENSE +21 -21
  220. package/node_modules/@dsh-std/messages/README.md +5 -5
  221. package/node_modules/@dsh-std/messages/README.zh.md +7 -7
  222. package/node_modules/@dsh-std/messages/lib/index.js.map +1 -1
  223. package/node_modules/@dsh-std/messages/package.json +20 -20
  224. package/node_modules/@dsh-std/messages/schema/message-observer-envelope-0.15.schema.json +54 -54
  225. package/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
  226. package/node_modules/@dsh-std/presentation/LICENSE +21 -21
  227. package/node_modules/@dsh-std/presentation/README.md +27 -27
  228. package/node_modules/@dsh-std/presentation/README.zh.md +29 -29
  229. package/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
  230. package/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  231. package/node_modules/@dsh-std/presentation/package.json +25 -25
  232. package/node_modules/@dsh-std/storage/CHANGELOG.md +8 -8
  233. package/node_modules/@dsh-std/storage/LICENSE +21 -21
  234. package/node_modules/@dsh-std/storage/README.md +5 -5
  235. package/node_modules/@dsh-std/storage/README.zh.md +7 -7
  236. package/node_modules/@dsh-std/storage/lib/index.js.map +1 -1
  237. package/node_modules/@dsh-std/storage/package.json +20 -20
  238. package/node_modules/@dsh-std/storage/schema/local-storage-0.15.schema.json +56 -56
  239. package/package.json +17 -5
  240. package/presets/liangshen/.dsh-tui-managed.json +1 -1
  241. package/presets/liangshen/instruction-hint.mjs +8 -0
  242. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  243. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/LICENSE +21 -21
  244. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.md +42 -42
  245. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.zh.md +42 -42
  246. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  247. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  248. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  249. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/package.json +20 -20
  250. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  251. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/LICENSE +21 -21
  252. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.md +13 -13
  253. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.zh.md +13 -13
  254. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  255. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/package.json +21 -21
  256. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
  257. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/LICENSE +21 -21
  258. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.md +5 -5
  259. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.zh.md +5 -5
  260. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
  261. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/package.json +20 -20
  262. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
  263. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
  264. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/LICENSE +21 -21
  265. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.md +27 -27
  266. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.zh.md +29 -29
  267. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
  268. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  269. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/package.json +25 -25
  270. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  271. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/LICENSE +21 -21
  272. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.md +13 -13
  273. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.zh.md +13 -13
  274. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  275. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/package.json +21 -21
  276. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  277. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/LICENSE +21 -21
  278. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.md +13 -13
  279. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.zh.md +13 -13
  280. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  281. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/package.json +21 -21
  282. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  283. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/LICENSE +21 -21
  284. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.md +13 -13
  285. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.zh.md +13 -13
  286. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  287. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/package.json +21 -21
  288. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  289. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/LICENSE +21 -21
  290. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.md +42 -42
  291. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.zh.md +42 -42
  292. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  293. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  294. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  295. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/package.json +20 -20
  296. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  297. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/LICENSE +21 -21
  298. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.md +13 -13
  299. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.zh.md +13 -13
  300. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  301. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/package.json +21 -21
  302. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  303. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/LICENSE +21 -21
  304. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.md +13 -13
  305. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.zh.md +13 -13
  306. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  307. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/package.json +21 -21
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["nonEmpty"],"sources":["../src/protocol.ts","../src/negotiation.ts","../src/version.ts"],"sourcesContent":["/** Domain-neutral protocol identities and live participant declarations. */\n\nexport interface ApiReference {\n readonly apiVersion: string\n readonly kind: string\n}\n\nexport interface ParticipantIdentity {\n /** Unique within the negotiation scope that carries this declaration. */\n readonly id: string\n}\n\nexport interface ProtocolRequirement<Spec = unknown> extends ApiReference {\n readonly optional?: boolean\n readonly spec?: Spec\n}\n\nexport interface ProtocolSupport<Spec = unknown> extends ApiReference {\n readonly spec?: Spec\n}\n\nexport interface ProtocolDeclaration {\n readonly participant: ParticipantIdentity\n readonly requires?: readonly ProtocolRequirement[]\n readonly supports?: readonly ProtocolSupport[]\n}\n\nexport interface ParsedApiVersion {\n readonly group: string\n readonly major: number\n readonly stability: 'alpha' | 'beta' | 'stable'\n readonly revision: number\n}\n\nexport function protocolKey(reference: ApiReference): string {\n return `${reference.apiVersion}\\0${reference.kind}`\n}\n\n/** A grouping key only. It does not claim that versions in the family interoperate. */\nexport function protocolFamilyKey(reference: ApiReference): string {\n const version = parseApiVersion(reference.apiVersion)\n return `${version.group}/v${version.major}\\0${reference.kind}`\n}\n\nexport function sameProtocol(left: ApiReference, right: ApiReference): boolean {\n return left.apiVersion === right.apiVersion && left.kind === right.kind\n}\n\nexport function parseApiVersion(value: string): ParsedApiVersion {\n const match = /^([a-z][a-z0-9.-]*)\\/v([1-9][0-9]*)(?:(alpha|beta)([1-9][0-9]*))?$/u.exec(value)\n if (match === null) throw new TypeError(`invalid apiVersion ${JSON.stringify(value)}`)\n return Object.freeze({\n group: match[1] as string,\n major: Number(match[2]),\n stability: (match[3] ?? 'stable') as ParsedApiVersion['stability'],\n revision: match[4] === undefined ? 0 : Number(match[4]),\n })\n}\n\nexport function validateApiReference(value: unknown, label = 'protocol reference'): asserts value is ApiReference {\n if (!record(value)) throw new TypeError(`${label} must be an object`)\n if (typeof value.apiVersion !== 'string') throw new TypeError(`${label}.apiVersion must be a string`)\n parseApiVersion(value.apiVersion)\n if (typeof value.kind !== 'string' || !/^[A-Z][A-Za-z0-9]*$/u.test(value.kind)) {\n throw new TypeError(`${label}.kind is invalid`)\n }\n}\n\nexport function validateProtocolDeclaration(value: unknown): asserts value is ProtocolDeclaration {\n if (!record(value)) throw new TypeError('protocol declaration must be an object')\n exact(value, ['participant', 'requires', 'supports'], 'protocol declaration')\n if (!record(value.participant)) throw new TypeError('protocol declaration participant must be an object')\n exact(value.participant, ['id'], 'participant identity')\n nonEmpty(value.participant.id, 'participant identity.id')\n validateRows(value.requires, true)\n validateRows(value.supports, false)\n}\n\nexport function defineProtocolDeclaration<const T extends ProtocolDeclaration>(declaration: T): T {\n validateProtocolDeclaration(declaration)\n return deepFreeze(structuredClone(declaration))\n}\n\nfunction validateRows(value: unknown, requirement: boolean): void {\n if (value === undefined) return\n const label = requirement ? 'protocol requirements' : 'protocol supports'\n if (!Array.isArray(value)) throw new TypeError(`${label} must be an array`)\n const seen = new Set<string>()\n for (const [index, rowValue] of value.entries()) {\n const rowLabel = `${label}[${index}]`\n validateApiReference(rowValue, rowLabel)\n const row = rowValue as unknown as Record<string, unknown>\n exact(row, requirement ? ['apiVersion', 'kind', 'optional', 'spec'] : ['apiVersion', 'kind', 'spec'], rowLabel)\n if (requirement && row.optional !== undefined && typeof row.optional !== 'boolean') {\n throw new TypeError(`${rowLabel}.optional must be boolean`)\n }\n const key = protocolKey(row as unknown as ApiReference)\n if (seen.has(key)) throw new TypeError(`${label} contains duplicate ${JSON.stringify(key)}`)\n seen.add(key)\n }\n}\n\nfunction nonEmpty(value: unknown, label: string): asserts value is string {\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError(`${label} must be a non-empty string`)\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction exact(value: Record<string, unknown>, allowed: readonly string[], label: string): void {\n const unknown = Object.keys(value).filter(key => !allowed.includes(key) && !key.startsWith('x-'))\n if (unknown.length > 0) throw new TypeError(`${label} contains unknown field ${JSON.stringify(unknown[0])}`)\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== 'object' || value === null || Object.isFrozen(value)) return value\n Object.freeze(value)\n for (const child of Object.values(value)) deepFreeze(child)\n return value\n}\n","import {\n protocolKey,\n validateApiReference,\n validateProtocolDeclaration,\n type ApiReference,\n type ProtocolDeclaration,\n type ProtocolRequirement,\n type ProtocolSupport,\n} from './protocol.js'\n\nexport interface EvaluatorIdentity {\n readonly name: string\n readonly version: string\n}\n\nexport interface ProtocolRequirementEntry<Spec = unknown> {\n readonly participant: string\n readonly requirement: ProtocolRequirement<Spec>\n}\n\nexport interface ProtocolSupportEntry<Spec = unknown> {\n readonly participant: string\n readonly support: ProtocolSupport<Spec>\n}\n\nexport interface ProtocolIssue {\n readonly code: string\n readonly severity: 'error' | 'warning'\n readonly participant?: string\n readonly path?: string\n readonly message: string\n}\n\nexport interface ProtocolNegotiationInput<RequirementSpec = unknown, SupportSpec = unknown, Policy = unknown> {\n readonly requirements: readonly ProtocolRequirementEntry<RequirementSpec>[]\n readonly supports: readonly ProtocolSupportEntry<SupportSpec>[]\n readonly policy?: Policy\n}\n\nexport interface ProtocolNegotiationOutcome<Agreement = unknown> {\n readonly agreement?: Agreement\n readonly issues?: readonly ProtocolIssue[]\n}\n\nexport interface ProtocolDefinition<RequirementSpec = unknown, SupportSpec = unknown, Agreement = unknown, Policy = unknown>\n extends ApiReference {\n /** Every accepted wire/static API version. No compatibility is inferred by core. */\n readonly accepts?: readonly string[]\n validateRequirement(spec: unknown): RequirementSpec\n validateSupport(spec: unknown): SupportSpec\n negotiate(\n input: ProtocolNegotiationInput<RequirementSpec, SupportSpec, Policy>,\n ): ProtocolNegotiationOutcome<Agreement>\n}\n\nexport interface NegotiatedProtocol<Agreement = unknown> extends ApiReference {\n readonly participants: readonly string[]\n readonly agreement?: Agreement\n readonly issues: readonly ProtocolIssue[]\n}\n\nexport interface NegotiationReport {\n readonly apiVersion: 'core.dsh/report/v1alpha1'\n readonly evaluator: EvaluatorIdentity\n readonly compatible: boolean\n readonly protocols: readonly NegotiatedProtocol[]\n readonly issues: readonly ProtocolIssue[]\n}\n\ninterface StoredDefinition {\n readonly definition: ProtocolDefinition\n readonly accepted: ReadonlySet<string>\n}\n\nexport class ProtocolCatalog {\n private readonly definitions = new Map<string, StoredDefinition>()\n\n constructor(readonly evaluator: EvaluatorIdentity) {\n nonEmpty(evaluator.name, 'evaluator.name')\n nonEmpty(evaluator.version, 'evaluator.version')\n }\n\n register(definition: ProtocolDefinition): () => void {\n validateDefinition(definition)\n const accepted = new Set([definition.apiVersion, ...(definition.accepts ?? [])])\n for (const version of accepted) {\n const key = protocolKey({ apiVersion: version, kind: definition.kind })\n if (this.definitions.has(key)) {\n throw new Error(`protocol definition for ${version} ${definition.kind} is already registered`)\n }\n }\n const stored = Object.freeze({ definition: freezeDefinition(definition), accepted: new Set(accepted) })\n for (const version of accepted) this.definitions.set(protocolKey({ apiVersion: version, kind: definition.kind }), stored)\n return () => {\n for (const version of accepted) {\n const key = protocolKey({ apiVersion: version, kind: definition.kind })\n if (this.definitions.get(key) === stored) this.definitions.delete(key)\n }\n }\n }\n\n list(): readonly ProtocolDefinition[] {\n return Object.freeze([...new Set([...this.definitions.values()].map(row => row.definition))])\n }\n\n resolve(reference: ApiReference): ProtocolDefinition | undefined {\n validateApiReference(reference)\n return this.definitions.get(protocolKey(reference))?.definition\n }\n\n understands(reference: ApiReference): boolean {\n return this.resolve(reference) !== undefined\n }\n\n negotiate(declarations: readonly ProtocolDeclaration[], policy?: unknown): NegotiationReport {\n const participantIds = new Set<string>()\n for (const declaration of declarations) {\n validateProtocolDeclaration(declaration)\n if (participantIds.has(declaration.participant.id)) {\n throw new TypeError(`duplicate participant identity ${JSON.stringify(declaration.participant.id)}`)\n }\n participantIds.add(declaration.participant.id)\n }\n\n const groups = new Map<StoredDefinition, {\n requirements: ProtocolRequirementEntry[]\n supports: ProtocolSupportEntry[]\n }>()\n const issues: ProtocolIssue[] = []\n for (const [declarationIndex, declaration] of declarations.entries()) {\n for (const [index, requirement] of (declaration.requires ?? []).entries()) {\n const stored = this.definitions.get(protocolKey(requirement))\n if (stored === undefined) {\n issues.push(freezeIssue({\n code: 'definition-unavailable',\n severity: requirement.optional === true ? 'warning' : 'error',\n participant: declaration.participant.id,\n path: `/declarations/${declarationIndex}/requires/${index}`,\n message: `no definition recognizes ${requirement.apiVersion} ${requirement.kind}`,\n }))\n continue\n }\n const group = groups.get(stored) ?? { requirements: [], supports: [] }\n try {\n group.requirements.push(Object.freeze({\n participant: declaration.participant.id,\n requirement: Object.freeze({\n ...requirement,\n ...(Object.hasOwn(requirement, 'spec')\n ? { spec: stored.definition.validateRequirement(requirement.spec) }\n : { spec: stored.definition.validateRequirement(undefined) }),\n }),\n }))\n } catch (error) {\n issues.push(freezeIssue({\n code: 'invalid-requirement', severity: 'error', participant: declaration.participant.id,\n path: `/declarations/${declarationIndex}/requires/${index}/spec`, message: errorMessage(error),\n }))\n }\n groups.set(stored, group)\n }\n for (const [index, support] of (declaration.supports ?? []).entries()) {\n const stored = this.definitions.get(protocolKey(support))\n if (stored === undefined) {\n issues.push(freezeIssue({\n code: 'definition-unavailable', severity: 'warning', participant: declaration.participant.id,\n path: `/declarations/${declarationIndex}/supports/${index}`,\n message: `no definition recognizes ${support.apiVersion} ${support.kind}`,\n }))\n continue\n }\n const group = groups.get(stored) ?? { requirements: [], supports: [] }\n try {\n group.supports.push(Object.freeze({\n participant: declaration.participant.id,\n support: Object.freeze({\n ...support,\n ...(Object.hasOwn(support, 'spec')\n ? { spec: stored.definition.validateSupport(support.spec) }\n : { spec: stored.definition.validateSupport(undefined) }),\n }),\n }))\n } catch (error) {\n issues.push(freezeIssue({\n code: 'invalid-support', severity: 'error', participant: declaration.participant.id,\n path: `/declarations/${declarationIndex}/supports/${index}/spec`, message: errorMessage(error),\n }))\n }\n groups.set(stored, group)\n }\n }\n\n const protocols: NegotiatedProtocol[] = []\n for (const stored of [...groups.keys()].sort((left, right) => protocolKey(left.definition).localeCompare(protocolKey(right.definition)))) {\n const group = groups.get(stored) as NonNullable<ReturnType<typeof groups.get>>\n let outcome: ProtocolNegotiationOutcome\n try {\n outcome = stored.definition.negotiate(Object.freeze({\n requirements: Object.freeze([...group.requirements]),\n supports: Object.freeze([...group.supports]),\n ...(policy === undefined ? {} : { policy }),\n }))\n } catch (error) {\n outcome = { issues: [{ code: 'definition-failed', severity: 'error', message: errorMessage(error) }] }\n }\n const protocolIssues = Object.freeze((outcome.issues ?? []).map(freezeIssue))\n issues.push(...protocolIssues)\n protocols.push(Object.freeze({\n apiVersion: stored.definition.apiVersion,\n kind: stored.definition.kind,\n participants: Object.freeze([...new Set([\n ...group.requirements.map(row => row.participant),\n ...group.supports.map(row => row.participant),\n ])].sort()),\n ...(Object.hasOwn(outcome, 'agreement') ? { agreement: outcome.agreement } : {}),\n issues: protocolIssues,\n }))\n }\n\n return Object.freeze({\n apiVersion: 'core.dsh/report/v1alpha1',\n evaluator: Object.freeze({ ...this.evaluator }),\n compatible: !issues.some(issue => issue.severity === 'error'),\n protocols: Object.freeze(protocols),\n issues: Object.freeze(issues),\n })\n }\n}\n\nfunction validateDefinition(definition: ProtocolDefinition): void {\n validateApiReference(definition, 'protocol definition')\n if (typeof definition.validateRequirement !== 'function'\n || typeof definition.validateSupport !== 'function'\n || typeof definition.negotiate !== 'function') {\n throw new TypeError('protocol definition must provide validators and negotiate')\n }\n const versions = [definition.apiVersion, ...(definition.accepts ?? [])]\n if (new Set(versions).size !== versions.length) throw new TypeError('protocol definition accepts duplicate versions')\n for (const version of versions) validateApiReference({ apiVersion: version, kind: definition.kind })\n}\n\nfunction freezeDefinition(definition: ProtocolDefinition): ProtocolDefinition {\n return Object.freeze({ ...definition, ...(definition.accepts === undefined ? {} : { accepts: Object.freeze([...definition.accepts]) }) })\n}\n\nfunction freezeIssue(issue: ProtocolIssue): ProtocolIssue {\n if (issue.severity !== 'error' && issue.severity !== 'warning') throw new TypeError('protocol issue severity is invalid')\n nonEmpty(issue.code, 'protocol issue.code')\n nonEmpty(issue.message, 'protocol issue.message')\n return Object.freeze({ ...issue })\n}\n\nfunction nonEmpty(value: unknown, label: string): asserts value is string {\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError(`${label} must be a non-empty string`)\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n","export interface SemanticVersion {\n readonly major: number\n readonly minor: number\n readonly patch: number\n readonly prerelease: readonly (string | number)[]\n readonly build: readonly string[]\n}\n\nexport type VersionRange = string | readonly string[]\n\nexport function parseSemanticVersion(value: string): SemanticVersion {\n const match = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/u.exec(value)\n if (match === null) throw new TypeError(`invalid semantic version ${JSON.stringify(value)}`)\n const prerelease = match[4] === undefined ? [] : match[4].split('.').map(identifier => {\n if (!/^\\d+$/u.test(identifier)) return identifier\n if (identifier.length > 1 && identifier.startsWith('0')) throw new TypeError(`invalid semantic version ${JSON.stringify(value)}`)\n return Number(identifier)\n })\n return Object.freeze({\n major: Number(match[1]), minor: Number(match[2]), patch: Number(match[3]),\n prerelease: Object.freeze(prerelease),\n build: Object.freeze(match[5] === undefined ? [] : match[5].split('.')),\n })\n}\n\nexport function compareSemanticVersions(leftValue: string | SemanticVersion, rightValue: string | SemanticVersion): number {\n const left = typeof leftValue === 'string' ? parseSemanticVersion(leftValue) : leftValue\n const right = typeof rightValue === 'string' ? parseSemanticVersion(rightValue) : rightValue\n return left.major - right.major\n || left.minor - right.minor\n || left.patch - right.patch\n || comparePrerelease(left.prerelease, right.prerelease)\n}\n\nexport function assertVersionRange(range: VersionRange): void {\n compileRange(range)\n}\n\nexport function satisfiesVersionRange(versionValue: string, range: VersionRange): boolean {\n const version = parseSemanticVersion(versionValue)\n return compileRange(range).some(group => {\n if (version.prerelease.length > 0 && !group.explicitPrereleases.has(coreKey(version))) return false\n return group.predicates.every(predicate => predicate(version))\n })\n}\n\ninterface ComparatorGroup {\n readonly predicates: readonly ((version: SemanticVersion) => boolean)[]\n readonly explicitPrereleases: ReadonlySet<string>\n}\n\nfunction compileRange(range: VersionRange): readonly ComparatorGroup[] {\n const values = typeof range === 'string' ? [range] : range\n if (!Array.isArray(values) || values.length === 0) throw new TypeError('version range must be a string or non-empty array')\n return Object.freeze(values.flatMap(value => {\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError('version range must not be empty')\n return value.split('||').map(part => compileGroup(part.trim()))\n }))\n}\n\nfunction compileGroup(value: string): ComparatorGroup {\n if (value === '') throw new TypeError('version range contains an empty alternative')\n if (value === '*' || /^x$/iu.test(value)) return { predicates: [], explicitPrereleases: new Set() }\n const predicates: Array<(version: SemanticVersion) => boolean> = []\n const explicitPrereleases = new Set<string>()\n for (const token of value.split(/\\s+/u)) {\n const parsed = compileComparator(token)\n predicates.push(...parsed.predicates)\n if (parsed.explicitPrerelease !== undefined) explicitPrereleases.add(parsed.explicitPrerelease)\n }\n return Object.freeze({ predicates: Object.freeze(predicates), explicitPrereleases })\n}\n\nfunction compileComparator(token: string): {\n readonly predicates: readonly ((version: SemanticVersion) => boolean)[]\n readonly explicitPrerelease?: string\n} {\n const match = /^(<=|>=|<|>|=|\\^|~)?(.+)$/u.exec(token)\n if (match === null) throw new TypeError(`invalid version comparator ${JSON.stringify(token)}`)\n const operator = match[1] ?? '='\n const body = match[2] as string\n const partial = /^(0|[1-9]\\d*|[xX*])(?:\\.(0|[1-9]\\d*|[xX*]))?(?:\\.(0|[1-9]\\d*|[xX*]))?$/u.exec(body)\n if (partial !== null && (partial[2] === undefined || partial[3] === undefined || [partial[1], partial[2], partial[3]].some(wild))) {\n if (operator !== '=') {\n if ((operator === '~' || operator === '^') && ![partial[1], partial[2]].some(wild)) {\n const lower = version(Number(partial[1]), Number(partial[2]), partial[3] === undefined || wild(partial[3]) ? 0 : Number(partial[3]))\n return bounded(lower, operator === '~' ? version(lower.major, lower.minor + 1, 0) : caretUpper(lower))\n }\n throw new TypeError(`partial version cannot use ${JSON.stringify(operator)}`)\n }\n return wildcardRange(partial)\n }\n\n const target = parseSemanticVersion(body)\n const explicitPrerelease = target.prerelease.length === 0 ? undefined : coreKey(target)\n if (operator === '^') return { ...bounded(target, caretUpper(target)), ...(explicitPrerelease === undefined ? {} : { explicitPrerelease }) }\n if (operator === '~') return { ...bounded(target, version(target.major, target.minor + 1, 0)), ...(explicitPrerelease === undefined ? {} : { explicitPrerelease }) }\n const comparison = (candidate: SemanticVersion) => compareSemanticVersions(candidate, target)\n const predicate = operator === '=' ? (candidate: SemanticVersion) => comparison(candidate) === 0\n : operator === '<' ? (candidate: SemanticVersion) => comparison(candidate) < 0\n : operator === '<=' ? (candidate: SemanticVersion) => comparison(candidate) <= 0\n : operator === '>' ? (candidate: SemanticVersion) => comparison(candidate) > 0\n : (candidate: SemanticVersion) => comparison(candidate) >= 0\n return { predicates: [predicate], ...(explicitPrerelease === undefined ? {} : { explicitPrerelease }) }\n}\n\nfunction wildcardRange(match: RegExpExecArray): { readonly predicates: readonly ((version: SemanticVersion) => boolean)[] } {\n if (wild(match[1])) return { predicates: [] }\n const major = Number(match[1])\n if (match[2] === undefined || wild(match[2])) return bounded(version(major, 0, 0), version(major + 1, 0, 0))\n const minor = Number(match[2])\n if (match[3] === undefined || wild(match[3])) return bounded(version(major, minor, 0), version(major, minor + 1, 0))\n throw new TypeError('unreachable complete version range')\n}\n\nfunction bounded(lower: SemanticVersion, upper: SemanticVersion): { readonly predicates: readonly ((version: SemanticVersion) => boolean)[] } {\n return { predicates: [\n candidate => compareSemanticVersions(candidate, lower) >= 0,\n candidate => compareSemanticVersions(candidate, upper) < 0,\n ] }\n}\n\nfunction caretUpper(lower: SemanticVersion): SemanticVersion {\n if (lower.major > 0) return version(lower.major + 1, 0, 0)\n if (lower.minor > 0) return version(0, lower.minor + 1, 0)\n return version(0, 0, lower.patch + 1)\n}\n\nfunction version(major: number, minor: number, patch: number): SemanticVersion {\n return { major, minor, patch, prerelease: [], build: [] }\n}\n\nfunction wild(value: string | undefined): boolean {\n return value === '*' || /^x$/iu.test(value ?? '')\n}\n\nfunction coreKey(value: SemanticVersion): string {\n return `${value.major}.${value.minor}.${value.patch}`\n}\n\nfunction comparePrerelease(left: readonly (string | number)[], right: readonly (string | number)[]): number {\n if (left.length === 0) return right.length === 0 ? 0 : 1\n if (right.length === 0) return -1\n for (let index = 0; index < Math.max(left.length, right.length); index += 1) {\n const leftPart = left[index]\n const rightPart = right[index]\n if (leftPart === undefined) return -1\n if (rightPart === undefined) return 1\n if (leftPart === rightPart) continue\n if (typeof leftPart === 'number' && typeof rightPart === 'string') return -1\n if (typeof leftPart === 'string' && typeof rightPart === 'number') return 1\n return leftPart < rightPart ? -1 : 1\n }\n return 0\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["nonEmpty"],"sources":["../src/protocol.ts","../src/negotiation.ts","../src/version.ts"],"sourcesContent":["/** Domain-neutral protocol identities and live participant declarations. */\r\n\r\nexport interface ApiReference {\r\n readonly apiVersion: string\r\n readonly kind: string\r\n}\r\n\r\nexport interface ParticipantIdentity {\r\n /** Unique within the negotiation scope that carries this declaration. */\r\n readonly id: string\r\n}\r\n\r\nexport interface ProtocolRequirement<Spec = unknown> extends ApiReference {\r\n readonly optional?: boolean\r\n readonly spec?: Spec\r\n}\r\n\r\nexport interface ProtocolSupport<Spec = unknown> extends ApiReference {\r\n readonly spec?: Spec\r\n}\r\n\r\nexport interface ProtocolDeclaration {\r\n readonly participant: ParticipantIdentity\r\n readonly requires?: readonly ProtocolRequirement[]\r\n readonly supports?: readonly ProtocolSupport[]\r\n}\r\n\r\nexport interface ParsedApiVersion {\r\n readonly group: string\r\n readonly major: number\r\n readonly stability: 'alpha' | 'beta' | 'stable'\r\n readonly revision: number\r\n}\r\n\r\nexport function protocolKey(reference: ApiReference): string {\r\n return `${reference.apiVersion}\\0${reference.kind}`\r\n}\r\n\r\n/** A grouping key only. It does not claim that versions in the family interoperate. */\r\nexport function protocolFamilyKey(reference: ApiReference): string {\r\n const version = parseApiVersion(reference.apiVersion)\r\n return `${version.group}/v${version.major}\\0${reference.kind}`\r\n}\r\n\r\nexport function sameProtocol(left: ApiReference, right: ApiReference): boolean {\r\n return left.apiVersion === right.apiVersion && left.kind === right.kind\r\n}\r\n\r\nexport function parseApiVersion(value: string): ParsedApiVersion {\r\n const match = /^([a-z][a-z0-9.-]*)\\/v([1-9][0-9]*)(?:(alpha|beta)([1-9][0-9]*))?$/u.exec(value)\r\n if (match === null) throw new TypeError(`invalid apiVersion ${JSON.stringify(value)}`)\r\n return Object.freeze({\r\n group: match[1] as string,\r\n major: Number(match[2]),\r\n stability: (match[3] ?? 'stable') as ParsedApiVersion['stability'],\r\n revision: match[4] === undefined ? 0 : Number(match[4]),\r\n })\r\n}\r\n\r\nexport function validateApiReference(value: unknown, label = 'protocol reference'): asserts value is ApiReference {\r\n if (!record(value)) throw new TypeError(`${label} must be an object`)\r\n if (typeof value.apiVersion !== 'string') throw new TypeError(`${label}.apiVersion must be a string`)\r\n parseApiVersion(value.apiVersion)\r\n if (typeof value.kind !== 'string' || !/^[A-Z][A-Za-z0-9]*$/u.test(value.kind)) {\r\n throw new TypeError(`${label}.kind is invalid`)\r\n }\r\n}\r\n\r\nexport function validateProtocolDeclaration(value: unknown): asserts value is ProtocolDeclaration {\r\n if (!record(value)) throw new TypeError('protocol declaration must be an object')\r\n exact(value, ['participant', 'requires', 'supports'], 'protocol declaration')\r\n if (!record(value.participant)) throw new TypeError('protocol declaration participant must be an object')\r\n exact(value.participant, ['id'], 'participant identity')\r\n nonEmpty(value.participant.id, 'participant identity.id')\r\n validateRows(value.requires, true)\r\n validateRows(value.supports, false)\r\n}\r\n\r\nexport function defineProtocolDeclaration<const T extends ProtocolDeclaration>(declaration: T): T {\r\n validateProtocolDeclaration(declaration)\r\n return deepFreeze(structuredClone(declaration))\r\n}\r\n\r\nfunction validateRows(value: unknown, requirement: boolean): void {\r\n if (value === undefined) return\r\n const label = requirement ? 'protocol requirements' : 'protocol supports'\r\n if (!Array.isArray(value)) throw new TypeError(`${label} must be an array`)\r\n const seen = new Set<string>()\r\n for (const [index, rowValue] of value.entries()) {\r\n const rowLabel = `${label}[${index}]`\r\n validateApiReference(rowValue, rowLabel)\r\n const row = rowValue as unknown as Record<string, unknown>\r\n exact(row, requirement ? ['apiVersion', 'kind', 'optional', 'spec'] : ['apiVersion', 'kind', 'spec'], rowLabel)\r\n if (requirement && row.optional !== undefined && typeof row.optional !== 'boolean') {\r\n throw new TypeError(`${rowLabel}.optional must be boolean`)\r\n }\r\n const key = protocolKey(row as unknown as ApiReference)\r\n if (seen.has(key)) throw new TypeError(`${label} contains duplicate ${JSON.stringify(key)}`)\r\n seen.add(key)\r\n }\r\n}\r\n\r\nfunction nonEmpty(value: unknown, label: string): asserts value is string {\r\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError(`${label} must be a non-empty string`)\r\n}\r\n\r\nfunction record(value: unknown): value is Record<string, unknown> {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value)\r\n}\r\n\r\nfunction exact(value: Record<string, unknown>, allowed: readonly string[], label: string): void {\r\n const unknown = Object.keys(value).filter(key => !allowed.includes(key) && !key.startsWith('x-'))\r\n if (unknown.length > 0) throw new TypeError(`${label} contains unknown field ${JSON.stringify(unknown[0])}`)\r\n}\r\n\r\nfunction deepFreeze<T>(value: T): T {\r\n if (typeof value !== 'object' || value === null || Object.isFrozen(value)) return value\r\n Object.freeze(value)\r\n for (const child of Object.values(value)) deepFreeze(child)\r\n return value\r\n}\r\n","import {\r\n protocolKey,\r\n validateApiReference,\r\n validateProtocolDeclaration,\r\n type ApiReference,\r\n type ProtocolDeclaration,\r\n type ProtocolRequirement,\r\n type ProtocolSupport,\r\n} from './protocol.js'\r\n\r\nexport interface EvaluatorIdentity {\r\n readonly name: string\r\n readonly version: string\r\n}\r\n\r\nexport interface ProtocolRequirementEntry<Spec = unknown> {\r\n readonly participant: string\r\n readonly requirement: ProtocolRequirement<Spec>\r\n}\r\n\r\nexport interface ProtocolSupportEntry<Spec = unknown> {\r\n readonly participant: string\r\n readonly support: ProtocolSupport<Spec>\r\n}\r\n\r\nexport interface ProtocolIssue {\r\n readonly code: string\r\n readonly severity: 'error' | 'warning'\r\n readonly participant?: string\r\n readonly path?: string\r\n readonly message: string\r\n}\r\n\r\nexport interface ProtocolNegotiationInput<RequirementSpec = unknown, SupportSpec = unknown, Policy = unknown> {\r\n readonly requirements: readonly ProtocolRequirementEntry<RequirementSpec>[]\r\n readonly supports: readonly ProtocolSupportEntry<SupportSpec>[]\r\n readonly policy?: Policy\r\n}\r\n\r\nexport interface ProtocolNegotiationOutcome<Agreement = unknown> {\r\n readonly agreement?: Agreement\r\n readonly issues?: readonly ProtocolIssue[]\r\n}\r\n\r\nexport interface ProtocolDefinition<RequirementSpec = unknown, SupportSpec = unknown, Agreement = unknown, Policy = unknown>\r\n extends ApiReference {\r\n /** Every accepted wire/static API version. No compatibility is inferred by core. */\r\n readonly accepts?: readonly string[]\r\n validateRequirement(spec: unknown): RequirementSpec\r\n validateSupport(spec: unknown): SupportSpec\r\n negotiate(\r\n input: ProtocolNegotiationInput<RequirementSpec, SupportSpec, Policy>,\r\n ): ProtocolNegotiationOutcome<Agreement>\r\n}\r\n\r\nexport interface NegotiatedProtocol<Agreement = unknown> extends ApiReference {\r\n readonly participants: readonly string[]\r\n readonly agreement?: Agreement\r\n readonly issues: readonly ProtocolIssue[]\r\n}\r\n\r\nexport interface NegotiationReport {\r\n readonly apiVersion: 'core.dsh/report/v1alpha1'\r\n readonly evaluator: EvaluatorIdentity\r\n readonly compatible: boolean\r\n readonly protocols: readonly NegotiatedProtocol[]\r\n readonly issues: readonly ProtocolIssue[]\r\n}\r\n\r\ninterface StoredDefinition {\r\n readonly definition: ProtocolDefinition\r\n readonly accepted: ReadonlySet<string>\r\n}\r\n\r\nexport class ProtocolCatalog {\r\n private readonly definitions = new Map<string, StoredDefinition>()\r\n\r\n constructor(readonly evaluator: EvaluatorIdentity) {\r\n nonEmpty(evaluator.name, 'evaluator.name')\r\n nonEmpty(evaluator.version, 'evaluator.version')\r\n }\r\n\r\n register(definition: ProtocolDefinition): () => void {\r\n validateDefinition(definition)\r\n const accepted = new Set([definition.apiVersion, ...(definition.accepts ?? [])])\r\n for (const version of accepted) {\r\n const key = protocolKey({ apiVersion: version, kind: definition.kind })\r\n if (this.definitions.has(key)) {\r\n throw new Error(`protocol definition for ${version} ${definition.kind} is already registered`)\r\n }\r\n }\r\n const stored = Object.freeze({ definition: freezeDefinition(definition), accepted: new Set(accepted) })\r\n for (const version of accepted) this.definitions.set(protocolKey({ apiVersion: version, kind: definition.kind }), stored)\r\n return () => {\r\n for (const version of accepted) {\r\n const key = protocolKey({ apiVersion: version, kind: definition.kind })\r\n if (this.definitions.get(key) === stored) this.definitions.delete(key)\r\n }\r\n }\r\n }\r\n\r\n list(): readonly ProtocolDefinition[] {\r\n return Object.freeze([...new Set([...this.definitions.values()].map(row => row.definition))])\r\n }\r\n\r\n resolve(reference: ApiReference): ProtocolDefinition | undefined {\r\n validateApiReference(reference)\r\n return this.definitions.get(protocolKey(reference))?.definition\r\n }\r\n\r\n understands(reference: ApiReference): boolean {\r\n return this.resolve(reference) !== undefined\r\n }\r\n\r\n negotiate(declarations: readonly ProtocolDeclaration[], policy?: unknown): NegotiationReport {\r\n const participantIds = new Set<string>()\r\n for (const declaration of declarations) {\r\n validateProtocolDeclaration(declaration)\r\n if (participantIds.has(declaration.participant.id)) {\r\n throw new TypeError(`duplicate participant identity ${JSON.stringify(declaration.participant.id)}`)\r\n }\r\n participantIds.add(declaration.participant.id)\r\n }\r\n\r\n const groups = new Map<StoredDefinition, {\r\n requirements: ProtocolRequirementEntry[]\r\n supports: ProtocolSupportEntry[]\r\n }>()\r\n const issues: ProtocolIssue[] = []\r\n for (const [declarationIndex, declaration] of declarations.entries()) {\r\n for (const [index, requirement] of (declaration.requires ?? []).entries()) {\r\n const stored = this.definitions.get(protocolKey(requirement))\r\n if (stored === undefined) {\r\n issues.push(freezeIssue({\r\n code: 'definition-unavailable',\r\n severity: requirement.optional === true ? 'warning' : 'error',\r\n participant: declaration.participant.id,\r\n path: `/declarations/${declarationIndex}/requires/${index}`,\r\n message: `no definition recognizes ${requirement.apiVersion} ${requirement.kind}`,\r\n }))\r\n continue\r\n }\r\n const group = groups.get(stored) ?? { requirements: [], supports: [] }\r\n try {\r\n group.requirements.push(Object.freeze({\r\n participant: declaration.participant.id,\r\n requirement: Object.freeze({\r\n ...requirement,\r\n ...(Object.hasOwn(requirement, 'spec')\r\n ? { spec: stored.definition.validateRequirement(requirement.spec) }\r\n : { spec: stored.definition.validateRequirement(undefined) }),\r\n }),\r\n }))\r\n } catch (error) {\r\n issues.push(freezeIssue({\r\n code: 'invalid-requirement', severity: 'error', participant: declaration.participant.id,\r\n path: `/declarations/${declarationIndex}/requires/${index}/spec`, message: errorMessage(error),\r\n }))\r\n }\r\n groups.set(stored, group)\r\n }\r\n for (const [index, support] of (declaration.supports ?? []).entries()) {\r\n const stored = this.definitions.get(protocolKey(support))\r\n if (stored === undefined) {\r\n issues.push(freezeIssue({\r\n code: 'definition-unavailable', severity: 'warning', participant: declaration.participant.id,\r\n path: `/declarations/${declarationIndex}/supports/${index}`,\r\n message: `no definition recognizes ${support.apiVersion} ${support.kind}`,\r\n }))\r\n continue\r\n }\r\n const group = groups.get(stored) ?? { requirements: [], supports: [] }\r\n try {\r\n group.supports.push(Object.freeze({\r\n participant: declaration.participant.id,\r\n support: Object.freeze({\r\n ...support,\r\n ...(Object.hasOwn(support, 'spec')\r\n ? { spec: stored.definition.validateSupport(support.spec) }\r\n : { spec: stored.definition.validateSupport(undefined) }),\r\n }),\r\n }))\r\n } catch (error) {\r\n issues.push(freezeIssue({\r\n code: 'invalid-support', severity: 'error', participant: declaration.participant.id,\r\n path: `/declarations/${declarationIndex}/supports/${index}/spec`, message: errorMessage(error),\r\n }))\r\n }\r\n groups.set(stored, group)\r\n }\r\n }\r\n\r\n const protocols: NegotiatedProtocol[] = []\r\n for (const stored of [...groups.keys()].sort((left, right) => protocolKey(left.definition).localeCompare(protocolKey(right.definition)))) {\r\n const group = groups.get(stored) as NonNullable<ReturnType<typeof groups.get>>\r\n let outcome: ProtocolNegotiationOutcome\r\n try {\r\n outcome = stored.definition.negotiate(Object.freeze({\r\n requirements: Object.freeze([...group.requirements]),\r\n supports: Object.freeze([...group.supports]),\r\n ...(policy === undefined ? {} : { policy }),\r\n }))\r\n } catch (error) {\r\n outcome = { issues: [{ code: 'definition-failed', severity: 'error', message: errorMessage(error) }] }\r\n }\r\n const protocolIssues = Object.freeze((outcome.issues ?? []).map(freezeIssue))\r\n issues.push(...protocolIssues)\r\n protocols.push(Object.freeze({\r\n apiVersion: stored.definition.apiVersion,\r\n kind: stored.definition.kind,\r\n participants: Object.freeze([...new Set([\r\n ...group.requirements.map(row => row.participant),\r\n ...group.supports.map(row => row.participant),\r\n ])].sort()),\r\n ...(Object.hasOwn(outcome, 'agreement') ? { agreement: outcome.agreement } : {}),\r\n issues: protocolIssues,\r\n }))\r\n }\r\n\r\n return Object.freeze({\r\n apiVersion: 'core.dsh/report/v1alpha1',\r\n evaluator: Object.freeze({ ...this.evaluator }),\r\n compatible: !issues.some(issue => issue.severity === 'error'),\r\n protocols: Object.freeze(protocols),\r\n issues: Object.freeze(issues),\r\n })\r\n }\r\n}\r\n\r\nfunction validateDefinition(definition: ProtocolDefinition): void {\r\n validateApiReference(definition, 'protocol definition')\r\n if (typeof definition.validateRequirement !== 'function'\r\n || typeof definition.validateSupport !== 'function'\r\n || typeof definition.negotiate !== 'function') {\r\n throw new TypeError('protocol definition must provide validators and negotiate')\r\n }\r\n const versions = [definition.apiVersion, ...(definition.accepts ?? [])]\r\n if (new Set(versions).size !== versions.length) throw new TypeError('protocol definition accepts duplicate versions')\r\n for (const version of versions) validateApiReference({ apiVersion: version, kind: definition.kind })\r\n}\r\n\r\nfunction freezeDefinition(definition: ProtocolDefinition): ProtocolDefinition {\r\n return Object.freeze({ ...definition, ...(definition.accepts === undefined ? {} : { accepts: Object.freeze([...definition.accepts]) }) })\r\n}\r\n\r\nfunction freezeIssue(issue: ProtocolIssue): ProtocolIssue {\r\n if (issue.severity !== 'error' && issue.severity !== 'warning') throw new TypeError('protocol issue severity is invalid')\r\n nonEmpty(issue.code, 'protocol issue.code')\r\n nonEmpty(issue.message, 'protocol issue.message')\r\n return Object.freeze({ ...issue })\r\n}\r\n\r\nfunction nonEmpty(value: unknown, label: string): asserts value is string {\r\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError(`${label} must be a non-empty string`)\r\n}\r\n\r\nfunction errorMessage(error: unknown): string {\r\n return error instanceof Error ? error.message : String(error)\r\n}\r\n","export interface SemanticVersion {\r\n readonly major: number\r\n readonly minor: number\r\n readonly patch: number\r\n readonly prerelease: readonly (string | number)[]\r\n readonly build: readonly string[]\r\n}\r\n\r\nexport type VersionRange = string | readonly string[]\r\n\r\nexport function parseSemanticVersion(value: string): SemanticVersion {\r\n const match = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/u.exec(value)\r\n if (match === null) throw new TypeError(`invalid semantic version ${JSON.stringify(value)}`)\r\n const prerelease = match[4] === undefined ? [] : match[4].split('.').map(identifier => {\r\n if (!/^\\d+$/u.test(identifier)) return identifier\r\n if (identifier.length > 1 && identifier.startsWith('0')) throw new TypeError(`invalid semantic version ${JSON.stringify(value)}`)\r\n return Number(identifier)\r\n })\r\n return Object.freeze({\r\n major: Number(match[1]), minor: Number(match[2]), patch: Number(match[3]),\r\n prerelease: Object.freeze(prerelease),\r\n build: Object.freeze(match[5] === undefined ? [] : match[5].split('.')),\r\n })\r\n}\r\n\r\nexport function compareSemanticVersions(leftValue: string | SemanticVersion, rightValue: string | SemanticVersion): number {\r\n const left = typeof leftValue === 'string' ? parseSemanticVersion(leftValue) : leftValue\r\n const right = typeof rightValue === 'string' ? parseSemanticVersion(rightValue) : rightValue\r\n return left.major - right.major\r\n || left.minor - right.minor\r\n || left.patch - right.patch\r\n || comparePrerelease(left.prerelease, right.prerelease)\r\n}\r\n\r\nexport function assertVersionRange(range: VersionRange): void {\r\n compileRange(range)\r\n}\r\n\r\nexport function satisfiesVersionRange(versionValue: string, range: VersionRange): boolean {\r\n const version = parseSemanticVersion(versionValue)\r\n return compileRange(range).some(group => {\r\n if (version.prerelease.length > 0 && !group.explicitPrereleases.has(coreKey(version))) return false\r\n return group.predicates.every(predicate => predicate(version))\r\n })\r\n}\r\n\r\ninterface ComparatorGroup {\r\n readonly predicates: readonly ((version: SemanticVersion) => boolean)[]\r\n readonly explicitPrereleases: ReadonlySet<string>\r\n}\r\n\r\nfunction compileRange(range: VersionRange): readonly ComparatorGroup[] {\r\n const values = typeof range === 'string' ? [range] : range\r\n if (!Array.isArray(values) || values.length === 0) throw new TypeError('version range must be a string or non-empty array')\r\n return Object.freeze(values.flatMap(value => {\r\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError('version range must not be empty')\r\n return value.split('||').map(part => compileGroup(part.trim()))\r\n }))\r\n}\r\n\r\nfunction compileGroup(value: string): ComparatorGroup {\r\n if (value === '') throw new TypeError('version range contains an empty alternative')\r\n if (value === '*' || /^x$/iu.test(value)) return { predicates: [], explicitPrereleases: new Set() }\r\n const predicates: Array<(version: SemanticVersion) => boolean> = []\r\n const explicitPrereleases = new Set<string>()\r\n for (const token of value.split(/\\s+/u)) {\r\n const parsed = compileComparator(token)\r\n predicates.push(...parsed.predicates)\r\n if (parsed.explicitPrerelease !== undefined) explicitPrereleases.add(parsed.explicitPrerelease)\r\n }\r\n return Object.freeze({ predicates: Object.freeze(predicates), explicitPrereleases })\r\n}\r\n\r\nfunction compileComparator(token: string): {\r\n readonly predicates: readonly ((version: SemanticVersion) => boolean)[]\r\n readonly explicitPrerelease?: string\r\n} {\r\n const match = /^(<=|>=|<|>|=|\\^|~)?(.+)$/u.exec(token)\r\n if (match === null) throw new TypeError(`invalid version comparator ${JSON.stringify(token)}`)\r\n const operator = match[1] ?? '='\r\n const body = match[2] as string\r\n const partial = /^(0|[1-9]\\d*|[xX*])(?:\\.(0|[1-9]\\d*|[xX*]))?(?:\\.(0|[1-9]\\d*|[xX*]))?$/u.exec(body)\r\n if (partial !== null && (partial[2] === undefined || partial[3] === undefined || [partial[1], partial[2], partial[3]].some(wild))) {\r\n if (operator !== '=') {\r\n if ((operator === '~' || operator === '^') && ![partial[1], partial[2]].some(wild)) {\r\n const lower = version(Number(partial[1]), Number(partial[2]), partial[3] === undefined || wild(partial[3]) ? 0 : Number(partial[3]))\r\n return bounded(lower, operator === '~' ? version(lower.major, lower.minor + 1, 0) : caretUpper(lower))\r\n }\r\n throw new TypeError(`partial version cannot use ${JSON.stringify(operator)}`)\r\n }\r\n return wildcardRange(partial)\r\n }\r\n\r\n const target = parseSemanticVersion(body)\r\n const explicitPrerelease = target.prerelease.length === 0 ? undefined : coreKey(target)\r\n if (operator === '^') return { ...bounded(target, caretUpper(target)), ...(explicitPrerelease === undefined ? {} : { explicitPrerelease }) }\r\n if (operator === '~') return { ...bounded(target, version(target.major, target.minor + 1, 0)), ...(explicitPrerelease === undefined ? {} : { explicitPrerelease }) }\r\n const comparison = (candidate: SemanticVersion) => compareSemanticVersions(candidate, target)\r\n const predicate = operator === '=' ? (candidate: SemanticVersion) => comparison(candidate) === 0\r\n : operator === '<' ? (candidate: SemanticVersion) => comparison(candidate) < 0\r\n : operator === '<=' ? (candidate: SemanticVersion) => comparison(candidate) <= 0\r\n : operator === '>' ? (candidate: SemanticVersion) => comparison(candidate) > 0\r\n : (candidate: SemanticVersion) => comparison(candidate) >= 0\r\n return { predicates: [predicate], ...(explicitPrerelease === undefined ? {} : { explicitPrerelease }) }\r\n}\r\n\r\nfunction wildcardRange(match: RegExpExecArray): { readonly predicates: readonly ((version: SemanticVersion) => boolean)[] } {\r\n if (wild(match[1])) return { predicates: [] }\r\n const major = Number(match[1])\r\n if (match[2] === undefined || wild(match[2])) return bounded(version(major, 0, 0), version(major + 1, 0, 0))\r\n const minor = Number(match[2])\r\n if (match[3] === undefined || wild(match[3])) return bounded(version(major, minor, 0), version(major, minor + 1, 0))\r\n throw new TypeError('unreachable complete version range')\r\n}\r\n\r\nfunction bounded(lower: SemanticVersion, upper: SemanticVersion): { readonly predicates: readonly ((version: SemanticVersion) => boolean)[] } {\r\n return { predicates: [\r\n candidate => compareSemanticVersions(candidate, lower) >= 0,\r\n candidate => compareSemanticVersions(candidate, upper) < 0,\r\n ] }\r\n}\r\n\r\nfunction caretUpper(lower: SemanticVersion): SemanticVersion {\r\n if (lower.major > 0) return version(lower.major + 1, 0, 0)\r\n if (lower.minor > 0) return version(0, lower.minor + 1, 0)\r\n return version(0, 0, lower.patch + 1)\r\n}\r\n\r\nfunction version(major: number, minor: number, patch: number): SemanticVersion {\r\n return { major, minor, patch, prerelease: [], build: [] }\r\n}\r\n\r\nfunction wild(value: string | undefined): boolean {\r\n return value === '*' || /^x$/iu.test(value ?? '')\r\n}\r\n\r\nfunction coreKey(value: SemanticVersion): string {\r\n return `${value.major}.${value.minor}.${value.patch}`\r\n}\r\n\r\nfunction comparePrerelease(left: readonly (string | number)[], right: readonly (string | number)[]): number {\r\n if (left.length === 0) return right.length === 0 ? 0 : 1\r\n if (right.length === 0) return -1\r\n for (let index = 0; index < Math.max(left.length, right.length); index += 1) {\r\n const leftPart = left[index]\r\n const rightPart = right[index]\r\n if (leftPart === undefined) return -1\r\n if (rightPart === undefined) return 1\r\n if (leftPart === rightPart) continue\r\n if (typeof leftPart === 'number' && typeof rightPart === 'string') return -1\r\n if (typeof leftPart === 'string' && typeof rightPart === 'number') return 1\r\n return leftPart < rightPart ? -1 : 1\r\n }\r\n return 0\r\n}\r\n"],"mappings":";AAkCA,SAAgB,YAAY,WAAiC;CAC3D,OAAO,GAAG,UAAU,WAAW,IAAI,UAAU;AAC/C;;AAGA,SAAgB,kBAAkB,WAAiC;CACjE,MAAM,UAAU,gBAAgB,UAAU,UAAU;CACpD,OAAO,GAAG,QAAQ,MAAM,IAAI,QAAQ,MAAM,IAAI,UAAU;AAC1D;AAEA,SAAgB,aAAa,MAAoB,OAA8B;CAC7E,OAAO,KAAK,eAAe,MAAM,cAAc,KAAK,SAAS,MAAM;AACrE;AAEA,SAAgB,gBAAgB,OAAiC;CAC/D,MAAM,QAAQ,sEAAsE,KAAK,KAAK;CAC9F,IAAI,UAAU,MAAM,MAAM,IAAI,UAAU,sBAAsB,KAAK,UAAU,KAAK,GAAG;CACrF,OAAO,OAAO,OAAO;EACnB,OAAO,MAAM;EACb,OAAO,OAAO,MAAM,EAAE;EACtB,WAAY,MAAM,MAAM;EACxB,UAAU,MAAM,OAAO,KAAA,IAAY,IAAI,OAAO,MAAM,EAAE;CACxD,CAAC;AACH;AAEA,SAAgB,qBAAqB,OAAgB,QAAQ,sBAAqD;CAChH,IAAI,CAAC,OAAO,KAAK,GAAG,MAAM,IAAI,UAAU,GAAG,MAAM,mBAAmB;CACpE,IAAI,OAAO,MAAM,eAAe,UAAU,MAAM,IAAI,UAAU,GAAG,MAAM,6BAA6B;CACpG,gBAAgB,MAAM,UAAU;CAChC,IAAI,OAAO,MAAM,SAAS,YAAY,CAAC,uBAAuB,KAAK,MAAM,IAAI,GAC3E,MAAM,IAAI,UAAU,GAAG,MAAM,iBAAiB;AAElD;AAEA,SAAgB,4BAA4B,OAAsD;CAChG,IAAI,CAAC,OAAO,KAAK,GAAG,MAAM,IAAI,UAAU,wCAAwC;CAChF,MAAM,OAAO;EAAC;EAAe;EAAY;CAAU,GAAG,sBAAsB;CAC5E,IAAI,CAAC,OAAO,MAAM,WAAW,GAAG,MAAM,IAAI,UAAU,oDAAoD;CACxG,MAAM,MAAM,aAAa,CAAC,IAAI,GAAG,sBAAsB;CACvD,WAAS,MAAM,YAAY,IAAI,yBAAyB;CACxD,aAAa,MAAM,UAAU,IAAI;CACjC,aAAa,MAAM,UAAU,KAAK;AACpC;AAEA,SAAgB,0BAA+D,aAAmB;CAChG,4BAA4B,WAAW;CACvC,OAAO,WAAW,gBAAgB,WAAW,CAAC;AAChD;AAEA,SAAS,aAAa,OAAgB,aAA4B;CAChE,IAAI,UAAU,KAAA,GAAW;CACzB,MAAM,QAAQ,cAAc,0BAA0B;CACtD,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG,MAAM,IAAI,UAAU,GAAG,MAAM,kBAAkB;CAC1E,MAAM,uBAAO,IAAI,IAAY;CAC7B,KAAK,MAAM,CAAC,OAAO,aAAa,MAAM,QAAQ,GAAG;EAC/C,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM;EACnC,qBAAqB,UAAU,QAAQ;EACvC,MAAM,MAAM;EACZ,MAAM,KAAK,cAAc;GAAC;GAAc;GAAQ;GAAY;EAAM,IAAI;GAAC;GAAc;GAAQ;EAAM,GAAG,QAAQ;EAC9G,IAAI,eAAe,IAAI,aAAa,KAAA,KAAa,OAAO,IAAI,aAAa,WACvE,MAAM,IAAI,UAAU,GAAG,SAAS,0BAA0B;EAE5D,MAAM,MAAM,YAAY,GAA8B;EACtD,IAAI,KAAK,IAAI,GAAG,GAAG,MAAM,IAAI,UAAU,GAAG,MAAM,sBAAsB,KAAK,UAAU,GAAG,GAAG;EAC3F,KAAK,IAAI,GAAG;CACd;AACF;AAEA,SAASA,WAAS,OAAgB,OAAwC;CACxE,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,MAAM,IAAI,MAAM,IAAI,UAAU,GAAG,MAAM,4BAA4B;AACjH;AAEA,SAAS,OAAO,OAAkD;CAChE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,MAAM,OAAgC,SAA4B,OAAqB;CAC9F,MAAM,UAAU,OAAO,KAAK,KAAK,CAAC,CAAC,QAAO,QAAO,CAAC,QAAQ,SAAS,GAAG,KAAK,CAAC,IAAI,WAAW,IAAI,CAAC;CAChG,IAAI,QAAQ,SAAS,GAAG,MAAM,IAAI,UAAU,GAAG,MAAM,0BAA0B,KAAK,UAAU,QAAQ,EAAE,GAAG;AAC7G;AAEA,SAAS,WAAc,OAAa;CAClC,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,OAAO,SAAS,KAAK,GAAG,OAAO;CAClF,OAAO,OAAO,KAAK;CACnB,KAAK,MAAM,SAAS,OAAO,OAAO,KAAK,GAAG,WAAW,KAAK;CAC1D,OAAO;AACT;;;AC9CA,IAAa,kBAAb,MAA6B;CAGN;CAFrB,8BAA+B,IAAI,IAA8B;CAEjE,YAAY,WAAuC;EAA9B,KAAA,YAAA;EACnB,SAAS,UAAU,MAAM,gBAAgB;EACzC,SAAS,UAAU,SAAS,mBAAmB;CACjD;CAEA,SAAS,YAA4C;EACnD,mBAAmB,UAAU;EAC7B,MAAM,2BAAW,IAAI,IAAI,CAAC,WAAW,YAAY,GAAI,WAAW,WAAW,CAAC,CAAE,CAAC;EAC/E,KAAK,MAAM,WAAW,UAAU;GAC9B,MAAM,MAAM,YAAY;IAAE,YAAY;IAAS,MAAM,WAAW;GAAK,CAAC;GACtE,IAAI,KAAK,YAAY,IAAI,GAAG,GAC1B,MAAM,IAAI,MAAM,2BAA2B,QAAQ,GAAG,WAAW,KAAK,uBAAuB;EAEjG;EACA,MAAM,SAAS,OAAO,OAAO;GAAE,YAAY,iBAAiB,UAAU;GAAG,UAAU,IAAI,IAAI,QAAQ;EAAE,CAAC;EACtG,KAAK,MAAM,WAAW,UAAU,KAAK,YAAY,IAAI,YAAY;GAAE,YAAY;GAAS,MAAM,WAAW;EAAK,CAAC,GAAG,MAAM;EACxH,aAAa;GACX,KAAK,MAAM,WAAW,UAAU;IAC9B,MAAM,MAAM,YAAY;KAAE,YAAY;KAAS,MAAM,WAAW;IAAK,CAAC;IACtE,IAAI,KAAK,YAAY,IAAI,GAAG,MAAM,QAAQ,KAAK,YAAY,OAAO,GAAG;GACvE;EACF;CACF;CAEA,OAAsC;EACpC,OAAO,OAAO,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAI,QAAO,IAAI,UAAU,CAAC,CAAC,CAAC;CAC9F;CAEA,QAAQ,WAAyD;EAC/D,qBAAqB,SAAS;EAC9B,OAAO,KAAK,YAAY,IAAI,YAAY,SAAS,CAAC,CAAC,EAAE;CACvD;CAEA,YAAY,WAAkC;EAC5C,OAAO,KAAK,QAAQ,SAAS,MAAM,KAAA;CACrC;CAEA,UAAU,cAA8C,QAAqC;EAC3F,MAAM,iCAAiB,IAAI,IAAY;EACvC,KAAK,MAAM,eAAe,cAAc;GACtC,4BAA4B,WAAW;GACvC,IAAI,eAAe,IAAI,YAAY,YAAY,EAAE,GAC/C,MAAM,IAAI,UAAU,kCAAkC,KAAK,UAAU,YAAY,YAAY,EAAE,GAAG;GAEpG,eAAe,IAAI,YAAY,YAAY,EAAE;EAC/C;EAEA,MAAM,yBAAS,IAAI,IAGhB;EACH,MAAM,SAA0B,CAAC;EACjC,KAAK,MAAM,CAAC,kBAAkB,gBAAgB,aAAa,QAAQ,GAAG;GACpE,KAAK,MAAM,CAAC,OAAO,iBAAiB,YAAY,YAAY,CAAC,EAAA,CAAG,QAAQ,GAAG;IACzE,MAAM,SAAS,KAAK,YAAY,IAAI,YAAY,WAAW,CAAC;IAC5D,IAAI,WAAW,KAAA,GAAW;KACxB,OAAO,KAAK,YAAY;MACtB,MAAM;MACN,UAAU,YAAY,aAAa,OAAO,YAAY;MACtD,aAAa,YAAY,YAAY;MACrC,MAAM,iBAAiB,iBAAiB,YAAY;MACpD,SAAS,4BAA4B,YAAY,WAAW,GAAG,YAAY;KAC7E,CAAC,CAAC;KACF;IACF;IACA,MAAM,QAAQ,OAAO,IAAI,MAAM,KAAK;KAAE,cAAc,CAAC;KAAG,UAAU,CAAC;IAAE;IACrE,IAAI;KACF,MAAM,aAAa,KAAK,OAAO,OAAO;MACpC,aAAa,YAAY,YAAY;MACrC,aAAa,OAAO,OAAO;OACzB,GAAG;OACH,GAAI,OAAO,OAAO,aAAa,MAAM,IACjC,EAAE,MAAM,OAAO,WAAW,oBAAoB,YAAY,IAAI,EAAE,IAChE,EAAE,MAAM,OAAO,WAAW,oBAAoB,KAAA,CAAS,EAAE;MAC/D,CAAC;KACH,CAAC,CAAC;IACJ,SAAS,OAAO;KACd,OAAO,KAAK,YAAY;MACtB,MAAM;MAAuB,UAAU;MAAS,aAAa,YAAY,YAAY;MACrF,MAAM,iBAAiB,iBAAiB,YAAY,MAAM;MAAQ,SAAS,aAAa,KAAK;KAC/F,CAAC,CAAC;IACJ;IACA,OAAO,IAAI,QAAQ,KAAK;GAC1B;GACA,KAAK,MAAM,CAAC,OAAO,aAAa,YAAY,YAAY,CAAC,EAAA,CAAG,QAAQ,GAAG;IACrE,MAAM,SAAS,KAAK,YAAY,IAAI,YAAY,OAAO,CAAC;IACxD,IAAI,WAAW,KAAA,GAAW;KACxB,OAAO,KAAK,YAAY;MACtB,MAAM;MAA0B,UAAU;MAAW,aAAa,YAAY,YAAY;MAC1F,MAAM,iBAAiB,iBAAiB,YAAY;MACpD,SAAS,4BAA4B,QAAQ,WAAW,GAAG,QAAQ;KACrE,CAAC,CAAC;KACF;IACF;IACA,MAAM,QAAQ,OAAO,IAAI,MAAM,KAAK;KAAE,cAAc,CAAC;KAAG,UAAU,CAAC;IAAE;IACrE,IAAI;KACF,MAAM,SAAS,KAAK,OAAO,OAAO;MAChC,aAAa,YAAY,YAAY;MACrC,SAAS,OAAO,OAAO;OACrB,GAAG;OACH,GAAI,OAAO,OAAO,SAAS,MAAM,IAC7B,EAAE,MAAM,OAAO,WAAW,gBAAgB,QAAQ,IAAI,EAAE,IACxD,EAAE,MAAM,OAAO,WAAW,gBAAgB,KAAA,CAAS,EAAE;MAC3D,CAAC;KACH,CAAC,CAAC;IACJ,SAAS,OAAO;KACd,OAAO,KAAK,YAAY;MACtB,MAAM;MAAmB,UAAU;MAAS,aAAa,YAAY,YAAY;MACjF,MAAM,iBAAiB,iBAAiB,YAAY,MAAM;MAAQ,SAAS,aAAa,KAAK;KAC/F,CAAC,CAAC;IACJ;IACA,OAAO,IAAI,QAAQ,KAAK;GAC1B;EACF;EAEA,MAAM,YAAkC,CAAC;EACzC,KAAK,MAAM,UAAU,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,MAAM,UAAU,YAAY,KAAK,UAAU,CAAC,CAAC,cAAc,YAAY,MAAM,UAAU,CAAC,CAAC,GAAG;GACxI,MAAM,QAAQ,OAAO,IAAI,MAAM;GAC/B,IAAI;GACJ,IAAI;IACF,UAAU,OAAO,WAAW,UAAU,OAAO,OAAO;KAClD,cAAc,OAAO,OAAO,CAAC,GAAG,MAAM,YAAY,CAAC;KACnD,UAAU,OAAO,OAAO,CAAC,GAAG,MAAM,QAAQ,CAAC;KAC3C,GAAI,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO;IAC3C,CAAC,CAAC;GACJ,SAAS,OAAO;IACd,UAAU,EAAE,QAAQ,CAAC;KAAE,MAAM;KAAqB,UAAU;KAAS,SAAS,aAAa,KAAK;IAAE,CAAC,EAAE;GACvG;GACA,MAAM,iBAAiB,OAAO,QAAQ,QAAQ,UAAU,CAAC,EAAA,CAAG,IAAI,WAAW,CAAC;GAC5E,OAAO,KAAK,GAAG,cAAc;GAC7B,UAAU,KAAK,OAAO,OAAO;IAC3B,YAAY,OAAO,WAAW;IAC9B,MAAM,OAAO,WAAW;IACxB,cAAc,OAAO,OAAO,CAAC,mBAAG,IAAI,IAAI,CACtC,GAAG,MAAM,aAAa,KAAI,QAAO,IAAI,WAAW,GAChD,GAAG,MAAM,SAAS,KAAI,QAAO,IAAI,WAAW,CAC9C,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACV,GAAI,OAAO,OAAO,SAAS,WAAW,IAAI,EAAE,WAAW,QAAQ,UAAU,IAAI,CAAC;IAC9E,QAAQ;GACV,CAAC,CAAC;EACJ;EAEA,OAAO,OAAO,OAAO;GACnB,YAAY;GACZ,WAAW,OAAO,OAAO,EAAE,GAAG,KAAK,UAAU,CAAC;GAC9C,YAAY,CAAC,OAAO,MAAK,UAAS,MAAM,aAAa,OAAO;GAC5D,WAAW,OAAO,OAAO,SAAS;GAClC,QAAQ,OAAO,OAAO,MAAM;EAC9B,CAAC;CACH;AACF;AAEA,SAAS,mBAAmB,YAAsC;CAChE,qBAAqB,YAAY,qBAAqB;CACtD,IAAI,OAAO,WAAW,wBAAwB,cACzC,OAAO,WAAW,oBAAoB,cACtC,OAAO,WAAW,cAAc,YACnC,MAAM,IAAI,UAAU,2DAA2D;CAEjF,MAAM,WAAW,CAAC,WAAW,YAAY,GAAI,WAAW,WAAW,CAAC,CAAE;CACtE,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,SAAS,SAAS,QAAQ,MAAM,IAAI,UAAU,gDAAgD;CACpH,KAAK,MAAM,WAAW,UAAU,qBAAqB;EAAE,YAAY;EAAS,MAAM,WAAW;CAAK,CAAC;AACrG;AAEA,SAAS,iBAAiB,YAAoD;CAC5E,OAAO,OAAO,OAAO;EAAE,GAAG;EAAY,GAAI,WAAW,YAAY,KAAA,IAAY,CAAC,IAAI,EAAE,SAAS,OAAO,OAAO,CAAC,GAAG,WAAW,OAAO,CAAC,EAAE;CAAG,CAAC;AAC1I;AAEA,SAAS,YAAY,OAAqC;CACxD,IAAI,MAAM,aAAa,WAAW,MAAM,aAAa,WAAW,MAAM,IAAI,UAAU,oCAAoC;CACxH,SAAS,MAAM,MAAM,qBAAqB;CAC1C,SAAS,MAAM,SAAS,wBAAwB;CAChD,OAAO,OAAO,OAAO,EAAE,GAAG,MAAM,CAAC;AACnC;AAEA,SAAS,SAAS,OAAgB,OAAwC;CACxE,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,MAAM,IAAI,MAAM,IAAI,UAAU,GAAG,MAAM,4BAA4B;AACjH;AAEA,SAAS,aAAa,OAAwB;CAC5C,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D;;;ACxPA,SAAgB,qBAAqB,OAAgC;CACnE,MAAM,QAAQ,iIAAiI,KAAK,KAAK;CACzJ,IAAI,UAAU,MAAM,MAAM,IAAI,UAAU,4BAA4B,KAAK,UAAU,KAAK,GAAG;CAC3F,MAAM,aAAa,MAAM,OAAO,KAAA,IAAY,CAAC,IAAI,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,KAAI,eAAc;EACrF,IAAI,CAAC,SAAS,KAAK,UAAU,GAAG,OAAO;EACvC,IAAI,WAAW,SAAS,KAAK,WAAW,WAAW,GAAG,GAAG,MAAM,IAAI,UAAU,4BAA4B,KAAK,UAAU,KAAK,GAAG;EAChI,OAAO,OAAO,UAAU;CAC1B,CAAC;CACD,OAAO,OAAO,OAAO;EACnB,OAAO,OAAO,MAAM,EAAE;EAAG,OAAO,OAAO,MAAM,EAAE;EAAG,OAAO,OAAO,MAAM,EAAE;EACxE,YAAY,OAAO,OAAO,UAAU;EACpC,OAAO,OAAO,OAAO,MAAM,OAAO,KAAA,IAAY,CAAC,IAAI,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC;CACxE,CAAC;AACH;AAEA,SAAgB,wBAAwB,WAAqC,YAA8C;CACzH,MAAM,OAAO,OAAO,cAAc,WAAW,qBAAqB,SAAS,IAAI;CAC/E,MAAM,QAAQ,OAAO,eAAe,WAAW,qBAAqB,UAAU,IAAI;CAClF,OAAO,KAAK,QAAQ,MAAM,SACrB,KAAK,QAAQ,MAAM,SACnB,KAAK,QAAQ,MAAM,SACnB,kBAAkB,KAAK,YAAY,MAAM,UAAU;AAC1D;AAEA,SAAgB,mBAAmB,OAA2B;CAC5D,aAAa,KAAK;AACpB;AAEA,SAAgB,sBAAsB,cAAsB,OAA8B;CACxF,MAAM,UAAU,qBAAqB,YAAY;CACjD,OAAO,aAAa,KAAK,CAAC,CAAC,MAAK,UAAS;EACvC,IAAI,QAAQ,WAAW,SAAS,KAAK,CAAC,MAAM,oBAAoB,IAAI,QAAQ,OAAO,CAAC,GAAG,OAAO;EAC9F,OAAO,MAAM,WAAW,OAAM,cAAa,UAAU,OAAO,CAAC;CAC/D,CAAC;AACH;AAOA,SAAS,aAAa,OAAiD;CACrE,MAAM,SAAS,OAAO,UAAU,WAAW,CAAC,KAAK,IAAI;CACrD,IAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,GAAG,MAAM,IAAI,UAAU,mDAAmD;CAC1H,OAAO,OAAO,OAAO,OAAO,SAAQ,UAAS;EAC3C,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,MAAM,IAAI,MAAM,IAAI,UAAU,iCAAiC;EAC3G,OAAO,MAAM,MAAM,IAAI,CAAC,CAAC,KAAI,SAAQ,aAAa,KAAK,KAAK,CAAC,CAAC;CAChE,CAAC,CAAC;AACJ;AAEA,SAAS,aAAa,OAAgC;CACpD,IAAI,UAAU,IAAI,MAAM,IAAI,UAAU,6CAA6C;CACnF,IAAI,UAAU,OAAO,QAAQ,KAAK,KAAK,GAAG,OAAO;EAAE,YAAY,CAAC;EAAG,qCAAqB,IAAI,IAAI;CAAE;CAClG,MAAM,aAA2D,CAAC;CAClE,MAAM,sCAAsB,IAAI,IAAY;CAC5C,KAAK,MAAM,SAAS,MAAM,MAAM,MAAM,GAAG;EACvC,MAAM,SAAS,kBAAkB,KAAK;EACtC,WAAW,KAAK,GAAG,OAAO,UAAU;EACpC,IAAI,OAAO,uBAAuB,KAAA,GAAW,oBAAoB,IAAI,OAAO,kBAAkB;CAChG;CACA,OAAO,OAAO,OAAO;EAAE,YAAY,OAAO,OAAO,UAAU;EAAG;CAAoB,CAAC;AACrF;AAEA,SAAS,kBAAkB,OAGzB;CACA,MAAM,QAAQ,6BAA6B,KAAK,KAAK;CACrD,IAAI,UAAU,MAAM,MAAM,IAAI,UAAU,8BAA8B,KAAK,UAAU,KAAK,GAAG;CAC7F,MAAM,WAAW,MAAM,MAAM;CAC7B,MAAM,OAAO,MAAM;CACnB,MAAM,UAAU,0EAA0E,KAAK,IAAI;CACnG,IAAI,YAAY,SAAS,QAAQ,OAAO,KAAA,KAAa,QAAQ,OAAO,KAAA,KAAa;EAAC,QAAQ;EAAI,QAAQ;EAAI,QAAQ;CAAE,CAAC,CAAC,KAAK,IAAI,IAAI;EACjI,IAAI,aAAa,KAAK;GACpB,KAAK,aAAa,OAAO,aAAa,QAAQ,CAAC,CAAC,QAAQ,IAAI,QAAQ,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG;IAClF,MAAM,QAAQ,QAAQ,OAAO,QAAQ,EAAE,GAAG,OAAO,QAAQ,EAAE,GAAG,QAAQ,OAAO,KAAA,KAAa,KAAK,QAAQ,EAAE,IAAI,IAAI,OAAO,QAAQ,EAAE,CAAC;IACnI,OAAO,QAAQ,OAAO,aAAa,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAQ,GAAG,CAAC,IAAI,WAAW,KAAK,CAAC;GACvG;GACA,MAAM,IAAI,UAAU,8BAA8B,KAAK,UAAU,QAAQ,GAAG;EAC9E;EACA,OAAO,cAAc,OAAO;CAC9B;CAEA,MAAM,SAAS,qBAAqB,IAAI;CACxC,MAAM,qBAAqB,OAAO,WAAW,WAAW,IAAI,KAAA,IAAY,QAAQ,MAAM;CACtF,IAAI,aAAa,KAAK,OAAO;EAAE,GAAG,QAAQ,QAAQ,WAAW,MAAM,CAAC;EAAG,GAAI,uBAAuB,KAAA,IAAY,CAAC,IAAI,EAAE,mBAAmB;CAAG;CAC3I,IAAI,aAAa,KAAK,OAAO;EAAE,GAAG,QAAQ,QAAQ,QAAQ,OAAO,OAAO,OAAO,QAAQ,GAAG,CAAC,CAAC;EAAG,GAAI,uBAAuB,KAAA,IAAY,CAAC,IAAI,EAAE,mBAAmB;CAAG;CACnK,MAAM,cAAc,cAA+B,wBAAwB,WAAW,MAAM;CAM5F,OAAO;EAAE,YAAY,CALH,aAAa,OAAO,cAA+B,WAAW,SAAS,MAAM,IAC3F,aAAa,OAAO,cAA+B,WAAW,SAAS,IAAI,IACzE,aAAa,QAAQ,cAA+B,WAAW,SAAS,KAAK,IAC3E,aAAa,OAAO,cAA+B,WAAW,SAAS,IAAI,KACxE,cAA+B,WAAW,SAAS,KAAK,CACpC;EAAG,GAAI,uBAAuB,KAAA,IAAY,CAAC,IAAI,EAAE,mBAAmB;CAAG;AACxG;AAEA,SAAS,cAAc,OAAqG;CAC1H,IAAI,KAAK,MAAM,EAAE,GAAG,OAAO,EAAE,YAAY,CAAC,EAAE;CAC5C,MAAM,QAAQ,OAAO,MAAM,EAAE;CAC7B,IAAI,MAAM,OAAO,KAAA,KAAa,KAAK,MAAM,EAAE,GAAG,OAAO,QAAQ,QAAQ,OAAO,GAAG,CAAC,GAAG,QAAQ,QAAQ,GAAG,GAAG,CAAC,CAAC;CAC3G,MAAM,QAAQ,OAAO,MAAM,EAAE;CAC7B,IAAI,MAAM,OAAO,KAAA,KAAa,KAAK,MAAM,EAAE,GAAG,OAAO,QAAQ,QAAQ,OAAO,OAAO,CAAC,GAAG,QAAQ,OAAO,QAAQ,GAAG,CAAC,CAAC;CACnH,MAAM,IAAI,UAAU,oCAAoC;AAC1D;AAEA,SAAS,QAAQ,OAAwB,OAAqG;CAC5I,OAAO,EAAE,YAAY,EACnB,cAAa,wBAAwB,WAAW,KAAK,KAAK,IAC1D,cAAa,wBAAwB,WAAW,KAAK,IAAI,CAC3D,EAAE;AACJ;AAEA,SAAS,WAAW,OAAyC;CAC3D,IAAI,MAAM,QAAQ,GAAG,OAAO,QAAQ,MAAM,QAAQ,GAAG,GAAG,CAAC;CACzD,IAAI,MAAM,QAAQ,GAAG,OAAO,QAAQ,GAAG,MAAM,QAAQ,GAAG,CAAC;CACzD,OAAO,QAAQ,GAAG,GAAG,MAAM,QAAQ,CAAC;AACtC;AAEA,SAAS,QAAQ,OAAe,OAAe,OAAgC;CAC7E,OAAO;EAAE;EAAO;EAAO;EAAO,YAAY,CAAC;EAAG,OAAO,CAAC;CAAE;AAC1D;AAEA,SAAS,KAAK,OAAoC;CAChD,OAAO,UAAU,OAAO,QAAQ,KAAK,SAAS,EAAE;AAClD;AAEA,SAAS,QAAQ,OAAgC;CAC/C,OAAO,GAAG,MAAM,MAAM,GAAG,MAAM,MAAM,GAAG,MAAM;AAChD;AAEA,SAAS,kBAAkB,MAAoC,OAA6C;CAC1G,IAAI,KAAK,WAAW,GAAG,OAAO,MAAM,WAAW,IAAI,IAAI;CACvD,IAAI,MAAM,WAAW,GAAG,OAAO;CAC/B,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,IAAI,KAAK,QAAQ,MAAM,MAAM,GAAG,SAAS,GAAG;EAC3E,MAAM,WAAW,KAAK;EACtB,MAAM,YAAY,MAAM;EACxB,IAAI,aAAa,KAAA,GAAW,OAAO;EACnC,IAAI,cAAc,KAAA,GAAW,OAAO;EACpC,IAAI,aAAa,WAAW;EAC5B,IAAI,OAAO,aAAa,YAAY,OAAO,cAAc,UAAU,OAAO;EAC1E,IAAI,OAAO,aAAa,YAAY,OAAO,cAAc,UAAU,OAAO;EAC1E,OAAO,WAAW,YAAY,KAAK;CACrC;CACA,OAAO;AACT"}
@@ -1,21 +1,21 @@
1
- {
2
- "name": "@dsh-std/core",
3
- "version": "0.1.0",
4
- "license": "MIT",
5
- "type": "module",
6
- "main": "lib/index.js",
7
- "types": "lib/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./lib/index.d.ts",
11
- "default": "./lib/index.js"
12
- }
13
- },
14
- "files": ["lib", "CHANGELOG.md"],
15
- "scripts": {
16
- "build": "pnpm run typecheck && tsdown",
17
- "typecheck": "tsc -p tsconfig.json --noEmit",
18
- "test": "vitest run"
19
- },
20
- "engines": { "node": "^22.19 || >=24" }
21
- }
1
+ {
2
+ "name": "@dsh-std/core",
3
+ "version": "0.1.0",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "main": "lib/index.js",
7
+ "types": "lib/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./lib/index.d.ts",
11
+ "default": "./lib/index.js"
12
+ }
13
+ },
14
+ "files": ["lib", "CHANGELOG.md"],
15
+ "scripts": {
16
+ "build": "pnpm run typecheck && tsdown",
17
+ "typecheck": "tsc -p tsconfig.json --noEmit",
18
+ "test": "vitest run"
19
+ },
20
+ "engines": { "node": "^22.19 || >=24" }
21
+ }
@@ -1,8 +1,8 @@
1
- # Changelog
2
-
3
- Changes to `@dsh-std/core` are recorded here.
4
-
5
- ## 0.1.0 (draft)
6
-
7
- - Defined protocol coordinates, participant declarations, definition catalogs, and negotiation reports.
8
- - Separated evaluator knowledge, requirements, potential support, and live support.
1
+ # Changelog
2
+
3
+ Changes to `@dsh-std/core` are recorded here.
4
+
5
+ ## 0.1.0 (draft)
6
+
7
+ - Defined protocol coordinates, participant declarations, definition catalogs, and negotiation reports.
8
+ - Separated evaluator knowledge, requirements, potential support, and live support.
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 DSH Standard contributors
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 DSH Standard contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,13 +1,13 @@
1
- # @dsh-std/core
2
-
3
- English | [中文](README.zh.md)
4
-
5
- The minimal meta-protocol for protocol declarations, definition registration, and negotiation. See the [Core Meta-protocol proposal](../../docs/proposals/core.zh.md).
6
-
7
- Core understands only `apiVersion`, `kind`, participants, requirements, supports, protocol definitions, and their agreements. It does not prescribe resources, capabilities, providers, execution planes, locality, endpoints, or plugin lifecycle.
8
-
9
- A `ProtocolCatalog` belongs to an evaluator. Each protocol definition explicitly lists accepted API versions, validates requirement/support `spec` values, and owns its negotiation logic. Core neither infers compatibility from a shared major version nor treats an installed definition as a live implementation.
10
-
11
- `defineProtocolDeclaration()` validates and freezes the requirements and supports currently published by one participant. Static component bounds belong to `@dsh-std/manifest`, selection to `@dsh-std/composition`, activation and the publication barrier to `@dsh-std/lifecycle`, and cross-endpoint offers to `@dsh-std/connection`.
12
-
13
- Provider selection, multi-party merging, catalogs, invocation bindings, and UI semantics remain owned by their protocol definitions or domain packages.
1
+ # @dsh-std/core
2
+
3
+ English | [中文](README.zh.md)
4
+
5
+ The minimal meta-protocol for protocol declarations, definition registration, and negotiation. See the [Core Meta-protocol proposal](../../docs/proposals/core.zh.md).
6
+
7
+ Core understands only `apiVersion`, `kind`, participants, requirements, supports, protocol definitions, and their agreements. It does not prescribe resources, capabilities, providers, execution planes, locality, endpoints, or plugin lifecycle.
8
+
9
+ A `ProtocolCatalog` belongs to an evaluator. Each protocol definition explicitly lists accepted API versions, validates requirement/support `spec` values, and owns its negotiation logic. Core neither infers compatibility from a shared major version nor treats an installed definition as a live implementation.
10
+
11
+ `defineProtocolDeclaration()` validates and freezes the requirements and supports currently published by one participant. Static component bounds belong to `@dsh-std/manifest`, selection to `@dsh-std/composition`, activation and the publication barrier to `@dsh-std/lifecycle`, and cross-endpoint offers to `@dsh-std/connection`.
12
+
13
+ Provider selection, multi-party merging, catalogs, invocation bindings, and UI semantics remain owned by their protocol definitions or domain packages.
@@ -1,13 +1,13 @@
1
- # @dsh-std/core
2
-
3
- [English](README.md) | 中文
4
-
5
- 协议声明、definition 注册与协商的最小元协议。设计见 [Core Meta-protocol](../../docs/proposals/core.zh.md)。
6
-
7
- Core 只认识 `apiVersion`、`kind`、participant、requirement、support、协议 definition 及其 agreement。它不预设 resource、capability、provider、execution plane、locality、endpoint 或插件生命周期。
8
-
9
- `ProtocolCatalog` 由评估器持有。每个协议 definition 明确列出接受的 API 版本,分别校验 requirement/support 的 `spec`,并拥有自己的协商逻辑。Core 不会从相同主版本推断兼容性,也不会把安装了一份 definition 当作已有 live implementation。
10
-
11
- `defineProtocolDeclaration()` 校验并冻结一个 participant 当前实际发布的 requirements 与 supports。静态组件上限属于 `@dsh-std/manifest`,选择属于 `@dsh-std/composition`,激活与 publication barrier 属于 `@dsh-std/lifecycle`,跨端点 offer 属于 `@dsh-std/connection`。
12
-
13
- 协议专属的 provider 选择、多项合并、目录、调用绑定和 UI 语义均由相应 definition 或独立协议包定义。
1
+ # @dsh-std/core
2
+
3
+ [English](README.md) | 中文
4
+
5
+ 协议声明、definition 注册与协商的最小元协议。设计见 [Core Meta-protocol](../../docs/proposals/core.zh.md)。
6
+
7
+ Core 只认识 `apiVersion`、`kind`、participant、requirement、support、协议 definition 及其 agreement。它不预设 resource、capability、provider、execution plane、locality、endpoint 或插件生命周期。
8
+
9
+ `ProtocolCatalog` 由评估器持有。每个协议 definition 明确列出接受的 API 版本,分别校验 requirement/support 的 `spec`,并拥有自己的协商逻辑。Core 不会从相同主版本推断兼容性,也不会把安装了一份 definition 当作已有 live implementation。
10
+
11
+ `defineProtocolDeclaration()` 校验并冻结一个 participant 当前实际发布的 requirements 与 supports。静态组件上限属于 `@dsh-std/manifest`,选择属于 `@dsh-std/composition`,激活与 publication barrier 属于 `@dsh-std/lifecycle`,跨端点 offer 属于 `@dsh-std/connection`。
12
+
13
+ 协议专属的 provider 选择、多项合并、目录、调用绑定和 UI 语义均由相应 definition 或独立协议包定义。
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["nonEmpty"],"sources":["../src/protocol.ts","../src/negotiation.ts","../src/version.ts"],"sourcesContent":["/** Domain-neutral protocol identities and live participant declarations. */\n\nexport interface ApiReference {\n readonly apiVersion: string\n readonly kind: string\n}\n\nexport interface ParticipantIdentity {\n /** Unique within the negotiation scope that carries this declaration. */\n readonly id: string\n}\n\nexport interface ProtocolRequirement<Spec = unknown> extends ApiReference {\n readonly optional?: boolean\n readonly spec?: Spec\n}\n\nexport interface ProtocolSupport<Spec = unknown> extends ApiReference {\n readonly spec?: Spec\n}\n\nexport interface ProtocolDeclaration {\n readonly participant: ParticipantIdentity\n readonly requires?: readonly ProtocolRequirement[]\n readonly supports?: readonly ProtocolSupport[]\n}\n\nexport interface ParsedApiVersion {\n readonly group: string\n readonly major: number\n readonly stability: 'alpha' | 'beta' | 'stable'\n readonly revision: number\n}\n\nexport function protocolKey(reference: ApiReference): string {\n return `${reference.apiVersion}\\0${reference.kind}`\n}\n\n/** A grouping key only. It does not claim that versions in the family interoperate. */\nexport function protocolFamilyKey(reference: ApiReference): string {\n const version = parseApiVersion(reference.apiVersion)\n return `${version.group}/v${version.major}\\0${reference.kind}`\n}\n\nexport function sameProtocol(left: ApiReference, right: ApiReference): boolean {\n return left.apiVersion === right.apiVersion && left.kind === right.kind\n}\n\nexport function parseApiVersion(value: string): ParsedApiVersion {\n const match = /^([a-z][a-z0-9.-]*)\\/v([1-9][0-9]*)(?:(alpha|beta)([1-9][0-9]*))?$/u.exec(value)\n if (match === null) throw new TypeError(`invalid apiVersion ${JSON.stringify(value)}`)\n return Object.freeze({\n group: match[1] as string,\n major: Number(match[2]),\n stability: (match[3] ?? 'stable') as ParsedApiVersion['stability'],\n revision: match[4] === undefined ? 0 : Number(match[4]),\n })\n}\n\nexport function validateApiReference(value: unknown, label = 'protocol reference'): asserts value is ApiReference {\n if (!record(value)) throw new TypeError(`${label} must be an object`)\n if (typeof value.apiVersion !== 'string') throw new TypeError(`${label}.apiVersion must be a string`)\n parseApiVersion(value.apiVersion)\n if (typeof value.kind !== 'string' || !/^[A-Z][A-Za-z0-9]*$/u.test(value.kind)) {\n throw new TypeError(`${label}.kind is invalid`)\n }\n}\n\nexport function validateProtocolDeclaration(value: unknown): asserts value is ProtocolDeclaration {\n if (!record(value)) throw new TypeError('protocol declaration must be an object')\n exact(value, ['participant', 'requires', 'supports'], 'protocol declaration')\n if (!record(value.participant)) throw new TypeError('protocol declaration participant must be an object')\n exact(value.participant, ['id'], 'participant identity')\n nonEmpty(value.participant.id, 'participant identity.id')\n validateRows(value.requires, true)\n validateRows(value.supports, false)\n}\n\nexport function defineProtocolDeclaration<const T extends ProtocolDeclaration>(declaration: T): T {\n validateProtocolDeclaration(declaration)\n return deepFreeze(structuredClone(declaration))\n}\n\nfunction validateRows(value: unknown, requirement: boolean): void {\n if (value === undefined) return\n const label = requirement ? 'protocol requirements' : 'protocol supports'\n if (!Array.isArray(value)) throw new TypeError(`${label} must be an array`)\n const seen = new Set<string>()\n for (const [index, rowValue] of value.entries()) {\n const rowLabel = `${label}[${index}]`\n validateApiReference(rowValue, rowLabel)\n const row = rowValue as unknown as Record<string, unknown>\n exact(row, requirement ? ['apiVersion', 'kind', 'optional', 'spec'] : ['apiVersion', 'kind', 'spec'], rowLabel)\n if (requirement && row.optional !== undefined && typeof row.optional !== 'boolean') {\n throw new TypeError(`${rowLabel}.optional must be boolean`)\n }\n const key = protocolKey(row as unknown as ApiReference)\n if (seen.has(key)) throw new TypeError(`${label} contains duplicate ${JSON.stringify(key)}`)\n seen.add(key)\n }\n}\n\nfunction nonEmpty(value: unknown, label: string): asserts value is string {\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError(`${label} must be a non-empty string`)\n}\n\nfunction record(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction exact(value: Record<string, unknown>, allowed: readonly string[], label: string): void {\n const unknown = Object.keys(value).filter(key => !allowed.includes(key) && !key.startsWith('x-'))\n if (unknown.length > 0) throw new TypeError(`${label} contains unknown field ${JSON.stringify(unknown[0])}`)\n}\n\nfunction deepFreeze<T>(value: T): T {\n if (typeof value !== 'object' || value === null || Object.isFrozen(value)) return value\n Object.freeze(value)\n for (const child of Object.values(value)) deepFreeze(child)\n return value\n}\n","import {\n protocolKey,\n validateApiReference,\n validateProtocolDeclaration,\n type ApiReference,\n type ProtocolDeclaration,\n type ProtocolRequirement,\n type ProtocolSupport,\n} from './protocol.js'\n\nexport interface EvaluatorIdentity {\n readonly name: string\n readonly version: string\n}\n\nexport interface ProtocolRequirementEntry<Spec = unknown> {\n readonly participant: string\n readonly requirement: ProtocolRequirement<Spec>\n}\n\nexport interface ProtocolSupportEntry<Spec = unknown> {\n readonly participant: string\n readonly support: ProtocolSupport<Spec>\n}\n\nexport interface ProtocolIssue {\n readonly code: string\n readonly severity: 'error' | 'warning'\n readonly participant?: string\n readonly path?: string\n readonly message: string\n}\n\nexport interface ProtocolNegotiationInput<RequirementSpec = unknown, SupportSpec = unknown, Policy = unknown> {\n readonly requirements: readonly ProtocolRequirementEntry<RequirementSpec>[]\n readonly supports: readonly ProtocolSupportEntry<SupportSpec>[]\n readonly policy?: Policy\n}\n\nexport interface ProtocolNegotiationOutcome<Agreement = unknown> {\n readonly agreement?: Agreement\n readonly issues?: readonly ProtocolIssue[]\n}\n\nexport interface ProtocolDefinition<RequirementSpec = unknown, SupportSpec = unknown, Agreement = unknown, Policy = unknown>\n extends ApiReference {\n /** Every accepted wire/static API version. No compatibility is inferred by core. */\n readonly accepts?: readonly string[]\n validateRequirement(spec: unknown): RequirementSpec\n validateSupport(spec: unknown): SupportSpec\n negotiate(\n input: ProtocolNegotiationInput<RequirementSpec, SupportSpec, Policy>,\n ): ProtocolNegotiationOutcome<Agreement>\n}\n\nexport interface NegotiatedProtocol<Agreement = unknown> extends ApiReference {\n readonly participants: readonly string[]\n readonly agreement?: Agreement\n readonly issues: readonly ProtocolIssue[]\n}\n\nexport interface NegotiationReport {\n readonly apiVersion: 'core.dsh/report/v1alpha1'\n readonly evaluator: EvaluatorIdentity\n readonly compatible: boolean\n readonly protocols: readonly NegotiatedProtocol[]\n readonly issues: readonly ProtocolIssue[]\n}\n\ninterface StoredDefinition {\n readonly definition: ProtocolDefinition\n readonly accepted: ReadonlySet<string>\n}\n\nexport class ProtocolCatalog {\n private readonly definitions = new Map<string, StoredDefinition>()\n\n constructor(readonly evaluator: EvaluatorIdentity) {\n nonEmpty(evaluator.name, 'evaluator.name')\n nonEmpty(evaluator.version, 'evaluator.version')\n }\n\n register(definition: ProtocolDefinition): () => void {\n validateDefinition(definition)\n const accepted = new Set([definition.apiVersion, ...(definition.accepts ?? [])])\n for (const version of accepted) {\n const key = protocolKey({ apiVersion: version, kind: definition.kind })\n if (this.definitions.has(key)) {\n throw new Error(`protocol definition for ${version} ${definition.kind} is already registered`)\n }\n }\n const stored = Object.freeze({ definition: freezeDefinition(definition), accepted: new Set(accepted) })\n for (const version of accepted) this.definitions.set(protocolKey({ apiVersion: version, kind: definition.kind }), stored)\n return () => {\n for (const version of accepted) {\n const key = protocolKey({ apiVersion: version, kind: definition.kind })\n if (this.definitions.get(key) === stored) this.definitions.delete(key)\n }\n }\n }\n\n list(): readonly ProtocolDefinition[] {\n return Object.freeze([...new Set([...this.definitions.values()].map(row => row.definition))])\n }\n\n resolve(reference: ApiReference): ProtocolDefinition | undefined {\n validateApiReference(reference)\n return this.definitions.get(protocolKey(reference))?.definition\n }\n\n understands(reference: ApiReference): boolean {\n return this.resolve(reference) !== undefined\n }\n\n negotiate(declarations: readonly ProtocolDeclaration[], policy?: unknown): NegotiationReport {\n const participantIds = new Set<string>()\n for (const declaration of declarations) {\n validateProtocolDeclaration(declaration)\n if (participantIds.has(declaration.participant.id)) {\n throw new TypeError(`duplicate participant identity ${JSON.stringify(declaration.participant.id)}`)\n }\n participantIds.add(declaration.participant.id)\n }\n\n const groups = new Map<StoredDefinition, {\n requirements: ProtocolRequirementEntry[]\n supports: ProtocolSupportEntry[]\n }>()\n const issues: ProtocolIssue[] = []\n for (const [declarationIndex, declaration] of declarations.entries()) {\n for (const [index, requirement] of (declaration.requires ?? []).entries()) {\n const stored = this.definitions.get(protocolKey(requirement))\n if (stored === undefined) {\n issues.push(freezeIssue({\n code: 'definition-unavailable',\n severity: requirement.optional === true ? 'warning' : 'error',\n participant: declaration.participant.id,\n path: `/declarations/${declarationIndex}/requires/${index}`,\n message: `no definition recognizes ${requirement.apiVersion} ${requirement.kind}`,\n }))\n continue\n }\n const group = groups.get(stored) ?? { requirements: [], supports: [] }\n try {\n group.requirements.push(Object.freeze({\n participant: declaration.participant.id,\n requirement: Object.freeze({\n ...requirement,\n ...(Object.hasOwn(requirement, 'spec')\n ? { spec: stored.definition.validateRequirement(requirement.spec) }\n : { spec: stored.definition.validateRequirement(undefined) }),\n }),\n }))\n } catch (error) {\n issues.push(freezeIssue({\n code: 'invalid-requirement', severity: 'error', participant: declaration.participant.id,\n path: `/declarations/${declarationIndex}/requires/${index}/spec`, message: errorMessage(error),\n }))\n }\n groups.set(stored, group)\n }\n for (const [index, support] of (declaration.supports ?? []).entries()) {\n const stored = this.definitions.get(protocolKey(support))\n if (stored === undefined) {\n issues.push(freezeIssue({\n code: 'definition-unavailable', severity: 'warning', participant: declaration.participant.id,\n path: `/declarations/${declarationIndex}/supports/${index}`,\n message: `no definition recognizes ${support.apiVersion} ${support.kind}`,\n }))\n continue\n }\n const group = groups.get(stored) ?? { requirements: [], supports: [] }\n try {\n group.supports.push(Object.freeze({\n participant: declaration.participant.id,\n support: Object.freeze({\n ...support,\n ...(Object.hasOwn(support, 'spec')\n ? { spec: stored.definition.validateSupport(support.spec) }\n : { spec: stored.definition.validateSupport(undefined) }),\n }),\n }))\n } catch (error) {\n issues.push(freezeIssue({\n code: 'invalid-support', severity: 'error', participant: declaration.participant.id,\n path: `/declarations/${declarationIndex}/supports/${index}/spec`, message: errorMessage(error),\n }))\n }\n groups.set(stored, group)\n }\n }\n\n const protocols: NegotiatedProtocol[] = []\n for (const stored of [...groups.keys()].sort((left, right) => protocolKey(left.definition).localeCompare(protocolKey(right.definition)))) {\n const group = groups.get(stored) as NonNullable<ReturnType<typeof groups.get>>\n let outcome: ProtocolNegotiationOutcome\n try {\n outcome = stored.definition.negotiate(Object.freeze({\n requirements: Object.freeze([...group.requirements]),\n supports: Object.freeze([...group.supports]),\n ...(policy === undefined ? {} : { policy }),\n }))\n } catch (error) {\n outcome = { issues: [{ code: 'definition-failed', severity: 'error', message: errorMessage(error) }] }\n }\n const protocolIssues = Object.freeze((outcome.issues ?? []).map(freezeIssue))\n issues.push(...protocolIssues)\n protocols.push(Object.freeze({\n apiVersion: stored.definition.apiVersion,\n kind: stored.definition.kind,\n participants: Object.freeze([...new Set([\n ...group.requirements.map(row => row.participant),\n ...group.supports.map(row => row.participant),\n ])].sort()),\n ...(Object.hasOwn(outcome, 'agreement') ? { agreement: outcome.agreement } : {}),\n issues: protocolIssues,\n }))\n }\n\n return Object.freeze({\n apiVersion: 'core.dsh/report/v1alpha1',\n evaluator: Object.freeze({ ...this.evaluator }),\n compatible: !issues.some(issue => issue.severity === 'error'),\n protocols: Object.freeze(protocols),\n issues: Object.freeze(issues),\n })\n }\n}\n\nfunction validateDefinition(definition: ProtocolDefinition): void {\n validateApiReference(definition, 'protocol definition')\n if (typeof definition.validateRequirement !== 'function'\n || typeof definition.validateSupport !== 'function'\n || typeof definition.negotiate !== 'function') {\n throw new TypeError('protocol definition must provide validators and negotiate')\n }\n const versions = [definition.apiVersion, ...(definition.accepts ?? [])]\n if (new Set(versions).size !== versions.length) throw new TypeError('protocol definition accepts duplicate versions')\n for (const version of versions) validateApiReference({ apiVersion: version, kind: definition.kind })\n}\n\nfunction freezeDefinition(definition: ProtocolDefinition): ProtocolDefinition {\n return Object.freeze({ ...definition, ...(definition.accepts === undefined ? {} : { accepts: Object.freeze([...definition.accepts]) }) })\n}\n\nfunction freezeIssue(issue: ProtocolIssue): ProtocolIssue {\n if (issue.severity !== 'error' && issue.severity !== 'warning') throw new TypeError('protocol issue severity is invalid')\n nonEmpty(issue.code, 'protocol issue.code')\n nonEmpty(issue.message, 'protocol issue.message')\n return Object.freeze({ ...issue })\n}\n\nfunction nonEmpty(value: unknown, label: string): asserts value is string {\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError(`${label} must be a non-empty string`)\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error)\n}\n","export interface SemanticVersion {\n readonly major: number\n readonly minor: number\n readonly patch: number\n readonly prerelease: readonly (string | number)[]\n readonly build: readonly string[]\n}\n\nexport type VersionRange = string | readonly string[]\n\nexport function parseSemanticVersion(value: string): SemanticVersion {\n const match = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/u.exec(value)\n if (match === null) throw new TypeError(`invalid semantic version ${JSON.stringify(value)}`)\n const prerelease = match[4] === undefined ? [] : match[4].split('.').map(identifier => {\n if (!/^\\d+$/u.test(identifier)) return identifier\n if (identifier.length > 1 && identifier.startsWith('0')) throw new TypeError(`invalid semantic version ${JSON.stringify(value)}`)\n return Number(identifier)\n })\n return Object.freeze({\n major: Number(match[1]), minor: Number(match[2]), patch: Number(match[3]),\n prerelease: Object.freeze(prerelease),\n build: Object.freeze(match[5] === undefined ? [] : match[5].split('.')),\n })\n}\n\nexport function compareSemanticVersions(leftValue: string | SemanticVersion, rightValue: string | SemanticVersion): number {\n const left = typeof leftValue === 'string' ? parseSemanticVersion(leftValue) : leftValue\n const right = typeof rightValue === 'string' ? parseSemanticVersion(rightValue) : rightValue\n return left.major - right.major\n || left.minor - right.minor\n || left.patch - right.patch\n || comparePrerelease(left.prerelease, right.prerelease)\n}\n\nexport function assertVersionRange(range: VersionRange): void {\n compileRange(range)\n}\n\nexport function satisfiesVersionRange(versionValue: string, range: VersionRange): boolean {\n const version = parseSemanticVersion(versionValue)\n return compileRange(range).some(group => {\n if (version.prerelease.length > 0 && !group.explicitPrereleases.has(coreKey(version))) return false\n return group.predicates.every(predicate => predicate(version))\n })\n}\n\ninterface ComparatorGroup {\n readonly predicates: readonly ((version: SemanticVersion) => boolean)[]\n readonly explicitPrereleases: ReadonlySet<string>\n}\n\nfunction compileRange(range: VersionRange): readonly ComparatorGroup[] {\n const values = typeof range === 'string' ? [range] : range\n if (!Array.isArray(values) || values.length === 0) throw new TypeError('version range must be a string or non-empty array')\n return Object.freeze(values.flatMap(value => {\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError('version range must not be empty')\n return value.split('||').map(part => compileGroup(part.trim()))\n }))\n}\n\nfunction compileGroup(value: string): ComparatorGroup {\n if (value === '') throw new TypeError('version range contains an empty alternative')\n if (value === '*' || /^x$/iu.test(value)) return { predicates: [], explicitPrereleases: new Set() }\n const predicates: Array<(version: SemanticVersion) => boolean> = []\n const explicitPrereleases = new Set<string>()\n for (const token of value.split(/\\s+/u)) {\n const parsed = compileComparator(token)\n predicates.push(...parsed.predicates)\n if (parsed.explicitPrerelease !== undefined) explicitPrereleases.add(parsed.explicitPrerelease)\n }\n return Object.freeze({ predicates: Object.freeze(predicates), explicitPrereleases })\n}\n\nfunction compileComparator(token: string): {\n readonly predicates: readonly ((version: SemanticVersion) => boolean)[]\n readonly explicitPrerelease?: string\n} {\n const match = /^(<=|>=|<|>|=|\\^|~)?(.+)$/u.exec(token)\n if (match === null) throw new TypeError(`invalid version comparator ${JSON.stringify(token)}`)\n const operator = match[1] ?? '='\n const body = match[2] as string\n const partial = /^(0|[1-9]\\d*|[xX*])(?:\\.(0|[1-9]\\d*|[xX*]))?(?:\\.(0|[1-9]\\d*|[xX*]))?$/u.exec(body)\n if (partial !== null && (partial[2] === undefined || partial[3] === undefined || [partial[1], partial[2], partial[3]].some(wild))) {\n if (operator !== '=') {\n if ((operator === '~' || operator === '^') && ![partial[1], partial[2]].some(wild)) {\n const lower = version(Number(partial[1]), Number(partial[2]), partial[3] === undefined || wild(partial[3]) ? 0 : Number(partial[3]))\n return bounded(lower, operator === '~' ? version(lower.major, lower.minor + 1, 0) : caretUpper(lower))\n }\n throw new TypeError(`partial version cannot use ${JSON.stringify(operator)}`)\n }\n return wildcardRange(partial)\n }\n\n const target = parseSemanticVersion(body)\n const explicitPrerelease = target.prerelease.length === 0 ? undefined : coreKey(target)\n if (operator === '^') return { ...bounded(target, caretUpper(target)), ...(explicitPrerelease === undefined ? {} : { explicitPrerelease }) }\n if (operator === '~') return { ...bounded(target, version(target.major, target.minor + 1, 0)), ...(explicitPrerelease === undefined ? {} : { explicitPrerelease }) }\n const comparison = (candidate: SemanticVersion) => compareSemanticVersions(candidate, target)\n const predicate = operator === '=' ? (candidate: SemanticVersion) => comparison(candidate) === 0\n : operator === '<' ? (candidate: SemanticVersion) => comparison(candidate) < 0\n : operator === '<=' ? (candidate: SemanticVersion) => comparison(candidate) <= 0\n : operator === '>' ? (candidate: SemanticVersion) => comparison(candidate) > 0\n : (candidate: SemanticVersion) => comparison(candidate) >= 0\n return { predicates: [predicate], ...(explicitPrerelease === undefined ? {} : { explicitPrerelease }) }\n}\n\nfunction wildcardRange(match: RegExpExecArray): { readonly predicates: readonly ((version: SemanticVersion) => boolean)[] } {\n if (wild(match[1])) return { predicates: [] }\n const major = Number(match[1])\n if (match[2] === undefined || wild(match[2])) return bounded(version(major, 0, 0), version(major + 1, 0, 0))\n const minor = Number(match[2])\n if (match[3] === undefined || wild(match[3])) return bounded(version(major, minor, 0), version(major, minor + 1, 0))\n throw new TypeError('unreachable complete version range')\n}\n\nfunction bounded(lower: SemanticVersion, upper: SemanticVersion): { readonly predicates: readonly ((version: SemanticVersion) => boolean)[] } {\n return { predicates: [\n candidate => compareSemanticVersions(candidate, lower) >= 0,\n candidate => compareSemanticVersions(candidate, upper) < 0,\n ] }\n}\n\nfunction caretUpper(lower: SemanticVersion): SemanticVersion {\n if (lower.major > 0) return version(lower.major + 1, 0, 0)\n if (lower.minor > 0) return version(0, lower.minor + 1, 0)\n return version(0, 0, lower.patch + 1)\n}\n\nfunction version(major: number, minor: number, patch: number): SemanticVersion {\n return { major, minor, patch, prerelease: [], build: [] }\n}\n\nfunction wild(value: string | undefined): boolean {\n return value === '*' || /^x$/iu.test(value ?? '')\n}\n\nfunction coreKey(value: SemanticVersion): string {\n return `${value.major}.${value.minor}.${value.patch}`\n}\n\nfunction comparePrerelease(left: readonly (string | number)[], right: readonly (string | number)[]): number {\n if (left.length === 0) return right.length === 0 ? 0 : 1\n if (right.length === 0) return -1\n for (let index = 0; index < Math.max(left.length, right.length); index += 1) {\n const leftPart = left[index]\n const rightPart = right[index]\n if (leftPart === undefined) return -1\n if (rightPart === undefined) return 1\n if (leftPart === rightPart) continue\n if (typeof leftPart === 'number' && typeof rightPart === 'string') return -1\n if (typeof leftPart === 'string' && typeof rightPart === 'number') return 1\n return leftPart < rightPart ? -1 : 1\n }\n return 0\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["nonEmpty"],"sources":["../src/protocol.ts","../src/negotiation.ts","../src/version.ts"],"sourcesContent":["/** Domain-neutral protocol identities and live participant declarations. */\r\n\r\nexport interface ApiReference {\r\n readonly apiVersion: string\r\n readonly kind: string\r\n}\r\n\r\nexport interface ParticipantIdentity {\r\n /** Unique within the negotiation scope that carries this declaration. */\r\n readonly id: string\r\n}\r\n\r\nexport interface ProtocolRequirement<Spec = unknown> extends ApiReference {\r\n readonly optional?: boolean\r\n readonly spec?: Spec\r\n}\r\n\r\nexport interface ProtocolSupport<Spec = unknown> extends ApiReference {\r\n readonly spec?: Spec\r\n}\r\n\r\nexport interface ProtocolDeclaration {\r\n readonly participant: ParticipantIdentity\r\n readonly requires?: readonly ProtocolRequirement[]\r\n readonly supports?: readonly ProtocolSupport[]\r\n}\r\n\r\nexport interface ParsedApiVersion {\r\n readonly group: string\r\n readonly major: number\r\n readonly stability: 'alpha' | 'beta' | 'stable'\r\n readonly revision: number\r\n}\r\n\r\nexport function protocolKey(reference: ApiReference): string {\r\n return `${reference.apiVersion}\\0${reference.kind}`\r\n}\r\n\r\n/** A grouping key only. It does not claim that versions in the family interoperate. */\r\nexport function protocolFamilyKey(reference: ApiReference): string {\r\n const version = parseApiVersion(reference.apiVersion)\r\n return `${version.group}/v${version.major}\\0${reference.kind}`\r\n}\r\n\r\nexport function sameProtocol(left: ApiReference, right: ApiReference): boolean {\r\n return left.apiVersion === right.apiVersion && left.kind === right.kind\r\n}\r\n\r\nexport function parseApiVersion(value: string): ParsedApiVersion {\r\n const match = /^([a-z][a-z0-9.-]*)\\/v([1-9][0-9]*)(?:(alpha|beta)([1-9][0-9]*))?$/u.exec(value)\r\n if (match === null) throw new TypeError(`invalid apiVersion ${JSON.stringify(value)}`)\r\n return Object.freeze({\r\n group: match[1] as string,\r\n major: Number(match[2]),\r\n stability: (match[3] ?? 'stable') as ParsedApiVersion['stability'],\r\n revision: match[4] === undefined ? 0 : Number(match[4]),\r\n })\r\n}\r\n\r\nexport function validateApiReference(value: unknown, label = 'protocol reference'): asserts value is ApiReference {\r\n if (!record(value)) throw new TypeError(`${label} must be an object`)\r\n if (typeof value.apiVersion !== 'string') throw new TypeError(`${label}.apiVersion must be a string`)\r\n parseApiVersion(value.apiVersion)\r\n if (typeof value.kind !== 'string' || !/^[A-Z][A-Za-z0-9]*$/u.test(value.kind)) {\r\n throw new TypeError(`${label}.kind is invalid`)\r\n }\r\n}\r\n\r\nexport function validateProtocolDeclaration(value: unknown): asserts value is ProtocolDeclaration {\r\n if (!record(value)) throw new TypeError('protocol declaration must be an object')\r\n exact(value, ['participant', 'requires', 'supports'], 'protocol declaration')\r\n if (!record(value.participant)) throw new TypeError('protocol declaration participant must be an object')\r\n exact(value.participant, ['id'], 'participant identity')\r\n nonEmpty(value.participant.id, 'participant identity.id')\r\n validateRows(value.requires, true)\r\n validateRows(value.supports, false)\r\n}\r\n\r\nexport function defineProtocolDeclaration<const T extends ProtocolDeclaration>(declaration: T): T {\r\n validateProtocolDeclaration(declaration)\r\n return deepFreeze(structuredClone(declaration))\r\n}\r\n\r\nfunction validateRows(value: unknown, requirement: boolean): void {\r\n if (value === undefined) return\r\n const label = requirement ? 'protocol requirements' : 'protocol supports'\r\n if (!Array.isArray(value)) throw new TypeError(`${label} must be an array`)\r\n const seen = new Set<string>()\r\n for (const [index, rowValue] of value.entries()) {\r\n const rowLabel = `${label}[${index}]`\r\n validateApiReference(rowValue, rowLabel)\r\n const row = rowValue as unknown as Record<string, unknown>\r\n exact(row, requirement ? ['apiVersion', 'kind', 'optional', 'spec'] : ['apiVersion', 'kind', 'spec'], rowLabel)\r\n if (requirement && row.optional !== undefined && typeof row.optional !== 'boolean') {\r\n throw new TypeError(`${rowLabel}.optional must be boolean`)\r\n }\r\n const key = protocolKey(row as unknown as ApiReference)\r\n if (seen.has(key)) throw new TypeError(`${label} contains duplicate ${JSON.stringify(key)}`)\r\n seen.add(key)\r\n }\r\n}\r\n\r\nfunction nonEmpty(value: unknown, label: string): asserts value is string {\r\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError(`${label} must be a non-empty string`)\r\n}\r\n\r\nfunction record(value: unknown): value is Record<string, unknown> {\r\n return typeof value === 'object' && value !== null && !Array.isArray(value)\r\n}\r\n\r\nfunction exact(value: Record<string, unknown>, allowed: readonly string[], label: string): void {\r\n const unknown = Object.keys(value).filter(key => !allowed.includes(key) && !key.startsWith('x-'))\r\n if (unknown.length > 0) throw new TypeError(`${label} contains unknown field ${JSON.stringify(unknown[0])}`)\r\n}\r\n\r\nfunction deepFreeze<T>(value: T): T {\r\n if (typeof value !== 'object' || value === null || Object.isFrozen(value)) return value\r\n Object.freeze(value)\r\n for (const child of Object.values(value)) deepFreeze(child)\r\n return value\r\n}\r\n","import {\r\n protocolKey,\r\n validateApiReference,\r\n validateProtocolDeclaration,\r\n type ApiReference,\r\n type ProtocolDeclaration,\r\n type ProtocolRequirement,\r\n type ProtocolSupport,\r\n} from './protocol.js'\r\n\r\nexport interface EvaluatorIdentity {\r\n readonly name: string\r\n readonly version: string\r\n}\r\n\r\nexport interface ProtocolRequirementEntry<Spec = unknown> {\r\n readonly participant: string\r\n readonly requirement: ProtocolRequirement<Spec>\r\n}\r\n\r\nexport interface ProtocolSupportEntry<Spec = unknown> {\r\n readonly participant: string\r\n readonly support: ProtocolSupport<Spec>\r\n}\r\n\r\nexport interface ProtocolIssue {\r\n readonly code: string\r\n readonly severity: 'error' | 'warning'\r\n readonly participant?: string\r\n readonly path?: string\r\n readonly message: string\r\n}\r\n\r\nexport interface ProtocolNegotiationInput<RequirementSpec = unknown, SupportSpec = unknown, Policy = unknown> {\r\n readonly requirements: readonly ProtocolRequirementEntry<RequirementSpec>[]\r\n readonly supports: readonly ProtocolSupportEntry<SupportSpec>[]\r\n readonly policy?: Policy\r\n}\r\n\r\nexport interface ProtocolNegotiationOutcome<Agreement = unknown> {\r\n readonly agreement?: Agreement\r\n readonly issues?: readonly ProtocolIssue[]\r\n}\r\n\r\nexport interface ProtocolDefinition<RequirementSpec = unknown, SupportSpec = unknown, Agreement = unknown, Policy = unknown>\r\n extends ApiReference {\r\n /** Every accepted wire/static API version. No compatibility is inferred by core. */\r\n readonly accepts?: readonly string[]\r\n validateRequirement(spec: unknown): RequirementSpec\r\n validateSupport(spec: unknown): SupportSpec\r\n negotiate(\r\n input: ProtocolNegotiationInput<RequirementSpec, SupportSpec, Policy>,\r\n ): ProtocolNegotiationOutcome<Agreement>\r\n}\r\n\r\nexport interface NegotiatedProtocol<Agreement = unknown> extends ApiReference {\r\n readonly participants: readonly string[]\r\n readonly agreement?: Agreement\r\n readonly issues: readonly ProtocolIssue[]\r\n}\r\n\r\nexport interface NegotiationReport {\r\n readonly apiVersion: 'core.dsh/report/v1alpha1'\r\n readonly evaluator: EvaluatorIdentity\r\n readonly compatible: boolean\r\n readonly protocols: readonly NegotiatedProtocol[]\r\n readonly issues: readonly ProtocolIssue[]\r\n}\r\n\r\ninterface StoredDefinition {\r\n readonly definition: ProtocolDefinition\r\n readonly accepted: ReadonlySet<string>\r\n}\r\n\r\nexport class ProtocolCatalog {\r\n private readonly definitions = new Map<string, StoredDefinition>()\r\n\r\n constructor(readonly evaluator: EvaluatorIdentity) {\r\n nonEmpty(evaluator.name, 'evaluator.name')\r\n nonEmpty(evaluator.version, 'evaluator.version')\r\n }\r\n\r\n register(definition: ProtocolDefinition): () => void {\r\n validateDefinition(definition)\r\n const accepted = new Set([definition.apiVersion, ...(definition.accepts ?? [])])\r\n for (const version of accepted) {\r\n const key = protocolKey({ apiVersion: version, kind: definition.kind })\r\n if (this.definitions.has(key)) {\r\n throw new Error(`protocol definition for ${version} ${definition.kind} is already registered`)\r\n }\r\n }\r\n const stored = Object.freeze({ definition: freezeDefinition(definition), accepted: new Set(accepted) })\r\n for (const version of accepted) this.definitions.set(protocolKey({ apiVersion: version, kind: definition.kind }), stored)\r\n return () => {\r\n for (const version of accepted) {\r\n const key = protocolKey({ apiVersion: version, kind: definition.kind })\r\n if (this.definitions.get(key) === stored) this.definitions.delete(key)\r\n }\r\n }\r\n }\r\n\r\n list(): readonly ProtocolDefinition[] {\r\n return Object.freeze([...new Set([...this.definitions.values()].map(row => row.definition))])\r\n }\r\n\r\n resolve(reference: ApiReference): ProtocolDefinition | undefined {\r\n validateApiReference(reference)\r\n return this.definitions.get(protocolKey(reference))?.definition\r\n }\r\n\r\n understands(reference: ApiReference): boolean {\r\n return this.resolve(reference) !== undefined\r\n }\r\n\r\n negotiate(declarations: readonly ProtocolDeclaration[], policy?: unknown): NegotiationReport {\r\n const participantIds = new Set<string>()\r\n for (const declaration of declarations) {\r\n validateProtocolDeclaration(declaration)\r\n if (participantIds.has(declaration.participant.id)) {\r\n throw new TypeError(`duplicate participant identity ${JSON.stringify(declaration.participant.id)}`)\r\n }\r\n participantIds.add(declaration.participant.id)\r\n }\r\n\r\n const groups = new Map<StoredDefinition, {\r\n requirements: ProtocolRequirementEntry[]\r\n supports: ProtocolSupportEntry[]\r\n }>()\r\n const issues: ProtocolIssue[] = []\r\n for (const [declarationIndex, declaration] of declarations.entries()) {\r\n for (const [index, requirement] of (declaration.requires ?? []).entries()) {\r\n const stored = this.definitions.get(protocolKey(requirement))\r\n if (stored === undefined) {\r\n issues.push(freezeIssue({\r\n code: 'definition-unavailable',\r\n severity: requirement.optional === true ? 'warning' : 'error',\r\n participant: declaration.participant.id,\r\n path: `/declarations/${declarationIndex}/requires/${index}`,\r\n message: `no definition recognizes ${requirement.apiVersion} ${requirement.kind}`,\r\n }))\r\n continue\r\n }\r\n const group = groups.get(stored) ?? { requirements: [], supports: [] }\r\n try {\r\n group.requirements.push(Object.freeze({\r\n participant: declaration.participant.id,\r\n requirement: Object.freeze({\r\n ...requirement,\r\n ...(Object.hasOwn(requirement, 'spec')\r\n ? { spec: stored.definition.validateRequirement(requirement.spec) }\r\n : { spec: stored.definition.validateRequirement(undefined) }),\r\n }),\r\n }))\r\n } catch (error) {\r\n issues.push(freezeIssue({\r\n code: 'invalid-requirement', severity: 'error', participant: declaration.participant.id,\r\n path: `/declarations/${declarationIndex}/requires/${index}/spec`, message: errorMessage(error),\r\n }))\r\n }\r\n groups.set(stored, group)\r\n }\r\n for (const [index, support] of (declaration.supports ?? []).entries()) {\r\n const stored = this.definitions.get(protocolKey(support))\r\n if (stored === undefined) {\r\n issues.push(freezeIssue({\r\n code: 'definition-unavailable', severity: 'warning', participant: declaration.participant.id,\r\n path: `/declarations/${declarationIndex}/supports/${index}`,\r\n message: `no definition recognizes ${support.apiVersion} ${support.kind}`,\r\n }))\r\n continue\r\n }\r\n const group = groups.get(stored) ?? { requirements: [], supports: [] }\r\n try {\r\n group.supports.push(Object.freeze({\r\n participant: declaration.participant.id,\r\n support: Object.freeze({\r\n ...support,\r\n ...(Object.hasOwn(support, 'spec')\r\n ? { spec: stored.definition.validateSupport(support.spec) }\r\n : { spec: stored.definition.validateSupport(undefined) }),\r\n }),\r\n }))\r\n } catch (error) {\r\n issues.push(freezeIssue({\r\n code: 'invalid-support', severity: 'error', participant: declaration.participant.id,\r\n path: `/declarations/${declarationIndex}/supports/${index}/spec`, message: errorMessage(error),\r\n }))\r\n }\r\n groups.set(stored, group)\r\n }\r\n }\r\n\r\n const protocols: NegotiatedProtocol[] = []\r\n for (const stored of [...groups.keys()].sort((left, right) => protocolKey(left.definition).localeCompare(protocolKey(right.definition)))) {\r\n const group = groups.get(stored) as NonNullable<ReturnType<typeof groups.get>>\r\n let outcome: ProtocolNegotiationOutcome\r\n try {\r\n outcome = stored.definition.negotiate(Object.freeze({\r\n requirements: Object.freeze([...group.requirements]),\r\n supports: Object.freeze([...group.supports]),\r\n ...(policy === undefined ? {} : { policy }),\r\n }))\r\n } catch (error) {\r\n outcome = { issues: [{ code: 'definition-failed', severity: 'error', message: errorMessage(error) }] }\r\n }\r\n const protocolIssues = Object.freeze((outcome.issues ?? []).map(freezeIssue))\r\n issues.push(...protocolIssues)\r\n protocols.push(Object.freeze({\r\n apiVersion: stored.definition.apiVersion,\r\n kind: stored.definition.kind,\r\n participants: Object.freeze([...new Set([\r\n ...group.requirements.map(row => row.participant),\r\n ...group.supports.map(row => row.participant),\r\n ])].sort()),\r\n ...(Object.hasOwn(outcome, 'agreement') ? { agreement: outcome.agreement } : {}),\r\n issues: protocolIssues,\r\n }))\r\n }\r\n\r\n return Object.freeze({\r\n apiVersion: 'core.dsh/report/v1alpha1',\r\n evaluator: Object.freeze({ ...this.evaluator }),\r\n compatible: !issues.some(issue => issue.severity === 'error'),\r\n protocols: Object.freeze(protocols),\r\n issues: Object.freeze(issues),\r\n })\r\n }\r\n}\r\n\r\nfunction validateDefinition(definition: ProtocolDefinition): void {\r\n validateApiReference(definition, 'protocol definition')\r\n if (typeof definition.validateRequirement !== 'function'\r\n || typeof definition.validateSupport !== 'function'\r\n || typeof definition.negotiate !== 'function') {\r\n throw new TypeError('protocol definition must provide validators and negotiate')\r\n }\r\n const versions = [definition.apiVersion, ...(definition.accepts ?? [])]\r\n if (new Set(versions).size !== versions.length) throw new TypeError('protocol definition accepts duplicate versions')\r\n for (const version of versions) validateApiReference({ apiVersion: version, kind: definition.kind })\r\n}\r\n\r\nfunction freezeDefinition(definition: ProtocolDefinition): ProtocolDefinition {\r\n return Object.freeze({ ...definition, ...(definition.accepts === undefined ? {} : { accepts: Object.freeze([...definition.accepts]) }) })\r\n}\r\n\r\nfunction freezeIssue(issue: ProtocolIssue): ProtocolIssue {\r\n if (issue.severity !== 'error' && issue.severity !== 'warning') throw new TypeError('protocol issue severity is invalid')\r\n nonEmpty(issue.code, 'protocol issue.code')\r\n nonEmpty(issue.message, 'protocol issue.message')\r\n return Object.freeze({ ...issue })\r\n}\r\n\r\nfunction nonEmpty(value: unknown, label: string): asserts value is string {\r\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError(`${label} must be a non-empty string`)\r\n}\r\n\r\nfunction errorMessage(error: unknown): string {\r\n return error instanceof Error ? error.message : String(error)\r\n}\r\n","export interface SemanticVersion {\r\n readonly major: number\r\n readonly minor: number\r\n readonly patch: number\r\n readonly prerelease: readonly (string | number)[]\r\n readonly build: readonly string[]\r\n}\r\n\r\nexport type VersionRange = string | readonly string[]\r\n\r\nexport function parseSemanticVersion(value: string): SemanticVersion {\r\n const match = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/u.exec(value)\r\n if (match === null) throw new TypeError(`invalid semantic version ${JSON.stringify(value)}`)\r\n const prerelease = match[4] === undefined ? [] : match[4].split('.').map(identifier => {\r\n if (!/^\\d+$/u.test(identifier)) return identifier\r\n if (identifier.length > 1 && identifier.startsWith('0')) throw new TypeError(`invalid semantic version ${JSON.stringify(value)}`)\r\n return Number(identifier)\r\n })\r\n return Object.freeze({\r\n major: Number(match[1]), minor: Number(match[2]), patch: Number(match[3]),\r\n prerelease: Object.freeze(prerelease),\r\n build: Object.freeze(match[5] === undefined ? [] : match[5].split('.')),\r\n })\r\n}\r\n\r\nexport function compareSemanticVersions(leftValue: string | SemanticVersion, rightValue: string | SemanticVersion): number {\r\n const left = typeof leftValue === 'string' ? parseSemanticVersion(leftValue) : leftValue\r\n const right = typeof rightValue === 'string' ? parseSemanticVersion(rightValue) : rightValue\r\n return left.major - right.major\r\n || left.minor - right.minor\r\n || left.patch - right.patch\r\n || comparePrerelease(left.prerelease, right.prerelease)\r\n}\r\n\r\nexport function assertVersionRange(range: VersionRange): void {\r\n compileRange(range)\r\n}\r\n\r\nexport function satisfiesVersionRange(versionValue: string, range: VersionRange): boolean {\r\n const version = parseSemanticVersion(versionValue)\r\n return compileRange(range).some(group => {\r\n if (version.prerelease.length > 0 && !group.explicitPrereleases.has(coreKey(version))) return false\r\n return group.predicates.every(predicate => predicate(version))\r\n })\r\n}\r\n\r\ninterface ComparatorGroup {\r\n readonly predicates: readonly ((version: SemanticVersion) => boolean)[]\r\n readonly explicitPrereleases: ReadonlySet<string>\r\n}\r\n\r\nfunction compileRange(range: VersionRange): readonly ComparatorGroup[] {\r\n const values = typeof range === 'string' ? [range] : range\r\n if (!Array.isArray(values) || values.length === 0) throw new TypeError('version range must be a string or non-empty array')\r\n return Object.freeze(values.flatMap(value => {\r\n if (typeof value !== 'string' || value.trim() === '') throw new TypeError('version range must not be empty')\r\n return value.split('||').map(part => compileGroup(part.trim()))\r\n }))\r\n}\r\n\r\nfunction compileGroup(value: string): ComparatorGroup {\r\n if (value === '') throw new TypeError('version range contains an empty alternative')\r\n if (value === '*' || /^x$/iu.test(value)) return { predicates: [], explicitPrereleases: new Set() }\r\n const predicates: Array<(version: SemanticVersion) => boolean> = []\r\n const explicitPrereleases = new Set<string>()\r\n for (const token of value.split(/\\s+/u)) {\r\n const parsed = compileComparator(token)\r\n predicates.push(...parsed.predicates)\r\n if (parsed.explicitPrerelease !== undefined) explicitPrereleases.add(parsed.explicitPrerelease)\r\n }\r\n return Object.freeze({ predicates: Object.freeze(predicates), explicitPrereleases })\r\n}\r\n\r\nfunction compileComparator(token: string): {\r\n readonly predicates: readonly ((version: SemanticVersion) => boolean)[]\r\n readonly explicitPrerelease?: string\r\n} {\r\n const match = /^(<=|>=|<|>|=|\\^|~)?(.+)$/u.exec(token)\r\n if (match === null) throw new TypeError(`invalid version comparator ${JSON.stringify(token)}`)\r\n const operator = match[1] ?? '='\r\n const body = match[2] as string\r\n const partial = /^(0|[1-9]\\d*|[xX*])(?:\\.(0|[1-9]\\d*|[xX*]))?(?:\\.(0|[1-9]\\d*|[xX*]))?$/u.exec(body)\r\n if (partial !== null && (partial[2] === undefined || partial[3] === undefined || [partial[1], partial[2], partial[3]].some(wild))) {\r\n if (operator !== '=') {\r\n if ((operator === '~' || operator === '^') && ![partial[1], partial[2]].some(wild)) {\r\n const lower = version(Number(partial[1]), Number(partial[2]), partial[3] === undefined || wild(partial[3]) ? 0 : Number(partial[3]))\r\n return bounded(lower, operator === '~' ? version(lower.major, lower.minor + 1, 0) : caretUpper(lower))\r\n }\r\n throw new TypeError(`partial version cannot use ${JSON.stringify(operator)}`)\r\n }\r\n return wildcardRange(partial)\r\n }\r\n\r\n const target = parseSemanticVersion(body)\r\n const explicitPrerelease = target.prerelease.length === 0 ? undefined : coreKey(target)\r\n if (operator === '^') return { ...bounded(target, caretUpper(target)), ...(explicitPrerelease === undefined ? {} : { explicitPrerelease }) }\r\n if (operator === '~') return { ...bounded(target, version(target.major, target.minor + 1, 0)), ...(explicitPrerelease === undefined ? {} : { explicitPrerelease }) }\r\n const comparison = (candidate: SemanticVersion) => compareSemanticVersions(candidate, target)\r\n const predicate = operator === '=' ? (candidate: SemanticVersion) => comparison(candidate) === 0\r\n : operator === '<' ? (candidate: SemanticVersion) => comparison(candidate) < 0\r\n : operator === '<=' ? (candidate: SemanticVersion) => comparison(candidate) <= 0\r\n : operator === '>' ? (candidate: SemanticVersion) => comparison(candidate) > 0\r\n : (candidate: SemanticVersion) => comparison(candidate) >= 0\r\n return { predicates: [predicate], ...(explicitPrerelease === undefined ? {} : { explicitPrerelease }) }\r\n}\r\n\r\nfunction wildcardRange(match: RegExpExecArray): { readonly predicates: readonly ((version: SemanticVersion) => boolean)[] } {\r\n if (wild(match[1])) return { predicates: [] }\r\n const major = Number(match[1])\r\n if (match[2] === undefined || wild(match[2])) return bounded(version(major, 0, 0), version(major + 1, 0, 0))\r\n const minor = Number(match[2])\r\n if (match[3] === undefined || wild(match[3])) return bounded(version(major, minor, 0), version(major, minor + 1, 0))\r\n throw new TypeError('unreachable complete version range')\r\n}\r\n\r\nfunction bounded(lower: SemanticVersion, upper: SemanticVersion): { readonly predicates: readonly ((version: SemanticVersion) => boolean)[] } {\r\n return { predicates: [\r\n candidate => compareSemanticVersions(candidate, lower) >= 0,\r\n candidate => compareSemanticVersions(candidate, upper) < 0,\r\n ] }\r\n}\r\n\r\nfunction caretUpper(lower: SemanticVersion): SemanticVersion {\r\n if (lower.major > 0) return version(lower.major + 1, 0, 0)\r\n if (lower.minor > 0) return version(0, lower.minor + 1, 0)\r\n return version(0, 0, lower.patch + 1)\r\n}\r\n\r\nfunction version(major: number, minor: number, patch: number): SemanticVersion {\r\n return { major, minor, patch, prerelease: [], build: [] }\r\n}\r\n\r\nfunction wild(value: string | undefined): boolean {\r\n return value === '*' || /^x$/iu.test(value ?? '')\r\n}\r\n\r\nfunction coreKey(value: SemanticVersion): string {\r\n return `${value.major}.${value.minor}.${value.patch}`\r\n}\r\n\r\nfunction comparePrerelease(left: readonly (string | number)[], right: readonly (string | number)[]): number {\r\n if (left.length === 0) return right.length === 0 ? 0 : 1\r\n if (right.length === 0) return -1\r\n for (let index = 0; index < Math.max(left.length, right.length); index += 1) {\r\n const leftPart = left[index]\r\n const rightPart = right[index]\r\n if (leftPart === undefined) return -1\r\n if (rightPart === undefined) return 1\r\n if (leftPart === rightPart) continue\r\n if (typeof leftPart === 'number' && typeof rightPart === 'string') return -1\r\n if (typeof leftPart === 'string' && typeof rightPart === 'number') return 1\r\n return leftPart < rightPart ? -1 : 1\r\n }\r\n return 0\r\n}\r\n"],"mappings":"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"}
@@ -1,21 +1,21 @@
1
- {
2
- "name": "@dsh-std/core",
3
- "version": "0.1.0",
4
- "license": "MIT",
5
- "type": "module",
6
- "main": "lib/index.js",
7
- "types": "lib/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./lib/index.d.ts",
11
- "default": "./lib/index.js"
12
- }
13
- },
14
- "files": ["lib", "CHANGELOG.md"],
15
- "scripts": {
16
- "build": "pnpm run typecheck && tsdown",
17
- "typecheck": "tsc -p tsconfig.json --noEmit",
18
- "test": "vitest run"
19
- },
20
- "engines": { "node": "^22.19 || >=24" }
21
- }
1
+ {
2
+ "name": "@dsh-std/core",
3
+ "version": "0.1.0",
4
+ "license": "MIT",
5
+ "type": "module",
6
+ "main": "lib/index.js",
7
+ "types": "lib/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./lib/index.d.ts",
11
+ "default": "./lib/index.js"
12
+ }
13
+ },
14
+ "files": ["lib", "CHANGELOG.md"],
15
+ "scripts": {
16
+ "build": "pnpm run typecheck && tsdown",
17
+ "typecheck": "tsc -p tsconfig.json --noEmit",
18
+ "test": "vitest run"
19
+ },
20
+ "engines": { "node": "^22.19 || >=24" }
21
+ }