@wenathlan/devthink 2.0.14 → 2.0.19

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 (444) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/{dist/bridge.d.ts → bridge.d.ts} +1 -1
  3. package/bridge.d.ts.map +1 -0
  4. package/bridge.js +1877 -0
  5. package/bun.d.ts.map +1 -0
  6. package/bun.js +52329 -0
  7. package/caps/background.json +712 -0
  8. package/caps/cli.json +360 -0
  9. package/caps/library.json +3611 -0
  10. package/caps/mcp.json +126 -0
  11. package/caps/pagebridge.json +377 -0
  12. package/caps/popup.json +51 -0
  13. package/caps/sidepanel.json +522 -0
  14. package/checksums.txt +142 -0
  15. package/cli.d.ts.map +1 -0
  16. package/{dist/cli.js → cli.js} +2 -2
  17. package/companion.d.ts.map +1 -0
  18. package/companion.js +389 -0
  19. package/crossbrowser.d.ts.map +1 -0
  20. package/crossbrowser.js +1191 -0
  21. package/dashdone.d.ts.map +1 -0
  22. package/dashdone.js +368 -0
  23. package/deno.d.ts.map +1 -0
  24. package/deno.js +52325 -0
  25. package/devthink.umd.js +52346 -0
  26. package/fixtures/bun.ts +7 -0
  27. package/fixtures/cjs.js +6 -0
  28. package/fixtures/deno.ts +6 -0
  29. package/fixtures/example-org-pagestate.json +22 -0
  30. package/fixtures/importers/automa-workflow.json +18 -0
  31. package/fixtures/importers/selenium-side.json +20 -0
  32. package/fixtures/importers/tabular-plan.csv +7 -0
  33. package/fixtures/importers/uivision-macro.json +10 -0
  34. package/fixtures/importers/v1-plan.json +13 -0
  35. package/fixtures/mcp-client.mjs +14 -0
  36. package/fixtures/pages/checkout.html +192 -0
  37. package/fixtures/pages/dashboard.html +110 -0
  38. package/fixtures/pages/feed.html +113 -0
  39. package/fixtures/pages/product-grid.html +150 -0
  40. package/fixtures/plans/form-inventory-plan.json +11 -0
  41. package/fixtures/plans/release-notes-plan.json +11 -0
  42. package/fixtures/recipes/agentscompete.json +11 -0
  43. package/fixtures/recipes/agentsforms.json +11 -0
  44. package/fixtures/recipes/agentsmonitor.json +11 -0
  45. package/fixtures/recipes/agentsreview.json +29 -0
  46. package/fixtures/recipes/agentswarm.json +11 -0
  47. package/fixtures/recipes/fillcalendar.json +12 -0
  48. package/fixtures/recipes/fillcheckout.json +13 -0
  49. package/fixtures/recipes/filldependentdropdowns.json +12 -0
  50. package/fixtures/recipes/fillfromcsv.json +13 -0
  51. package/fixtures/recipes/fillloginform.json +12 -0
  52. package/fixtures/recipes/fillmultistepwizard.json +13 -0
  53. package/fixtures/recipes/fillregistration.json +12 -0
  54. package/fixtures/recipes/fillsearchfilters.json +12 -0
  55. package/fixtures/recipes/filltypeahead.json +11 -0
  56. package/fixtures/recipes/monitoralerts.json +12 -0
  57. package/fixtures/recipes/monitoravailability.json +11 -0
  58. package/fixtures/recipes/monitornetworkquiet.json +12 -0
  59. package/fixtures/recipes/monitorpagechanges.json +11 -0
  60. package/fixtures/recipes/monitorpricechange.json +11 -0
  61. package/fixtures/recipes/monitorschedule.json +12 -0
  62. package/fixtures/recipes/scrapedynamicprices.json +13 -0
  63. package/fixtures/recipes/scrapeimagegallery.json +12 -0
  64. package/fixtures/recipes/scrapeinfinitefeed.json +13 -0
  65. package/fixtures/recipes/scrapenestedlists.json +12 -0
  66. package/fixtures/recipes/scrapeproductgrid.json +12 -0
  67. package/fixtures/recipes/scrapereviews.json +12 -0
  68. package/fixtures/recipes/scrapesearchresults.json +12 -0
  69. package/fixtures/recipes/scrapetablepagination.json +12 -0
  70. package/fixtures/recipes/testaccessibility.json +34 -0
  71. package/fixtures/recipes/testconsoleerrors.json +12 -0
  72. package/fixtures/recipes/testdeeplinks.json +12 -0
  73. package/fixtures/recipes/testformvalidation.json +13 -0
  74. package/fixtures/recipes/testlayoutshift.json +12 -0
  75. package/fixtures/recipes/testlinkcheck.json +12 -0
  76. package/fixtures/recipes/testloadtiming.json +12 -0
  77. package/fixtures/recipes/testvisualdiff.json +12 -0
  78. package/fixtures/workflows/changelog-digest-workflow.json +13 -0
  79. package/fixtures/workflows/form-survey-workflow.json +13 -0
  80. package/gallery.json +706 -0
  81. package/hardening.d.ts.map +1 -0
  82. package/hardening.js +188 -0
  83. package/headless.d.ts.map +1 -0
  84. package/headless.js +11522 -0
  85. package/http.d.ts.map +1 -0
  86. package/http.js +2165 -0
  87. package/index.cjs +54682 -0
  88. package/index.d.ts.map +1 -0
  89. package/index.js +52310 -0
  90. package/index.neutral.js +46343 -0
  91. package/{web/manifest.json → manifest.json} +1 -1
  92. package/mcp.d.ts.map +1 -0
  93. package/mcp.js +20515 -0
  94. package/memory.d.ts.map +1 -0
  95. package/{memory.ts → memory.js} +2310 -3834
  96. package/nativehost.template.json +10 -0
  97. package/node.cjs +54686 -0
  98. package/node.d.ts.map +1 -0
  99. package/pack.d.ts.map +1 -0
  100. package/pack.js +805 -0
  101. package/package.json +83 -176
  102. package/policy.d.ts.map +1 -0
  103. package/{policy.ts → policy.js} +4679 -5073
  104. package/progress.d.ts.map +1 -0
  105. package/progress.js +645 -0
  106. package/protocol.d.ts.map +1 -0
  107. package/protocol.js +8334 -0
  108. package/schemas/audit.schema.json +226 -0
  109. package/schemas/capability.schema.json +113 -0
  110. package/schemas/envelope.schema.json +162 -0
  111. package/schemas/memory.schema.json +51 -0
  112. package/schemas/observation.schema.json +113 -0
  113. package/schemas/plan.schema.json +208 -0
  114. package/schemas/progress.schema.json +126 -0
  115. package/schemas/proposal.schema.json +68 -0
  116. package/schemas/session.schema.json +82 -0
  117. package/schemas/tool.schema.json +94 -0
  118. package/server.d.ts.map +1 -0
  119. package/server.js +28877 -0
  120. package/umd-example.html +18 -0
  121. package/umd.d.ts.map +1 -0
  122. package/accounts.ts +0 -2087
  123. package/agent.ts +0 -2331
  124. package/antigravity.ts +0 -2139
  125. package/apifreeze.ts +0 -4146
  126. package/auth.ts +0 -642
  127. package/background.ts +0 -16837
  128. package/bridge.ts +0 -2080
  129. package/build.ts +0 -54
  130. package/bun.ts +0 -26
  131. package/capture.ts +0 -1614
  132. package/checksecrets.ts +0 -72
  133. package/cjs.ts +0 -9
  134. package/cli.ts +0 -3500
  135. package/commands.ts +0 -1101
  136. package/companion.ts +0 -450
  137. package/compatibility.ts +0 -37
  138. package/config.ts +0 -3137
  139. package/constants.ts +0 -943
  140. package/core.ts +0 -1473
  141. package/crossbrowser.ts +0 -1359
  142. package/dashdone.ts +0 -605
  143. package/data.ts +0 -943
  144. package/database.ts +0 -133
  145. package/debug.ts +0 -850
  146. package/deno.ts +0 -27
  147. package/devthink.ts +0 -707
  148. package/dist/accounts.d.ts +0 -409
  149. package/dist/agent.d.ts +0 -837
  150. package/dist/antigravity.d.ts +0 -380
  151. package/dist/apifreeze.d.ts +0 -113
  152. package/dist/auth.d.ts +0 -224
  153. package/dist/capture.d.ts +0 -595
  154. package/dist/cjs.d.ts +0 -6
  155. package/dist/commands.d.ts +0 -310
  156. package/dist/compatibility.d.ts +0 -17
  157. package/dist/config.d.ts +0 -1853
  158. package/dist/constants.d.ts +0 -637
  159. package/dist/core.d.ts +0 -361
  160. package/dist/data.d.ts +0 -330
  161. package/dist/database.d.ts +0 -24
  162. package/dist/debug.d.ts +0 -270
  163. package/dist/engine.d.ts +0 -74
  164. package/dist/environments.d.ts +0 -244
  165. package/dist/evidence.d.ts +0 -277
  166. package/dist/export.d.ts +0 -311
  167. package/dist/fingerprint.d.ts +0 -594
  168. package/dist/flow.d.ts +0 -300
  169. package/dist/gates.d.ts +0 -103
  170. package/dist/identity.d.ts +0 -51
  171. package/dist/ids.d.ts +0 -7
  172. package/dist/llm.d.ts +0 -652
  173. package/dist/models.d.ts +0 -1807
  174. package/dist/net.d.ts +0 -325
  175. package/dist/neutral.d.ts +0 -41
  176. package/dist/oauth.d.ts +0 -703
  177. package/dist/page.d.ts +0 -1166
  178. package/dist/perf.d.ts +0 -481
  179. package/dist/plan.d.ts +0 -134
  180. package/dist/project.d.ts +0 -395
  181. package/dist/providers.d.ts +0 -37
  182. package/dist/quota.d.ts +0 -453
  183. package/dist/recovery.d.ts +0 -621
  184. package/dist/request.d.ts +0 -1492
  185. package/dist/run.d.ts +0 -779
  186. package/dist/runtime.d.ts +0 -212
  187. package/dist/search.d.ts +0 -375
  188. package/dist/security.d.ts +0 -534
  189. package/dist/serve.d.ts +0 -136
  190. package/dist/session.d.ts +0 -296
  191. package/dist/storage.d.ts +0 -53
  192. package/dist/streaming.d.ts +0 -1119
  193. package/dist/swarm.d.ts +0 -328
  194. package/dist/tools.d.ts +0 -170
  195. package/dist/types.d.ts +0 -8357
  196. package/dist/utils.d.ts +0 -82
  197. package/dist/version.d.ts +0 -7
  198. package/dist/versionregistry.d.ts +0 -406
  199. package/dist/views.d.ts +0 -579
  200. package/dist/workbenchsession.d.ts +0 -69
  201. package/dist/workflow.d.ts +0 -649
  202. package/docs/readme.md +0 -92
  203. package/docs/schemas/antigravity.json +0 -192
  204. package/engine.ts +0 -1524
  205. package/environments.ts +0 -1005
  206. package/evidence.ts +0 -643
  207. package/export.ts +0 -889
  208. package/fingerprint.ts +0 -1458
  209. package/flow.ts +0 -1190
  210. package/gates.ts +0 -307
  211. package/gateway.ts +0 -34
  212. package/hardening.ts +0 -191
  213. package/headless.ts +0 -369
  214. package/http.ts +0 -2110
  215. package/identity.ts +0 -246
  216. package/ids.ts +0 -26
  217. package/index.ts +0 -369
  218. package/llm.ts +0 -2682
  219. package/mcp.ts +0 -1835
  220. package/models.ts +0 -3805
  221. package/modes.ts +0 -43
  222. package/net.ts +0 -1214
  223. package/neutral.ts +0 -362
  224. package/node.ts +0 -26
  225. package/oauth.ts +0 -2216
  226. package/offscreen.ts +0 -170
  227. package/pack.ts +0 -956
  228. package/page.ts +0 -7824
  229. package/pagebridge.ts +0 -1116
  230. package/perf.ts +0 -957
  231. package/plan.ts +0 -672
  232. package/plugin.ts +0 -76
  233. package/prisma.config.ts +0 -27
  234. package/progress.ts +0 -1308
  235. package/project.ts +0 -1291
  236. package/protocol.ts +0 -4187
  237. package/providers.ts +0 -246
  238. package/quota.ts +0 -1887
  239. package/recovery.ts +0 -2433
  240. package/request.ts +0 -4482
  241. package/run.ts +0 -2135
  242. package/runtime.ts +0 -526
  243. package/search.ts +0 -1760
  244. package/security.ts +0 -1673
  245. package/serve.ts +0 -419
  246. package/server.ts +0 -5538
  247. package/session.ts +0 -1162
  248. package/storage.ts +0 -182
  249. package/streaming.ts +0 -4101
  250. package/swarm.ts +0 -884
  251. package/sync.ts +0 -56
  252. package/tests/agentcert.test.ts +0 -128
  253. package/tests/agentfleet.test.ts +0 -214
  254. package/tests/agentreview.test.ts +0 -241
  255. package/tests/agentstream.test.ts +0 -335
  256. package/tests/agentwork.test.ts +0 -356
  257. package/tests/apifreeze.test.ts +0 -290
  258. package/tests/apimap.test.ts +0 -112
  259. package/tests/approvalgate.test.ts +0 -175
  260. package/tests/artifactmanifest.test.ts +0 -204
  261. package/tests/attentionfeed.test.ts +0 -163
  262. package/tests/backgroundruns.test.ts +0 -100
  263. package/tests/batchscheduling.test.ts +0 -131
  264. package/tests/blackboard.test.ts +0 -238
  265. package/tests/bridge.test.ts +0 -1088
  266. package/tests/browsercoverage.test.ts +0 -134
  267. package/tests/browserpolyfills.test.ts +0 -124
  268. package/tests/build.mjs +0 -1260
  269. package/tests/clientauth.test.ts +0 -223
  270. package/tests/clitools.test.ts +0 -578
  271. package/tests/confirmgates.test.ts +0 -190
  272. package/tests/containerpack.test.ts +0 -143
  273. package/tests/controlflow.test.ts +0 -2120
  274. package/tests/coordination.test.ts +0 -345
  275. package/tests/copyscreen.test.ts +0 -139
  276. package/tests/core.test.ts +0 -417
  277. package/tests/costcert.test.ts +0 -95
  278. package/tests/crossbrowser.test.ts +0 -115
  279. package/tests/cspaudit.test.ts +0 -79
  280. package/tests/dashdone.test.ts +0 -615
  281. package/tests/datagrid.test.ts +0 -137
  282. package/tests/doccheck.test.ts +0 -107
  283. package/tests/dombatch.test.ts +0 -109
  284. package/tests/emulation.test.ts +0 -282
  285. package/tests/environments.test.ts +0 -259
  286. package/tests/evidenceviews.test.ts +0 -88
  287. package/tests/exporttools.test.ts +0 -185
  288. package/tests/firefoxprep.test.ts +0 -134
  289. package/tests/flowlibrary.test.ts +0 -242
  290. package/tests/flowrun.test.ts +0 -303
  291. package/tests/forensics.test.ts +0 -439
  292. package/tests/gateway.test.ts +0 -939
  293. package/tests/headlesslib.test.ts +0 -171
  294. package/tests/httpstream.test.ts +0 -277
  295. package/tests/immutablelog.test.ts +0 -157
  296. package/tests/inboundguard.test.ts +0 -177
  297. package/tests/lazyload.test.ts +0 -72
  298. package/tests/librarymodes.test.ts +0 -623
  299. package/tests/llm.test.ts +0 -696
  300. package/tests/manifest.test.ts +0 -226
  301. package/tests/maskinputs.test.ts +0 -150
  302. package/tests/matrixverify.test.ts +0 -111
  303. package/tests/mavenpack.test.ts +0 -75
  304. package/tests/mcpserver.test.ts +0 -704
  305. package/tests/memory.test.ts +0 -4155
  306. package/tests/memorycare.test.ts +0 -230
  307. package/tests/migrateplan.test.ts +0 -349
  308. package/tests/minimization.test.ts +0 -414
  309. package/tests/modelroute.test.ts +0 -112
  310. package/tests/multiagent.test.ts +0 -440
  311. package/tests/nativebridge.test.ts +0 -807
  312. package/tests/navigation.test.ts +0 -284
  313. package/tests/nugetpack.test.ts +0 -83
  314. package/tests/orchestration.test.ts +0 -449
  315. package/tests/originpolicy.test.ts +0 -405
  316. package/tests/outputcompare.test.ts +0 -97
  317. package/tests/package.test.ts +0 -91
  318. package/tests/pagebridge.test.ts +0 -5909
  319. package/tests/pentest.test.ts +0 -75
  320. package/tests/perfrecords.test.ts +0 -257
  321. package/tests/permdiff.test.ts +0 -85
  322. package/tests/phishguard.test.ts +0 -128
  323. package/tests/pickerviews.test.ts +0 -155
  324. package/tests/pipelines.test.ts +0 -381
  325. package/tests/planlint.test.ts +0 -240
  326. package/tests/planreview.test.ts +0 -383
  327. package/tests/platformtargets.test.ts +0 -56
  328. package/tests/policy.test.ts +0 -8284
  329. package/tests/portability.test.ts +0 -96
  330. package/tests/progress.test.ts +0 -1036
  331. package/tests/promptlibrary.test.ts +0 -116
  332. package/tests/protocol.test.ts +0 -4793
  333. package/tests/publishingpipeline.test.ts +0 -314
  334. package/tests/quickactions.test.ts +0 -164
  335. package/tests/readiness.test.ts +0 -78
  336. package/tests/recipes.test.ts +0 -163
  337. package/tests/redactshots.test.ts +0 -216
  338. package/tests/registernvidiakeys.ts +0 -51
  339. package/tests/relayserve.test.ts +0 -304
  340. package/tests/releasenotes.test.ts +0 -276
  341. package/tests/resilience.test.ts +0 -467
  342. package/tests/resourceaware.test.ts +0 -187
  343. package/tests/runbudget.test.ts +0 -125
  344. package/tests/runhistory.test.ts +0 -299
  345. package/tests/runreplay.test.ts +0 -113
  346. package/tests/runresume.test.ts +0 -184
  347. package/tests/runstate.test.ts +0 -288
  348. package/tests/runtimeadapters.test.ts +0 -251
  349. package/tests/safariskeleton.test.ts +0 -115
  350. package/tests/sandboxframe.test.ts +0 -196
  351. package/tests/sbom.test.ts +0 -105
  352. package/tests/secretvault.test.ts +0 -188
  353. package/tests/selcache.test.ts +0 -111
  354. package/tests/sessioninterface.test.ts +0 -791
  355. package/tests/sessions.test.ts +0 -591
  356. package/tests/siteprefs.test.ts +0 -228
  357. package/tests/snapshotdelta.test.ts +0 -165
  358. package/tests/statusviews.test.ts +0 -237
  359. package/tests/stepmeter.test.ts +0 -200
  360. package/tests/streamparse.test.ts +0 -163
  361. package/tests/stylepruning.test.ts +0 -90
  362. package/tests/surfaces.test.ts +0 -282
  363. package/tests/sweep.test.ts +0 -78
  364. package/tests/syncbridge.test.ts +0 -164
  365. package/tests/taskqueue.test.ts +0 -206
  366. package/tests/toolcalls.test.ts +0 -336
  367. package/tests/toolcatalog.test.ts +0 -201
  368. package/tests/torture-agent.test.ts +0 -706
  369. package/tests/torture-auth.test.ts +0 -461
  370. package/tests/torture-commands.test.ts +0 -895
  371. package/tests/torture-data.test.ts +0 -923
  372. package/tests/torture-environments.test.ts +0 -285
  373. package/tests/torture-export.test.ts +0 -263
  374. package/tests/torture-http.test.ts +0 -1379
  375. package/tests/torture-llm.test.ts +0 -808
  376. package/tests/torture-memory.test.ts +0 -1084
  377. package/tests/torture-plan.test.ts +0 -829
  378. package/tests/torture-run.test.ts +0 -626
  379. package/tests/torture-session.test.ts +0 -928
  380. package/tests/torture-swarm.test.ts +0 -1245
  381. package/tests/torture-tools.test.ts +0 -964
  382. package/tests/torture-workflow.test.ts +0 -2354
  383. package/tests/tourviews.test.ts +0 -52
  384. package/tests/transparency.test.ts +0 -147
  385. package/tests/trigger.test.ts +0 -941
  386. package/tests/v1sunset.test.ts +0 -428
  387. package/tests/virtlist.test.ts +0 -94
  388. package/tests/vision.test.ts +0 -540
  389. package/tests/vsixpack.test.ts +0 -145
  390. package/tests/webapi.test.ts +0 -523
  391. package/tests/workflow.test.ts +0 -1785
  392. package/tests/workfloweditor.test.ts +0 -759
  393. package/tests/xpipack.test.ts +0 -128
  394. package/tools.ts +0 -734
  395. package/types.ts +0 -9908
  396. package/umd.ts +0 -9
  397. package/utils.ts +0 -249
  398. package/version.ts +0 -8
  399. package/versionregistry.ts +0 -1310
  400. package/views.ts +0 -2153
  401. package/vitest.config.ts +0 -12
  402. package/web/App.tsx +0 -78
  403. package/web/README.md +0 -47
  404. package/web/capacitor.config.ts +0 -46
  405. package/web/const.ts +0 -19
  406. package/web/control.shell.tsx +0 -66
  407. package/web/dashboardpage.ts +0 -554
  408. package/web/db.ts +0 -493
  409. package/web/design.html +0 -541
  410. package/web/gatewayview/Gateway.tsx +0 -345
  411. package/web/gatewayview/config.ts +0 -1042
  412. package/web/gatewayview/definition.ts +0 -174
  413. package/web/icons.ts +0 -15
  414. package/web/optionspage.ts +0 -691
  415. package/web/popup.ts +0 -1651
  416. package/web/schema.prisma +0 -176
  417. package/web/sidepanel.ts +0 -7941
  418. package/web/sitemanifest.json +0 -13
  419. package/web/terminal-ui.tsx +0 -622
  420. package/web/transparencypage.ts +0 -541
  421. package/web/vite.config.ts +0 -39
  422. package/web/workspace.ts +0 -23
  423. package/workbenchmemory.ts +0 -104
  424. package/workbenchsession.ts +0 -304
  425. package/workflow.ts +0 -4495
  426. /package/{dist/bun.d.ts → bun.d.ts} +0 -0
  427. /package/{dist/cli.d.ts → cli.d.ts} +0 -0
  428. /package/{dist/companion.d.ts → companion.d.ts} +0 -0
  429. /package/{dist/crossbrowser.d.ts → crossbrowser.d.ts} +0 -0
  430. /package/{dist/dashdone.d.ts → dashdone.d.ts} +0 -0
  431. /package/{dist/deno.d.ts → deno.d.ts} +0 -0
  432. /package/{dist/hardening.d.ts → hardening.d.ts} +0 -0
  433. /package/{dist/headless.d.ts → headless.d.ts} +0 -0
  434. /package/{dist/http.d.ts → http.d.ts} +0 -0
  435. /package/{dist/index.d.ts → index.d.ts} +0 -0
  436. /package/{dist/mcp.d.ts → mcp.d.ts} +0 -0
  437. /package/{dist/memory.d.ts → memory.d.ts} +0 -0
  438. /package/{dist/node.d.ts → node.d.ts} +0 -0
  439. /package/{dist/pack.d.ts → pack.d.ts} +0 -0
  440. /package/{dist/policy.d.ts → policy.d.ts} +0 -0
  441. /package/{dist/progress.d.ts → progress.d.ts} +0 -0
  442. /package/{dist/protocol.d.ts → protocol.d.ts} +0 -0
  443. /package/{dist/server.d.ts → server.d.ts} +0 -0
  444. /package/{dist/umd.d.ts → umd.d.ts} +0 -0
