@dsh-workbench/shared 0.3.11 → 1.0.0-beta.1

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 (403) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -0
  3. package/dist/api/blocker-table.d.ts +3 -3
  4. package/dist/api/blocker-table.js +47 -23
  5. package/dist/api/dsh.d.ts +1 -1
  6. package/dist/api/workbench-client.js +2 -1
  7. package/dist/components/Activity.css +0 -1
  8. package/dist/components/ApprovalDetail.css +1 -2
  9. package/dist/components/ApprovalDetail.d.ts +1 -1
  10. package/dist/components/ApprovalPlan.css +0 -1
  11. package/dist/components/Card.css +0 -1
  12. package/dist/components/Card.d.ts +1 -1
  13. package/dist/components/CardBoundary.d.ts +1 -1
  14. package/dist/components/CardHead.css +0 -1
  15. package/dist/components/CardHead.d.ts +1 -1
  16. package/dist/components/ChoiceGroup.css +1 -2
  17. package/dist/components/ConfirmBar.d.ts +1 -1
  18. package/dist/components/ConfirmBar.js +1 -1
  19. package/dist/components/Form.css +1 -1
  20. package/dist/components/FormActions.js +1 -1
  21. package/dist/components/FormNodes.js +5 -1
  22. package/dist/components/FormRows.css +1 -0
  23. package/dist/components/FormRows.d.ts +4 -2
  24. package/dist/components/FormRows.js +5 -4
  25. package/dist/components/LongTaskRow.css +1 -2
  26. package/dist/components/LongTaskRow.d.ts +1 -1
  27. package/dist/components/LongTaskRow.js +1 -1
  28. package/dist/components/Note.css +0 -1
  29. package/dist/components/ResourceStates.css +0 -1
  30. package/dist/components/SettingsSection.css +0 -1
  31. package/dist/components/Spinner.css +0 -1
  32. package/dist/components/Stack.css +0 -1
  33. package/dist/components/StateBlock.css +0 -1
  34. package/dist/components/board-module.d.ts +3 -3
  35. package/dist/components/icons.d.ts +1 -1
  36. package/dist/components/icons.js +11 -4
  37. package/dist/config/constants.d.ts +2 -4
  38. package/dist/config/constants.js +2 -7
  39. package/dist/contract/adapters.d.ts +10 -0
  40. package/dist/contract/cli.d.ts +3 -0
  41. package/dist/contract/command.d.ts +22 -0
  42. package/dist/contract/data.d.ts +127 -0
  43. package/dist/contract/extension.d.ts +14 -0
  44. package/dist/contract/extension.js +1 -0
  45. package/dist/{api → contract}/facts.d.ts +12 -3
  46. package/dist/{api → contract}/facts.js +19 -1
  47. package/dist/contract/git.d.ts +38 -0
  48. package/dist/contract/git.js +1 -0
  49. package/dist/contract/lib.d.ts +4 -0
  50. package/dist/contract/lib.js +1 -0
  51. package/dist/contract/needs.d.ts +132 -0
  52. package/dist/contract/needs.js +232 -0
  53. package/dist/contract/plugin-source.d.ts +1 -0
  54. package/dist/contract/plugin-source.js +1 -0
  55. package/dist/contract/protocol/bundle-install.d.ts +136 -0
  56. package/dist/contract/protocol/bundle-install.js +12 -0
  57. package/dist/contract/protocol/config-sync.d.ts +55 -0
  58. package/dist/contract/protocol/config-sync.js +2 -0
  59. package/dist/contract/protocol/diy.d.ts +4 -0
  60. package/dist/contract/protocol/diy.js +4 -0
  61. package/dist/contract/protocol/dsh-plugins.d.ts +11 -0
  62. package/dist/contract/protocol/dsh-plugins.js +1 -0
  63. package/dist/contract/protocol/long-tasks.d.ts +13 -0
  64. package/dist/contract/protocol/long-tasks.js +1 -0
  65. package/dist/contract/protocol/market-index.d.ts +195 -0
  66. package/dist/contract/protocol/market-index.js +7 -0
  67. package/dist/contract/protocol/platform.d.ts +44 -0
  68. package/dist/contract/protocol/platform.js +1 -0
  69. package/dist/contract/protocol/preflight-wake.d.ts +7 -0
  70. package/dist/contract/protocol/preflight-wake.js +1 -0
  71. package/dist/contract/protocol/profile-create.d.ts +30 -0
  72. package/dist/contract/protocol/profile-create.js +2 -0
  73. package/dist/contract/protocol/sidebar-edition.d.ts +14 -0
  74. package/dist/contract/protocol/sidebar-edition.js +2 -0
  75. package/dist/contract/protocol/unit-manifests.d.ts +6 -0
  76. package/dist/contract/protocol/unit-manifests.js +1 -0
  77. package/dist/contract/unit-board.js +1 -0
  78. package/dist/contract/unit-capability.d.ts +34 -0
  79. package/dist/contract/unit-capability.js +1 -0
  80. package/dist/{host → contract}/unit-declaration.d.ts +7 -5
  81. package/dist/{api → contract}/unit-declaration.js +19 -13
  82. package/dist/contract/unit.d.ts +57 -0
  83. package/dist/contract/unit.js +24 -0
  84. package/dist/contract/workbench-contract.d.ts +15 -0
  85. package/dist/contract/workbench-contract.js +1 -0
  86. package/dist/host/adapter-set.d.ts +26 -0
  87. package/dist/host/adapter-set.js +244 -0
  88. package/dist/host/adapter-types.d.ts +79 -0
  89. package/dist/host/adapter-types.js +23 -0
  90. package/dist/host/adapters.d.ts +28 -0
  91. package/dist/host/adapters.js +9 -0
  92. package/dist/host/browser.d.ts +3 -0
  93. package/dist/host/browser.js +3 -0
  94. package/dist/host/changelog.d.ts +21 -0
  95. package/dist/host/changelog.js +188 -0
  96. package/dist/host/channel-plugin.d.ts +15 -0
  97. package/dist/host/channel-plugin.js +42 -0
  98. package/dist/host/cli.d.ts +4 -0
  99. package/dist/host/cli.js +7 -0
  100. package/dist/host/command-name.d.ts +1 -0
  101. package/dist/host/command-name.js +14 -0
  102. package/dist/host/data-error.d.ts +13 -0
  103. package/dist/host/data-error.js +20 -0
  104. package/dist/host/data-root.js +3 -0
  105. package/dist/host/diy-debug.js +2 -1
  106. package/dist/host/diy-record.js +2 -1
  107. package/dist/host/extension.d.ts +7 -0
  108. package/dist/host/extension.js +39 -0
  109. package/dist/host/facts.d.ts +1 -1
  110. package/dist/host/facts.js +3 -2
  111. package/dist/host/git.d.ts +2 -33
  112. package/dist/host/git.js +2 -2
  113. package/dist/host/http.js +2 -2
  114. package/dist/host/lib-capabilities.d.ts +22 -0
  115. package/dist/host/lib-capabilities.js +37 -0
  116. package/dist/host/lib-install.d.ts +9 -0
  117. package/dist/host/lib-install.js +10 -0
  118. package/dist/host/long-task.d.ts +1 -1
  119. package/dist/host/long-task.js +4 -3
  120. package/dist/host/market-index.d.ts +22 -0
  121. package/dist/host/market-index.js +379 -0
  122. package/dist/host/needs.d.ts +4 -0
  123. package/dist/host/needs.js +2 -0
  124. package/dist/host/patch.d.ts +9 -0
  125. package/dist/host/patch.js +78 -0
  126. package/dist/host/paths.d.ts +12 -0
  127. package/dist/host/paths.js +28 -0
  128. package/dist/host/platform.d.ts +14 -0
  129. package/dist/host/platform.js +40 -0
  130. package/dist/host/plugin-source.d.ts +8 -6
  131. package/dist/host/plugin-source.js +43 -33
  132. package/dist/host/plugin.d.ts +4 -0
  133. package/dist/host/plugin.js +39 -0
  134. package/dist/host/port-types.d.ts +192 -0
  135. package/dist/host/port-types.js +1 -0
  136. package/dist/host/preflight.d.ts +28 -0
  137. package/dist/host/preflight.js +1 -0
  138. package/dist/host/profile-port.d.ts +4 -0
  139. package/dist/host/profile-port.js +4 -0
  140. package/dist/host/provision.d.ts +2 -2
  141. package/dist/host/provision.js +5 -3
  142. package/dist/host/recipe-rules.d.ts +5 -0
  143. package/dist/host/recipe-rules.js +382 -0
  144. package/dist/host/recipe.d.ts +14 -0
  145. package/dist/host/recipe.js +283 -0
  146. package/dist/host/release-packages.generated.d.ts +1 -0
  147. package/dist/host/release-packages.generated.js +10 -0
  148. package/dist/host/shell-text.d.ts +9 -2
  149. package/dist/host/shell-text.js +15 -3
  150. package/dist/host/shell.d.ts +2 -0
  151. package/dist/host/shell.js +7 -0
  152. package/dist/host/spec.d.ts +8 -0
  153. package/dist/host/spec.js +24 -0
  154. package/dist/host/supply-index.d.ts +34 -0
  155. package/dist/host/supply-index.js +202 -0
  156. package/dist/host/supply-port.d.ts +5 -0
  157. package/dist/host/supply-port.js +39 -0
  158. package/dist/host/time.d.ts +12 -0
  159. package/dist/host/time.js +19 -0
  160. package/dist/host/tokens.d.ts +26 -0
  161. package/dist/host/tokens.js +154 -0
  162. package/dist/host/tool-kit.d.ts +0 -6
  163. package/dist/host/tool-kit.js +0 -22
  164. package/dist/host/unit-face.d.ts +12 -4
  165. package/dist/host/version-range.d.ts +2 -0
  166. package/dist/host/version-range.js +13 -0
  167. package/dist/host/version.d.ts +4 -0
  168. package/dist/host/version.js +27 -0
  169. package/dist/host.d.ts +53 -16
  170. package/dist/host.js +53 -16
  171. package/dist/i18n/en.js +225 -71
  172. package/dist/i18n/index.d.ts +299 -73
  173. package/dist/i18n/merge.js +1 -1
  174. package/dist/i18n/need-text.d.ts +26 -0
  175. package/dist/i18n/need-text.js +26 -0
  176. package/dist/i18n/settings.d.ts +70 -0
  177. package/dist/i18n/settings.js +136 -0
  178. package/dist/i18n/zh.d.ts +298 -72
  179. package/dist/i18n/zh.js +227 -73
  180. package/dist/index.d.ts +27 -7
  181. package/dist/index.js +27 -7
  182. package/dist/{api → lib}/dsh-client.d.ts +11 -1
  183. package/dist/lib/dsh-client.js +1 -0
  184. package/dist/lib/market-index.d.ts +7 -0
  185. package/dist/lib/market-index.js +25 -0
  186. package/dist/lib/react.d.ts +0 -40
  187. package/dist/lib/react.js +0 -36
  188. package/dist/lib/ui.js +3 -9
  189. package/dist/lib/version.d.ts +4 -0
  190. package/dist/lib/version.js +21 -0
  191. package/dist/testing/data.d.ts +13 -0
  192. package/dist/testing/data.js +46 -0
  193. package/dist/testing/declaration.d.ts +1 -1
  194. package/dist/testing/declaration.js +1 -1
  195. package/dist/testing/host-fakes.d.ts +0 -13
  196. package/dist/testing/host-fakes.js +0 -24
  197. package/dist/testing/needs.d.ts +16 -0
  198. package/dist/testing/needs.js +46 -0
  199. package/dist/testing.d.ts +2 -0
  200. package/dist/testing.js +2 -0
  201. package/package.json +22 -4
  202. package/src/api/__tests__/blocker-table.test.ts +135 -86
  203. package/src/api/blocker-table.ts +52 -26
  204. package/src/api/dsh.ts +1 -1
  205. package/src/api/host-write.ts +0 -1
  206. package/src/api/workbench-client.test.ts +2 -2
  207. package/src/api/workbench-client.ts +2 -1
  208. package/src/components/Activity.css +0 -1
  209. package/src/components/ApprovalDetail.css +1 -2
  210. package/src/components/ApprovalDetail.tsx +1 -1
  211. package/src/components/ApprovalPlan.css +0 -1
  212. package/src/components/Card.css +0 -1
  213. package/src/components/Card.tsx +1 -1
  214. package/src/components/CardAnchor.test.tsx +1 -1
  215. package/src/components/CardBoundary.tsx +1 -1
  216. package/src/components/CardHead.css +0 -1
  217. package/src/components/CardHead.tsx +1 -1
  218. package/src/components/ChoiceGroup.css +1 -2
  219. package/src/components/ConfirmBar.tsx +1 -1
  220. package/src/components/Form.css +1 -1
  221. package/src/components/Form.test.tsx +6 -0
  222. package/src/components/Form.tsx +1 -1
  223. package/src/components/FormActions.tsx +1 -1
  224. package/src/components/FormNodes.tsx +6 -1
  225. package/src/components/FormRows.css +1 -0
  226. package/src/components/FormRows.test.tsx +30 -0
  227. package/src/components/FormRows.tsx +9 -5
  228. package/src/components/LongTaskRow.css +1 -2
  229. package/src/components/LongTaskRow.tsx +1 -1
  230. package/src/components/Note.css +0 -1
  231. package/src/components/ResourceStates.css +0 -1
  232. package/src/components/SelectFieldNodes.tsx +0 -1
  233. package/src/components/SettingsSection.css +0 -1
  234. package/src/components/Spinner.css +0 -1
  235. package/src/components/Stack.css +0 -1
  236. package/src/components/StateBlock.css +0 -1
  237. package/src/components/__tests__/long-task-row.test.ts +1 -1
  238. package/src/components/board-module.ts +3 -3
  239. package/src/components/icons.tsx +16 -8
  240. package/src/config/constants.ts +2 -8
  241. package/src/{api → contract}/__tests__/facts.test.ts +73 -25
  242. package/src/{api → contract}/__tests__/long-task.test.ts +3 -3
  243. package/src/contract/__tests__/needs.test.ts +74 -0
  244. package/src/{host → contract}/__tests__/unit-declaration.test.ts +1 -1
  245. package/src/contract/__tests__/unit.test.ts +43 -0
  246. package/src/contract/adapters.ts +9 -0
  247. package/src/contract/cli.ts +3 -0
  248. package/src/contract/command.ts +25 -0
  249. package/src/contract/data.ts +146 -0
  250. package/src/contract/extension.ts +20 -0
  251. package/src/{api → contract}/facts.ts +34 -4
  252. package/src/contract/git.ts +20 -0
  253. package/src/contract/lib.ts +5 -0
  254. package/src/contract/needs.ts +331 -0
  255. package/src/contract/plugin-source.ts +1 -0
  256. package/src/contract/protocol/bundle-install.ts +198 -0
  257. package/src/contract/protocol/config-sync.ts +65 -0
  258. package/src/contract/protocol/diy.ts +4 -0
  259. package/src/contract/protocol/dsh-plugins.ts +13 -0
  260. package/src/contract/protocol/long-tasks.ts +16 -0
  261. package/src/contract/protocol/market-index.ts +246 -0
  262. package/src/contract/protocol/platform.ts +47 -0
  263. package/src/contract/protocol/preflight-wake.ts +17 -0
  264. package/src/contract/protocol/profile-create.ts +36 -0
  265. package/src/contract/protocol/sidebar-edition.ts +19 -0
  266. package/src/contract/protocol/unit-manifests.ts +8 -0
  267. package/src/{api → contract}/unit-board.ts +0 -1
  268. package/src/contract/unit-capability.ts +37 -0
  269. package/src/{host → contract}/unit-declaration.ts +22 -18
  270. package/src/contract/unit.ts +76 -0
  271. package/src/contract/workbench-contract.ts +30 -0
  272. package/src/host/__tests__/adapter-set.test.ts +228 -0
  273. package/src/host/__tests__/adapters.test.ts +27 -0
  274. package/src/host/__tests__/changelog.test.ts +102 -0
  275. package/src/host/__tests__/command-name.test.ts +16 -0
  276. package/src/host/__tests__/diy-record.test.ts +3 -3
  277. package/src/host/__tests__/facts.test.ts +5 -5
  278. package/src/host/__tests__/long-task.test.ts +1 -1
  279. package/src/host/__tests__/market-index.test.ts +179 -0
  280. package/src/host/__tests__/plugin-ledger.test.ts +10 -10
  281. package/src/host/__tests__/provision.test.ts +7 -6
  282. package/src/host/__tests__/shell-text.test.ts +16 -1
  283. package/src/host/__tests__/supply-index.test.ts +137 -0
  284. package/src/host/__tests__/tokens.test.ts +110 -0
  285. package/src/host/__tests__/version-range.test.ts +21 -0
  286. package/src/host/adapter-set.ts +299 -0
  287. package/src/host/adapter-types.ts +105 -0
  288. package/src/host/adapters.ts +50 -0
  289. package/src/host/browser.ts +3 -0
  290. package/src/host/changelog.ts +212 -0
  291. package/src/host/channel-plugin.ts +55 -0
  292. package/src/host/cli.ts +11 -0
  293. package/src/host/command-name.ts +15 -0
  294. package/src/host/data-error.ts +21 -0
  295. package/src/host/data-root.ts +2 -0
  296. package/src/host/diy-debug.ts +2 -1
  297. package/src/host/diy-record.ts +2 -1
  298. package/src/host/extension.test.ts +55 -0
  299. package/src/host/extension.ts +57 -0
  300. package/src/host/facts.ts +4 -3
  301. package/src/host/git.ts +8 -16
  302. package/src/host/http.ts +2 -2
  303. package/src/host/lib-capabilities.ts +52 -0
  304. package/src/host/lib-install.ts +18 -0
  305. package/src/host/long-task.ts +4 -3
  306. package/src/host/market-index.ts +383 -0
  307. package/src/host/needs.ts +6 -0
  308. package/src/host/patch.ts +93 -0
  309. package/src/host/paths.ts +37 -0
  310. package/src/host/platform.ts +48 -0
  311. package/src/host/plugin-source.ts +48 -56
  312. package/src/host/plugin.ts +39 -0
  313. package/src/host/port-types.ts +223 -0
  314. package/src/host/preflight.ts +31 -0
  315. package/src/host/profile-port.ts +9 -0
  316. package/src/host/provision.ts +7 -4
  317. package/src/host/recipe-rules.ts +330 -0
  318. package/src/host/recipe.test.ts +334 -0
  319. package/src/host/recipe.ts +323 -0
  320. package/src/host/release-packages.generated.ts +10 -0
  321. package/src/host/shell-text.ts +15 -3
  322. package/src/host/shell.ts +9 -0
  323. package/src/host/spec.ts +32 -0
  324. package/src/host/supply-index.ts +256 -0
  325. package/src/host/supply-port.ts +45 -0
  326. package/src/host/time.ts +22 -0
  327. package/src/host/tokens.ts +186 -0
  328. package/src/host/tool-kit.ts +0 -35
  329. package/src/host/unit-face.ts +12 -4
  330. package/src/host/version-range.ts +13 -0
  331. package/src/host/version.ts +30 -0
  332. package/src/host.ts +53 -16
  333. package/src/i18n/en.ts +225 -71
  334. package/src/i18n/merge.test.ts +6 -6
  335. package/src/i18n/merge.ts +1 -1
  336. package/src/i18n/need-text.ts +27 -0
  337. package/src/i18n/settings.ts +141 -0
  338. package/src/i18n/zh.ts +228 -73
  339. package/src/index.ts +27 -7
  340. package/src/lib/blocker-action.ts +0 -1
  341. package/src/{api → lib}/dsh-client.ts +12 -1
  342. package/src/lib/market-index.ts +36 -0
  343. package/src/lib/react.ts +0 -40
  344. package/src/lib/text.test.ts +2 -2
  345. package/src/lib/ui.test.ts +6 -5
  346. package/src/lib/ui.ts +3 -9
  347. package/src/testing/__tests__/declaration.test.ts +1 -1
  348. package/src/testing/data.ts +66 -0
  349. package/src/testing/declaration.ts +2 -2
  350. package/src/testing/host-fakes.ts +0 -38
  351. package/src/testing/needs.ts +80 -0
  352. package/src/testing.ts +2 -0
  353. package/dist/api/unit-declaration.d.ts +0 -65
  354. package/dist/api/unit.d.ts +0 -85
  355. package/dist/api/unit.js +0 -8
  356. package/dist/api/workbench-contract.d.ts +0 -44
  357. package/dist/components/MockStrip.css +0 -39
  358. package/dist/components/MockStrip.d.ts +0 -15
  359. package/dist/components/MockStrip.js +0 -8
  360. package/dist/components/SaveBar.css +0 -7
  361. package/dist/host/browser-find.d.ts +0 -38
  362. package/dist/host/browser-find.js +0 -242
  363. package/dist/host/browser-read.d.ts +0 -28
  364. package/dist/host/browser-read.js +0 -243
  365. package/dist/host/opencli-runtime.d.ts +0 -25
  366. package/dist/host/opencli-runtime.js +0 -56
  367. package/dist/host/opencli-window.d.ts +0 -2
  368. package/dist/host/opencli-window.js +0 -8
  369. package/dist/host/opencli.d.ts +0 -37
  370. package/dist/host/opencli.js +0 -155
  371. package/dist/host/unit-declaration.js +0 -213
  372. package/dist/host/unit-libs.d.ts +0 -37
  373. package/dist/lib/diy-debug.d.ts +0 -80
  374. package/dist/lib/diy-debug.js +0 -88
  375. package/dist/lib/diy-record.d.ts +0 -135
  376. package/dist/lib/diy-record.js +0 -162
  377. package/dist/lib/lint-probe.d.ts +0 -1
  378. package/dist/lib/lint-probe.js +0 -6
  379. package/dist/lib/panel-state.d.ts +0 -120
  380. package/dist/lib/panel-state.js +0 -176
  381. package/src/api/__tests__/unit.test.ts +0 -38
  382. package/src/api/unit.ts +0 -93
  383. package/src/api/workbench-contract.ts +0 -59
  384. package/src/host/__tests__/browser-find.test.ts +0 -330
  385. package/src/host/__tests__/browser-read.test.ts +0 -228
  386. package/src/host/__tests__/opencli-runtime.test.ts +0 -46
  387. package/src/host/browser-find.ts +0 -311
  388. package/src/host/browser-read.ts +0 -311
  389. package/src/host/opencli-runtime.ts +0 -79
  390. package/src/host/opencli-window.ts +0 -11
  391. package/src/host/opencli.ts +0 -213
  392. package/src/host/unit-libs.ts +0 -41
  393. /package/dist/{api/blocker.js → contract/adapters.js} +0 -0
  394. /package/dist/{api → contract}/blocker.d.ts +0 -0
  395. /package/dist/{api/dsh-client.js → contract/blocker.js} +0 -0
  396. /package/dist/{api/unit-board.js → contract/cli.js} +0 -0
  397. /package/dist/{api/workbench-contract.js → contract/command.js} +0 -0
  398. /package/dist/{host/unit-libs.js → contract/data.js} +0 -0
  399. /package/dist/{api → contract}/long-task.d.ts +0 -0
  400. /package/dist/{api → contract}/long-task.js +0 -0
  401. /package/dist/{api → contract}/unit-board.d.ts +0 -0
  402. /package/src/{api → contract}/blocker.ts +0 -0
  403. /package/src/{api → contract}/long-task.ts +0 -0
