dotdo 0.0.1 → 0.0.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 (727) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +446 -315
  3. package/dist/ai/index.js +19 -0
  4. package/dist/ai/index.js.map +1 -0
  5. package/dist/ai/template-literals.js +852 -0
  6. package/dist/ai/template-literals.js.map +1 -0
  7. package/dist/api/analytics/router.js +601 -0
  8. package/dist/api/analytics/router.js.map +1 -0
  9. package/dist/api/index.js +158 -0
  10. package/dist/api/index.js.map +1 -0
  11. package/dist/api/middleware/auth-federation.js +573 -0
  12. package/dist/api/middleware/auth-federation.js.map +1 -0
  13. package/dist/api/middleware/auth.js +544 -0
  14. package/dist/api/middleware/auth.js.map +1 -0
  15. package/dist/api/middleware/error-handling.js +176 -0
  16. package/dist/api/middleware/error-handling.js.map +1 -0
  17. package/dist/api/middleware/request-id.js +21 -0
  18. package/dist/api/middleware/request-id.js.map +1 -0
  19. package/dist/api/pages.js +1180 -0
  20. package/dist/api/pages.js.map +1 -0
  21. package/dist/api/routes/api.js +612 -0
  22. package/dist/api/routes/api.js.map +1 -0
  23. package/dist/api/routes/browsers.js +471 -0
  24. package/dist/api/routes/browsers.js.map +1 -0
  25. package/dist/api/routes/do.js +188 -0
  26. package/dist/api/routes/do.js.map +1 -0
  27. package/dist/api/routes/mcp.js +459 -0
  28. package/dist/api/routes/mcp.js.map +1 -0
  29. package/dist/api/routes/obs.js +445 -0
  30. package/dist/api/routes/obs.js.map +1 -0
  31. package/dist/api/routes/openapi.js +794 -0
  32. package/dist/api/routes/openapi.js.map +1 -0
  33. package/dist/api/routes/rpc.js +1103 -0
  34. package/dist/api/routes/rpc.js.map +1 -0
  35. package/dist/api/routes/sandboxes.js +389 -0
  36. package/dist/api/routes/sandboxes.js.map +1 -0
  37. package/dist/api/test-do.js +38 -0
  38. package/dist/api/test-do.js.map +1 -0
  39. package/dist/api/types.js +11 -0
  40. package/dist/api/types.js.map +1 -0
  41. package/dist/cli/bin.js +2 -0
  42. package/dist/cli/main.js +52342 -0
  43. package/dist/db/actions.js +212 -0
  44. package/dist/db/actions.js.map +1 -0
  45. package/dist/db/auth.js +506 -0
  46. package/dist/db/auth.js.map +1 -0
  47. package/dist/db/branches.js +65 -0
  48. package/dist/db/branches.js.map +1 -0
  49. package/dist/db/clickhouse.js +1074 -0
  50. package/dist/db/clickhouse.js.map +1 -0
  51. package/dist/db/dlq.js +39 -0
  52. package/dist/db/dlq.js.map +1 -0
  53. package/dist/db/events.js +28 -0
  54. package/dist/db/events.js.map +1 -0
  55. package/dist/db/exec.js +64 -0
  56. package/dist/db/exec.js.map +1 -0
  57. package/dist/db/files.js +85 -0
  58. package/dist/db/files.js.map +1 -0
  59. package/dist/db/flags.js +24 -0
  60. package/dist/db/flags.js.map +1 -0
  61. package/dist/db/git.js +116 -0
  62. package/dist/db/git.js.map +1 -0
  63. package/dist/db/iceberg/inverted-index.js +862 -0
  64. package/dist/db/iceberg/inverted-index.js.map +1 -0
  65. package/dist/db/iceberg/puffin.js +878 -0
  66. package/dist/db/iceberg/puffin.js.map +1 -0
  67. package/dist/db/iceberg/search-manifest.js +422 -0
  68. package/dist/db/iceberg/search-manifest.js.map +1 -0
  69. package/dist/db/iceberg/types.js +8 -0
  70. package/dist/db/iceberg/types.js.map +1 -0
  71. package/dist/db/index.js +121 -0
  72. package/dist/db/index.js.map +1 -0
  73. package/dist/db/integrations.js +368 -0
  74. package/dist/db/integrations.js.map +1 -0
  75. package/dist/db/json-indexes.js +332 -0
  76. package/dist/db/json-indexes.js.map +1 -0
  77. package/dist/db/linked-accounts.js +287 -0
  78. package/dist/db/linked-accounts.js.map +1 -0
  79. package/dist/db/nouns.js +183 -0
  80. package/dist/db/nouns.js.map +1 -0
  81. package/dist/db/objects.js +170 -0
  82. package/dist/db/objects.js.map +1 -0
  83. package/dist/db/primitives/dag-scheduler/index.js +869 -0
  84. package/dist/db/primitives/dag-scheduler/index.js.map +1 -0
  85. package/dist/db/primitives/exactly-once-context.js +237 -0
  86. package/dist/db/primitives/exactly-once-context.js.map +1 -0
  87. package/dist/db/primitives/index.js +62 -0
  88. package/dist/db/primitives/index.js.map +1 -0
  89. package/dist/db/primitives/keyed-router.js +145 -0
  90. package/dist/db/primitives/keyed-router.js.map +1 -0
  91. package/dist/db/primitives/observability.js +162 -0
  92. package/dist/db/primitives/observability.js.map +1 -0
  93. package/dist/db/primitives/schema-evolution.js +643 -0
  94. package/dist/db/primitives/schema-evolution.js.map +1 -0
  95. package/dist/db/primitives/stateful-operator/index.js +770 -0
  96. package/dist/db/primitives/stateful-operator/index.js.map +1 -0
  97. package/dist/db/primitives/temporal-store.js +306 -0
  98. package/dist/db/primitives/temporal-store.js.map +1 -0
  99. package/dist/db/primitives/typed-column-store.js +1229 -0
  100. package/dist/db/primitives/typed-column-store.js.map +1 -0
  101. package/dist/db/primitives/utils/duration.js +162 -0
  102. package/dist/db/primitives/utils/duration.js.map +1 -0
  103. package/dist/db/primitives/utils/murmur3.js +118 -0
  104. package/dist/db/primitives/utils/murmur3.js.map +1 -0
  105. package/dist/db/primitives/watermark-service.js +136 -0
  106. package/dist/db/primitives/watermark-service.js.map +1 -0
  107. package/dist/db/primitives/window-manager.js +764 -0
  108. package/dist/db/primitives/window-manager.js.map +1 -0
  109. package/dist/db/relationships.js +66 -0
  110. package/dist/db/relationships.js.map +1 -0
  111. package/dist/db/schema-minimal.js +61 -0
  112. package/dist/db/schema-minimal.js.map +1 -0
  113. package/dist/db/search.js +28 -0
  114. package/dist/db/search.js.map +1 -0
  115. package/dist/db/stores.js +1665 -0
  116. package/dist/db/stores.js.map +1 -0
  117. package/dist/db/things.js +297 -0
  118. package/dist/db/things.js.map +1 -0
  119. package/dist/db/vault.js +171 -0
  120. package/dist/db/vault.js.map +1 -0
  121. package/dist/db/verbs.js +102 -0
  122. package/dist/db/verbs.js.map +1 -0
  123. package/dist/do/base.js +48 -0
  124. package/dist/do/base.js.map +1 -0
  125. package/dist/do/bash.js +35 -0
  126. package/dist/do/bash.js.map +1 -0
  127. package/dist/do/fs.js +25 -0
  128. package/dist/do/fs.js.map +1 -0
  129. package/dist/do/full.js +61 -0
  130. package/dist/do/full.js.map +1 -0
  131. package/dist/do/git.js +28 -0
  132. package/dist/do/git.js.map +1 -0
  133. package/dist/do/index.js +52 -0
  134. package/dist/do/index.js.map +1 -0
  135. package/dist/do/tiny.js +31 -0
  136. package/dist/do/tiny.js.map +1 -0
  137. package/dist/lib/DOAuth.js +261 -0
  138. package/dist/lib/DOAuth.js.map +1 -0
  139. package/dist/lib/DODispatcher.js +72 -0
  140. package/dist/lib/DODispatcher.js.map +1 -0
  141. package/dist/lib/Modifier.js +189 -0
  142. package/dist/lib/Modifier.js.map +1 -0
  143. package/dist/lib/StateStorage.js +403 -0
  144. package/dist/lib/StateStorage.js.map +1 -0
  145. package/dist/lib/TypeRegistry.js +122 -0
  146. package/dist/lib/TypeRegistry.js.map +1 -0
  147. package/dist/lib/agent/tools/bash.js +336 -0
  148. package/dist/lib/agent/tools/bash.js.map +1 -0
  149. package/dist/lib/agent/tools/edit.js +157 -0
  150. package/dist/lib/agent/tools/edit.js.map +1 -0
  151. package/dist/lib/agent/tools/glob.js +137 -0
  152. package/dist/lib/agent/tools/glob.js.map +1 -0
  153. package/dist/lib/agent/tools/grep.js +315 -0
  154. package/dist/lib/agent/tools/grep.js.map +1 -0
  155. package/dist/lib/agent/tools/index.js +71 -0
  156. package/dist/lib/agent/tools/index.js.map +1 -0
  157. package/dist/lib/agent/tools/read.js +212 -0
  158. package/dist/lib/agent/tools/read.js.map +1 -0
  159. package/dist/lib/agent/tools/types.js +197 -0
  160. package/dist/lib/agent/tools/types.js.map +1 -0
  161. package/dist/lib/agent/tools/write.js +159 -0
  162. package/dist/lib/agent/tools/write.js.map +1 -0
  163. package/dist/lib/ai/gateway.js +247 -0
  164. package/dist/lib/ai/gateway.js.map +1 -0
  165. package/dist/lib/ai/tool-loop-agent.js +591 -0
  166. package/dist/lib/ai/tool-loop-agent.js.map +1 -0
  167. package/dist/lib/auto-wiring.js +439 -0
  168. package/dist/lib/auto-wiring.js.map +1 -0
  169. package/dist/lib/browse/browserbase.js +163 -0
  170. package/dist/lib/browse/browserbase.js.map +1 -0
  171. package/dist/lib/browse/cloudflare.js +144 -0
  172. package/dist/lib/browse/cloudflare.js.map +1 -0
  173. package/dist/lib/browse/index.js +62 -0
  174. package/dist/lib/browse/index.js.map +1 -0
  175. package/dist/lib/browse/types.js +13 -0
  176. package/dist/lib/browse/types.js.map +1 -0
  177. package/dist/lib/cache/index.js +37 -0
  178. package/dist/lib/cache/index.js.map +1 -0
  179. package/dist/lib/cache/visibility.js +638 -0
  180. package/dist/lib/cache/visibility.js.map +1 -0
  181. package/dist/lib/capabilities.js +268 -0
  182. package/dist/lib/capabilities.js.map +1 -0
  183. package/dist/lib/channels/base.js +106 -0
  184. package/dist/lib/channels/base.js.map +1 -0
  185. package/dist/lib/channels/discord.js +94 -0
  186. package/dist/lib/channels/discord.js.map +1 -0
  187. package/dist/lib/channels/email.js +204 -0
  188. package/dist/lib/channels/email.js.map +1 -0
  189. package/dist/lib/channels/index.js +90 -0
  190. package/dist/lib/channels/index.js.map +1 -0
  191. package/dist/lib/channels/mdxui-chat.js +95 -0
  192. package/dist/lib/channels/mdxui-chat.js.map +1 -0
  193. package/dist/lib/channels/slack-blockkit.js +121 -0
  194. package/dist/lib/channels/slack-blockkit.js.map +1 -0
  195. package/dist/lib/channels/types.js +7 -0
  196. package/dist/lib/channels/types.js.map +1 -0
  197. package/dist/lib/cloudflare/ai.js +654 -0
  198. package/dist/lib/cloudflare/ai.js.map +1 -0
  199. package/dist/lib/cloudflare/index.js +88 -0
  200. package/dist/lib/cloudflare/index.js.map +1 -0
  201. package/dist/lib/cloudflare/kv.js +342 -0
  202. package/dist/lib/cloudflare/kv.js.map +1 -0
  203. package/dist/lib/cloudflare/queues.js +434 -0
  204. package/dist/lib/cloudflare/queues.js.map +1 -0
  205. package/dist/lib/cloudflare/r2.js +604 -0
  206. package/dist/lib/cloudflare/r2.js.map +1 -0
  207. package/dist/lib/cloudflare/vectorize.js +494 -0
  208. package/dist/lib/cloudflare/vectorize.js.map +1 -0
  209. package/dist/lib/cloudflare/workflows.js +569 -0
  210. package/dist/lib/cloudflare/workflows.js.map +1 -0
  211. package/dist/lib/colo/caching.js +196 -0
  212. package/dist/lib/colo/caching.js.map +1 -0
  213. package/dist/lib/colo/detection.js +194 -0
  214. package/dist/lib/colo/detection.js.map +1 -0
  215. package/dist/lib/colo/external-data.js +219 -0
  216. package/dist/lib/colo/external-data.js.map +1 -0
  217. package/dist/lib/colo/globe-data.js +179 -0
  218. package/dist/lib/colo/globe-data.js.map +1 -0
  219. package/dist/lib/colo/index.js +16 -0
  220. package/dist/lib/colo/index.js.map +1 -0
  221. package/dist/lib/decorators.js +37 -0
  222. package/dist/lib/decorators.js.map +1 -0
  223. package/dist/lib/discovery.js +81 -0
  224. package/dist/lib/discovery.js.map +1 -0
  225. package/dist/lib/executors/AgenticFunctionExecutor.js +619 -0
  226. package/dist/lib/executors/AgenticFunctionExecutor.js.map +1 -0
  227. package/dist/lib/executors/BaseFunctionExecutor.js +328 -0
  228. package/dist/lib/executors/BaseFunctionExecutor.js.map +1 -0
  229. package/dist/lib/executors/CascadeExecutor.js +418 -0
  230. package/dist/lib/executors/CascadeExecutor.js.map +1 -0
  231. package/dist/lib/executors/CodeFunctionExecutor.js +904 -0
  232. package/dist/lib/executors/CodeFunctionExecutor.js.map +1 -0
  233. package/dist/lib/executors/GenerativeFunctionExecutor.js +904 -0
  234. package/dist/lib/executors/GenerativeFunctionExecutor.js.map +1 -0
  235. package/dist/lib/executors/HumanFunctionExecutor.js +884 -0
  236. package/dist/lib/executors/HumanFunctionExecutor.js.map +1 -0
  237. package/dist/lib/executors/ParallelStepExecutor.js +308 -0
  238. package/dist/lib/executors/ParallelStepExecutor.js.map +1 -0
  239. package/dist/lib/executors/types.js +12 -0
  240. package/dist/lib/executors/types.js.map +1 -0
  241. package/dist/lib/experiments.js +89 -0
  242. package/dist/lib/experiments.js.map +1 -0
  243. package/dist/lib/flags/store.js +262 -0
  244. package/dist/lib/flags/store.js.map +1 -0
  245. package/dist/lib/functions/FunctionComposition.js +467 -0
  246. package/dist/lib/functions/FunctionComposition.js.map +1 -0
  247. package/dist/lib/functions/FunctionMiddleware.js +457 -0
  248. package/dist/lib/functions/FunctionMiddleware.js.map +1 -0
  249. package/dist/lib/functions/FunctionRegistry.js +426 -0
  250. package/dist/lib/functions/FunctionRegistry.js.map +1 -0
  251. package/dist/lib/functions/createFunction.js +1048 -0
  252. package/dist/lib/functions/createFunction.js.map +1 -0
  253. package/dist/lib/humans/index.js +68 -0
  254. package/dist/lib/humans/index.js.map +1 -0
  255. package/dist/lib/humans/templates.js +117 -0
  256. package/dist/lib/humans/templates.js.map +1 -0
  257. package/dist/lib/identity.js +98 -0
  258. package/dist/lib/identity.js.map +1 -0
  259. package/dist/lib/index.js +9 -0
  260. package/dist/lib/index.js.map +1 -0
  261. package/dist/lib/logging/error-logger.js +163 -0
  262. package/dist/lib/logging/error-logger.js.map +1 -0
  263. package/dist/lib/logging/index.js +160 -0
  264. package/dist/lib/logging/index.js.map +1 -0
  265. package/dist/lib/mixins/bash.js +825 -0
  266. package/dist/lib/mixins/bash.js.map +1 -0
  267. package/dist/lib/mixins/fs.js +648 -0
  268. package/dist/lib/mixins/fs.js.map +1 -0
  269. package/dist/lib/mixins/git.js +1011 -0
  270. package/dist/lib/mixins/git.js.map +1 -0
  271. package/dist/lib/mixins/index.js +29 -0
  272. package/dist/lib/mixins/index.js.map +1 -0
  273. package/dist/lib/mixins/npm.js +662 -0
  274. package/dist/lib/mixins/npm.js.map +1 -0
  275. package/dist/lib/noun-id.js +278 -0
  276. package/dist/lib/noun-id.js.map +1 -0
  277. package/dist/lib/rate-limit/sliding-window.js +148 -0
  278. package/dist/lib/rate-limit/sliding-window.js.map +1 -0
  279. package/dist/lib/rate-limit.js +110 -0
  280. package/dist/lib/rate-limit.js.map +1 -0
  281. package/dist/lib/rpc/bindings.js +548 -0
  282. package/dist/lib/rpc/bindings.js.map +1 -0
  283. package/dist/lib/rpc/index.js +64 -0
  284. package/dist/lib/rpc/index.js.map +1 -0
  285. package/dist/lib/safe-stringify.js +223 -0
  286. package/dist/lib/safe-stringify.js.map +1 -0
  287. package/dist/lib/sandbox/miniflare-sandbox.js +1007 -0
  288. package/dist/lib/sandbox/miniflare-sandbox.js.map +1 -0
  289. package/dist/lib/sqids.js +110 -0
  290. package/dist/lib/sqids.js.map +1 -0
  291. package/dist/lib/sql/adapters/index.js +10 -0
  292. package/dist/lib/sql/adapters/index.js.map +1 -0
  293. package/dist/lib/sql/adapters/node-sql-parser.js +552 -0
  294. package/dist/lib/sql/adapters/node-sql-parser.js.map +1 -0
  295. package/dist/lib/sql/adapters/pgsql-parser.js +1189 -0
  296. package/dist/lib/sql/adapters/pgsql-parser.js.map +1 -0
  297. package/dist/lib/sql/index.js +277 -0
  298. package/dist/lib/sql/index.js.map +1 -0
  299. package/dist/lib/sql/types.js +56 -0
  300. package/dist/lib/sql/types.js.map +1 -0
  301. package/dist/lib/type-classifier.js +126 -0
  302. package/dist/lib/type-classifier.js.map +1 -0
  303. package/dist/lib/utils/html.js +47 -0
  304. package/dist/lib/utils/html.js.map +1 -0
  305. package/dist/lib/validation.js +48 -0
  306. package/dist/lib/validation.js.map +1 -0
  307. package/dist/lib/vault/store.js +411 -0
  308. package/dist/lib/vault/store.js.map +1 -0
  309. package/dist/metrics/hunch.js +739 -0
  310. package/dist/metrics/hunch.js.map +1 -0
  311. package/dist/objects/API.js +302 -0
  312. package/dist/objects/API.js.map +1 -0
  313. package/dist/objects/Agent.js +179 -0
  314. package/dist/objects/Agent.js.map +1 -0
  315. package/dist/objects/AgenticFunctionExecutor.js +8 -0
  316. package/dist/objects/AgenticFunctionExecutor.js.map +1 -0
  317. package/dist/objects/App.js +83 -0
  318. package/dist/objects/App.js.map +1 -0
  319. package/dist/objects/Browser.js +884 -0
  320. package/dist/objects/Browser.js.map +1 -0
  321. package/dist/objects/Business.js +107 -0
  322. package/dist/objects/Business.js.map +1 -0
  323. package/dist/objects/CLI.js +221 -0
  324. package/dist/objects/CLI.js.map +1 -0
  325. package/dist/objects/CodeFunctionExecutor.js +8 -0
  326. package/dist/objects/CodeFunctionExecutor.js.map +1 -0
  327. package/dist/objects/Collection.js +161 -0
  328. package/dist/objects/Collection.js.map +1 -0
  329. package/dist/objects/DO.js +41 -0
  330. package/dist/objects/DO.js.map +1 -0
  331. package/dist/objects/DOBase.js +2309 -0
  332. package/dist/objects/DOBase.js.map +1 -0
  333. package/dist/objects/DOFull.js +1676 -0
  334. package/dist/objects/DOFull.js.map +1 -0
  335. package/dist/objects/DOTiny.js +207 -0
  336. package/dist/objects/DOTiny.js.map +1 -0
  337. package/dist/objects/Directory.js +199 -0
  338. package/dist/objects/Directory.js.map +1 -0
  339. package/dist/objects/Entity.js +413 -0
  340. package/dist/objects/Entity.js.map +1 -0
  341. package/dist/objects/Function.js +116 -0
  342. package/dist/objects/Function.js.map +1 -0
  343. package/dist/objects/Human.js +231 -0
  344. package/dist/objects/Human.js.map +1 -0
  345. package/dist/objects/HumanFunctionExecutor.js +8 -0
  346. package/dist/objects/HumanFunctionExecutor.js.map +1 -0
  347. package/dist/objects/IcebergMetadataDO.js +938 -0
  348. package/dist/objects/IcebergMetadataDO.js.map +1 -0
  349. package/dist/objects/IntegrationsDO.js +1174 -0
  350. package/dist/objects/IntegrationsDO.js.map +1 -0
  351. package/dist/objects/ObservabilityBroadcaster.js +149 -0
  352. package/dist/objects/ObservabilityBroadcaster.js.map +1 -0
  353. package/dist/objects/Package.js +154 -0
  354. package/dist/objects/Package.js.map +1 -0
  355. package/dist/objects/Product.js +193 -0
  356. package/dist/objects/Product.js.map +1 -0
  357. package/dist/objects/SDK.js +152 -0
  358. package/dist/objects/SDK.js.map +1 -0
  359. package/dist/objects/SaaS.js +235 -0
  360. package/dist/objects/SaaS.js.map +1 -0
  361. package/dist/objects/SandboxDO.js +759 -0
  362. package/dist/objects/SandboxDO.js.map +1 -0
  363. package/dist/objects/Service.js +337 -0
  364. package/dist/objects/Service.js.map +1 -0
  365. package/dist/objects/Site.js +80 -0
  366. package/dist/objects/Site.js.map +1 -0
  367. package/dist/objects/Startup.js +479 -0
  368. package/dist/objects/Startup.js.map +1 -0
  369. package/dist/objects/ThingsDO.js +170 -0
  370. package/dist/objects/ThingsDO.js.map +1 -0
  371. package/dist/objects/VectorShardDO.js +648 -0
  372. package/dist/objects/VectorShardDO.js.map +1 -0
  373. package/dist/objects/Worker.js +144 -0
  374. package/dist/objects/Worker.js.map +1 -0
  375. package/dist/objects/Workflow.js +196 -0
  376. package/dist/objects/Workflow.js.map +1 -0
  377. package/dist/objects/WorkflowFactory.js +313 -0
  378. package/dist/objects/WorkflowFactory.js.map +1 -0
  379. package/dist/objects/WorkflowRuntime.js +863 -0
  380. package/dist/objects/WorkflowRuntime.js.map +1 -0
  381. package/dist/objects/circuit-breaker-bulkhead.js +178 -0
  382. package/dist/objects/circuit-breaker-bulkhead.js.map +1 -0
  383. package/dist/objects/createFunction.js +934 -0
  384. package/dist/objects/createFunction.js.map +1 -0
  385. package/dist/objects/index.js +80 -0
  386. package/dist/objects/index.js.map +1 -0
  387. package/dist/objects/lifecycle/Branch.js +275 -0
  388. package/dist/objects/lifecycle/Branch.js.map +1 -0
  389. package/dist/objects/lifecycle/Clone.js +1499 -0
  390. package/dist/objects/lifecycle/Clone.js.map +1 -0
  391. package/dist/objects/lifecycle/Compact.js +237 -0
  392. package/dist/objects/lifecycle/Compact.js.map +1 -0
  393. package/dist/objects/lifecycle/Promote.js +476 -0
  394. package/dist/objects/lifecycle/Promote.js.map +1 -0
  395. package/dist/objects/lifecycle/Shard.js +560 -0
  396. package/dist/objects/lifecycle/Shard.js.map +1 -0
  397. package/dist/objects/lifecycle/index.js +15 -0
  398. package/dist/objects/lifecycle/index.js.map +1 -0
  399. package/dist/objects/lifecycle/types.js +33 -0
  400. package/dist/objects/lifecycle/types.js.map +1 -0
  401. package/dist/objects/mixins/infrastructure.js +171 -0
  402. package/dist/objects/mixins/infrastructure.js.map +1 -0
  403. package/dist/objects/modules/StoresModule.js +153 -0
  404. package/dist/objects/modules/StoresModule.js.map +1 -0
  405. package/dist/objects/persistence/checkpoint-manager.js +606 -0
  406. package/dist/objects/persistence/checkpoint-manager.js.map +1 -0
  407. package/dist/objects/persistence/index.js +72 -0
  408. package/dist/objects/persistence/index.js.map +1 -0
  409. package/dist/objects/persistence/migration-runner.js +562 -0
  410. package/dist/objects/persistence/migration-runner.js.map +1 -0
  411. package/dist/objects/persistence/replication-manager.js +501 -0
  412. package/dist/objects/persistence/replication-manager.js.map +1 -0
  413. package/dist/objects/persistence/tiered-storage-manager.js +595 -0
  414. package/dist/objects/persistence/tiered-storage-manager.js.map +1 -0
  415. package/dist/objects/persistence/types.js +14 -0
  416. package/dist/objects/persistence/types.js.map +1 -0
  417. package/dist/objects/persistence/wal-manager.js +653 -0
  418. package/dist/objects/persistence/wal-manager.js.map +1 -0
  419. package/dist/objects/presets/index.js +20 -0
  420. package/dist/objects/presets/index.js.map +1 -0
  421. package/dist/objects/presets/primitives.js +188 -0
  422. package/dist/objects/presets/primitives.js.map +1 -0
  423. package/dist/objects/primitives/alarm-adapter.js +141 -0
  424. package/dist/objects/primitives/alarm-adapter.js.map +1 -0
  425. package/dist/objects/primitives/index.js +337 -0
  426. package/dist/objects/primitives/index.js.map +1 -0
  427. package/dist/objects/primitives/storage-adapter.js +182 -0
  428. package/dist/objects/primitives/storage-adapter.js.map +1 -0
  429. package/dist/objects/primitives/with-primitives.js +102 -0
  430. package/dist/objects/primitives/with-primitives.js.map +1 -0
  431. package/dist/objects/services/StoreManager.js +227 -0
  432. package/dist/objects/services/StoreManager.js.map +1 -0
  433. package/dist/objects/services/index.js +13 -0
  434. package/dist/objects/services/index.js.map +1 -0
  435. package/dist/objects/transport/auth-layer.js +1451 -0
  436. package/dist/objects/transport/auth-layer.js.map +1 -0
  437. package/dist/objects/transport/capnweb-target.js +355 -0
  438. package/dist/objects/transport/capnweb-target.js.map +1 -0
  439. package/dist/objects/transport/chain.js +441 -0
  440. package/dist/objects/transport/chain.js.map +1 -0
  441. package/dist/objects/transport/handler.js +58 -0
  442. package/dist/objects/transport/handler.js.map +1 -0
  443. package/dist/objects/transport/index.js +53 -0
  444. package/dist/objects/transport/index.js.map +1 -0
  445. package/dist/objects/transport/mcp-server.js +690 -0
  446. package/dist/objects/transport/mcp-server.js.map +1 -0
  447. package/dist/objects/transport/rest-autowire.js +1507 -0
  448. package/dist/objects/transport/rest-autowire.js.map +1 -0
  449. package/dist/objects/transport/rest-router.js +440 -0
  450. package/dist/objects/transport/rest-router.js.map +1 -0
  451. package/dist/objects/transport/rpc-server.js +1536 -0
  452. package/dist/objects/transport/rpc-server.js.map +1 -0
  453. package/dist/objects/transport/shared.js +575 -0
  454. package/dist/objects/transport/shared.js.map +1 -0
  455. package/dist/objects/transport/sync-engine.js +291 -0
  456. package/dist/objects/transport/sync-engine.js.map +1 -0
  457. package/dist/objects/transport/types.js +8 -0
  458. package/dist/objects/transport/types.js.map +1 -0
  459. package/dist/primitives/bashx/src/ast/analyze.js +1472 -0
  460. package/dist/primitives/bashx/src/ast/analyze.js.map +1 -0
  461. package/dist/primitives/bashx/src/ast/parser.js +1488 -0
  462. package/dist/primitives/bashx/src/ast/parser.js.map +1 -0
  463. package/dist/primitives/bashx/src/do/commands/crypto.js +1954 -0
  464. package/dist/primitives/bashx/src/do/commands/crypto.js.map +1 -0
  465. package/dist/primitives/bashx/src/do/commands/data-processing.js +1812 -0
  466. package/dist/primitives/bashx/src/do/commands/data-processing.js.map +1 -0
  467. package/dist/primitives/bashx/src/do/commands/extended-utils.js +804 -0
  468. package/dist/primitives/bashx/src/do/commands/extended-utils.js.map +1 -0
  469. package/dist/primitives/bashx/src/do/commands/math-control.js +1122 -0
  470. package/dist/primitives/bashx/src/do/commands/math-control.js.map +1 -0
  471. package/dist/primitives/bashx/src/do/commands/posix-utils.js +1015 -0
  472. package/dist/primitives/bashx/src/do/commands/posix-utils.js.map +1 -0
  473. package/dist/primitives/bashx/src/do/commands/system-utils.js +687 -0
  474. package/dist/primitives/bashx/src/do/commands/system-utils.js.map +1 -0
  475. package/dist/primitives/bashx/src/do/commands/test-command.js +523 -0
  476. package/dist/primitives/bashx/src/do/commands/test-command.js.map +1 -0
  477. package/dist/primitives/bashx/src/do/commands/text-processing.js +1550 -0
  478. package/dist/primitives/bashx/src/do/commands/text-processing.js.map +1 -0
  479. package/dist/primitives/bashx/src/do/container-executor.js +429 -0
  480. package/dist/primitives/bashx/src/do/container-executor.js.map +1 -0
  481. package/dist/primitives/bashx/src/do/index.js +668 -0
  482. package/dist/primitives/bashx/src/do/index.js.map +1 -0
  483. package/dist/primitives/bashx/src/do/tiered-executor.js +2647 -0
  484. package/dist/primitives/bashx/src/do/tiered-executor.js.map +1 -0
  485. package/dist/primitives/bashx/src/do/worker.js +352 -0
  486. package/dist/primitives/bashx/src/do/worker.js.map +1 -0
  487. package/dist/primitives/bashx/src/types.js +10 -0
  488. package/dist/primitives/bashx/src/types.js.map +1 -0
  489. package/dist/primitives/fsx/core/backend.js +480 -0
  490. package/dist/primitives/fsx/core/backend.js.map +1 -0
  491. package/dist/primitives/fsx/core/constants.js +140 -0
  492. package/dist/primitives/fsx/core/constants.js.map +1 -0
  493. package/dist/primitives/fsx/core/fsx.js +1184 -0
  494. package/dist/primitives/fsx/core/fsx.js.map +1 -0
  495. package/dist/primitives/fsx/core/glob/glob.js +438 -0
  496. package/dist/primitives/fsx/core/glob/glob.js.map +1 -0
  497. package/dist/primitives/fsx/core/glob/index.js +8 -0
  498. package/dist/primitives/fsx/core/glob/index.js.map +1 -0
  499. package/dist/primitives/fsx/core/glob/match.js +392 -0
  500. package/dist/primitives/fsx/core/glob/match.js.map +1 -0
  501. package/dist/primitives/fsx/core/types.js +307 -0
  502. package/dist/primitives/fsx/core/types.js.map +1 -0
  503. package/dist/sandbox/index.js +258 -0
  504. package/dist/sandbox/index.js.map +1 -0
  505. package/dist/sdk/capnweb-compat.js +42 -0
  506. package/dist/sdk/capnweb-compat.js.map +1 -0
  507. package/dist/sdk/client.js +20 -0
  508. package/dist/sdk/client.js.map +1 -0
  509. package/dist/sdk/index.js +17 -0
  510. package/dist/sdk/index.js.map +1 -0
  511. package/dist/snippets/artifacts-config.js +241 -0
  512. package/dist/snippets/artifacts-config.js.map +1 -0
  513. package/dist/snippets/artifacts-ingest.js +832 -0
  514. package/dist/snippets/artifacts-ingest.js.map +1 -0
  515. package/dist/snippets/artifacts-serve.js +1035 -0
  516. package/dist/snippets/artifacts-serve.js.map +1 -0
  517. package/dist/snippets/artifacts-types.js +161 -0
  518. package/dist/snippets/artifacts-types.js.map +1 -0
  519. package/dist/snippets/cache-probe.js +376 -0
  520. package/dist/snippets/cache-probe.js.map +1 -0
  521. package/dist/snippets/cache.js +10 -0
  522. package/dist/snippets/cache.js.map +1 -0
  523. package/dist/snippets/events.js +469 -0
  524. package/dist/snippets/events.js.map +1 -0
  525. package/dist/snippets/index.js +7 -0
  526. package/dist/snippets/index.js.map +1 -0
  527. package/dist/snippets/proxy.js +495 -0
  528. package/dist/snippets/proxy.js.map +1 -0
  529. package/dist/snippets/search.js +1759 -0
  530. package/dist/snippets/search.js.map +1 -0
  531. package/dist/streams/index.js +30 -0
  532. package/dist/streams/index.js.map +1 -0
  533. package/dist/streams/observability.js +68 -0
  534. package/dist/streams/observability.js.map +1 -0
  535. package/dist/types/AI.js +92 -0
  536. package/dist/types/AI.js.map +1 -0
  537. package/dist/types/AIFunction.js +171 -0
  538. package/dist/types/AIFunction.js.map +1 -0
  539. package/dist/types/BrowseVerb.js +89 -0
  540. package/dist/types/BrowseVerb.js.map +1 -0
  541. package/dist/types/Browser.js +31 -0
  542. package/dist/types/Browser.js.map +1 -0
  543. package/dist/types/Chaos.js +15 -0
  544. package/dist/types/Chaos.js.map +1 -0
  545. package/dist/types/CloudflareBindings.js +109 -0
  546. package/dist/types/CloudflareBindings.js.map +1 -0
  547. package/dist/types/Collection.js +50 -0
  548. package/dist/types/Collection.js.map +1 -0
  549. package/dist/types/DO.js +2 -0
  550. package/dist/types/DO.js.map +1 -0
  551. package/dist/types/DOLocation.js +63 -0
  552. package/dist/types/DOLocation.js.map +1 -0
  553. package/dist/types/EventHandler.js +57 -0
  554. package/dist/types/EventHandler.js.map +1 -0
  555. package/dist/types/Experiment.js +33 -0
  556. package/dist/types/Experiment.js.map +1 -0
  557. package/dist/types/Flag.js +57 -0
  558. package/dist/types/Flag.js.map +1 -0
  559. package/dist/types/Lifecycle.js +13 -0
  560. package/dist/types/Lifecycle.js.map +1 -0
  561. package/dist/types/Location.js +169 -0
  562. package/dist/types/Location.js.map +1 -0
  563. package/dist/types/Noun.js +66 -0
  564. package/dist/types/Noun.js.map +1 -0
  565. package/dist/types/SessionEvent.js +194 -0
  566. package/dist/types/SessionEvent.js.map +1 -0
  567. package/dist/types/Thing.js +55 -0
  568. package/dist/types/Thing.js.map +1 -0
  569. package/dist/types/ThingDO.js +153 -0
  570. package/dist/types/ThingDO.js.map +1 -0
  571. package/dist/types/Things.js +2 -0
  572. package/dist/types/Things.js.map +1 -0
  573. package/dist/types/Verb.js +119 -0
  574. package/dist/types/Verb.js.map +1 -0
  575. package/dist/types/WorkflowContext.js +70 -0
  576. package/dist/types/WorkflowContext.js.map +1 -0
  577. package/dist/types/analytics-api.js +13 -0
  578. package/dist/types/analytics-api.js.map +1 -0
  579. package/dist/types/capabilities.js +135 -0
  580. package/dist/types/capabilities.js.map +1 -0
  581. package/dist/types/drizzle.js +12 -0
  582. package/dist/types/drizzle.js.map +1 -0
  583. package/dist/types/event.js +201 -0
  584. package/dist/types/event.js.map +1 -0
  585. package/dist/types/fn.js +12 -0
  586. package/dist/types/fn.js.map +1 -0
  587. package/dist/types/iceberg.js +48 -0
  588. package/dist/types/iceberg.js.map +1 -0
  589. package/dist/types/ids.js +170 -0
  590. package/dist/types/ids.js.map +1 -0
  591. package/dist/types/index.js +41 -0
  592. package/dist/types/index.js.map +1 -0
  593. package/dist/types/introspect.js +54 -0
  594. package/dist/types/introspect.js.map +1 -0
  595. package/dist/types/observability.js +124 -0
  596. package/dist/types/observability.js.map +1 -0
  597. package/dist/types/sync-protocol.js +175 -0
  598. package/dist/types/sync-protocol.js.map +1 -0
  599. package/dist/types/vector.js +13 -0
  600. package/dist/types/vector.js.map +1 -0
  601. package/dist/workflows/ScheduleManager.js +473 -0
  602. package/dist/workflows/ScheduleManager.js.map +1 -0
  603. package/dist/workflows/StepDOBridge.js +149 -0
  604. package/dist/workflows/StepDOBridge.js.map +1 -0
  605. package/dist/workflows/StepResultStorage.js +232 -0
  606. package/dist/workflows/StepResultStorage.js.map +1 -0
  607. package/dist/workflows/WaitForEventManager.js +461 -0
  608. package/dist/workflows/WaitForEventManager.js.map +1 -0
  609. package/dist/workflows/analyzer.js +332 -0
  610. package/dist/workflows/analyzer.js.map +1 -0
  611. package/dist/workflows/compat/activity-router.js +484 -0
  612. package/dist/workflows/compat/activity-router.js.map +1 -0
  613. package/dist/workflows/compat/backends/cloudflare-workflows.js +431 -0
  614. package/dist/workflows/compat/backends/cloudflare-workflows.js.map +1 -0
  615. package/dist/workflows/compat/backends/index.js +14 -0
  616. package/dist/workflows/compat/backends/index.js.map +1 -0
  617. package/dist/workflows/compat/errors/index.js +375 -0
  618. package/dist/workflows/compat/errors/index.js.map +1 -0
  619. package/dist/workflows/compat/index.js +79 -0
  620. package/dist/workflows/compat/index.js.map +1 -0
  621. package/dist/workflows/compat/inngest/index.js +989 -0
  622. package/dist/workflows/compat/inngest/index.js.map +1 -0
  623. package/dist/workflows/compat/qstash/index.js +1263 -0
  624. package/dist/workflows/compat/qstash/index.js.map +1 -0
  625. package/dist/workflows/compat/temporal/activities.js +739 -0
  626. package/dist/workflows/compat/temporal/activities.js.map +1 -0
  627. package/dist/workflows/compat/temporal/child-workflows.js +154 -0
  628. package/dist/workflows/compat/temporal/child-workflows.js.map +1 -0
  629. package/dist/workflows/compat/temporal/client.js +381 -0
  630. package/dist/workflows/compat/temporal/client.js.map +1 -0
  631. package/dist/workflows/compat/temporal/context.js +309 -0
  632. package/dist/workflows/compat/temporal/context.js.map +1 -0
  633. package/dist/workflows/compat/temporal/determinism.js +216 -0
  634. package/dist/workflows/compat/temporal/determinism.js.map +1 -0
  635. package/dist/workflows/compat/temporal/errors.js +128 -0
  636. package/dist/workflows/compat/temporal/errors.js.map +1 -0
  637. package/dist/workflows/compat/temporal/index.js +2464 -0
  638. package/dist/workflows/compat/temporal/index.js.map +1 -0
  639. package/dist/workflows/compat/temporal/saga.js +504 -0
  640. package/dist/workflows/compat/temporal/saga.js.map +1 -0
  641. package/dist/workflows/compat/temporal/signals.js +364 -0
  642. package/dist/workflows/compat/temporal/signals.js.map +1 -0
  643. package/dist/workflows/compat/temporal/storage.js +271 -0
  644. package/dist/workflows/compat/temporal/storage.js.map +1 -0
  645. package/dist/workflows/compat/temporal/timers.js +347 -0
  646. package/dist/workflows/compat/temporal/timers.js.map +1 -0
  647. package/dist/workflows/compat/temporal/types.js +7 -0
  648. package/dist/workflows/compat/temporal/types.js.map +1 -0
  649. package/dist/workflows/compat/temporal/unified-primitives.js +339 -0
  650. package/dist/workflows/compat/temporal/unified-primitives.js.map +1 -0
  651. package/dist/workflows/compat/trigger/index.js +468 -0
  652. package/dist/workflows/compat/trigger/index.js.map +1 -0
  653. package/dist/workflows/compat/utils/index.js +69 -0
  654. package/dist/workflows/compat/utils/index.js.map +1 -0
  655. package/dist/workflows/context/correlation-capability.js +266 -0
  656. package/dist/workflows/context/correlation-capability.js.map +1 -0
  657. package/dist/workflows/context/correlation.js +484 -0
  658. package/dist/workflows/context/correlation.js.map +1 -0
  659. package/dist/workflows/context/experiment.js +289 -0
  660. package/dist/workflows/context/experiment.js.map +1 -0
  661. package/dist/workflows/context/flag.js +244 -0
  662. package/dist/workflows/context/flag.js.map +1 -0
  663. package/dist/workflows/context/foundation.js +648 -0
  664. package/dist/workflows/context/foundation.js.map +1 -0
  665. package/dist/workflows/context/human-base.js +106 -0
  666. package/dist/workflows/context/human-base.js.map +1 -0
  667. package/dist/workflows/context/human.js +368 -0
  668. package/dist/workflows/context/human.js.map +1 -0
  669. package/dist/workflows/context/measure.js +354 -0
  670. package/dist/workflows/context/measure.js.map +1 -0
  671. package/dist/workflows/context/rate-limit.js +358 -0
  672. package/dist/workflows/context/rate-limit.js.map +1 -0
  673. package/dist/workflows/context/user.js +117 -0
  674. package/dist/workflows/context/user.js.map +1 -0
  675. package/dist/workflows/context/vault.js +360 -0
  676. package/dist/workflows/context/vault.js.map +1 -0
  677. package/dist/workflows/data/entity-events/entity-events.js +489 -0
  678. package/dist/workflows/data/entity-events/entity-events.js.map +1 -0
  679. package/dist/workflows/data/experiment/index.js +599 -0
  680. package/dist/workflows/data/experiment/index.js.map +1 -0
  681. package/dist/workflows/data/goal/context.js +558 -0
  682. package/dist/workflows/data/goal/context.js.map +1 -0
  683. package/dist/workflows/data/goal/index.js +32 -0
  684. package/dist/workflows/data/goal/index.js.map +1 -0
  685. package/dist/workflows/data/measure/index.js +840 -0
  686. package/dist/workflows/data/measure/index.js.map +1 -0
  687. package/dist/workflows/data/stream/index.js +1215 -0
  688. package/dist/workflows/data/stream/index.js.map +1 -0
  689. package/dist/workflows/data/track/context.js +883 -0
  690. package/dist/workflows/data/track/context.js.map +1 -0
  691. package/dist/workflows/data/track/index.js +15 -0
  692. package/dist/workflows/data/track/index.js.map +1 -0
  693. package/dist/workflows/data/view/context.js +864 -0
  694. package/dist/workflows/data/view/context.js.map +1 -0
  695. package/dist/workflows/domain.js +93 -0
  696. package/dist/workflows/domain.js.map +1 -0
  697. package/dist/workflows/flag.js +176 -0
  698. package/dist/workflows/flag.js.map +1 -0
  699. package/dist/workflows/flags.js +217 -0
  700. package/dist/workflows/flags.js.map +1 -0
  701. package/dist/workflows/hash.js +209 -0
  702. package/dist/workflows/hash.js.map +1 -0
  703. package/dist/workflows/index.js +50 -0
  704. package/dist/workflows/index.js.map +1 -0
  705. package/dist/workflows/on.js +378 -0
  706. package/dist/workflows/on.js.map +1 -0
  707. package/dist/workflows/pipeline-promise.js +481 -0
  708. package/dist/workflows/pipeline-promise.js.map +1 -0
  709. package/dist/workflows/pipeline-types.js +20 -0
  710. package/dist/workflows/pipeline-types.js.map +1 -0
  711. package/dist/workflows/proxy.js +76 -0
  712. package/dist/workflows/proxy.js.map +1 -0
  713. package/dist/workflows/runtime.js +310 -0
  714. package/dist/workflows/runtime.js.map +1 -0
  715. package/dist/workflows/schedule-builder.js +327 -0
  716. package/dist/workflows/schedule-builder.js.map +1 -0
  717. package/dist/workflows/visibility/index.js +148 -0
  718. package/dist/workflows/visibility/index.js.map +1 -0
  719. package/dist/workflows/visibility/query-parser.js +150 -0
  720. package/dist/workflows/visibility/query-parser.js.map +1 -0
  721. package/dist/workflows/visibility/store.js +223 -0
  722. package/dist/workflows/visibility/store.js.map +1 -0
  723. package/dist/workflows/visibility/types.js +30 -0
  724. package/dist/workflows/visibility/types.js.map +1 -0
  725. package/dist/workflows/workflow.js +53 -0
  726. package/dist/workflows/workflow.js.map +1 -0
  727. package/package.json +279 -46