package/runtime.ts DELETED
@@ -1,526 +0,0 @@
1
- /**
2
- * The runtime module of the 1.1.90 consolidation: every correlated variation of the platform adapter contract, its implementations and the target matrix interned in this one file, so the module family carries one surface without duplicate variations.
3
- * The correlation is the platform runtime family: platformadapter holds the adapter contract every platform primitive flows through (the storage, clock, logger and fetch adapters with the node, browser and deno default compositions, the shared adapter registry on the global symbol registry so the esm and cjs modes of one process share one active adapter, and the bundle stamp of the running dist target); runtimeadapters holds the implementations the contract composes (the filesystem, chrome storage, deno kv and in-memory storage mappings, the capability probe table, the adapter declarations and the worker, dom and fetch shells with their feature downgrades); and platformtargets holds the target matrix that verifies every platform target against the adapter mappings with its minified output budget.
4
- * No binding is ever hardcoded: every node, deno and browser primitive arrives injected through the seam so the neutral and browser bundles never carry a platform import, and no adapter ever bypasses the human review.
5
- */
6
-
7
- /* ── Merged from platformadapter.ts ── */
8
- import type {
9
- adaptercontract,
10
- bundlemode,
11
- capabilityprobe,
12
- clockadapter,
13
- fetchadapter,
14
- librarymode,
15
- loggeradapter,
16
- platformtarget,
17
- runtimeadapterdeclaration,
18
- featuredowngrade,
19
- platformmatrix,
20
- } from "./types.js";
21
- import type { memoryadapter } from "./memory.js";
22
- import { packageversion } from "./version.js";
23
-
24
- /**
25
- * Platform adapter logic of the 1.1.81 family.
26
- * One contract carries every platform primitive the library touches: the storage adapter the memory module takes, the clock adapter the progress module takes, the logger adapter that keeps the core off a bound console and the fetch adapter that keeps the core off a bound network primitive — with the node, browser and deno default compositions that bind real platform apis behind the same seam, and the bundle stamp that reports the mode and target of the running bundle. The module stays pure: the node bindings arrive as injected filesystem primitives and the deno bindings as an injected kv store, so the neutral and browser bundles never carry a node import. The shared adapter registry lives on the global symbol registry instead of a module singleton, so the esm and cjs modes of one process share one active adapter instead of forking the dual package hazard.
27
- * Example: `const adapter = nodeplatformadapter({ profiledir, fs }); setsharedadapter(adapter); bundlestamp();` binds the filesystem storage, publishes it to every mode of the process and reports the running bundle.
28
- */
29
-
30
- /** Reads the consumption mode one runtime adapter serves: the browser shell rides the umd bundle, the node shell rides the cjs bundle and the bun and deno shells ride the esm core. */
31
- export function adaptermodeof(runtime: platformtarget["runtime"]): librarymode {
32
- const modes: Record<platformtarget["runtime"], librarymode> = {
33
- browser: "umd",
34
- node: "cjs",
35
- bun: "esm",
36
- deno: "esm",
37
- };
38
- return modes[runtime];
39
- }
40
-
41
- /** Reads the clock adapter of the platform seam from the injected primitives; the adapter owns no timer of its own. */
42
- export function clockadapterof(primitives: {
43
- now(): number;
44
- schedule(callback: () => void, milliseconds: number): unknown;
45
- }): clockadapter {
46
- return {
47
- now: () => primitives.now(),
48
- schedule: (callback, milliseconds) => primitives.schedule(callback, milliseconds),
49
- };
50
- }
51
-
52
- /** Reads the logger adapter of the platform seam from the injected sink; the adapter owns no console of its own. */
53
- export function loggeradapterof(sink: {
54
- log(line: string): void;
55
- warn(line: string): void;
56
- error(line: string): void;
57
- }): loggeradapter {
58
- return { log: (line) => sink.log(line), warn: (line) => sink.warn(line), error: (line) => sink.error(line) };
59
- }
60
-
61
- /** Reads the fetch adapter of the platform seam from the injected loader; the adapter owns no network primitive of its own. */
62
- export function fetchadapterof(primitives: {
63
- fetch(input: string, init?: Record<string, unknown>): Promise<unknown>;
64
- }): fetchadapter {
65
- return { fetch: (input, init) => primitives.fetch(input, init) };
66
- }
67
-
68
- /** Reads the default clock adapter: now and the scheduler bind to the platform globals every supported runtime ships, so the default carries no node or browser specific import. Example: `defaultclock().now()` answers the platform timestamp. */
69
- export function defaultclock(): clockadapter {
70
- return {
71
- now: () => Date.now(),
72
- schedule: (callback, milliseconds) => setTimeout(callback, milliseconds),
73
- };
74
- }
75
-
76
- /** Reads the default logger adapter: the sink binds to the platform console every supported runtime ships. Example: `defaultlogger().log("line")` writes one line through the platform console. */
77
- export function defaultlogger(): loggeradapter {
78
- return {
79
- log: (line) => console.log(line),
80
- warn: (line) => console.warn(line),
81
- error: (line) => console.error(line),
82
- };
83
- }
84
-
85
- /** Reads the default fetch adapter: the loader binds to the platform fetch primitive and a runtime without one refuses instead of silently binding, so a host injects its own loader. Example: `defaultfetch().fetch("https://example.org")` rides the platform primitive. */
86
- export function defaultfetch(): fetchadapter {
87
- const loader = (globalThis as { fetch?: (input: string, init?: Record<string, unknown>) => Promise<unknown> }).fetch;
88
- if (loader === undefined)
89
- throw new Error(
90
- "The default fetch adapter needs the platform fetch primitive; a runtime without one injects its own loader through the seam.",
91
- );
92
- return { fetch: (input, init) => loader(input, init) };
93
- }
94
-
95
- /** Composes the full adapter contract from the injected seams: the storage adapter is required because every runtime binds its own, while the clock, logger and fetch adapters default to the platform globals when the caller injects none. Example: `platformadapterof({ runtime: "node", storage: adapter })` fills the clock, logger and fetch defaults beside the injected storage. */
96
- export function platformadapterof(input: {
97
- runtime: platformtarget["runtime"];
98
- headless?: boolean;
99
- storage: memoryadapter;
100
- clock?: clockadapter;
101
- logger?: loggeradapter;
102
- fetch?: fetchadapter;
103
- }): adaptercontract {
104
- return {
105
- runtime: input.runtime,
106
- mode: adaptermodeof(input.runtime),
107
- declaration: runtimeadapterdeclarationof(input.runtime, input.headless),
108
- probes: runtimecapabilitiestable()[input.runtime],
109
- storage: input.storage,
110
- clock: input.clock ?? defaultclock(),
111
- logger: input.logger ?? defaultlogger(),
112
- fetch: input.fetch ?? defaultfetch(),
113
- };
114
- }
115
-
116
- /** Reads the default node adapter: the caller injects the filesystem primitives of the node build, so this module never imports a node api and the browser bundles stay free of node shims. Example: `nodeplatformadapter({ profiledir, fs })` binds the filesystem storage under the profile directory. */
117
- export function nodeplatformadapter(input: {
118
- profiledir: string;
119
- fs: filesystemprimitives;
120
- clock?: clockadapter;
121
- logger?: loggeradapter;
122
- fetch?: fetchadapter;
123
- }): adaptercontract {
124
- return platformadapterof({
125
- runtime: "node",
126
- storage: filesystemstorageadapter(input.fs, input.profiledir),
127
- ...(input.clock !== undefined ? { clock: input.clock } : {}),
128
- ...(input.logger !== undefined ? { logger: input.logger } : {}),
129
- ...(input.fetch !== undefined ? { fetch: input.fetch } : {}),
130
- });
131
- }
132
-
133
- /** Reads the default browser adapter: the caller injects the chrome storage area of the browser build and an absent area falls back to the in-memory store, so the script tag bundle runs with no chrome api present. Example: `browserplatformadapter({ area })` binds the chrome storage area through the seam. */
134
- export function browserplatformadapter(input?: {
135
- area?: chromestorageprimitives;
136
- clock?: clockadapter;
137
- logger?: loggeradapter;
138
- fetch?: fetchadapter;
139
- }): adaptercontract {
140
- const storage = input?.area !== undefined ? chromestorageadapter(input.area) : memorystorageadapter();
141
- return platformadapterof({
142
- runtime: "browser",
143
- storage,
144
- ...(input?.clock !== undefined ? { clock: input.clock } : {}),
145
- ...(input?.logger !== undefined ? { logger: input.logger } : {}),
146
- ...(input?.fetch !== undefined ? { fetch: input.fetch } : {}),
147
- });
148
- }
149
-
150
- /** Reads the default deno adapter: the caller injects the kv store the deno host opened, so the deno runtime keeps its own storage mapping behind the same seam. Example: `denoplatformadapter({ kv })` binds the deno kv store. */
151
- export function denoplatformadapter(input: {
152
- kv: denokvprimitives;
153
- clock?: clockadapter;
154
- logger?: loggeradapter;
155
- fetch?: fetchadapter;
156
- }): adaptercontract {
157
- return platformadapterof({
158
- runtime: "deno",
159
- storage: denokvadapter(input.kv),
160
- ...(input.clock !== undefined ? { clock: input.clock } : {}),
161
- ...(input.logger !== undefined ? { logger: input.logger } : {}),
162
- ...(input.fetch !== undefined ? { fetch: input.fetch } : {}),
163
- });
164
- }
165
-
166
- /** The shared registry key of the active adapter: a registered symbol, so the esm and cjs modes of one process read the same registry entry instead of forking the dual package hazard across two module instances. */
167
- const registrykey = Symbol.for("devthink.platform.adapter");
168
-
169
- /** Publishes the active adapter contract onto the shared registry: every mode of the process reads the same adapter afterwards, so the library state stays consistent across the esm and cjs instances. Example: `setsharedadapter(adapter)` publishes one adapter for both modes. */
170
- export function setsharedadapter(adapter: adaptercontract): adaptercontract {
171
- (globalThis as Record<symbol, adaptercontract | undefined>)[registrykey] = adapter;
172
- return adapter;
173
- }
174
-
175
- /** Reads the active adapter contract from the shared registry; an unpublished registry answers undefined and a host publishes through setsharedadapter. Example: `sharedadapter()?.runtime` answers the runtime of the published adapter. */
176
- export function sharedadapter(): adaptercontract | undefined {
177
- return (globalThis as Record<symbol, adaptercontract | undefined>)[registrykey];
178
- }
179
-
180
- /** The bundle stamp of the running instance: the entry file of each dist target stamps its own mode and target at load, so the stamp stays per bundle by design while the adapter registry stays per process. */
181
- let runningmode: librarymode = "esm";
182
- let runningtarget = "index.js";
183
-
184
- /** Stamps the mode and target of the running bundle; each dist entry calls this once at load, so the library reports the bundle it runs from. Example: `stampbundle("umd", "devthink.umd.js")` stamps the script tag bundle. */
185
- export function stampbundle(mode: librarymode, target: string): void {
186
- runningmode = mode;
187
- runningtarget = target;
188
- }
189
-
190
- /** Reads the stamp of the running bundle with the package version: one function answers the version, the consumption mode and the dist target of the bundle the caller loaded. Example: `bundlestamp().mode` answers `cjs` inside dist/index.cjs. */
191
- export function bundlestamp(): bundlemode {
192
- return { version: packageversion, mode: runningmode, target: runningtarget };
193
- }
194
-
195
- /** Detects the adapter runtime of the active platform through global probes: the node, bun and deno globals name their runtime and a page environment answers browser, so one probe decides which default adapter composition binds. Example: `detectadapterruntime()` answers `node` under the node build. */
196
- export function detectadapterruntime(): platformtarget["runtime"] | "unknown" {
197
- const holder = globalThis as {
198
- Deno?: { version?: string };
199
- Bun?: { version?: string };
200
- process?: { versions?: { node?: string } };
201
- window?: unknown;
202
- };
203
- if (holder.Deno !== undefined) return "deno";
204
- if (holder.Bun !== undefined) return "bun";
205
- if (holder.process?.versions?.node !== undefined) return "node";
206
- if (holder.window !== undefined) return "browser";
207
- return "unknown";
208
- }
209
-
210
- /** Reads the adapter surface report of one contract: the runtime, mode, declaration mappings and probe flags in one plain record the doctor surfaces print. Example: `adaptersurfaceof(adapter).storage` answers the storage mapping name. */
211
- export function adaptersurfaceof(adapter: adaptercontract): {
212
- runtime: string;
213
- mode: librarymode;
214
- storage: string;
215
- worker: string;
216
- dom: string;
217
- probes: capabilityprobe;
218
- declaration: runtimeadapterdeclaration;
219
- } {
220
- return {
221
- runtime: adapter.runtime,
222
- mode: adapter.mode,
223
- storage: adapter.declaration.storage,
224
- worker: adapter.declaration.worker,
225
- dom: adapter.declaration.dom,
226
- probes: adapter.probes,
227
- declaration: adapter.declaration,
228
- };
229
- }
230
-
231
- /* ── Merged from runtimeadapters.ts ── */
232
-
233
- /**
234
- * Runtimeadapters logic of the 1.1.67 family.
235
- * One core meets every runtime through its adapter: the capability probes detect the dom, storage, network and worker capabilities of the active runtime, a missing capability downgrades its feature instead of failing the runtime, and the runtime shells provide the timers, storage and fetch primitives with the storage adapter mapping to chrome storage in the browser, the filesystem in node and bun and deno kv in deno, the worker adapter mapping to web workers or worker threads and the dom adapter mapping to a live page in the browser and a remote browser session in headless mode.
236
- * The adapters stay injection seams: every primitive arrives as a parameter, so the pure core never imports a platform module and the extension bundle stays free of node shims.
237
- */
238
-
239
- /** The runtime names the adapters serve. */
240
- export type adapterruntime = platformtarget["runtime"];
241
-
242
- /** Reads one capability probe from the presence flags of the active runtime: the probe detects dom, storage, network and worker availability without failing anything. */
243
- export function capabilityprobeof(input: {
244
- dom: boolean;
245
- storage: boolean;
246
- network: boolean;
247
- worker: boolean;
248
- }): capabilityprobe {
249
- return { dom: input.dom, storage: input.storage, network: input.network, worker: input.worker };
250
- }
251
-
252
- /** Reads the declared capability matrix: the browser probes every capability, node and bun probe storage, network and workers without a dom, and deno probes its kv storage, the platform fetch and its web workers without a dom. */
253
- export function runtimecapabilitiestable(): Record<adapterruntime, capabilityprobe> {
254
- return {
255
- browser: { dom: true, storage: true, network: true, worker: true },
256
- node: { dom: false, storage: true, network: true, worker: true },
257
- bun: { dom: false, storage: true, network: true, worker: true },
258
- deno: { dom: false, storage: true, network: true, worker: true },
259
- };
260
- }
261
-
262
- /** Reads the adapter declaration of one runtime: the storage, fetch, timer, worker and dom mappings its platform provides. */
263
- export function runtimeadapterdeclarationof(runtime: adapterruntime, headless?: boolean): runtimeadapterdeclaration {
264
- const declarations: Record<adapterruntime, runtimeadapterdeclaration> = {
265
- browser: {
266
- runtime,
267
- storage: "chrome",
268
- fetch: "platform",
269
- timer: "platform",
270
- worker: "webworker",
271
- dom: headless === true ? "remote" : "livepage",
272
- },
273
- node: {
274
- runtime,
275
- storage: "filesystem",
276
- fetch: "platform",
277
- timer: "platform",
278
- worker: "workerthreads",
279
- dom: "remote",
280
- },
281
- bun: {
282
- runtime,
283
- storage: "filesystem",
284
- fetch: "platform",
285
- timer: "platform",
286
- worker: "workerthreads",
287
- dom: "remote",
288
- },
289
- deno: { runtime, storage: "denokv", fetch: "platform", timer: "platform", worker: "webworker", dom: "remote" },
290
- };
291
- return declarations[runtime];
292
- }
293
-
294
- /** Reads every adapter declaration of the matrix in one list, so the doctor report and the build matrix read the same mappings. */
295
- export function adapterdeclarationsof(): runtimeadapterdeclaration[] {
296
- return (["browser", "node", "bun", "deno"] as adapterruntime[]).map((runtime) =>
297
- runtimeadapterdeclarationof(runtime),
298
- );
299
- }
300
-
301
- /** Reads the worker mapping of one runtime: the browser and deno run web workers while node and bun run worker threads. */
302
- export function workermapof(runtime: adapterruntime): "webworker" | "workerthreads" {
303
- return runtime === "node" || runtime === "bun" ? "workerthreads" : "webworker";
304
- }
305
-
306
- /** Reads the dom mapping of one mode: the browser maps to the live page and the headless mode maps to the remote browser session the attach protocol drives. */
307
- export function dommapof(mode: "browser" | "headless"): "livepage" | "remote" {
308
- return mode === "browser" ? "livepage" : "remote";
309
- }
310
-
311
- /** Computes the feature downgrades of one runtime: every feature whose capability the probes miss downgrades with its reason, and nothing fails the runtime. */
312
- export function downgradesof(input: {
313
- features: Array<{ feature: string; capability: keyof capabilityprobe }>;
314
- probes: capabilityprobe;
315
- }): featuredowngrade[] {
316
- return input.features
317
- .filter((feature) => input.probes[feature.capability] !== true)
318
- .map((feature) => ({
319
- feature: feature.feature,
320
- capability: feature.capability,
321
- reason: `The runtime probes no ${feature.capability} capability, so the ${feature.feature} feature downgrades instead of failing the runtime.`,
322
- }));
323
- }
324
-
325
- /** Reads the storage primitives one filesystem runtime injects: the adapter maps every memory key to one json file under its base directory. */
326
- export interface filesystemprimitives {
327
- readfile(path: string): Promise<string>;
328
- writefile(path: string, data: string): Promise<void>;
329
- mkdir(path: string): Promise<unknown>;
330
- join(...parts: string[]): string;
331
- }
332
-
333
- /** Maps filesystem primitives onto the memory adapter seam: every key becomes one json file under the base directory, so node and bun store profiles the same way the browser stores them. */
334
- export function filesystemstorageadapter(fs: filesystemprimitives, base: string): memoryadapter {
335
- return {
336
- async get<T>(key: string): Promise<T | undefined> {
337
- try {
338
- return JSON.parse(await fs.readfile(fs.join(base, `${key}.json`))) as T;
339
- } catch {
340
- return undefined;
341
- }
342
- },
343
- async set<T>(key: string, value: T): Promise<void> {
344
- await fs.mkdir(base);
345
- await fs.writefile(fs.join(base, `${key}.json`), JSON.stringify(value));
346
- },
347
- };
348
- }
349
-
350
- /** Reads the storage primitives one chrome runtime injects: the adapter maps every memory key onto one storage area entry. */
351
- export interface chromestorageprimitives {
352
- get(key: string): Promise<unknown>;
353
- set(key: string, value: unknown): Promise<void>;
354
- }
355
-
356
- /** Maps chrome storage primitives onto the memory adapter seam: the browser stores every memory key in the storage area the caller injected. */
357
- export function chromestorageadapter(area: chromestorageprimitives): memoryadapter {
358
- return {
359
- async get<T>(key: string): Promise<T | undefined> {
360
- return (await area.get(key)) as T | undefined;
361
- },
362
- async set<T>(key: string, value: T): Promise<void> {
363
- await area.set(key, value);
364
- },
365
- };
366
- }
367
-
368
- /** Reads the kv primitives one deno runtime injects: the adapter maps every memory key onto one kv entry. */
369
- export interface denokvprimitives {
370
- get<T>(key: string): Promise<T | undefined>;
371
- set<T>(key: string, value: T): Promise<void>;
372
- }
373
-
374
- /** Maps deno kv primitives onto the memory adapter seam: deno stores every memory key in the kv store the caller opened. */
375
- export function denokvadapter(kv: denokvprimitives): memoryadapter {
376
- return {
377
- async get<T>(key: string): Promise<T | undefined> {
378
- return kv.get<T>(key);
379
- },
380
- async set<T>(key: string, value: T): Promise<void> {
381
- await kv.set(key, value);
382
- },
383
- };
384
- }
385
-
386
- /** Maps an in-memory map onto the memory adapter seam: the test and browser fallback store keeps every key in one map. */
387
- export function memorystorageadapter(store?: Map<string, unknown>): memoryadapter {
388
- const held = store ?? new Map<string, unknown>();
389
- return {
390
- async get<T>(key: string): Promise<T | undefined> {
391
- return held.get(key) as T | undefined;
392
- },
393
- async set<T>(key: string, value: T): Promise<void> {
394
- held.set(key, value);
395
- },
396
- };
397
- }
398
-
399
- /** Reads the timer shell of one runtime: the platform scheduling primitive the caller injected decides when callbacks run, so no adapter reimplements a clock. */
400
- export function timershellof(primitives: {
401
- settimeout(callback: () => void, milliseconds: number): unknown;
402
- now(): number;
403
- }): { schedule(callback: () => void, milliseconds: number): unknown; now(): number } {
404
- return {
405
- schedule: (callback, milliseconds) => primitives.settimeout(callback, milliseconds),
406
- now: () => primitives.now(),
407
- };
408
- }
409
-
410
- /** Reads the fetch shell of one runtime: the platform fetch primitive the caller injected passes through untouched, because every supported runtime ships one. */
411
- export function fetchshellof(primitives: { fetch(input: string, init?: unknown): Promise<unknown> }): {
412
- fetch(input: string, init?: unknown): Promise<unknown>;
413
- } {
414
- return { fetch: (input, init) => primitives.fetch(input, init) };
415
- }
416
-
417
- /** Composes the runtime adapter of one target: the declaration, the probes and the injected primitives become one shell, with the storage adapter mapping through the seam the caller provided. */
418
- export function runtimeadapterof(input: {
419
- runtime: adapterruntime;
420
- headless?: boolean;
421
- storage?: memoryadapter;
422
- timer?: { settimeout(callback: () => void, milliseconds: number): unknown; now(): number };
423
- fetch?: { fetch(input: string, init?: unknown): Promise<unknown> };
424
- }): {
425
- declaration: runtimeadapterdeclaration;
426
- probes: capabilityprobe;
427
- storage?: memoryadapter;
428
- timer?: { schedule(callback: () => void, milliseconds: number): unknown; now(): number };
429
- fetch?: { fetch(input: string, init?: unknown): Promise<unknown> };
430
- } {
431
- return {
432
- declaration: runtimeadapterdeclarationof(input.runtime, input.headless),
433
- probes: runtimecapabilitiestable()[input.runtime],
434
- ...(input.storage !== undefined ? { storage: input.storage } : {}),
435
- ...(input.timer !== undefined ? { timer: timershellof(input.timer) } : {}),
436
- ...(input.fetch !== undefined ? { fetch: fetchshellof(input.fetch) } : {}),
437
- };
438
- }
439
-
440
- /** Reads the portable capability set of one runtime: a runtime that probes the dom (a live page or an attached remote session) executes every reviewed kind the vocabulary declares, and a runtime without one executes the kinds its domless filter admits. */
441
- export function portablecapabilityset(input: {
442
- vocabulary: string[];
443
- probes: capabilityprobe;
444
- domlesskinds?: string[];
445
- }): string[] {
446
- if (input.probes.dom) return input.vocabulary;
447
- return input.domlesskinds ?? [];
448
- }
449
-
450
- /* ── Merged from platformtargets.ts ── */
451
-
452
- /**
453
- * Platformtargets logic of the 1.1.67 family.
454
- * The runtime matrix declares itself in one place: the browser, node, bun and deno targets each carry their entry file, bundle format, esbuild platform and declaration flag, the matrix verifies every runtime declares exactly one target, and one matrix run builds them all from the shared core.
455
- * Nothing about a target is inferred: the declaration is the contract the build matrix and the doctor report read, so a new runtime enters through one declaration and never through scattered build flags.
456
- */
457
-
458
- /** Declares the platform matrix: the browser target serves script tag consumers through the umd shell under the product name devthink.umd.js, the node target serves require consumers through its cjs shell, and the bun and deno targets ride the esm core entries of their runtime shells. */
459
- export function platformtargets(): platformtarget[] {
460
- return [
461
- {
462
- runtime: "browser",
463
- entry: "umd.ts",
464
- format: "umd",
465
- platform: "browser",
466
- declarations: true,
467
- output: "devthink.umd.js",
468
- },
469
- { runtime: "node", entry: "node.ts", format: "cjs", platform: "node", declarations: true },
470
- { runtime: "bun", entry: "bun.ts", format: "esm", platform: "node", declarations: true },
471
- { runtime: "deno", entry: "deno.ts", format: "esm", platform: "neutral", declarations: true },
472
- ];
473
- }
474
-
475
- /** Builds the platform matrix of one declaration list with its completeness flag: the matrix completes when every runtime declares exactly one target. */
476
- export function platformmatrixof(targets: platformtarget[]): platformmatrix {
477
- const runtimes = new Set(targets.map((target) => target.runtime));
478
- const complete =
479
- runtimes.size === targets.length &&
480
- ["browser", "node", "bun", "deno"].every((runtime) => runtimes.has(runtime as platformtarget["runtime"]));
481
- return { targets, complete };
482
- }
483
-
484
- /** Reads the platform target of one runtime from a declaration list; an absent or duplicated runtime refuses. */
485
- export function matrixtargetof(targets: platformtarget[], runtime: platformtarget["runtime"]): platformtarget {
486
- const declared = targets.filter((target) => target.runtime === runtime);
487
- if (declared.length === 0) throw new Error(`The platform matrix declares no ${runtime} target.`);
488
- if (declared.length > 1)
489
- throw new Error(
490
- `The platform matrix declares the ${runtime} target ${declared.length} times; every runtime declares exactly one target.`,
491
- );
492
- return declared[0] as platformtarget;
493
- }
494
-
495
- /** Verifies one matrix run: every declared target needs its built bundle present, so a missing entry names the runtime that failed its matrix run. */
496
- export function matrixverify(input: { targets: platformtarget[]; present: string[] }): {
497
- complete: boolean;
498
- missing: string[];
499
- reason: string;
500
- } {
501
- const missing = input.targets
502
- .filter((target) => !input.present.includes(target.entry))
503
- .map((target) => `${target.runtime}:${target.entry}`);
504
- return {
505
- complete: missing.length === 0,
506
- missing,
507
- reason:
508
- missing.length === 0
509
- ? `The matrix run verified every platform target of ${input.targets.map((target) => target.runtime).join(", ")}.`
510
- : `The matrix run lacks the built entries ${missing.join(", ")}.`,
511
- };
512
- }
513
-
514
- /** Reads the output file name of one platform target bundle: an explicit output name wins, and an absent name keeps the entry stem with the format extension the target declares. */
515
- export function targetoutput(target: platformtarget): string {
516
- if (target.output !== undefined) return target.output;
517
- const stem = target.entry.replace(/\.ts$/, "");
518
- return target.format === "cjs" ? `${stem}.cjs` : target.format === "umd" ? `${stem}.umd.js` : `${stem}.js`;
519
- }
520
-
521
- /** Reads the minified output file name of one platform target bundle: the unminified variant keeps its name and the minified variant inserts the min marker before the extension, so every target ships both variants under one rule. */
522
- export function minifiedoutput(target: platformtarget): string {
523
- return targetoutput(target)
524
- .replace(/\.js$/, ".min.js")
525
- .replace(/\.cjs$/, ".min.cjs");
526
- }