@@ -1,54 +1,14 @@
1
1
  import type * as ReactTypes from 'react';
2
- /**
3
- * React 的 `createElement` 换个短名字再导出 —— 这套代码用 `h(...)` 写元素。
4
- */
5
2
  export declare const h: typeof ReactTypes.createElement;
6
- /**
7
- * React 的 `Fragment` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
8
- */
9
3
  export declare const Fragment: ReactTypes.ExoticComponent<ReactTypes.FragmentProps>;
10
- /**
11
- * React 的 `Component` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
12
- */
13
4
  export declare const Component: typeof ReactTypes.Component;
14
- /**
15
- * React 的 `createContext` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
16
- */
17
5
  export declare const createContext: typeof ReactTypes.createContext;
18
- /**
19
- * React 的 `useContext` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
20
- */
21
6
  export declare const useContext: typeof ReactTypes.useContext;
22
- /**
23
- * React 的 `useState` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
24
- */
25
7
  export declare const useState: typeof ReactTypes.useState;
26
- /**
27
- * React 的 `useEffect` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
28
- */
29
8
  export declare const useEffect: typeof ReactTypes.useEffect;
30
- /**
31
- * React 的 `useLayoutEffect` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
32
- */
33
9
  export declare const useLayoutEffect: typeof ReactTypes.useLayoutEffect;