@@ -0,0 +1,662 @@
1
+ /**
2
+ * withNpm Mixin - NPM Package Management Capability
3
+ *
4
+ * Adds $.npm to the WorkflowContext with package management operations:
5
+ * - resolve, install, list, lockfile
6
+ * - run (requires withBash)
7
+ * - pack
8
+ *
9
+ * Uses the npm registry API for package resolution and provides
10
+ * filesystem-backed package management via $.fs.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { withNpm, withFs } from 'dotdo/mixins'
15
+ * import { DO } from 'dotdo'
16
+ *
17
+ * // Basic usage with filesystem
18
+ * class MyDO extends withNpm(withFs(DO)) {
19
+ * async setup() {
20
+ * // Install lodash
21
+ * await this.$.npm.install('lodash', '4.17.21')
22
+ *
23
+ * // List installed packages
24
+ * const packages = await this.$.npm.list()
25
+ * console.log(packages)
26
+ * }
27
+ * }
28
+ *
29
+ * // With bash capability for npm run scripts
30
+ * class BuildDO extends withNpm(withBash(withFs(DO))) {
31
+ * async build() {
32
+ * await this.$.npm.install() // Install all deps from package.json
33
+ * const result = await this.$.npm.run('build')
34
+ * return result.exitCode === 0
35
+ * }
36
+ * }
37
+ * ```
38
+ *
39
+ * @module lib/mixins/npm
40
+ */
41
+ /**
42
+ * Parse a version string into its components.
43
+ */
44
+ function parseSemVer(version) {
45
+ const match = version.match(/^v?(\d+)\.(\d+)\.(\d+)(?:-([a-zA-Z0-9.-]+))?/);
46
+ if (!match)
47
+ return null;
48
+ return {
49
+ major: parseInt(match[1], 10),
50
+ minor: parseInt(match[2], 10),
51
+ patch: parseInt(match[3], 10),
52
+ prerelease: match[4]?.split('.'),
53
+ };
54
+ }
55
+ /**
56
+ * Compare two semantic versions.
57
+ * Returns -1 if a < b, 0 if a === b, 1 if a > b.
58
+ */
59
+ function compareSemVer(a, b) {
60
+ const parsedA = parseSemVer(a);
61
+ const parsedB = parseSemVer(b);
62
+ if (!parsedA || !parsedB)
63
+ return 0;
64
+ if (parsedA.major !== parsedB.major)
65
+ return parsedA.major - parsedB.major;
66
+ if (parsedA.minor !== parsedB.minor)
67
+ return parsedA.minor - parsedB.minor;
68
+ if (parsedA.patch !== parsedB.patch)
69
+ return parsedA.patch - parsedB.patch;
70
+ // Prerelease versions have lower precedence
71
+ if (parsedA.prerelease && !parsedB.prerelease)
72
+ return -1;
73
+ if (!parsedA.prerelease && parsedB.prerelease)
74
+ return 1;
75
+ return 0;
76
+ }
77
+ /**
78
+ * Check if a version satisfies a semver range.
79
+ * Supports: exact, ^, ~, >=, >, <=, <, *, latest
80
+ */
81
+ function satisfies(version, range) {
82
+ const parsed = parseSemVer(version);
83
+ if (!parsed)
84
+ return false;
85
+ // Handle special cases
86
+ if (range === '*' || range === 'latest' || range === '')
87
+ return true;
88
+ // Handle exact version
89
+ if (/^\d+\.\d+\.\d+/.test(range)) {
90
+ const rangeVersion = parseSemVer(range);
91
+ return rangeVersion !== null && compareSemVer(version, range) === 0;
92
+ }
93
+ // Handle caret (^) - compatible with version
94
+ if (range.startsWith('^')) {
95
+ const rangeVersion = parseSemVer(range.slice(1));
96
+ if (!rangeVersion)
97
+ return false;
98
+ if (rangeVersion.major === 0) {
99
+ // ^0.x.y means >=0.x.y <0.(x+1).0 for 0.x.y
100
+ if (rangeVersion.minor === 0) {
101
+ return parsed.major === 0 && parsed.minor === 0 && parsed.patch >= rangeVersion.patch;
102
+ }
103
+ return parsed.major === 0 && parsed.minor === rangeVersion.minor && parsed.patch >= rangeVersion.patch;
104
+ }
105
+ return parsed.major === rangeVersion.major &&
106
+ (parsed.minor > rangeVersion.minor ||
107
+ (parsed.minor === rangeVersion.minor && parsed.patch >= rangeVersion.patch));
108
+ }
109
+ // Handle tilde (~) - approximately equivalent
110
+ if (range.startsWith('~')) {
111
+ const rangeVersion = parseSemVer(range.slice(1));
112
+ if (!rangeVersion)
113
+ return false;
114
+ return parsed.major === rangeVersion.major &&
115
+ parsed.minor === rangeVersion.minor &&
116
+ parsed.patch >= rangeVersion.patch;
117
+ }
118
+ // Handle >= operator
119
+ if (range.startsWith('>=')) {
120
+ return compareSemVer(version, range.slice(2).trim()) >= 0;
121
+ }
122
+ // Handle > operator
123
+ if (range.startsWith('>') && !range.startsWith('>=')) {
124
+ return compareSemVer(version, range.slice(1).trim()) > 0;
125
+ }
126
+ // Handle <= operator
127
+ if (range.startsWith('<=')) {
128
+ return compareSemVer(version, range.slice(2).trim()) <= 0;
129
+ }
130
+ // Handle < operator
131
+ if (range.startsWith('<') && !range.startsWith('<=')) {
132
+ return compareSemVer(version, range.slice(1).trim()) < 0;
133
+ }
134
+ // Default: exact match
135
+ return compareSemVer(version, range) === 0;
136
+ }
137
+ /**
138
+ * Find the maximum version that satisfies a range.
139
+ */
140
+ function maxSatisfying(versions, range) {
141
+ // Filter valid versions and sort descending
142
+ const validVersions = versions
143
+ .filter(v => parseSemVer(v) !== null && !parseSemVer(v)?.prerelease)
144
+ .sort((a, b) => -compareSemVer(a, b));
145
+ // Handle 'latest' tag
146
+ if (range === 'latest' || range === '*') {
147
+ return validVersions[0] || null;
148
+ }
149
+ // Find the first (highest) version that satisfies
150
+ for (const version of validVersions) {
151
+ if (satisfies(version, range)) {
152
+ return version;
153
+ }
154
+ }
155
+ return null;
156
+ }
157
+ // ============================================================================
158
+ // REGISTRY FETCHER
159
+ // ============================================================================
160
+ /**
161
+ * Default npm registry URL
162
+ */
163
+ const DEFAULT_REGISTRY = 'https://registry.npmjs.org';
164
+ /**
165
+ * Create a registry fetcher that fetches package metadata from npm registry.
166
+ */
167
+ function createRegistryFetcher(registry = DEFAULT_REGISTRY) {
168
+ const cache = new Map();
169
+ async function fetchPackageMetadata(name) {
170
+ const cacheKey = `${registry}/${name}`;
171
+ if (cache.has(cacheKey)) {
172
+ return cache.get(cacheKey);
173
+ }
174
+ const promise = fetch(`${registry}/${encodeURIComponent(name)}`, {
175
+ headers: {
176
+ Accept: 'application/json',
177
+ },
178
+ }).then((res) => {
179
+ if (!res.ok) {
180
+ throw new Error(`Package not found: ${name}`);
181
+ }
182
+ return res.json();
183
+ });
184
+ cache.set(cacheKey, promise);
185
+ return promise;
186
+ }
187
+ return {
188
+ async getPackageVersions(name) {
189
+ const metadata = await fetchPackageMetadata(name);
190
+ return Object.keys(metadata.versions || {});
191
+ },
192
+ async getPackageInfo(name, version) {
193
+ const metadata = await fetchPackageMetadata(name);
194
+ const versionData = metadata.versions?.[version];
195
+ if (!versionData) {
196
+ throw new Error(`Version ${version} not found for package ${name}`);
197
+ }
198
+ return {
199
+ name: versionData.name,
200
+ version: versionData.version,
201
+ dependencies: versionData.dependencies,
202
+ devDependencies: versionData.devDependencies,
203
+ peerDependencies: versionData.peerDependencies,
204
+ optionalDependencies: versionData.optionalDependencies,
205
+ dist: versionData.dist,
206
+ };
207
+ },
208
+ async getLatestVersion(name) {
209
+ const metadata = await fetchPackageMetadata(name);
210
+ const latest = metadata['dist-tags']?.latest;
211
+ if (!latest) {
212
+ const versions = Object.keys(metadata.versions || {});
213
+ return maxSatisfying(versions, '*') || versions[0] || '';
214
+ }
215
+ return latest;
216
+ },
217
+ };
218
+ }
219
+ // ============================================================================
220
+ // TARBALL CREATION
221
+ // ============================================================================
222
+ /**
223
+ * Create a tar header block (512 bytes)
224
+ */
225
+ function createTarHeader(name, size, mode = 0o644) {
226
+ const header = new Uint8Array(512);
227
+ const encoder = new TextEncoder();
228
+ // Name (100 bytes)
229
+ const nameBytes = encoder.encode(name.slice(0, 99));
230
+ header.set(nameBytes, 0);
231
+ // Mode (8 bytes, octal)
232
+ const modeStr = mode.toString(8).padStart(7, '0') + '\0';
233
+ header.set(encoder.encode(modeStr), 100);
234
+ // UID (8 bytes, octal)
235
+ header.set(encoder.encode('0000000\0'), 108);
236
+ // GID (8 bytes, octal)
237
+ header.set(encoder.encode('0000000\0'), 116);
238
+ // Size (12 bytes, octal)
239
+ const sizeStr = size.toString(8).padStart(11, '0') + '\0';
240
+ header.set(encoder.encode(sizeStr), 124);
241
+ // Mtime (12 bytes, octal)
242
+ const mtime = Math.floor(Date.now() / 1000).toString(8).padStart(11, '0') + '\0';
243
+ header.set(encoder.encode(mtime), 136);
244
+ // Checksum placeholder (8 spaces)
245
+ header.set(encoder.encode(' '), 148);
246
+ // Type flag (1 byte) - '0' for regular file
247
+ header[156] = 0x30;
248
+ // USTAR indicator
249
+ header.set(encoder.encode('ustar'), 257);
250
+ header[262] = 0x00;
251
+ // Version
252
+ header.set(encoder.encode('00'), 263);
253
+ // Calculate checksum
254
+ let checksum = 0;
255
+ for (let i = 0; i < 512; i++) {
256
+ checksum += header[i];
257
+ }
258
+ const checksumStr = checksum.toString(8).padStart(6, '0') + '\0 ';
259
+ header.set(encoder.encode(checksumStr), 148);
260
+ return header;
261
+ }
262
+ /**
263
+ * Create a simple tarball from files.
264
+ */
265
+ async function createTarball(files) {
266
+ const blocks = [];
267
+ for (const file of files) {
268
+ // Add header
269
+ const header = createTarHeader(file.path, file.content.length);
270
+ blocks.push(header);
271
+ // Add content
272
+ blocks.push(file.content);
273
+ // Pad to 512-byte boundary
274
+ const padding = 512 - (file.content.length % 512);
275
+ if (padding < 512) {
276
+ blocks.push(new Uint8Array(padding));
277
+ }
278
+ }
279
+ // Add two empty blocks at end
280
+ blocks.push(new Uint8Array(1024));
281
+ // Calculate total size
282
+ const totalSize = blocks.reduce((sum, block) => sum + block.length, 0);
283
+ const result = new Uint8Array(totalSize);
284
+ let offset = 0;
285
+ for (const block of blocks) {
286
+ result.set(block, offset);
287
+ offset += block.length;
288
+ }
289
+ // Gzip compress using CompressionStream
290
+ const stream = new Blob([result]).stream();
291
+ const compressedStream = stream.pipeThrough(new CompressionStream('gzip'));
292
+ const compressedBlob = await new Response(compressedStream).blob();
293
+ return new Uint8Array(await compressedBlob.arrayBuffer());
294
+ }
295
+ // ============================================================================
296
+ // NPM MODULE IMPLEMENTATION
297
+ // ============================================================================
298
+ /**
299
+ * NpmModule provides npm-like package management operations.
300
+ *
301
+ * Uses $.fs for storage and optionally $.bash for running scripts.
302
+ */
303
+ export class NpmModule {
304
+ fs;
305
+ bash;
306
+ registryFetcher;
307
+ constructor(fs, options) {
308
+ this.fs = fs;
309
+ this.bash = options?.bash;
310
+ this.registryFetcher = createRegistryFetcher(options?.registry);
311
+ }
312
+ async resolve(name, range) {
313
+ // Handle 'latest' tag specially
314
+ if (range === 'latest' || range === '') {
315
+ return this.registryFetcher.getLatestVersion(name);
316
+ }
317
+ const versions = await this.registryFetcher.getPackageVersions(name);
318
+ const resolved = maxSatisfying(versions, range);
319
+ if (!resolved) {
320
+ throw new Error(`No version of ${name} satisfies range ${range}`);
321
+ }
322
+ return resolved;
323
+ }
324
+ async install(name, version) {
325
+ const result = {
326
+ added: [],
327
+ removed: [],
328
+ updated: [],
329
+ };
330
+ // Ensure node_modules exists
331
+ const nodeModulesExists = await this.fs.exists('/node_modules');
332
+ if (!nodeModulesExists) {
333
+ await this.fs.mkdir('/node_modules', { recursive: true });
334
+ }
335
+ if (name) {
336
+ // Install specific package
337
+ const resolvedVersion = version || (await this.resolve(name, 'latest'));
338
+ const pkgInfo = await this.registryFetcher.getPackageInfo(name, resolvedVersion);
339
+ // Check if already installed
340
+ const pkgJsonPath = `/node_modules/${name}/package.json`;
341
+ const alreadyInstalled = await this.fs.exists(pkgJsonPath);
342
+ if (alreadyInstalled) {
343
+ const existingPkg = JSON.parse(await this.fs.read(pkgJsonPath));
344
+ if (existingPkg.version !== resolvedVersion) {
345
+ result.updated.push({
346
+ name,
347
+ from: existingPkg.version || 'unknown',
348
+ to: resolvedVersion,
349
+ });
350
+ }
351
+ else {
352
+ // Already at correct version
353
+ return result;
354
+ }
355
+ }
356
+ else {
357
+ result.added.push({ name, version: resolvedVersion });
358
+ }
359
+ // Create package directory
360
+ await this.fs.mkdir(`/node_modules/${name}`, { recursive: true });
361
+ // Write package.json
362
+ await this.fs.write(pkgJsonPath, JSON.stringify({
363
+ name: pkgInfo.name,
364
+ version: pkgInfo.version,
365
+ dependencies: pkgInfo.dependencies,
366
+ }, null, 2));
367
+ // Note: Full tarball extraction would require downloading and extracting
368
+ // For now, we create the package.json which is sufficient for list() and lockfile()
369
+ }
370
+ else {
371
+ // Install all from package.json
372
+ const packageJsonExists = await this.fs.exists('/package.json');
373
+ if (!packageJsonExists) {
374
+ throw new Error('No package.json found');
375
+ }
376
+ const packageJson = JSON.parse(await this.fs.read('/package.json'));
377
+ const allDeps = {
378
+ ...packageJson.dependencies,
379
+ ...packageJson.devDependencies,
380
+ };
381
+ for (const [depName, depRange] of Object.entries(allDeps)) {
382
+ const subResult = await this.install(depName, await this.resolve(depName, depRange));
383
+ result.added.push(...subResult.added);
384
+ result.updated.push(...subResult.updated);
385
+ }
386
+ }
387
+ // Update package-lock.json
388
+ await this.updateLockfile();
389
+ return result;
390
+ }
391
+ async list() {
392
+ const packages = [];
393
+ const nodeModulesExists = await this.fs.exists('/node_modules');
394
+ if (!nodeModulesExists) {
395
+ return packages;
396
+ }
397
+ const entries = await this.fs.list('/node_modules');
398
+ for (const entry of entries) {
399
+ if (entry.isDirectory && !entry.name.startsWith('.')) {
400
+ // Handle scoped packages (@org/pkg)
401
+ if (entry.name.startsWith('@')) {
402
+ const scopedEntries = await this.fs.list(`/node_modules/${entry.name}`);
403
+ for (const scopedEntry of scopedEntries) {
404
+ if (scopedEntry.isDirectory) {
405
+ const pkgJsonPath = `/node_modules/${entry.name}/${scopedEntry.name}/package.json`;
406
+ if (await this.fs.exists(pkgJsonPath)) {
407
+ try {
408
+ const pkgJson = JSON.parse(await this.fs.read(pkgJsonPath));
409
+ packages.push({
410
+ name: `${entry.name}/${scopedEntry.name}`,
411
+ version: pkgJson.version || 'unknown',
412
+ });
413
+ }
414
+ catch {
415
+ // Skip invalid package.json
416
+ }
417
+ }
418
+ }
419
+ }
420
+ }
421
+ else {
422
+ const pkgJsonPath = `/node_modules/${entry.name}/package.json`;
423
+ if (await this.fs.exists(pkgJsonPath)) {
424
+ try {
425
+ const pkgJson = JSON.parse(await this.fs.read(pkgJsonPath));
426
+ packages.push({
427
+ name: entry.name,
428
+ version: pkgJson.version || 'unknown',
429
+ });
430
+ }
431
+ catch {
432
+ // Skip invalid package.json
433
+ }
434
+ }
435
+ }
436
+ }
437
+ }
438
+ return packages;
439
+ }
440
+ async lockfile() {
441
+ const lockfilePath = '/package-lock.json';
442
+ const exists = await this.fs.exists(lockfilePath);
443
+ if (exists) {
444
+ const content = await this.fs.read(lockfilePath);
445
+ return JSON.parse(content);
446
+ }
447
+ // Generate lockfile from current state
448
+ return this.generateLockfile();
449
+ }
450
+ async run(script) {
451
+ if (!this.bash) {
452
+ throw new Error('withNpm.run() requires withBash capability. Apply withBash mixin to use npm scripts.');
453
+ }
454
+ // Read package.json to get scripts
455
+ const packageJsonExists = await this.fs.exists('/package.json');
456
+ if (!packageJsonExists) {
457
+ throw new Error('No package.json found');
458
+ }
459
+ const packageJson = JSON.parse(await this.fs.read('/package.json'));
460
+ const scriptCommand = packageJson.scripts?.[script];
461
+ if (!scriptCommand) {
462
+ throw new Error(`Script "${script}" not found in package.json`);
463
+ }
464
+ // Execute the script using bash capability
465
+ return this.bash.run(scriptCommand);
466
+ }
467
+ async pack(dir = '/') {
468
+ // Read package.json from the directory
469
+ const pkgJsonPath = dir === '/' ? '/package.json' : `${dir}/package.json`;
470
+ const pkgJsonExists = await this.fs.exists(pkgJsonPath);
471
+ if (!pkgJsonExists) {
472
+ throw new Error(`No package.json found in ${dir}`);
473
+ }
474
+ // Collect files to include
475
+ const files = [];
476
+ // Helper to recursively collect files
477
+ const collectFiles = async (currentDir, prefix) => {
478
+ const entries = await this.fs.list(currentDir);
479
+ for (const entry of entries) {
480
+ const fullPath = currentDir === '/' ? `/${entry.name}` : `${currentDir}/${entry.name}`;
481
+ const tarPath = prefix ? `${prefix}/${entry.name}` : entry.name;
482
+ // Skip node_modules and common excludes
483
+ if (entry.name === 'node_modules' || entry.name === '.git') {
484
+ continue;
485
+ }
486
+ if (entry.isDirectory) {
487
+ await collectFiles(fullPath, tarPath);
488
+ }
489
+ else {
490
+ const content = await this.fs.read(fullPath);
491
+ files.push({
492
+ path: `package/${tarPath}`,
493
+ content: new TextEncoder().encode(content),
494
+ });
495
+ }
496
+ }
497
+ };
498
+ await collectFiles(dir, '');
499
+ // Create tarball
500
+ return createTarball(files);
501
+ }
502
+ // ========================================================================
503
+ // Private Methods
504
+ // ========================================================================
505
+ async updateLockfile() {
506
+ const lockfile = await this.generateLockfile();
507
+ await this.fs.write('/package-lock.json', JSON.stringify(lockfile, null, 2));
508
+ }
509
+ async generateLockfile() {
510
+ const packages = {};
511
+ // Get root package.json
512
+ const packageJsonExists = await this.fs.exists('/package.json');
513
+ let rootPackage = {};
514
+ if (packageJsonExists) {
515
+ rootPackage = JSON.parse(await this.fs.read('/package.json'));
516
+ }
517
+ // Add root package entry
518
+ packages[''] = {
519
+ version: rootPackage.version || '0.0.0',
520
+ dependencies: rootPackage.dependencies,
521
+ };
522
+ // Add installed packages
523
+ const installed = await this.list();
524
+ for (const pkg of installed) {
525
+ const pkgJsonPath = `/node_modules/${pkg.name}/package.json`;
526
+ if (await this.fs.exists(pkgJsonPath)) {
527
+ const pkgJson = JSON.parse(await this.fs.read(pkgJsonPath));
528
+ packages[`node_modules/${pkg.name}`] = {
529
+ version: pkg.version,
530
+ dependencies: pkgJson.dependencies,
531
+ };
532
+ }
533
+ }
534
+ return {
535
+ name: rootPackage.name,
536
+ version: rootPackage.version,
537
+ lockfileVersion: 3,
538
+ requires: true,
539
+ packages,
540
+ };
541
+ }
542
+ }
543
+ // ============================================================================
544
+ // MIXIN IMPLEMENTATION
545
+ // ============================================================================
546
+ // Symbol for caching the npm module instance
547
+ const NPM_MODULE_CACHE = Symbol('npmModuleCache');
548
+ /**
549
+ * Adds npm package management capability to a DO class.
550
+ *
551
+ * **Requires**: withFs capability (throws error if not present)
552
+ * **Optional**: withBash capability (required for $.npm.run())
553
+ *
554
+ * @param Base - The base DO class (must have withFs applied)
555
+ * @param options - Optional configuration
556
+ * @returns Extended class with npm capability
557
+ *
558
+ * @example Basic usage
559
+ * ```typescript
560
+ * import { withNpm, withFs } from 'dotdo/mixins'
561
+ * import { DO } from 'dotdo'
562
+ *
563
+ * class MyDO extends withNpm(withFs(DO)) {
564
+ * async install() {
565
+ * await this.$.npm.install('lodash', '4.17.21')
566
+ * }
567
+ * }
568
+ * ```
569
+ *
570
+ * @example With bash for scripts
571
+ * ```typescript
572
+ * import { withNpm, withBash, withFs } from 'dotdo/mixins'
573
+ * import { DO } from 'dotdo'
574
+ *
575
+ * class BuildDO extends withNpm(withBash(withFs(DO))) {
576
+ * async build() {
577
+ * await this.$.npm.install()
578
+ * const result = await this.$.npm.run('build')
579
+ * return result.exitCode === 0
580
+ * }
581
+ * }
582
+ * ```
583
+ */
584
+ export function withNpm(Base, options) {
585
+ return class WithNpm extends Base {
586
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
587
+ static capabilities = [...(Base.capabilities || []), 'npm'];
588
+ /**
589
+ * Check if this DO class has a specific capability
590
+ */
591
+ hasCapability(name) {
592
+ if (name === 'npm')
593
+ return true;
594
+ // Check if parent class has the hasCapability method
595
+ const baseProto = Base.prototype;
596
+ if (baseProto && typeof baseProto.hasCapability === 'function') {
597
+ return baseProto.hasCapability.call(this, name);
598
+ }
599
+ return false;
600
+ }
601
+ // Cache for the npm module instance
602
+ [NPM_MODULE_CACHE];
603
+ /**
604
+ * Lazy-loaded NpmModule
605
+ */
606
+ get npmModule() {
607
+ if (!this[NPM_MODULE_CACHE]) {
608
+ // Get fs capability from $
609
+ const fs = this.$.fs;
610
+ if (!fs) {
611
+ throw new Error('withNpm requires withFs capability. Apply withFs mixin first.');
612
+ }
613
+ // Get optional bash capability
614
+ const bash = this.$.bash;
615
+ this[NPM_MODULE_CACHE] = new NpmModule(fs, {
616
+ bash: bash?.run ? { run: (script) => bash.run(script) } : undefined,
617
+ registry: options?.registry,
618
+ });
619
+ }
620
+ return this[NPM_MODULE_CACHE];
621
+ }
622
+ // TypeScript requires any[] for mixin constructors (TS2545)
623
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
624
+ constructor(...args) {
625
+ super(...args);
626
+ // Verify fs capability is available
627
+ const fs = this.$.fs;
628
+ if (!fs) {
629
+ throw new Error('withNpm requires withFs capability. Apply withFs mixin first.');
630
+ }
631
+ // Extend $ to include npm capability
632
+ const originalContext = this.$;
633
+ const self = this;
634
+ // Create a new proxy that extends the original $ with npm
635
+ this.$ = new Proxy(originalContext, {
636
+ get(target, prop) {
637
+ if (prop === 'npm') {
638
+ return self.npmModule;
639
+ }
640
+ // Forward to original context
641
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
642
+ const value = target[prop];
643
+ if (typeof value === 'function') {
644
+ // Only bind if it has a bind method (not a Proxy or capability object)
645
+ if (typeof value.bind === 'function') {
646
+ // Don't bind capability functions that have custom properties
647
+ // (like $.bash which is both callable AND has .exec, .run, etc.)
648
+ const customProps = Object.getOwnPropertyNames(value).filter((p) => p !== 'length' && p !== 'name' && p !== 'prototype');
649
+ if (customProps.length > 0) {
650
+ // This is a capability object with methods, return as-is
651
+ return value;
652
+ }
653
+ return value.bind(target);
654
+ }
655
+ }
656
+ return value;
657
+ },
658
+ });
659
+ }
660
+ };
661
+ }
662
+ //# sourceMappingURL=npm.js.map