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,1189 @@
1
+ /**
2
+ * @dotdo/lib/sql/adapters/pgsql-parser - PostgreSQL WASM Parser Adapter
3
+ *
4
+ * High-performance PostgreSQL parser using pgsql-parser (libpg_query WASM).
5
+ * This is the real PostgreSQL parser compiled to WebAssembly, providing
6
+ * exact PostgreSQL syntax parsing with 5-13x better performance.
7
+ *
8
+ * Performance: ~16μs parse time (5-13x faster than node-sql-parser)
9
+ * Bundle size: ~1.2MB (WASM binary)
10
+ * Dialect: PostgreSQL only
11
+ *
12
+ * @module lib/sql/adapters/pgsql-parser
13
+ */
14
+ import { parseSync as pgParse, deparseSync as pgDeparse } from 'pgsql-parser';
15
+ import { SQLParseError, SQLStringifyError } from '../types';
16
+ // ============================================================================
17
+ // SUPPORTED DIALECTS
18
+ // ============================================================================
19
+ /**
20
+ * pgsql-parser only supports PostgreSQL
21
+ */
22
+ const SUPPORTED_DIALECTS = ['postgresql'];
23
+ /**
24
+ * Extract the actual statement from a pg_query result
25
+ */
26
+ function extractStatement(pgStmt) {
27
+ // pg_query uses { stmt: {...} } format in stmts array
28
+ if ('stmt' in pgStmt && pgStmt.stmt) {
29
+ return pgStmt.stmt;
30
+ }
31
+ // Legacy: wrapped in RawStmt container
32
+ if ('RawStmt' in pgStmt && pgStmt.RawStmt) {
33
+ return pgStmt.RawStmt.stmt;
34
+ }
35
+ return pgStmt;
36
+ }
37
+ /**
38
+ * Convert pgsql-parser AST to our normalized AST format
39
+ */
40
+ function convertPgAST(pgParseResult) {
41
+ const stmts = pgParseResult.stmts;
42
+ if (!stmts || stmts.length === 0) {
43
+ return { type: 'unknown' };
44
+ }
45
+ if (stmts.length === 1) {
46
+ const stmt = extractStatement(stmts[0]);
47
+ return convertStatement(stmt);
48
+ }
49
+ return stmts.map((s) => {
50
+ const stmt = extractStatement(s);
51
+ return convertStatement(stmt);
52
+ });
53
+ }
54
+ /**
55
+ * Convert a single statement
56
+ */
57
+ function convertStatement(stmt) {
58
+ if (!stmt) {
59
+ return { type: 'unknown' };
60
+ }
61
+ // Determine statement type from the object key
62
+ const stmtType = Object.keys(stmt)[0];
63
+ const stmtData = stmt[stmtType];
64
+ switch (stmtType) {
65
+ case 'SelectStmt':
66
+ return convertSelectStmt(stmtData);
67
+ case 'InsertStmt':
68
+ return convertInsertStmt(stmtData);
69
+ case 'UpdateStmt':
70
+ return convertUpdateStmt(stmtData);
71
+ case 'DeleteStmt':
72
+ return convertDeleteStmt(stmtData);
73
+ case 'CreateStmt':
74
+ return convertCreateStmt(stmtData);
75
+ case 'TransactionStmt':
76
+ return convertTransactionStmt(stmtData);
77
+ case 'VariableSetStmt':
78
+ return { type: 'set', ...stmtData };
79
+ case 'ExplainStmt':
80
+ return { type: 'explain', ...stmtData };
81
+ default:
82
+ return { type: stmtType.replace('Stmt', '').toLowerCase(), ...stmtData };
83
+ }
84
+ }
85
+ /**
86
+ * Convert SELECT statement
87
+ */
88
+ function convertSelectStmt(stmt) {
89
+ // Target list (columns) - required field
90
+ const columns = stmt.targetList
91
+ ? stmt.targetList.map(convertResTarget)
92
+ : '*';
93
+ const result = {
94
+ type: 'select',
95
+ columns,
96
+ };
97
+ // Distinct
98
+ if (stmt.distinctClause) {
99
+ result.distinct = true;
100
+ }
101
+ // FROM clause
102
+ if (stmt.fromClause) {
103
+ result.from = stmt.fromClause.map(convertFromClause);
104
+ }
105
+ // WHERE clause
106
+ if (stmt.whereClause) {
107
+ result.where = convertExpr(stmt.whereClause);
108
+ }
109
+ // GROUP BY clause
110
+ if (stmt.groupClause) {
111
+ result.groupby = stmt.groupClause.map(convertExpr);
112
+ }
113
+ // HAVING clause
114
+ if (stmt.havingClause) {
115
+ result.having = convertExpr(stmt.havingClause);
116
+ }
117
+ // ORDER BY clause
118
+ if (stmt.sortClause) {
119
+ result.orderby = stmt.sortClause.map(convertSortBy);
120
+ }
121
+ // LIMIT clause
122
+ if (stmt.limitCount || stmt.limitOffset) {
123
+ result.limit = {
124
+ value: stmt.limitCount ? convertExpr(stmt.limitCount) : { type: 'null', value: null },
125
+ offset: stmt.limitOffset ? convertExpr(stmt.limitOffset) : undefined,
126
+ };
127
+ }
128
+ // WITH clause (CTEs)
129
+ if (stmt.withClause) {
130
+ result.with = stmt.withClause.ctes?.map(convertCTE) || [];
131
+ }
132
+ return result;
133
+ }
134
+ /**
135
+ * Convert INSERT statement
136
+ */
137
+ function convertInsertStmt(stmt) {
138
+ const result = {
139
+ type: 'insert',
140
+ table: convertRangeVar(stmt.relation),
141
+ };
142
+ // Columns
143
+ if (stmt.cols) {
144
+ result.columns = stmt.cols.map((col) => {
145
+ const target = col.ResTarget;
146
+ return target?.name || '';
147
+ });
148
+ }
149
+ // VALUES or SELECT
150
+ if (stmt.selectStmt) {
151
+ const selectStmt = stmt.selectStmt.SelectStmt;
152
+ if (selectStmt?.valuesLists) {
153
+ // VALUES clause
154
+ result.values = selectStmt.valuesLists.map((row) => row.map((val) => convertExpr(val)));
155
+ }
156
+ else {
157
+ // SELECT subquery
158
+ result.select = convertSelectStmt(selectStmt);
159
+ }
160
+ }
161
+ // RETURNING clause
162
+ if (stmt.returningList) {
163
+ result.returning = stmt.returningList.map(convertResTarget);
164
+ }
165
+ // ON CONFLICT clause
166
+ if (stmt.onConflictClause) {
167
+ const onConflict = stmt.onConflictClause;
168
+ result.on_conflict = {
169
+ target: onConflict.infer?.indexElems?.map((e) => e.IndexElem?.name) || undefined,
170
+ action: onConflict.action === 0 ? 'nothing' : {
171
+ update: onConflict.targetList?.map((t) => ({
172
+ column: t.ResTarget?.name || '',
173
+ value: convertExpr(t.ResTarget?.val),
174
+ })) || [],
175
+ },
176
+ };
177
+ }
178
+ return result;
179
+ }
180
+ /**
181
+ * Convert UPDATE statement
182
+ */
183
+ function convertUpdateStmt(stmt) {
184
+ const result = {
185
+ type: 'update',
186
+ table: convertRangeVar(stmt.relation),
187
+ set: stmt.targetList?.map((t) => ({
188
+ column: t.ResTarget?.name || '',
189
+ value: convertExpr(t.ResTarget?.val),
190
+ })) || [],
191
+ };
192
+ // WHERE clause
193
+ if (stmt.whereClause) {
194
+ result.where = convertExpr(stmt.whereClause);
195
+ }
196
+ // RETURNING clause
197
+ if (stmt.returningList) {
198
+ result.returning = stmt.returningList.map(convertResTarget);
199
+ }
200
+ return result;
201
+ }
202
+ /**
203
+ * Convert DELETE statement
204
+ */
205
+ function convertDeleteStmt(stmt) {
206
+ const result = {
207
+ type: 'delete',
208
+ from: convertRangeVar(stmt.relation),
209
+ };
210
+ // WHERE clause
211
+ if (stmt.whereClause) {
212
+ result.where = convertExpr(stmt.whereClause);
213
+ }
214
+ // RETURNING clause
215
+ if (stmt.returningList) {
216
+ result.returning = stmt.returningList.map(convertResTarget);
217
+ }
218
+ return result;
219
+ }
220
+ /**
221
+ * Convert CREATE TABLE statement
222
+ */
223
+ function convertCreateStmt(stmt) {
224
+ return {
225
+ type: 'create_table',
226
+ table: convertRangeVar(stmt.relation),
227
+ if_not_exists: stmt.if_not_exists || undefined,
228
+ columns: stmt.tableElts
229
+ ?.filter((e) => e.ColumnDef)
230
+ .map((e) => {
231
+ const col = e.ColumnDef;
232
+ return {
233
+ name: col.colname,
234
+ dataType: convertTypeName(col.typeName),
235
+ nullable: !col.constraints?.some((c) => c.Constraint?.contype === 1 // NOT NULL
236
+ ),
237
+ default: col.constraints?.find((c) => c.Constraint?.contype === 2 // DEFAULT
238
+ )?.Constraint?.raw_expr
239
+ ? convertExpr(col.constraints.find((c) => c.Constraint?.contype === 2).Constraint.raw_expr)
240
+ : undefined,
241
+ primary_key: col.constraints?.some((c) => c.Constraint?.contype === 5 // PRIMARY KEY
242
+ ) || undefined,
243
+ unique: col.constraints?.some((c) => c.Constraint?.contype === 4 // UNIQUE
244
+ ) || undefined,
245
+ };
246
+ }) || [],
247
+ constraints: stmt.tableElts
248
+ ?.filter((e) => e.Constraint)
249
+ .map((e) => {
250
+ const con = e.Constraint;
251
+ return {
252
+ type: mapConstraintType(con.contype),
253
+ name: con.conname || undefined,
254
+ columns: con.keys?.map((k) => k.String?.str) || undefined,
255
+ };
256
+ }) || undefined,
257
+ };
258
+ }
259
+ /**
260
+ * Convert transaction statement
261
+ */
262
+ function convertTransactionStmt(stmt) {
263
+ const kindMap = {
264
+ 0: 'begin',
265
+ 1: 'commit',
266
+ 2: 'rollback',
267
+ 3: 'savepoint',
268
+ 4: 'release',
269
+ 5: 'rollback_to',
270
+ };
271
+ return { type: kindMap[stmt.kind] || 'transaction', ...stmt };
272
+ }
273
+ /**
274
+ * Convert ResTarget (column in select list)
275
+ */
276
+ function convertResTarget(target) {
277
+ const resTarget = target.ResTarget;
278
+ if (!resTarget) {
279
+ return { type: 'column_ref', column: '' };
280
+ }
281
+ const expr = convertExpr(resTarget.val);
282
+ if (resTarget.name) {
283
+ return {
284
+ expr: expr,
285
+ as: resTarget.name,
286
+ };
287
+ }
288
+ if (expr.type === 'column_ref') {
289
+ return expr;
290
+ }
291
+ return {
292
+ expr: expr,
293
+ };
294
+ }
295
+ /**
296
+ * Convert FROM clause item
297
+ */
298
+ function convertFromClause(item) {
299
+ if (item.RangeVar) {
300
+ return convertRangeVar(item);
301
+ }
302
+ if (item.JoinExpr) {
303
+ // For joins, return the left table for now
304
+ // Full join support would require extending TableRef
305
+ return convertFromClause(item.JoinExpr.larg);
306
+ }
307
+ if (item.RangeSubselect) {
308
+ return {
309
+ type: 'table_ref',
310
+ table: '(subquery)',
311
+ as: item.RangeSubselect.alias?.aliasname,
312
+ };
313
+ }
314
+ return { type: 'table_ref', table: '' };
315
+ }
316
+ /**
317
+ * Convert RangeVar (table reference)
318
+ */
319
+ function convertRangeVar(rangeVar) {
320
+ const rv = rangeVar?.RangeVar || rangeVar;
321
+ if (!rv) {
322
+ return { type: 'table_ref', table: '' };
323
+ }
324
+ return {
325
+ type: 'table_ref',
326
+ db: rv.catalogname || undefined,
327
+ schema: rv.schemaname || undefined,
328
+ table: rv.relname || '',
329
+ as: rv.alias?.aliasname || undefined,
330
+ };
331
+ }
332
+ /**
333
+ * Convert expression
334
+ */
335
+ function convertExpr(expr) {
336
+ if (!expr) {
337
+ return { type: 'null', value: null };
338
+ }
339
+ const exprType = Object.keys(expr)[0];
340
+ const exprData = expr[exprType];
341
+ switch (exprType) {
342
+ case 'ColumnRef':
343
+ return convertColumnRef(exprData);
344
+ case 'A_Const':
345
+ return convertAConst(exprData);
346
+ case 'A_Expr':
347
+ return convertAExpr(exprData);
348
+ case 'BoolExpr':
349
+ return convertBoolExpr(exprData);
350
+ case 'NullTest':
351
+ return {
352
+ type: 'unary_expr',
353
+ operator: exprData.nulltesttype === 0 ? 'IS NULL' : 'IS NOT NULL',
354
+ args: [convertExpr(exprData.arg)],
355
+ };
356
+ case 'FuncCall':
357
+ return {
358
+ type: 'function',
359
+ operator: exprData.funcname?.map((n) => n.String?.str).join('.') || 'unknown',
360
+ args: exprData.args?.map(convertExpr) || [],
361
+ };
362
+ case 'TypeCast':
363
+ return {
364
+ type: 'cast',
365
+ args: [convertExpr(exprData.arg)],
366
+ operator: convertTypeName(exprData.typeName),
367
+ };
368
+ case 'SubLink':
369
+ return {
370
+ type: 'subquery',
371
+ operator: mapSubLinkType(exprData.subLinkType),
372
+ args: exprData.subselect ? [convertStatement(exprData.subselect)] : [],
373
+ };
374
+ case 'CaseExpr':
375
+ return {
376
+ type: 'case',
377
+ args: [
378
+ ...(exprData.args?.map(convertExpr) || []),
379
+ exprData.defresult ? convertExpr(exprData.defresult) : undefined,
380
+ ].filter(Boolean),
381
+ };
382
+ case 'ParamRef':
383
+ return { type: 'param', value: exprData.number || 0 };
384
+ case 'A_Star':
385
+ return { type: 'column_ref', column: '*' };
386
+ case 'A_ArrayExpr':
387
+ return {
388
+ type: 'array',
389
+ args: exprData.elements?.map(convertExpr) || [],
390
+ };
391
+ case 'CoalesceExpr':
392
+ return {
393
+ type: 'function',
394
+ operator: 'COALESCE',
395
+ args: exprData.args?.map(convertExpr) || [],
396
+ };
397
+ default:
398
+ return { type: exprType.toLowerCase(), ...exprData };
399
+ }
400
+ }
401
+ /**
402
+ * Convert ColumnRef
403
+ */
404
+ function convertColumnRef(colRef) {
405
+ const fields = colRef.fields || [];
406
+ const parts = fields.map((f) => f.String?.str || (f.A_Star ? '*' : ''));
407
+ if (parts.length === 1) {
408
+ return {
409
+ type: 'column_ref',
410
+ column: parts[0],
411
+ };
412
+ }
413
+ if (parts.length === 2) {
414
+ return {
415
+ type: 'column_ref',
416
+ table: parts[0],
417
+ column: parts[1],
418
+ };
419
+ }
420
+ // schema.table.column
421
+ return {
422
+ type: 'column_ref',
423
+ table: parts.slice(0, -1).join('.'),
424
+ column: parts[parts.length - 1],
425
+ };
426
+ }
427
+ /**
428
+ * Convert A_Const (literal value)
429
+ */
430
+ function convertAConst(aConst) {
431
+ if (aConst.ival !== undefined) {
432
+ return { type: 'number', value: aConst.ival.ival ?? aConst.ival };
433
+ }
434
+ if (aConst.fval !== undefined) {
435
+ return { type: 'number', value: parseFloat(aConst.fval.fval ?? aConst.fval) };
436
+ }
437
+ if (aConst.sval !== undefined) {
438
+ return { type: 'string', value: aConst.sval.sval ?? aConst.sval };
439
+ }
440
+ if (aConst.boolval !== undefined) {
441
+ return { type: 'bool', value: aConst.boolval.boolval ?? aConst.boolval };
442
+ }
443
+ if (aConst.isnull) {
444
+ return { type: 'null', value: null };
445
+ }
446
+ // Handle newer pgsql-parser versions
447
+ if (aConst.Integer) {
448
+ return { type: 'number', value: aConst.Integer.ival };
449
+ }
450
+ if (aConst.Float) {
451
+ return { type: 'number', value: parseFloat(aConst.Float.fval) };
452
+ }
453
+ if (aConst.String) {
454
+ return { type: 'string', value: aConst.String.sval };
455
+ }
456
+ return { type: 'null', value: null };
457
+ }
458
+ /**
459
+ * Convert A_Expr (binary/unary expression)
460
+ */
461
+ function convertAExpr(aExpr) {
462
+ const operator = aExpr.name?.map((n) => n.String?.str).join('') || '=';
463
+ // Handle IN, LIKE, BETWEEN, etc.
464
+ switch (aExpr.kind) {
465
+ case 0: // AEXPR_OP
466
+ return {
467
+ type: 'binary_expr',
468
+ operator,
469
+ left: convertExpr(aExpr.lexpr),
470
+ right: convertExpr(aExpr.rexpr),
471
+ };
472
+ case 6: // AEXPR_IN
473
+ return {
474
+ type: 'binary_expr',
475
+ operator: operator === '=' ? 'IN' : 'NOT IN',
476
+ left: convertExpr(aExpr.lexpr),
477
+ right: convertExpr(aExpr.rexpr),
478
+ };
479
+ case 7: // AEXPR_LIKE
480
+ return {
481
+ type: 'binary_expr',
482
+ operator: 'LIKE',
483
+ left: convertExpr(aExpr.lexpr),
484
+ right: convertExpr(aExpr.rexpr),
485
+ };
486
+ case 8: // AEXPR_ILIKE
487
+ return {
488
+ type: 'binary_expr',
489
+ operator: 'ILIKE',
490
+ left: convertExpr(aExpr.lexpr),
491
+ right: convertExpr(aExpr.rexpr),
492
+ };
493
+ case 10: // AEXPR_BETWEEN
494
+ return {
495
+ type: 'binary_expr',
496
+ operator: 'BETWEEN',
497
+ left: convertExpr(aExpr.lexpr),
498
+ right: convertExpr(aExpr.rexpr),
499
+ };
500
+ default:
501
+ return {
502
+ type: 'binary_expr',
503
+ operator,
504
+ left: aExpr.lexpr ? convertExpr(aExpr.lexpr) : undefined,
505
+ right: aExpr.rexpr ? convertExpr(aExpr.rexpr) : undefined,
506
+ };
507
+ }
508
+ }
509
+ /**
510
+ * Convert BoolExpr
511
+ */
512
+ function convertBoolExpr(boolExpr) {
513
+ const opMap = {
514
+ 0: 'AND',
515
+ 1: 'OR',
516
+ 2: 'NOT',
517
+ };
518
+ if (boolExpr.boolop === 2) {
519
+ // NOT
520
+ return {
521
+ type: 'unary_expr',
522
+ operator: 'NOT',
523
+ args: boolExpr.args?.map(convertExpr) || [],
524
+ };
525
+ }
526
+ // AND/OR - chain binary expressions
527
+ const args = boolExpr.args?.map(convertExpr) || [];
528
+ if (args.length === 0) {
529
+ return { type: 'null', value: null };
530
+ }
531
+ return args.reduce((left, right) => ({
532
+ type: 'binary_expr',
533
+ operator: opMap[boolExpr.boolop] || 'AND',
534
+ left,
535
+ right,
536
+ }));
537
+ }
538
+ /**
539
+ * Convert SortBy (ORDER BY item)
540
+ */
541
+ function convertSortBy(sortBy) {
542
+ const sb = sortBy.SortBy;
543
+ return {
544
+ expr: convertExpr(sb.node),
545
+ type: sb.sortby_dir === 2 ? 'DESC' : 'ASC',
546
+ nulls: sb.sortby_nulls === 1 ? 'FIRST' : sb.sortby_nulls === 2 ? 'LAST' : undefined,
547
+ };
548
+ }
549
+ /**
550
+ * Convert CTE
551
+ */
552
+ function convertCTE(cte) {
553
+ const c = cte.CommonTableExpr;
554
+ return {
555
+ name: c.ctename,
556
+ columns: c.aliascolnames?.map((n) => n.String?.str) || undefined,
557
+ query: convertSelectStmt(c.ctequery?.SelectStmt || c.ctequery),
558
+ recursive: c.cterecursive || undefined,
559
+ };
560
+ }
561
+ /**
562
+ * Convert type name
563
+ */
564
+ function convertTypeName(typeName) {
565
+ if (!typeName?.TypeName) {
566
+ return 'TEXT';
567
+ }
568
+ const tn = typeName.TypeName;
569
+ const names = tn.names?.map((n) => n.String?.str).filter(Boolean) || [];
570
+ // Handle common pg_catalog types
571
+ const typeStr = names.join('.')
572
+ .replace('pg_catalog.', '')
573
+ .toUpperCase();
574
+ // Add type modifiers if present
575
+ if (tn.typmods) {
576
+ const mods = tn.typmods.map((m) => {
577
+ const val = convertExpr(m);
578
+ return val.value;
579
+ });
580
+ return `${typeStr}(${mods.join(', ')})`;
581
+ }
582
+ // Handle arrays
583
+ if (tn.arrayBounds && tn.arrayBounds.length > 0) {
584
+ return `${typeStr}[]`;
585
+ }
586
+ return typeStr;
587
+ }
588
+ /**
589
+ * Map constraint type number to string
590
+ */
591
+ function mapConstraintType(contype) {
592
+ const map = {
593
+ 1: 'check', // CONSTR_NULL (not null is check-ish)
594
+ 4: 'unique',
595
+ 5: 'primary_key',
596
+ 6: 'foreign_key',
597
+ 8: 'check',
598
+ };
599
+ return map[contype] || 'check';
600
+ }
601
+ /**
602
+ * Map sublink type
603
+ */
604
+ function mapSubLinkType(subLinkType) {
605
+ const map = {
606
+ 0: 'EXISTS',
607
+ 1: 'ALL',
608
+ 2: 'ANY',
609
+ 4: 'EXPR',
610
+ 5: 'ARRAY',
611
+ };
612
+ return map[subLinkType] || 'SUBQUERY';
613
+ }
614
+ // ============================================================================
615
+ // PGSQL PARSER ADAPTER
616
+ // ============================================================================
617
+ /**
618
+ * PostgreSQL WASM Parser adapter implementing the unified SQLParser interface.
619
+ *
620
+ * This adapter wraps pgsql-parser (libpg_query compiled to WASM) to provide:
621
+ * - Exact PostgreSQL syntax parsing
622
+ * - High performance (5-13x faster than node-sql-parser)
623
+ * - AST normalization to our unified format
624
+ * - SQL regeneration using deparse
625
+ *
626
+ * Note: This adapter ONLY supports PostgreSQL. For multi-dialect support,
627
+ * use the NodeSQLParserAdapter instead.
628
+ *
629
+ * @example
630
+ * ```typescript
631
+ * const parser = new PgsqlParserAdapter()
632
+ *
633
+ * // Parse PostgreSQL SQL
634
+ * const result = parser.parse('SELECT * FROM users WHERE active = true')
635
+ *
636
+ * // Convert back to SQL
637
+ * const sql = parser.stringify(result.ast)
638
+ *
639
+ * // Validate SQL
640
+ * const validation = parser.validate('SELEC * FROM users')
641
+ * ```
642
+ */
643
+ export class PgsqlParserAdapter {
644
+ /**
645
+ * Adapter name
646
+ */
647
+ get adapterName() {
648
+ return 'pgsql-parser';
649
+ }
650
+ /**
651
+ * Supported dialects (PostgreSQL only)
652
+ */
653
+ get supportedDialects() {
654
+ return SUPPORTED_DIALECTS;
655
+ }
656
+ /**
657
+ * Parse SQL string to AST
658
+ */
659
+ parse(sql, options = {}) {
660
+ const dialect = options.dialect || 'postgresql';
661
+ // pgsql-parser only supports PostgreSQL
662
+ if (dialect !== 'postgresql') {
663
+ throw new SQLParseError(`pgsql-parser only supports PostgreSQL dialect, got: ${dialect}`, { sql, dialect });
664
+ }
665
+ const startTime = performance.now();
666
+ try {
667
+ const pgParseResult = pgParse(sql);
668
+ const endTime = performance.now();
669
+ const parseTimeUs = Math.round((endTime - startTime) * 1000);
670
+ const ast = convertPgAST(pgParseResult);
671
+ return {
672
+ ast,
673
+ sql,
674
+ dialect: 'postgresql',
675
+ parseTimeUs,
676
+ };
677
+ }
678
+ catch (error) {
679
+ if (options.throwOnError === false) {
680
+ return {
681
+ ast: { type: 'unknown' },
682
+ sql,
683
+ dialect: 'postgresql',
684
+ };
685
+ }
686
+ const errorMessage = error instanceof Error ? error.message : String(error);
687
+ // pgsql-parser includes location info in the error
688
+ const locationMatch = errorMessage.match(/at position (\d+)/i);
689
+ let location;
690
+ if (locationMatch) {
691
+ const offset = parseInt(locationMatch[1], 10);
692
+ const beforeError = sql.substring(0, offset);
693
+ const lines = beforeError.split('\n');
694
+ location = {
695
+ line: lines.length,
696
+ column: lines[lines.length - 1].length + 1,
697
+ offset,
698
+ };
699
+ }
700
+ throw new SQLParseError(errorMessage, {
701
+ sql,
702
+ dialect: 'postgresql',
703
+ location,
704
+ cause: error instanceof Error ? error : undefined,
705
+ });
706
+ }
707
+ }
708
+ /**
709
+ * Convert AST back to SQL string using deparse
710
+ */
711
+ stringify(ast, options = {}) {
712
+ const dialect = options.dialect || 'postgresql';
713
+ if (dialect !== 'postgresql') {
714
+ throw new SQLStringifyError(`pgsql-parser only supports PostgreSQL dialect, got: ${dialect}`);
715
+ }
716
+ try {
717
+ // pgsql-parser's deparse expects the original pg_query AST format
718
+ // If we have our normalized AST, we need to parse the original SQL
719
+ // and deparse that. This is a limitation of the current approach.
720
+ //
721
+ // For production use, consider caching the original pg_query AST
722
+ // alongside the normalized AST.
723
+ // If this is array, deparse each statement
724
+ if (Array.isArray(ast)) {
725
+ return ast.map((a) => this.stringifySingle(a)).join(';\n');
726
+ }
727
+ return this.stringifySingle(ast);
728
+ }
729
+ catch (error) {
730
+ throw new SQLStringifyError(`Failed to stringify AST: ${error instanceof Error ? error.message : String(error)}`, { cause: error instanceof Error ? error : undefined });
731
+ }
732
+ }
733
+ /**
734
+ * Stringify a single AST node
735
+ */
736
+ stringifySingle(ast) {
737
+ // pgsql-parser's deparse works with the original pg_query format
738
+ // We'll convert our normalized AST back to a rough approximation
739
+ // For best results, store the original pg_query AST
740
+ // Wrap in the expected format for deparse (ParseResult format)
741
+ const pgAst = this.convertToStoredPgAST(ast);
742
+ try {
743
+ // pgDeparse expects ParseResult: { version: number, stmts: RawStmt[] }
744
+ // where RawStmt is { stmt: {...}, stmt_len?: number }
745
+ const parseResult = {
746
+ version: 170004, // PostgreSQL 17 version
747
+ stmts: pgAst.map((rawStmt) => ({
748
+ stmt: rawStmt.RawStmt?.stmt || rawStmt,
749
+ stmt_len: 0,
750
+ })),
751
+ };
752
+ return pgDeparse(parseResult);
753
+ }
754
+ catch {
755
+ // Fallback: reconstruct SQL manually for common cases
756
+ return this.manualStringify(ast);
757
+ }
758
+ }
759
+ /**
760
+ * Convert our normalized AST back to pg_query format
761
+ * This is a best-effort conversion for common cases
762
+ */
763
+ convertToStoredPgAST(ast) {
764
+ // Wrap in RawStmt as expected by deparse
765
+ const stmt = this.convertStatementToPg(ast);
766
+ return [{ RawStmt: { stmt } }];
767
+ }
768
+ /**
769
+ * Convert a single statement to pg_query format
770
+ */
771
+ convertStatementToPg(ast) {
772
+ switch (ast.type) {
773
+ case 'select':
774
+ return this.convertSelectToPg(ast);
775
+ case 'insert':
776
+ return this.convertInsertToPg(ast);
777
+ case 'update':
778
+ return this.convertUpdateToPg(ast);
779
+ case 'delete':
780
+ return this.convertDeleteToPg(ast);
781
+ default:
782
+ return ast;
783
+ }
784
+ }
785
+ /**
786
+ * Convert SELECT to pg format
787
+ */
788
+ convertSelectToPg(select) {
789
+ const stmt = { SelectStmt: {} };
790
+ const ss = stmt.SelectStmt;
791
+ // Target list
792
+ if (select.columns && select.columns !== '*') {
793
+ ss.targetList = select.columns.map((col) => this.convertColumnToPgResTarget(col));
794
+ }
795
+ // FROM
796
+ if (select.from) {
797
+ ss.fromClause = select.from.map((t) => ({
798
+ RangeVar: {
799
+ relname: t.table,
800
+ schemaname: t.schema,
801
+ alias: t.as ? { aliasname: t.as } : undefined,
802
+ },
803
+ }));
804
+ }
805
+ // WHERE
806
+ if (select.where) {
807
+ ss.whereClause = this.convertExprToPg(select.where);
808
+ }
809
+ // ORDER BY
810
+ if (select.orderby) {
811
+ ss.sortClause = select.orderby.map((o) => ({
812
+ SortBy: {
813
+ node: this.convertExprToPg(o.expr),
814
+ sortby_dir: o.type === 'DESC' ? 2 : 1,
815
+ },
816
+ }));
817
+ }
818
+ // LIMIT
819
+ if (select.limit) {
820
+ if (typeof select.limit.value === 'number') {
821
+ ss.limitCount = { A_Const: { ival: { ival: select.limit.value } } };
822
+ }
823
+ if (select.limit.offset && typeof select.limit.offset === 'number') {
824
+ ss.limitOffset = { A_Const: { ival: { ival: select.limit.offset } } };
825
+ }
826
+ }
827
+ return stmt;
828
+ }
829
+ /**
830
+ * Convert INSERT to pg format
831
+ */
832
+ convertInsertToPg(insert) {
833
+ return {
834
+ InsertStmt: {
835
+ relation: {
836
+ RangeVar: {
837
+ relname: insert.table.table,
838
+ schemaname: insert.table.schema,
839
+ },
840
+ },
841
+ cols: insert.columns?.map((c) => ({ ResTarget: { name: c } })),
842
+ selectStmt: insert.values
843
+ ? {
844
+ SelectStmt: {
845
+ valuesLists: insert.values.map((row) => row.map((v) => this.convertLiteralToPg(v))),
846
+ },
847
+ }
848
+ : undefined,
849
+ },
850
+ };
851
+ }
852
+ /**
853
+ * Convert UPDATE to pg format
854
+ */
855
+ convertUpdateToPg(update) {
856
+ return {
857
+ UpdateStmt: {
858
+ relation: {
859
+ RangeVar: {
860
+ relname: update.table.table,
861
+ schemaname: update.table.schema,
862
+ },
863
+ },
864
+ targetList: update.set.map((s) => ({
865
+ ResTarget: {
866
+ name: s.column,
867
+ val: this.convertExprToPg(s.value),
868
+ },
869
+ })),
870
+ whereClause: update.where ? this.convertExprToPg(update.where) : undefined,
871
+ },
872
+ };
873
+ }
874
+ /**
875
+ * Convert DELETE to pg format
876
+ */
877
+ convertDeleteToPg(del) {
878
+ return {
879
+ DeleteStmt: {
880
+ relation: {
881
+ RangeVar: {
882
+ relname: del.from.table,
883
+ schemaname: del.from.schema,
884
+ },
885
+ },
886
+ whereClause: del.where ? this.convertExprToPg(del.where) : undefined,
887
+ },
888
+ };
889
+ }
890
+ /**
891
+ * Convert column to ResTarget
892
+ */
893
+ convertColumnToPgResTarget(col) {
894
+ if ('expr' in col && col.expr) {
895
+ return {
896
+ ResTarget: {
897
+ val: this.convertExprToPg(col.expr),
898
+ name: col.as,
899
+ },
900
+ };
901
+ }
902
+ const c = col;
903
+ return {
904
+ ResTarget: {
905
+ val: {
906
+ ColumnRef: {
907
+ fields: c.table
908
+ ? [{ String: { str: c.table } }, { String: { str: c.column } }]
909
+ : [{ String: { str: c.column } }],
910
+ },
911
+ },
912
+ name: c.as,
913
+ },
914
+ };
915
+ }
916
+ /**
917
+ * Convert expression to pg format
918
+ */
919
+ convertExprToPg(expr) {
920
+ const type = expr.type;
921
+ switch (type) {
922
+ case 'column_ref': {
923
+ const col = expr;
924
+ return {
925
+ ColumnRef: {
926
+ fields: col.table
927
+ ? [{ String: { str: col.table } }, { String: { str: col.column } }]
928
+ : col.column === '*'
929
+ ? [{ A_Star: {} }]
930
+ : [{ String: { str: col.column } }],
931
+ },
932
+ };
933
+ }
934
+ case 'number':
935
+ case 'string':
936
+ case 'bool':
937
+ case 'null':
938
+ return this.convertLiteralToPg(expr);
939
+ case 'binary_expr': {
940
+ const binExpr = expr;
941
+ return {
942
+ A_Expr: {
943
+ kind: 0, // AEXPR_OP
944
+ name: [{ String: { str: binExpr.operator || '=' } }],
945
+ lexpr: binExpr.left ? this.convertExprToPg(binExpr.left) : undefined,
946
+ rexpr: binExpr.right ? this.convertExprToPg(binExpr.right) : undefined,
947
+ },
948
+ };
949
+ }
950
+ default:
951
+ return expr;
952
+ }
953
+ }
954
+ /**
955
+ * Convert literal to pg format
956
+ */
957
+ convertLiteralToPg(lit) {
958
+ switch (lit.type) {
959
+ case 'number':
960
+ return Number.isInteger(lit.value)
961
+ ? { A_Const: { ival: { ival: lit.value } } }
962
+ : { A_Const: { fval: { fval: String(lit.value) } } };
963
+ case 'string':
964
+ return { A_Const: { sval: { sval: lit.value } } };
965
+ case 'bool':
966
+ return { A_Const: { boolval: { boolval: lit.value } } };
967
+ case 'null':
968
+ return { A_Const: { isnull: true } };
969
+ default:
970
+ return { A_Const: { sval: { sval: String(lit.value) } } };
971
+ }
972
+ }
973
+ /**
974
+ * Manual SQL reconstruction fallback
975
+ */
976
+ manualStringify(ast) {
977
+ const type = ast.type;
978
+ switch (type) {
979
+ case 'select':
980
+ return this.stringifySelect(ast);
981
+ case 'insert':
982
+ return this.stringifyInsert(ast);
983
+ case 'update':
984
+ return this.stringifyUpdate(ast);
985
+ case 'delete':
986
+ return this.stringifyDelete(ast);
987
+ default:
988
+ throw new SQLStringifyError(`Cannot stringify statement type: ${type}`);
989
+ }
990
+ }
991
+ /**
992
+ * Stringify SELECT manually
993
+ */
994
+ stringifySelect(select) {
995
+ const parts = ['SELECT'];
996
+ if (select.distinct) {
997
+ parts.push('DISTINCT');
998
+ }
999
+ // Columns
1000
+ if (select.columns === '*') {
1001
+ parts.push('*');
1002
+ }
1003
+ else if (Array.isArray(select.columns)) {
1004
+ parts.push(select.columns
1005
+ .map((col) => {
1006
+ if ('expr' in col && col.expr) {
1007
+ const expr = this.stringifyExpr(col.expr);
1008
+ return col.as ? `${expr} AS ${col.as}` : expr;
1009
+ }
1010
+ const c = col;
1011
+ const ref = c.table ? `${c.table}.${c.column}` : c.column;
1012
+ return c.as ? `${ref} AS ${c.as}` : ref;
1013
+ })
1014
+ .join(', '));
1015
+ }
1016
+ // FROM
1017
+ if (select.from && select.from.length > 0) {
1018
+ parts.push('FROM');
1019
+ parts.push(select.from
1020
+ .map((t) => {
1021
+ const name = t.schema ? `${t.schema}.${t.table}` : t.table;
1022
+ return t.as ? `${name} AS ${t.as}` : name;
1023
+ })
1024
+ .join(', '));
1025
+ }
1026
+ // WHERE
1027
+ if (select.where) {
1028
+ parts.push('WHERE');
1029
+ parts.push(this.stringifyExpr(select.where));
1030
+ }
1031
+ // ORDER BY
1032
+ if (select.orderby && select.orderby.length > 0) {
1033
+ parts.push('ORDER BY');
1034
+ parts.push(select.orderby
1035
+ .map((o) => `${this.stringifyExpr(o.expr)} ${o.type}`)
1036
+ .join(', '));
1037
+ }
1038
+ // LIMIT
1039
+ if (select.limit) {
1040
+ if (typeof select.limit.value === 'number') {
1041
+ parts.push(`LIMIT ${select.limit.value}`);
1042
+ }
1043
+ if (select.limit.offset && typeof select.limit.offset === 'number') {
1044
+ parts.push(`OFFSET ${select.limit.offset}`);
1045
+ }
1046
+ }
1047
+ return parts.join(' ');
1048
+ }
1049
+ /**
1050
+ * Stringify INSERT manually
1051
+ */
1052
+ stringifyInsert(insert) {
1053
+ const table = insert.table.schema
1054
+ ? `${insert.table.schema}.${insert.table.table}`
1055
+ : insert.table.table;
1056
+ const parts = [`INSERT INTO ${table}`];
1057
+ if (insert.columns) {
1058
+ parts.push(`(${insert.columns.join(', ')})`);
1059
+ }
1060
+ if (insert.values) {
1061
+ const valueStrings = insert.values.map((row) => `(${row.map((v) => this.stringifyLiteral(v)).join(', ')})`);
1062
+ parts.push(`VALUES ${valueStrings.join(', ')}`);
1063
+ }
1064
+ return parts.join(' ');
1065
+ }
1066
+ /**
1067
+ * Stringify UPDATE manually
1068
+ */
1069
+ stringifyUpdate(update) {
1070
+ const table = update.table.schema
1071
+ ? `${update.table.schema}.${update.table.table}`
1072
+ : update.table.table;
1073
+ const sets = update.set
1074
+ .map((s) => `${s.column} = ${this.stringifyExpr(s.value)}`)
1075
+ .join(', ');
1076
+ let sql = `UPDATE ${table} SET ${sets}`;
1077
+ if (update.where) {
1078
+ sql += ` WHERE ${this.stringifyExpr(update.where)}`;
1079
+ }
1080
+ return sql;
1081
+ }
1082
+ /**
1083
+ * Stringify DELETE manually
1084
+ */
1085
+ stringifyDelete(del) {
1086
+ const table = del.from.schema
1087
+ ? `${del.from.schema}.${del.from.table}`
1088
+ : del.from.table;
1089
+ let sql = `DELETE FROM ${table}`;
1090
+ if (del.where) {
1091
+ sql += ` WHERE ${this.stringifyExpr(del.where)}`;
1092
+ }
1093
+ return sql;
1094
+ }
1095
+ /**
1096
+ * Stringify expression
1097
+ */
1098
+ stringifyExpr(expr) {
1099
+ const type = expr.type;
1100
+ switch (type) {
1101
+ case 'column_ref': {
1102
+ const col = expr;
1103
+ return col.table ? `${col.table}.${col.column}` : col.column;
1104
+ }
1105
+ case 'number':
1106
+ case 'string':
1107
+ case 'bool':
1108
+ case 'null':
1109
+ return this.stringifyLiteral(expr);
1110
+ case 'binary_expr': {
1111
+ const bin = expr;
1112
+ const left = bin.left ? this.stringifyExpr(bin.left) : '';
1113
+ const right = bin.right ? this.stringifyExpr(bin.right) : '';
1114
+ return `${left} ${bin.operator || '='} ${right}`;
1115
+ }
1116
+ case 'unary_expr': {
1117
+ const unary = expr;
1118
+ const arg = unary.args?.[0] ? this.stringifyExpr(unary.args[0]) : '';
1119
+ return `${arg} ${unary.operator || ''}`;
1120
+ }
1121
+ case 'function': {
1122
+ const func = expr;
1123
+ const args = func.args?.map((a) => this.stringifyExpr(a)).join(', ') || '';
1124
+ return `${func.operator}(${args})`;
1125
+ }
1126
+ default:
1127
+ return String(expr);
1128
+ }
1129
+ }
1130
+ /**
1131
+ * Stringify literal value
1132
+ */
1133
+ stringifyLiteral(lit) {
1134
+ switch (lit.type) {
1135
+ case 'number':
1136
+ return String(lit.value);
1137
+ case 'string':
1138
+ return `'${String(lit.value).replace(/'/g, "''")}'`;
1139
+ case 'bool':
1140
+ return lit.value ? 'TRUE' : 'FALSE';
1141
+ case 'null':
1142
+ return 'NULL';
1143
+ case 'param':
1144
+ return `$${lit.value}`;
1145
+ default:
1146
+ return String(lit.value);
1147
+ }
1148
+ }
1149
+ /**
1150
+ * Validate SQL syntax
1151
+ */
1152
+ validate(sql, dialect = 'postgresql') {
1153
+ const issues = [];
1154
+ // pgsql-parser only supports PostgreSQL
1155
+ if (dialect !== 'postgresql') {
1156
+ issues.push({
1157
+ severity: 'warning',
1158
+ message: `pgsql-parser only supports PostgreSQL, validating as PostgreSQL instead of ${dialect}`,
1159
+ code: 'DIALECT_OVERRIDE',
1160
+ });
1161
+ }
1162
+ try {
1163
+ this.parse(sql, { dialect: 'postgresql', throwOnError: true });
1164
+ }
1165
+ catch (error) {
1166
+ const parseError = error;
1167
+ issues.push({
1168
+ severity: 'error',
1169
+ message: parseError.message,
1170
+ location: parseError.location,
1171
+ code: 'PARSE_ERROR',
1172
+ });
1173
+ }
1174
+ return {
1175
+ valid: !issues.some((i) => i.severity === 'error'),
1176
+ issues,
1177
+ sql,
1178
+ dialect: 'postgresql',
1179
+ };
1180
+ }
1181
+ }
1182
+ /**
1183
+ * Create a new PgsqlParserAdapter instance
1184
+ */
1185
+ export function createPgsqlParserAdapter() {
1186
+ return new PgsqlParserAdapter();
1187
+ }
1188
+ export default PgsqlParserAdapter;
1189
+ //# sourceMappingURL=pgsql-parser.js.map