34
- /**
35
- * React 的 `useMemo` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
36
- */
37
10
  export declare const useMemo: typeof ReactTypes.useMemo;
38
- /**
39
- * React 的 `useCallback` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
40
- */
41
11
  export declare const useCallback: typeof ReactTypes.useCallback;
42
- /**
43
- * React 的 `useRef` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
44
- */
45
12
  export declare const useRef: typeof ReactTypes.useRef;
46
- /**
47
- * React 的 `useSyncExternalStore` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
48
- */
49
13
  export declare const useSyncExternalStore: typeof ReactTypes.useSyncExternalStore;
50
- /**
51
- * 借来的三个类型从 `react-types.ts` 转一手:那份是**公开面**(模块 `import type` 从根入口拿),
52
- * 组件内部照旧从这里引,别在两处各写一遍名字。
53
- */
54
14
  export type { ReactNode, CSSProperties, ChangeEvent } from './react-types.js';
package/dist/lib/react.js CHANGED
@@ -1,49 +1,13 @@
1
1
  const react = require('react');
2
- /**
3
- * React 的 `createElement` 换个短名字再导出 —— 这套代码用 `h(...)` 写元素。
4
- */
5
2
  export const h = react.createElement;
6
- /**
7
- * React 的 `Fragment` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
8
- */
9
3
  export const Fragment = react.Fragment;
10
- /**
11
- * React 的 `Component` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
12
- */
13
4
  export const Component = react.Component;
14
- /**
15
- * React 的 `createContext` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
16
- */
17
5
  export const createContext = react.createContext;
18
- /**
19
- * React 的 `useContext` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
20
- */
21
6
  export const useContext = react.useContext;
22
- /**
23
- * React 的 `useState` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
24
- */
25
7
  export const useState = react.useState;
26
- /**
27
- * React 的 `useEffect` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
28
- */
29
8
  export const useEffect = react.useEffect;
30
- /**
31
- * React 的 `useLayoutEffect` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
32
- */
33
9
  export const useLayoutEffect = react.useLayoutEffect;
34
- /**
35
- * React 的 `useMemo` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
36
- */
37
10
  export const useMemo = react.useMemo;
38
- /**
39
- * React 的 `useCallback` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
40
- */
41
11
  export const useCallback = react.useCallback;
42
- /**
43
- * React 的 `useRef` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
44
- */
45
12
  export const useRef = react.useRef;
46
- /**
47
- * React 的 `useSyncExternalStore` 原样再导出 —— 共享包的哑组件用它;模块写 JSX 一律直接 import react(这一份不进公开入口)。
48
- */
49
13
  export const useSyncExternalStore = react.useSyncExternalStore;
package/dist/lib/ui.js CHANGED
@@ -1,3 +1,4 @@
1
+ import dayjs from 'dayjs';
1
2
  /**
2
3
  * 拼类名:只留真值、用空格连接(`false` / `null` / `undefined` / 空串都丢掉)。
3
4
  * @param parts - 若干类名或条件值。
@@ -79,14 +80,7 @@ export function relativeTime(epochMs, t) {
79
80
  return t('time.hours', { n: Math.floor(diff / (60 * MINUTE)) });
80
81
  if (diff < 7 * 24 * 60 * MINUTE)
81
82
  return t('time.days', { n: Math.floor(diff / (24 * 60 * MINUTE)) });
82
- return new Date(epochMs).toLocaleString(undefined, {
83
- year: 'numeric',
84
- month: 'numeric',
85
- day: 'numeric',
86
- hour: '2-digit',
87
- minute: '2-digit',
88
- second: '2-digit',
89
- });
83
+ return dayjs(epochMs).format('YYYY/M/D HH:mm:ss');
90
84
  }
91
85
  /**
92
86
  * 把 `/Users/<用户名>/…` 缩成 `~/…`,免得会话行里全是一样的长前缀。
@@ -109,5 +103,5 @@ export function parseLocalTimestamp(text) {
109
103
  const raw = String(text ?? '').trim();
110
104
  if (!LOCAL_TIMESTAMP.test(raw))
111
105
  return Number.NaN;
112
- return new Date(raw.replace(' ', 'T')).getTime();
106
+ return dayjs(raw.replace(' ', 'T')).valueOf();
113
107
  }
@@ -0,0 +1,4 @@
1
+ export declare function isValidVersion(value: string): boolean;
2
+ export declare function isPrereleaseVersion(value: string): boolean;
3
+ export declare function compareVersions(left: string, right: string): number | undefined;
4
+ export declare function isNewerVersion(latest: string, installed: string): boolean;
@@ -0,0 +1,21 @@
1
+ import semver from 'semver';
2
+ export function isValidVersion(value) {
3
+ return semver.valid(value.trim()) !== null;
4
+ }
5
+ export function isPrereleaseVersion(value) {
6
+ const parsed = semver.valid(value.trim());
7
+ return parsed !== null && semver.prerelease(parsed) !== null;
8
+ }
9
+ export function compareVersions(left, right) {
10
+ const a = semver.valid(left.trim());
11
+ const b = semver.valid(right.trim());
12
+ if (a === null || b === null)
13
+ return undefined;
14
+ return semver.compare(a, b);
15
+ }
16
+ export function isNewerVersion(latest, installed) {
17
+ if (latest === installed)
18
+ return false;
19
+ const compared = compareVersions(latest, installed);
20
+ return compared === undefined ? true : compared > 0;
21
+ }
@@ -0,0 +1,13 @@
1
+ import type { CallOverrides, DataReader, DataRequest, RecipeCalls, RequestRecipe } from '../contract/data.js';
2
+ export interface RecipeCall {
3
+ readonly kind: 'request' | 'submit' | 'many';
4
+ readonly recipe: RequestRecipe;
5
+ readonly overrides?: CallOverrides | undefined;
6
+ readonly calls?: RecipeCalls | undefined;
7
+ }
8
+ export declare function createNoopDataReader(): DataReader;
9
+ export declare function createFakeDataReader(reply?: unknown | ((request: DataRequest, index: number) => unknown), recipeReply?: unknown | ((call: RecipeCall, index: number) => unknown)): DataReader & {
10
+ readonly requests: readonly DataRequest[];
11
+ readonly calls: readonly RecipeCall[];
12
+ };
13
+ export declare const fakeDataReader: typeof createFakeDataReader;
@@ -0,0 +1,46 @@
1
+ const NO_DATA = {
2
+ ok: false,
3
+ error: { code: 'invalid-request', message: '测试没有注入 DataReader' },
4
+ };
5
+ function filled(names, value) {
6
+ const out = {};
7
+ for (const name of names)
8
+ out[name] = value;
9
+ return out;
10
+ }
11
+ export function createNoopDataReader() {
12
+ return {
13
+ read: async () => NO_DATA,
14
+ request: async () => NO_DATA,
15
+ requestMany: async (_recipe, calls) => filled(Object.keys(calls), NO_DATA),
16
+ submit: async () => NO_DATA,
17
+ };
18
+ }
19
+ export function createFakeDataReader(reply = { ok: true, data: null }, recipeReply = { ok: true, data: null }) {
20
+ const requests = [];
21
+ const calls = [];
22
+ const answer = (call) => typeof recipeReply === 'function' ? recipeReply(call, calls.length - 1) : recipeReply;
23
+ const reader = {
24
+ async read(request) {
25
+ requests.push(request);
26
+ return typeof reply === 'function' ? reply(request, requests.length - 1) : reply;
27
+ },
28
+ async request(recipe, overrides) {
29
+ calls.push({ kind: 'request', recipe, overrides });
30
+ return answer(calls[calls.length - 1]);
31
+ },
32
+ async requestMany(recipe, plan) {
33
+ calls.push({ kind: 'many', recipe, calls: plan });
34
+ const answered = answer(calls[calls.length - 1]);
35
+ return typeof answered === 'object' && answered !== null && !('ok' in answered)
36
+ ? answered
37
+ : filled(Object.keys(plan), answered);
38
+ },
39
+ async submit(recipe, overrides) {
40
+ calls.push({ kind: 'submit', recipe, overrides });
41
+ return answer(calls[calls.length - 1]);
42
+ },
43
+ };
44
+ return Object.assign(reader, { requests, calls });
45
+ }
46
+ export const fakeDataReader = createFakeDataReader;
@@ -1,2 +1,2 @@
1
- import type { UnitManifest } from '../api/unit.js';
1
+ import type { UnitManifest } from '../contract/unit.js';
2
2
  export declare function declarationOfPackage(pkg: string, packageJson: URL | string): UnitManifest;
@@ -1,6 +1,6 @@
1
1
  import fs from 'node:fs';
2
2
  import { fileURLToPath } from 'node:url';
3
- import { readDeclaration } from '../host/unit-declaration.js';
3
+ import { readDeclaration } from '../contract/unit-declaration.js';
4
4
  export function declarationOfPackage(pkg, packageJson) {
5
5
  const at = typeof packageJson === 'string' ? packageJson : fileURLToPath(packageJson);
6
6
  let parsed;
@@ -1,5 +1,4 @@
1
1
  import type { DshShell } from '../api/dsh.js';
2
- import type { Opencli } from '../host/opencli.js';
3
2
  export interface ShellCall {
4
3
  command: string;
5
4
  workdir?: string;
@@ -21,18 +20,6 @@ export declare function createFakeShell(replies?: ShellReply[] | ((call: ShellCa
21
20
  peak: () => number;
22
21
  commands: () => string[];
23
22
  };
24
- export interface OpencliCall {
25
- args: readonly string[];
26
- key?: string;
27
- workdir?: string;
28
- session?: string;
29
- refresh?: boolean;
30
- }
31
- export declare function createFakeOpencli(replies?: Array<unknown | Error> | ((call: OpencliCall, index: number) => unknown | Error)): {
32
- opencli: Opencli;
33
- calls: OpencliCall[];
34
- keys: () => (string | undefined)[];
35
- };
36
23
  export declare function createFakeLogger(): {
37
24
  logger: {
38
25
  info: () => void;
@@ -39,30 +39,6 @@ export function createFakeShell(replies = []) {
39
39
  commands: () => calls.map((call) => call.command),
40
40
  };
41
41
  }
42
- export function createFakeOpencli(replies = []) {
43
- const calls = [];
44
- const opencli = {
45
- async json(args, options = {}) {
46
- const call = {
47
- args,
48
- ...(options.key === undefined ? {} : { key: options.key }),
49
- ...(options.workdir === undefined ? {} : { workdir: options.workdir }),
50
- ...(options.session === undefined ? {} : { session: options.session }),
51
- };
52
- calls.push(call);
53
- const index = calls.length - 1;
54
- const reply = typeof replies === 'function' ? replies(call, index) : (replies[index] ?? []);
55
- if (reply instanceof Error)
56
- throw reply;
57
- return { value: reply, at: Date.now() };
58
- },
59
- };
60
- return {
61
- opencli,
62
- calls,
63
- keys: () => calls.map((call) => call.key),
64
- };
65
- }
66
42
  export function createFakeLogger() {
67
43
  const warnings = [];
68
44
  return {
@@ -0,0 +1,16 @@
1
+ import type { BinNeed, EnvNeed, ExtensionNeed, LibNeed, Need, SupplySource } from '../contract/needs.js';
2
+ import type { NeedState } from '../contract/unit-capability.js';
3
+ import type { UnitCapability } from '../contract/unit-capability.js';
4
+ import type { UnitManifest } from '../contract/unit.js';
5
+ export declare const fakeNpmSource: SupplySource;
6
+ export declare function extensionNeedOf(name: string, extra?: Partial<ExtensionNeed>): ExtensionNeed;
7
+ export declare function libNeedOf(name: string, extra?: Partial<LibNeed>): LibNeed;
8
+ export declare function binNeedOf(name: string, extra?: Partial<BinNeed>): BinNeed;
9
+ export declare function envNeedOf(name: string, extra?: Partial<EnvNeed>): EnvNeed;
10
+ export declare function manifestOf(options?: {
11
+ readonly id?: string | undefined;
12
+ readonly needs?: readonly Need[] | undefined;
13
+ readonly card?: UnitManifest['card'];
14
+ }): UnitManifest;
15
+ export declare function needStateOf(need: Need, status?: NeedState['status'], extra?: Partial<NeedState>): NeedState;
16
+ export declare function capabilityOf(unit: string, needs?: readonly NeedState[], extra?: Partial<UnitCapability>): UnitCapability;
@@ -0,0 +1,46 @@
1
+ export const fakeNpmSource = {
2
+ kind: 'npm',
3
+ registryEnv: 'WB_TEST_REGISTRY',
4
+ registryDefault: 'https://registry.invalid/',
5
+ };
6
+ export function extensionNeedOf(name, extra = {}) {
7
+ return {
8
+ kind: 'extension',
9
+ runtime: 'opencli',
10
+ name,
11
+ commands: [`${name}-read`],
12
+ purpose: '测试',
13
+ ...extra,
14
+ };
15
+ }
16
+ export function libNeedOf(name, extra = {}) {
17
+ return { kind: 'lib', name, purpose: '测试', ...extra };
18
+ }
19
+ export function binNeedOf(name, extra = {}) {
20
+ return { kind: 'bin', name, purpose: '测试', ...extra };
21
+ }
22
+ export function envNeedOf(name, extra = {}) {
23
+ return { kind: 'env', name, purpose: '测试', ...extra };
24
+ }
25
+ export function manifestOf(options = {}) {
26
+ return {
27
+ id: options.id ?? 'fixture',
28
+ card: options.card === undefined ? { titleKey: `${options.id ?? 'fixture'}.mine`, order: 10 } : options.card,
29
+ tools: [],
30
+ host: { inject: [] },
31
+ ...(options.needs === undefined ? {} : { needs: options.needs }),
32
+ };
33
+ }
34
+ export function needStateOf(need, status = 'ok', extra = {}) {
35
+ return {
36
+ id: need.id ?? `${need.kind}:${need.name}`,
37
+ kind: need.kind,
38
+ name: need.name,
39
+ status,
40
+ detail: `测试:${need.name}`,
41
+ ...extra,
42
+ };
43
+ }
44
+ export function capabilityOf(unit, needs = [], extra = {}) {
45
+ return { unit, status: needs.some((need) => need.status !== 'ok') ? 'missing' : 'ok', needs, ...extra };
46
+ }
package/dist/testing.d.ts CHANGED
@@ -1,2 +1,4 @@
1
1
  export * from './testing/host-fakes.js';
2
2
  export * from './testing/declaration.js';
3
+ export * from './testing/needs.js';
4
+ export * from './testing/data.js';
package/dist/testing.js CHANGED
@@ -1,2 +1,4 @@
1
1
  export * from './testing/host-fakes.js';
2
2
  export * from './testing/declaration.js';
3
+ export * from './testing/needs.js';
4
+ export * from './testing/data.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dsh-workbench/shared",
3
- "version": "0.3.11",
3
+ "version": "1.0.0-beta.1",
4
4
  "description": "工作台与模块共享的纯代码与契约类型:类型、纯逻辑、哑组件、平台解析。宿主侧的东西从 /host 进(不影响浏览器产物)。",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -16,6 +16,10 @@
16
16
  "./testing": {
17
17
  "types": "./dist/testing.d.ts",
18
18
  "default": "./dist/testing.js"
19
+ },
20
+ "./contract/*": {
21
+ "types": "./dist/contract/*.d.ts",
22
+ "default": "./dist/contract/*.js"
19
23
  }
20
24
  },
21
25
  "files": [
@@ -29,22 +33,36 @@
29
33
  "react": "*"
30
34
  },
31
35
  "devDependencies": {
32
- "@arch-guard/core": "^0.11.0",
36
+ "@arch-guard/core": "^0.11.1",
33
37
  "@deepseek-ai/dsh-client-ui-primitives": "0.2.1-rc.2",
34
38
  "@types/node": "^24.19.0",
35
39
  "@types/react": "^19.0.0",
40
+ "@types/semver": "^7.8.0",
36
41
  "@vitest/coverage-v8": "^5.0.2",
37
42
  "react": "^18.0.0",
38
43
  "typescript": "5.9",
39
44
  "vitest": "^5.0.2"
40
45
  },
46
+ "dependencies": {
47
+ "dayjs": "^1.11.23",
48
+ "semver": "^7.8.5"
49
+ },
50
+ "repository": {
51
+ "type": "git",
52
+ "url": "git+https://github.com/novaeth/dsh-workbench.git",
53
+ "directory": "packages/shared"
54
+ },
55
+ "homepage": "https://github.com/novaeth/dsh-workbench#readme",
56
+ "bugs": {
57
+ "url": "https://github.com/novaeth/dsh-workbench/issues"
58
+ },
41
59
  "scripts": {
42
- "build": "tsc -p tsconfig.build.json && node scripts/copy-css.mjs",
60
+ "build": "node scripts/gen-release-packages.mjs && tsc -p tsconfig.build.json && node scripts/copy-css.mjs",
43
61
  "typecheck": "tsc --noEmit --incremental --tsBuildInfoFile node_modules/.cache/tsconfig.tsbuildinfo",
44
62
  "test": "vitest run",
45
63
  "coverage": "vitest run --coverage",
46
64
  "barrels": "node scripts/barrels.mjs",
47
- "selfcheck": "node scripts/check-state.mjs",
65
+ "selfcheck": "node scripts/check-state.mjs && node scripts/gen-release-packages.mjs --check",
48
66
  "arch:report": "arch-guard --report-only",
49
67
  "arch": "arch-guard"
50
68
  }