@adecore/database 0.0.1 → 0.16.0-beta.0

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 (400) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +152 -1
  3. package/dist/DatabaseProvider.d.ts +13 -0
  4. package/dist/DatabaseProvider.js +17 -0
  5. package/dist/actions.d.ts +40 -0
  6. package/dist/actions.js +1 -0
  7. package/dist/client/client.d.ts +5 -0
  8. package/dist/client/client.js +245 -0
  9. package/dist/client/index.d.ts +2 -0
  10. package/dist/client/index.js +2 -0
  11. package/dist/client/types.d.ts +97 -0
  12. package/dist/client/types.js +13 -0
  13. package/dist/client-context.d.ts +16 -0
  14. package/dist/client-context.js +17 -0
  15. package/dist/connections/ConnectionForm.d.ts +10 -0
  16. package/dist/connections/ConnectionForm.js +145 -0
  17. package/dist/connections/ConnectionManager.d.ts +12 -0
  18. package/dist/connections/ConnectionManager.js +93 -0
  19. package/dist/connections/EngineIcon.d.ts +9 -0
  20. package/dist/connections/EngineIcon.js +7 -0
  21. package/dist/connections/connection-config.d.ts +16 -0
  22. package/dist/connections/connection-config.js +107 -0
  23. package/dist/connections/docker.d.ts +9 -0
  24. package/dist/connections/docker.js +38 -0
  25. package/dist/connections/engine-icons.d.ts +3 -0
  26. package/dist/connections/engine-icons.js +3 -0
  27. package/dist/connections/use-docker-containers.d.ts +17 -0
  28. package/dist/connections/use-docker-containers.js +26 -0
  29. package/dist/console/DestructiveDialog.d.ts +9 -0
  30. package/dist/console/DestructiveDialog.js +9 -0
  31. package/dist/console/HistoryPanel.d.ts +10 -0
  32. package/dist/console/HistoryPanel.js +15 -0
  33. package/dist/console/QueryConsole.d.ts +14 -0
  34. package/dist/console/QueryConsole.js +261 -0
  35. package/dist/console/SchemaPicker.d.ts +11 -0
  36. package/dist/console/SchemaPicker.js +8 -0
  37. package/dist/console/SqlEditor.d.ts +12 -0
  38. package/dist/console/SqlEditor.js +61 -0
  39. package/dist/console/StatementResultView.d.ts +18 -0
  40. package/dist/console/StatementResultView.js +32 -0
  41. package/dist/console/TransactionControls.d.ts +13 -0
  42. package/dist/console/TransactionControls.js +12 -0
  43. package/dist/console/destructive.d.ts +7 -0
  44. package/dist/console/destructive.js +43 -0
  45. package/dist/console/editing.d.ts +12 -0
  46. package/dist/console/editing.js +60 -0
  47. package/dist/console/history.d.ts +13 -0
  48. package/dist/console/history.js +43 -0
  49. package/dist/console/labels.d.ts +1 -0
  50. package/dist/console/labels.js +6 -0
  51. package/dist/console/outcome.d.ts +6 -0
  52. package/dist/console/outcome.js +11 -0
  53. package/dist/console/schemas.d.ts +2 -0
  54. package/dist/console/schemas.js +5 -0
  55. package/dist/console/shortcuts.d.ts +2 -0
  56. package/dist/console/shortcuts.js +3 -0
  57. package/dist/console/useConsoleHistory.d.ts +7 -0
  58. package/dist/console/useConsoleHistory.js +22 -0
  59. package/dist/ddl/alter-mysql.d.ts +4 -0
  60. package/dist/ddl/alter-mysql.js +79 -0
  61. package/dist/ddl/alter-sqlite.d.ts +4 -0
  62. package/dist/ddl/alter-sqlite.js +80 -0
  63. package/dist/ddl/alter.d.ts +4 -0
  64. package/dist/ddl/alter.js +24 -0
  65. package/dist/ddl/column.d.ts +9 -0
  66. package/dist/ddl/column.js +62 -0
  67. package/dist/ddl/create.d.ts +12 -0
  68. package/dist/ddl/create.js +74 -0
  69. package/dist/ddl/dialect.d.ts +12 -0
  70. package/dist/ddl/dialect.js +34 -0
  71. package/dist/ddl/diff.d.ts +34 -0
  72. package/dist/ddl/diff.js +111 -0
  73. package/dist/ddl/draft.d.ts +46 -0
  74. package/dist/ddl/draft.js +70 -0
  75. package/dist/ddl/index.d.ts +10 -0
  76. package/dist/ddl/index.js +10 -0
  77. package/dist/ddl/parse.d.ts +17 -0
  78. package/dist/ddl/parse.js +131 -0
  79. package/dist/ddl/statements.d.ts +6 -0
  80. package/dist/ddl/statements.js +12 -0
  81. package/dist/ddl/types.d.ts +6 -0
  82. package/dist/ddl/types.js +52 -0
  83. package/dist/ddl/validate.d.ts +7 -0
  84. package/dist/ddl/validate.js +38 -0
  85. package/dist/designer/ColumnsEditor.d.ts +2 -0
  86. package/dist/designer/ColumnsEditor.js +24 -0
  87. package/dist/designer/DesignerView.d.ts +25 -0
  88. package/dist/designer/DesignerView.js +33 -0
  89. package/dist/designer/ForeignKeysEditor.d.ts +7 -0
  90. package/dist/designer/ForeignKeysEditor.js +24 -0
  91. package/dist/designer/IndexesEditor.d.ts +2 -0
  92. package/dist/designer/IndexesEditor.js +13 -0
  93. package/dist/designer/NamePicker.d.ts +11 -0
  94. package/dist/designer/NamePicker.js +13 -0
  95. package/dist/designer/OptionsEditor.d.ts +2 -0
  96. package/dist/designer/OptionsEditor.js +17 -0
  97. package/dist/designer/SqlPreview.d.ts +12 -0
  98. package/dist/designer/SqlPreview.js +17 -0
  99. package/dist/designer/TableDesigner.d.ts +10 -0
  100. package/dist/designer/TableDesigner.js +103 -0
  101. package/dist/designer/edit.d.ts +17 -0
  102. package/dist/designer/edit.js +115 -0
  103. package/dist/designer/editor-props.d.ts +10 -0
  104. package/dist/designer/editor-props.js +1 -0
  105. package/dist/designer/plan.d.ts +9 -0
  106. package/dist/designer/plan.js +13 -0
  107. package/dist/designer/recover.d.ts +2 -0
  108. package/dist/designer/recover.js +18 -0
  109. package/dist/designer/useReferenceColumns.d.ts +3 -0
  110. package/dist/designer/useReferenceColumns.js +36 -0
  111. package/dist/explorer/DatabaseExplorer.d.ts +13 -0
  112. package/dist/explorer/DatabaseExplorer.js +264 -0
  113. package/dist/explorer/RowMenu.d.ts +11 -0
  114. package/dist/explorer/RowMenu.js +89 -0
  115. package/dist/explorer/TableDialog.d.ts +15 -0
  116. package/dist/explorer/TableDialog.js +50 -0
  117. package/dist/explorer/expansion.d.ts +7 -0
  118. package/dist/explorer/expansion.js +31 -0
  119. package/dist/explorer/table-statements.d.ts +5 -0
  120. package/dist/explorer/table-statements.js +12 -0
  121. package/dist/explorer/tree.d.ts +125 -0
  122. package/dist/explorer/tree.js +295 -0
  123. package/dist/explorer/use-explorer-loads.d.ts +12 -0
  124. package/dist/explorer/use-explorer-loads.js +109 -0
  125. package/dist/explorer/use-stored-expansion.d.ts +9 -0
  126. package/dist/explorer/use-stored-expansion.js +47 -0
  127. package/dist/grid/CellEditor.d.ts +9 -0
  128. package/dist/grid/CellEditor.js +29 -0
  129. package/dist/grid/CopyAsMenu.d.ts +7 -0
  130. package/dist/grid/CopyAsMenu.js +10 -0
  131. package/dist/grid/DataGrid.d.ts +36 -0
  132. package/dist/grid/DataGrid.js +512 -0
  133. package/dist/grid/EnumPicker.d.ts +17 -0
  134. package/dist/grid/EnumPicker.js +53 -0
  135. package/dist/grid/GridHeaderCell.d.ts +36 -0
  136. package/dist/grid/GridHeaderCell.js +69 -0
  137. package/dist/grid/RecordView.d.ts +20 -0
  138. package/dist/grid/RecordView.js +126 -0
  139. package/dist/grid/ValueDock.d.ts +11 -0
  140. package/dist/grid/ValueDock.js +28 -0
  141. package/dist/grid/aggregates.d.ts +22 -0
  142. package/dist/grid/aggregates.js +62 -0
  143. package/dist/grid/cell-range.d.ts +14 -0
  144. package/dist/grid/cell-range.js +11 -0
  145. package/dist/grid/column-layout.d.ts +18 -0
  146. package/dist/grid/column-layout.js +49 -0
  147. package/dist/grid/column-selection.d.ts +11 -0
  148. package/dist/grid/column-selection.js +28 -0
  149. package/dist/grid/column-view.d.ts +10 -0
  150. package/dist/grid/column-view.js +23 -0
  151. package/dist/grid/copy-formats.d.ts +15 -0
  152. package/dist/grid/copy-formats.js +80 -0
  153. package/dist/grid/display.d.ts +20 -0
  154. package/dist/grid/display.js +81 -0
  155. package/dist/grid/edit-value.d.ts +5 -0
  156. package/dist/grid/edit-value.js +55 -0
  157. package/dist/grid/enum-type.d.ts +7 -0
  158. package/dist/grid/enum-type.js +52 -0
  159. package/dist/grid/focused-value.d.ts +4 -0
  160. package/dist/grid/focused-value.js +19 -0
  161. package/dist/grid/layout.d.ts +22 -0
  162. package/dist/grid/layout.js +74 -0
  163. package/dist/grid/navigation.d.ts +15 -0
  164. package/dist/grid/navigation.js +52 -0
  165. package/dist/grid/row-selection.d.ts +9 -0
  166. package/dist/grid/row-selection.js +24 -0
  167. package/dist/grid/sort.d.ts +7 -0
  168. package/dist/grid/sort.js +7 -0
  169. package/dist/grid/types.d.ts +30 -0
  170. package/dist/grid/types.js +9 -0
  171. package/dist/host/helper-path.d.ts +7 -0
  172. package/dist/host/helper-path.js +15 -0
  173. package/dist/host/host.d.ts +2 -0
  174. package/dist/host/host.js +343 -0
  175. package/dist/host/index.d.ts +5 -0
  176. package/dist/host/index.js +4 -0
  177. package/dist/host/spawn.d.ts +7 -0
  178. package/dist/host/spawn.js +98 -0
  179. package/dist/host/types.d.ts +19 -0
  180. package/dist/host/types.js +1 -0
  181. package/dist/host/validate.d.ts +10 -0
  182. package/dist/host/validate.js +339 -0
  183. package/dist/index.d.ts +14 -0
  184. package/dist/index.js +13 -0
  185. package/dist/locales/en.json +577 -0
  186. package/dist/locales/nl.json +577 -0
  187. package/dist/locales.d.ts +4 -0
  188. package/dist/locales.js +14 -0
  189. package/dist/protocol/connection.d.ts +56 -0
  190. package/dist/protocol/connection.js +1 -0
  191. package/dist/protocol/errors.d.ts +7 -0
  192. package/dist/protocol/errors.js +1 -0
  193. package/dist/protocol/index.d.ts +5 -0
  194. package/dist/protocol/index.js +3 -0
  195. package/dist/protocol/messages.d.ts +250 -0
  196. package/dist/protocol/messages.js +2 -0
  197. package/dist/protocol/schema.d.ts +53 -0
  198. package/dist/protocol/schema.js +1 -0
  199. package/dist/protocol/values.d.ts +21 -0
  200. package/dist/protocol/values.js +15 -0
  201. package/dist/sql-split.d.ts +15 -0
  202. package/dist/sql-split.js +201 -0
  203. package/dist/sql.d.ts +29 -0
  204. package/dist/sql.js +104 -0
  205. package/dist/structure/StructureView.d.ts +14 -0
  206. package/dist/structure/StructureView.js +99 -0
  207. package/dist/structure/structure-text.d.ts +2 -0
  208. package/dist/structure/structure-text.js +2 -0
  209. package/dist/table/CommandField.d.ts +14 -0
  210. package/dist/table/CommandField.js +157 -0
  211. package/dist/table/ImportDialog.d.ts +27 -0
  212. package/dist/table/ImportDialog.js +28 -0
  213. package/dist/table/TableStatusBar.d.ts +19 -0
  214. package/dist/table/TableStatusBar.js +22 -0
  215. package/dist/table/TableToolbar.d.ts +43 -0
  216. package/dist/table/TableToolbar.js +16 -0
  217. package/dist/table/TableView.d.ts +13 -0
  218. package/dist/table/TableView.js +508 -0
  219. package/dist/table/command-field.d.ts +57 -0
  220. package/dist/table/command-field.js +203 -0
  221. package/dist/table/grid-rows.d.ts +23 -0
  222. package/dist/table/grid-rows.js +55 -0
  223. package/dist/table/import-mapping.d.ts +7 -0
  224. package/dist/table/import-mapping.js +28 -0
  225. package/dist/table/layout-store.d.ts +13 -0
  226. package/dist/table/layout-store.js +43 -0
  227. package/dist/table/paging.d.ts +12 -0
  228. package/dist/table/paging.js +20 -0
  229. package/dist/table/pending.d.ts +32 -0
  230. package/dist/table/pending.js +94 -0
  231. package/dist/table/references.d.ts +12 -0
  232. package/dist/table/references.js +21 -0
  233. package/dist/table/useLoaded.d.ts +7 -0
  234. package/dist/table/useLoaded.js +36 -0
  235. package/dist/table/useStoredLayout.d.ts +8 -0
  236. package/dist/table/useStoredLayout.js +39 -0
  237. package/dist/table/useTableTransfer.d.ts +51 -0
  238. package/dist/table/useTableTransfer.js +125 -0
  239. package/dist/testing/fake.d.ts +21 -0
  240. package/dist/testing/fake.js +372 -0
  241. package/dist/testing/index.d.ts +1 -0
  242. package/dist/testing/index.js +1 -0
  243. package/dist/use-popup-press.d.ts +1 -0
  244. package/dist/use-popup-press.js +24 -0
  245. package/dist/use-schema-change.d.ts +1 -0
  246. package/dist/use-schema-change.js +13 -0
  247. package/dist/use-stable-callback.d.ts +1 -0
  248. package/dist/use-stable-callback.js +9 -0
  249. package/dist/value/ValuePanel.d.ts +14 -0
  250. package/dist/value/ValuePanel.js +103 -0
  251. package/dist/value/draft.d.ts +33 -0
  252. package/dist/value/draft.js +44 -0
  253. package/dist/value/hex.d.ts +14 -0
  254. package/dist/value/hex.js +46 -0
  255. package/dist/value/json.d.ts +9 -0
  256. package/dist/value/json.js +71 -0
  257. package/dist/value/views.d.ts +22 -0
  258. package/dist/value/views.js +54 -0
  259. package/dist/workbench/DatabaseWorkbench.d.ts +9 -0
  260. package/dist/workbench/DatabaseWorkbench.js +179 -0
  261. package/dist/workbench/DesignerTab.d.ts +10 -0
  262. package/dist/workbench/DesignerTab.js +22 -0
  263. package/dist/workbench/TableTab.d.ts +10 -0
  264. package/dist/workbench/TableTab.js +8 -0
  265. package/dist/workbench/tabs.d.ts +42 -0
  266. package/dist/workbench/tabs.js +139 -0
  267. package/package.json +79 -3
  268. package/src/DatabaseProvider.tsx +37 -0
  269. package/src/actions.ts +34 -0
  270. package/src/client/client.ts +324 -0
  271. package/src/client/index.ts +18 -0
  272. package/src/client/types.ts +161 -0
  273. package/src/client-context.ts +35 -0
  274. package/src/connections/ConnectionForm.tsx +474 -0
  275. package/src/connections/ConnectionManager.tsx +224 -0
  276. package/src/connections/EngineIcon.tsx +18 -0
  277. package/src/connections/connection-config.ts +143 -0
  278. package/src/connections/docker.ts +50 -0
  279. package/src/connections/engine-icons.ts +5 -0
  280. package/src/connections/use-docker-containers.ts +41 -0
  281. package/src/console/DestructiveDialog.tsx +40 -0
  282. package/src/console/HistoryPanel.tsx +67 -0
  283. package/src/console/QueryConsole.tsx +439 -0
  284. package/src/console/SchemaPicker.tsx +32 -0
  285. package/src/console/SqlEditor.tsx +95 -0
  286. package/src/console/StatementResultView.tsx +176 -0
  287. package/src/console/TransactionControls.tsx +53 -0
  288. package/src/console/destructive.ts +60 -0
  289. package/src/console/editing.ts +77 -0
  290. package/src/console/history.ts +62 -0
  291. package/src/console/labels.ts +7 -0
  292. package/src/console/outcome.ts +14 -0
  293. package/src/console/schemas.ts +7 -0
  294. package/src/console/shortcuts.ts +4 -0
  295. package/src/console/useConsoleHistory.ts +39 -0
  296. package/src/ddl/alter-mysql.ts +90 -0
  297. package/src/ddl/alter-sqlite.ts +93 -0
  298. package/src/ddl/alter.ts +29 -0
  299. package/src/ddl/column.ts +74 -0
  300. package/src/ddl/create.ts +92 -0
  301. package/src/ddl/dialect.ts +53 -0
  302. package/src/ddl/diff.ts +164 -0
  303. package/src/ddl/draft.ts +136 -0
  304. package/src/ddl/index.ts +10 -0
  305. package/src/ddl/parse.ts +161 -0
  306. package/src/ddl/statements.ts +20 -0
  307. package/src/ddl/types.ts +60 -0
  308. package/src/ddl/validate.ts +47 -0
  309. package/src/designer/ColumnsEditor.tsx +204 -0
  310. package/src/designer/DesignerView.tsx +184 -0
  311. package/src/designer/ForeignKeysEditor.tsx +132 -0
  312. package/src/designer/IndexesEditor.tsx +63 -0
  313. package/src/designer/NamePicker.tsx +44 -0
  314. package/src/designer/OptionsEditor.tsx +101 -0
  315. package/src/designer/SqlPreview.tsx +56 -0
  316. package/src/designer/TableDesigner.tsx +186 -0
  317. package/src/designer/edit.ts +137 -0
  318. package/src/designer/editor-props.ts +13 -0
  319. package/src/designer/plan.ts +25 -0
  320. package/src/designer/recover.ts +20 -0
  321. package/src/designer/useReferenceColumns.ts +54 -0
  322. package/src/explorer/DatabaseExplorer.tsx +450 -0
  323. package/src/explorer/RowMenu.tsx +134 -0
  324. package/src/explorer/TableDialog.tsx +80 -0
  325. package/src/explorer/expansion.ts +47 -0
  326. package/src/explorer/table-statements.ts +18 -0
  327. package/src/explorer/tree.ts +453 -0
  328. package/src/explorer/use-explorer-loads.ts +157 -0
  329. package/src/explorer/use-stored-expansion.ts +66 -0
  330. package/src/grid/CellEditor.tsx +53 -0
  331. package/src/grid/CopyAsMenu.tsx +33 -0
  332. package/src/grid/DataGrid.tsx +871 -0
  333. package/src/grid/EnumPicker.tsx +108 -0
  334. package/src/grid/GridHeaderCell.tsx +243 -0
  335. package/src/grid/RecordView.tsx +293 -0
  336. package/src/grid/ValueDock.tsx +52 -0
  337. package/src/grid/aggregates.ts +94 -0
  338. package/src/grid/cell-range.ts +26 -0
  339. package/src/grid/column-layout.ts +71 -0
  340. package/src/grid/column-selection.ts +42 -0
  341. package/src/grid/column-view.ts +35 -0
  342. package/src/grid/copy-formats.ts +108 -0
  343. package/src/grid/display.ts +109 -0
  344. package/src/grid/edit-value.ts +60 -0
  345. package/src/grid/enum-type.ts +62 -0
  346. package/src/grid/focused-value.ts +23 -0
  347. package/src/grid/layout.ts +91 -0
  348. package/src/grid/navigation.ts +74 -0
  349. package/src/grid/row-selection.ts +35 -0
  350. package/src/grid/sort.ts +12 -0
  351. package/src/grid/types.ts +59 -0
  352. package/src/host/helper-path.ts +41 -0
  353. package/src/host/host.ts +456 -0
  354. package/src/host/index.ts +5 -0
  355. package/src/host/spawn.ts +124 -0
  356. package/src/host/types.ts +46 -0
  357. package/src/host/validate.ts +402 -0
  358. package/src/index.ts +37 -0
  359. package/src/locales/en.json +577 -0
  360. package/src/locales/nl.json +577 -0
  361. package/src/locales.ts +18 -0
  362. package/src/protocol/connection.ts +86 -0
  363. package/src/protocol/errors.ts +38 -0
  364. package/src/protocol/index.ts +33 -0
  365. package/src/protocol/messages.ts +168 -0
  366. package/src/protocol/schema.ts +76 -0
  367. package/src/protocol/values.ts +52 -0
  368. package/src/sql-split.ts +220 -0
  369. package/src/sql.ts +152 -0
  370. package/src/structure/StructureView.tsx +269 -0
  371. package/src/structure/structure-text.ts +4 -0
  372. package/src/table/CommandField.tsx +318 -0
  373. package/src/table/ImportDialog.tsx +168 -0
  374. package/src/table/TableStatusBar.tsx +91 -0
  375. package/src/table/TableToolbar.tsx +217 -0
  376. package/src/table/TableView.tsx +880 -0
  377. package/src/table/command-field.ts +285 -0
  378. package/src/table/grid-rows.ts +80 -0
  379. package/src/table/import-mapping.ts +37 -0
  380. package/src/table/layout-store.ts +62 -0
  381. package/src/table/paging.ts +33 -0
  382. package/src/table/pending.ts +143 -0
  383. package/src/table/references.ts +38 -0
  384. package/src/table/useLoaded.ts +58 -0
  385. package/src/table/useStoredLayout.ts +53 -0
  386. package/src/table/useTableTransfer.ts +187 -0
  387. package/src/testing/fake.ts +533 -0
  388. package/src/testing/index.ts +1 -0
  389. package/src/use-popup-press.ts +27 -0
  390. package/src/use-schema-change.ts +19 -0
  391. package/src/use-stable-callback.ts +12 -0
  392. package/src/value/ValuePanel.tsx +254 -0
  393. package/src/value/draft.ts +72 -0
  394. package/src/value/hex.ts +62 -0
  395. package/src/value/json.ts +74 -0
  396. package/src/value/views.ts +68 -0
  397. package/src/workbench/DatabaseWorkbench.tsx +348 -0
  398. package/src/workbench/DesignerTab.tsx +37 -0
  399. package/src/workbench/TableTab.tsx +27 -0
  400. package/src/workbench/tabs.ts +184 -0
@@ -0,0 +1,5 @@
1
+ export type { ConnectionConfig, DockerContainer, DockerTunnel, Engine, MysqlConnectionConfig, MysqlTlsMode, ServerInfo, SqliteConnectionConfig, SshTunnel, Tunnel } from './connection.ts';
2
+ export type { DatabaseError, DatabaseErrorCode } from './errors.ts';
3
+ export { PROTOCOL_VERSION, type DatabaseMethod, type DatabaseMethods, type DatabaseParams, type DatabaseRequest, type DatabaseResponse, type DatabaseResult, type ExportSource, type FileFormat, type HelperReady, type RowChange, type RowKey, type RowsResult, type StatementResult } from './messages.ts';
4
+ export type { ColumnInfo, ForeignKeyInfo, IndexInfo, ResultColumn, SchemaInfo, TableInfo, TableKind, TableStructure } from './schema.ts';
5
+ export { valueOfCell, type BinaryCell, type BinaryValue, type Cell, type EditValue, type LongTextCell, type Value, type ValueKind } from './values.ts';
@@ -0,0 +1,3 @@
1
+ /* The messages between a page, the host in the app's backend and the helper. Types and pure helpers only, so a page, a preload and a backend can all read it. */
2
+ export { PROTOCOL_VERSION } from './messages.js';
3
+ export { valueOfCell } from './values.js';
@@ -0,0 +1,250 @@
1
+ import type { ConnectionConfig, DockerContainer, ServerInfo } from './connection.ts';
2
+ import type { DatabaseError } from './errors.ts';
3
+ import type { ResultColumn, SchemaInfo, TableInfo, TableStructure } from './schema.ts';
4
+ import type { Cell, EditValue, Value } from './values.ts';
5
+ export declare const PROTOCOL_VERSION = 2;
6
+ export type RowKey = Readonly<Record<string, Value>>;
7
+ export type RowChange = {
8
+ readonly kind: 'insert';
9
+ readonly values: Readonly<Record<string, EditValue>>;
10
+ } | {
11
+ readonly kind: 'update';
12
+ readonly key: RowKey;
13
+ readonly values: Readonly<Record<string, EditValue>>;
14
+ } | {
15
+ readonly kind: 'delete';
16
+ readonly key: RowKey;
17
+ };
18
+ export interface RowsResult {
19
+ readonly columns: readonly ResultColumn[];
20
+ readonly rows: readonly (readonly Cell[])[];
21
+ readonly hasMore: boolean;
22
+ readonly elapsedMs: number;
23
+ }
24
+ export type StatementResult = ({
25
+ readonly kind: 'rows';
26
+ readonly sql: string;
27
+ } & RowsResult) | {
28
+ readonly kind: 'done';
29
+ readonly sql: string;
30
+ readonly affected: number;
31
+ readonly lastInsertId: number | string | null;
32
+ readonly elapsedMs: number;
33
+ } | {
34
+ readonly kind: 'error';
35
+ readonly sql: string;
36
+ readonly error: DatabaseError;
37
+ readonly elapsedMs: number;
38
+ };
39
+ export type FileFormat = 'csv' | 'tsv' | 'json' | 'sql';
40
+ export type ExportSource = {
41
+ readonly kind: 'table';
42
+ readonly schema: string;
43
+ readonly table: string;
44
+ readonly where?: string;
45
+ readonly orderBy?: string;
46
+ } | {
47
+ readonly kind: 'query';
48
+ readonly sql: string;
49
+ readonly schema?: string;
50
+ };
51
+ interface TableTarget {
52
+ readonly session: string;
53
+ readonly schema: string;
54
+ readonly table: string;
55
+ }
56
+ export interface DatabaseMethods {
57
+ open: {
58
+ params: {
59
+ readonly connection: ConnectionConfig;
60
+ };
61
+ result: {
62
+ readonly session: string;
63
+ readonly server: ServerInfo;
64
+ };
65
+ };
66
+ close: {
67
+ params: {
68
+ readonly session: string;
69
+ };
70
+ result: null;
71
+ };
72
+ test: {
73
+ params: {
74
+ readonly connection: ConnectionConfig;
75
+ };
76
+ result: {
77
+ readonly server: ServerInfo;
78
+ };
79
+ };
80
+ schemas: {
81
+ params: {
82
+ readonly session: string;
83
+ };
84
+ result: {
85
+ readonly schemas: readonly SchemaInfo[];
86
+ };
87
+ };
88
+ tables: {
89
+ params: {
90
+ readonly session: string;
91
+ readonly schema: string;
92
+ };
93
+ result: {
94
+ readonly tables: readonly TableInfo[];
95
+ };
96
+ };
97
+ structure: {
98
+ params: TableTarget;
99
+ result: TableStructure;
100
+ };
101
+ rows: {
102
+ params: TableTarget & {
103
+ readonly where?: string;
104
+ readonly orderBy?: string;
105
+ readonly offset: number;
106
+ readonly limit: number;
107
+ readonly cellLimit?: number;
108
+ };
109
+ result: RowsResult;
110
+ };
111
+ count: {
112
+ params: TableTarget & {
113
+ readonly where?: string;
114
+ };
115
+ result: {
116
+ readonly count: number;
117
+ };
118
+ };
119
+ cell: {
120
+ params: TableTarget & {
121
+ readonly key: RowKey;
122
+ readonly column: string;
123
+ };
124
+ result: {
125
+ readonly value: Value;
126
+ };
127
+ };
128
+ apply: {
129
+ params: TableTarget & {
130
+ readonly changes: readonly RowChange[];
131
+ };
132
+ result: {
133
+ readonly affected: number;
134
+ };
135
+ };
136
+ execute: {
137
+ params: {
138
+ readonly session: string;
139
+ readonly sql: string;
140
+ readonly schema?: string;
141
+ readonly limit?: number;
142
+ readonly cellLimit?: number;
143
+ };
144
+ result: {
145
+ readonly results: readonly StatementResult[];
146
+ readonly inTransaction: boolean;
147
+ };
148
+ };
149
+ page: {
150
+ params: {
151
+ readonly session: string;
152
+ readonly sql: string;
153
+ readonly schema?: string;
154
+ readonly offset: number;
155
+ readonly limit: number;
156
+ readonly cellLimit?: number;
157
+ };
158
+ result: RowsResult;
159
+ };
160
+ transaction: {
161
+ params: {
162
+ readonly session: string;
163
+ readonly action: 'begin' | 'commit' | 'rollback';
164
+ };
165
+ result: {
166
+ readonly active: boolean;
167
+ };
168
+ };
169
+ export: {
170
+ params: {
171
+ readonly session: string;
172
+ readonly source: ExportSource;
173
+ readonly format: FileFormat;
174
+ readonly path: string;
175
+ readonly header?: boolean;
176
+ readonly tableName?: string;
177
+ };
178
+ result: {
179
+ readonly rows: number;
180
+ readonly bytes: number;
181
+ readonly elapsedMs: number;
182
+ };
183
+ };
184
+ sample: {
185
+ params: {
186
+ readonly path: string;
187
+ readonly format: 'csv' | 'tsv';
188
+ readonly header: boolean;
189
+ readonly limit?: number;
190
+ };
191
+ result: {
192
+ readonly columns: readonly string[];
193
+ readonly rows: readonly (readonly string[])[];
194
+ };
195
+ };
196
+ import: {
197
+ params: TableTarget & {
198
+ readonly path: string;
199
+ readonly format: 'csv' | 'tsv';
200
+ readonly header: boolean;
201
+ readonly columns: readonly (string | null)[];
202
+ };
203
+ result: {
204
+ readonly rows: number;
205
+ readonly elapsedMs: number;
206
+ };
207
+ };
208
+ discover: {
209
+ params: {
210
+ readonly kind: 'docker';
211
+ readonly context?: string;
212
+ };
213
+ result: {
214
+ readonly containers: readonly DockerContainer[];
215
+ };
216
+ };
217
+ cancel: {
218
+ params: {
219
+ readonly request: string;
220
+ };
221
+ result: {
222
+ readonly cancelled: boolean;
223
+ };
224
+ };
225
+ }
226
+ export type DatabaseMethod = keyof DatabaseMethods;
227
+ export type DatabaseParams<M extends DatabaseMethod> = DatabaseMethods[M]['params'];
228
+ export type DatabaseResult<M extends DatabaseMethod> = DatabaseMethods[M]['result'];
229
+ export type DatabaseRequest<M extends DatabaseMethod = DatabaseMethod> = {
230
+ [K in M]: {
231
+ readonly id: string;
232
+ readonly method: K;
233
+ readonly params: DatabaseParams<K>;
234
+ };
235
+ }[M];
236
+ export type DatabaseResponse<M extends DatabaseMethod = DatabaseMethod> = {
237
+ readonly id: string;
238
+ readonly ok: true;
239
+ readonly result: DatabaseResult<M>;
240
+ } | {
241
+ readonly id: string;
242
+ readonly ok: false;
243
+ readonly error: DatabaseError;
244
+ };
245
+ export interface HelperReady {
246
+ readonly event: 'ready';
247
+ readonly protocol: number;
248
+ readonly version: string;
249
+ }
250
+ export {};
@@ -0,0 +1,2 @@
1
+ /* Raised whenever a message changes shape, so a host refuses a helper from another release. */
2
+ export const PROTOCOL_VERSION = 2;
@@ -0,0 +1,53 @@
1
+ import type { ValueKind } from './values.ts';
2
+ export interface SchemaInfo {
3
+ readonly name: string;
4
+ readonly system: boolean;
5
+ }
6
+ export type TableKind = 'table' | 'view';
7
+ export interface TableInfo {
8
+ readonly name: string;
9
+ readonly kind: TableKind;
10
+ readonly rowEstimate: number | null;
11
+ readonly comment: string | null;
12
+ }
13
+ export interface ColumnInfo {
14
+ readonly name: string;
15
+ readonly type: string;
16
+ readonly kind: ValueKind;
17
+ readonly nullable: boolean;
18
+ readonly defaultValue: string | null;
19
+ readonly autoIncrement: boolean;
20
+ readonly generated: boolean;
21
+ readonly comment: string | null;
22
+ }
23
+ export interface IndexInfo {
24
+ readonly name: string;
25
+ readonly columns: readonly string[];
26
+ readonly unique: boolean;
27
+ readonly primary: boolean;
28
+ }
29
+ export interface ForeignKeyInfo {
30
+ readonly name: string | null;
31
+ readonly columns: readonly string[];
32
+ readonly referencedSchema: string;
33
+ readonly referencedTable: string;
34
+ readonly referencedColumns: readonly string[];
35
+ readonly onUpdate: string | null;
36
+ readonly onDelete: string | null;
37
+ }
38
+ export interface TableStructure {
39
+ readonly schema: string;
40
+ readonly name: string;
41
+ readonly kind: TableKind;
42
+ readonly columns: readonly ColumnInfo[];
43
+ readonly primaryKey: readonly string[];
44
+ readonly rowKey: readonly string[] | null;
45
+ readonly indexes: readonly IndexInfo[];
46
+ readonly foreignKeys: readonly ForeignKeyInfo[];
47
+ readonly ddl: string | null;
48
+ }
49
+ export interface ResultColumn {
50
+ readonly name: string;
51
+ readonly type: string;
52
+ readonly kind: ValueKind;
53
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ export interface BinaryValue {
2
+ readonly kind: 'binary';
3
+ readonly hex: string;
4
+ }
5
+ export type Value = null | boolean | number | string | BinaryValue;
6
+ export type EditValue = Value | {
7
+ readonly kind: 'default';
8
+ };
9
+ export interface BinaryCell {
10
+ readonly kind: 'binary';
11
+ readonly hex: string;
12
+ readonly length: number;
13
+ }
14
+ export interface LongTextCell {
15
+ readonly kind: 'longText';
16
+ readonly preview: string;
17
+ readonly length: number;
18
+ }
19
+ export type Cell = null | boolean | number | string | BinaryCell | LongTextCell;
20
+ export type ValueKind = 'integer' | 'decimal' | 'float' | 'boolean' | 'text' | 'binary' | 'date' | 'time' | 'datetime' | 'json' | 'other';
21
+ export declare const valueOfCell: (cell: Cell) => Value | undefined;
@@ -0,0 +1,15 @@
1
+ /*
2
+ * Every value crosses as JSON, so an app can carry it over any channel it already has. An integer
3
+ * beyond `Number.MAX_SAFE_INTEGER`, a decimal, a date and a time arrive as the text the server
4
+ * writes for them, so nothing is rounded on the way.
5
+ */
6
+ /* The value a row key or an update can use for a cell, or `undefined` when the cell is only a preview. */
7
+ export const valueOfCell = (cell) => {
8
+ if (cell === null || typeof cell !== 'object') {
9
+ return cell;
10
+ }
11
+ if (cell.kind === 'binary') {
12
+ return cell.hex.length === cell.length * 2 ? { kind: 'binary', hex: cell.hex } : undefined;
13
+ }
14
+ return undefined;
15
+ };
@@ -0,0 +1,15 @@
1
+ import type { Engine } from './protocol/index.ts';
2
+ export interface SqlToken {
3
+ readonly kind: 'word' | 'quoted' | 'comment' | 'punct' | 'semicolon';
4
+ readonly start: number;
5
+ readonly end: number;
6
+ }
7
+ export interface SqlStatement {
8
+ readonly text: string;
9
+ readonly start: number;
10
+ readonly end: number;
11
+ }
12
+ export declare const tokenize: (text: string, engine: Engine) => SqlToken[];
13
+ export declare const splitStatements: (text: string, engine: Engine) => SqlStatement[];
14
+ export declare const statementAt: (text: string, offset: number, engine: Engine) => SqlStatement | null;
15
+ export declare const firstKeyword: (text: string, engine: Engine) => string;
@@ -0,0 +1,201 @@
1
+ const WHITESPACE = /\s/;
2
+ const isWordCode = (code) => (code >= 48 && code <= 57) || (code >= 65 && code <= 90) || (code >= 97 && code <= 122) || code === 95 || code === 36 || code >= 128;
3
+ const lineEnd = (text, at) => {
4
+ const newline = text.indexOf('\n', at);
5
+ return newline === -1 ? text.length : newline + 1;
6
+ };
7
+ /* MySQL wants whitespace after the dashes; SQLite does not. */
8
+ const startsLineComment = (text, at, engine) => {
9
+ if (text[at] === '-' && text[at + 1] === '-') {
10
+ if (engine === 'sqlite') {
11
+ return true;
12
+ }
13
+ const next = text[at + 2];
14
+ return next === undefined || WHITESPACE.test(next) || next.charCodeAt(0) < 32;
15
+ }
16
+ return text[at] === '#' && engine === 'mysql';
17
+ };
18
+ /* The index after the closing quote, or the end of the text for one that never closes. */
19
+ const quotedEnd = (text, at, engine) => {
20
+ const quote = text[at];
21
+ const backslashEscapes = engine === 'mysql' && quote !== '`';
22
+ let i = at + 1;
23
+ while (i < text.length) {
24
+ if (backslashEscapes && text[i] === '\\') {
25
+ i += 2;
26
+ }
27
+ else if (text[i] === quote) {
28
+ if (text[i + 1] === quote) {
29
+ i += 2;
30
+ }
31
+ else {
32
+ return i + 1;
33
+ }
34
+ }
35
+ else {
36
+ i += 1;
37
+ }
38
+ }
39
+ return text.length;
40
+ };
41
+ /* Reads SQL the way the helper's splitter does: quotes, comments and escapes decide what a semicolon is. */
42
+ export const tokenize = (text, engine) => {
43
+ const tokens = [];
44
+ let i = 0;
45
+ while (i < text.length) {
46
+ const char = text[i];
47
+ const code = text.charCodeAt(i);
48
+ if (WHITESPACE.test(char)) {
49
+ i += 1;
50
+ }
51
+ else if (char === "'" || char === '"' || char === '`') {
52
+ const end = quotedEnd(text, i, engine);
53
+ tokens.push({ kind: 'quoted', start: i, end });
54
+ i = end;
55
+ }
56
+ else if (char === '[' && engine === 'sqlite') {
57
+ const close = text.indexOf(']', i);
58
+ const end = close === -1 ? text.length : close + 1;
59
+ tokens.push({ kind: 'quoted', start: i, end });
60
+ i = end;
61
+ }
62
+ else if (startsLineComment(text, i, engine)) {
63
+ const end = lineEnd(text, i);
64
+ tokens.push({ kind: 'comment', start: i, end });
65
+ i = end;
66
+ }
67
+ else if (char === '/' && text[i + 1] === '*') {
68
+ const close = text.indexOf('*/', i + 2);
69
+ const end = close === -1 ? text.length : close + 2;
70
+ tokens.push({ kind: 'comment', start: i, end });
71
+ i = end;
72
+ }
73
+ else if (char === ';') {
74
+ tokens.push({ kind: 'semicolon', start: i, end: i + 1 });
75
+ i += 1;
76
+ }
77
+ else if (isWordCode(code)) {
78
+ let end = i + 1;
79
+ while (end < text.length && isWordCode(text.charCodeAt(end))) {
80
+ end += 1;
81
+ }
82
+ tokens.push({ kind: 'word', start: i, end });
83
+ i = end;
84
+ }
85
+ else {
86
+ tokens.push({ kind: 'punct', start: i, end: i + 1 });
87
+ i += 1;
88
+ }
89
+ }
90
+ return tokens;
91
+ };
92
+ /* Follows `CREATE TRIGGER ... BEGIN ... END` so the semicolons inside its body do not end the statement. */
93
+ class TriggerState {
94
+ leading = [];
95
+ inBody = false;
96
+ caseDepth = 0;
97
+ closed = false;
98
+ word(word) {
99
+ const upper = word.toUpperCase();
100
+ if (this.leading.length < 3) {
101
+ this.leading.push(upper);
102
+ }
103
+ if (!this.isTrigger()) {
104
+ return;
105
+ }
106
+ if (upper === 'BEGIN' && !this.inBody) {
107
+ this.inBody = true;
108
+ }
109
+ else if (upper === 'CASE' && this.inBody) {
110
+ this.caseDepth += 1;
111
+ }
112
+ else if (upper === 'END' && this.inBody) {
113
+ if (this.caseDepth > 0) {
114
+ this.caseDepth -= 1;
115
+ }
116
+ else {
117
+ this.closed = true;
118
+ }
119
+ }
120
+ }
121
+ splitsHere() {
122
+ return !this.isTrigger() || !this.inBody || this.closed;
123
+ }
124
+ isTrigger() {
125
+ const [first, second, third] = this.leading;
126
+ return first === 'CREATE' && (second === 'TRIGGER' || ((second === 'TEMP' || second === 'TEMPORARY') && third === 'TRIGGER'));
127
+ }
128
+ }
129
+ const trimmed = (text, from, to) => {
130
+ let start = from;
131
+ let end = to;
132
+ while (start < end && WHITESPACE.test(text[start])) {
133
+ start += 1;
134
+ }
135
+ while (end > start && WHITESPACE.test(text[end - 1])) {
136
+ end -= 1;
137
+ }
138
+ return { text: text.slice(start, end), start, end };
139
+ };
140
+ /*
141
+ * Splits a script at the semicolons outside strings, quoted names and comments, with the rules of the
142
+ * helper's splitter (`helper/src/splitter.rs`). A statement of nothing but comments is dropped, and
143
+ * MySQL's client-side `DELIMITER` command is not understood.
144
+ */
145
+ export const splitStatements = (text, engine) => {
146
+ const statements = [];
147
+ let start = 0;
148
+ let hasContent = false;
149
+ let trigger = new TriggerState();
150
+ for (const token of tokenize(text, engine)) {
151
+ if (token.kind === 'semicolon') {
152
+ if (trigger.splitsHere()) {
153
+ if (hasContent) {
154
+ statements.push(trimmed(text, start, token.start));
155
+ }
156
+ start = token.end;
157
+ hasContent = false;
158
+ trigger = new TriggerState();
159
+ }
160
+ }
161
+ else if (token.kind !== 'comment') {
162
+ hasContent = true;
163
+ if (token.kind === 'word' && engine === 'sqlite') {
164
+ trigger.word(text.slice(token.start, token.end));
165
+ }
166
+ }
167
+ }
168
+ if (hasContent) {
169
+ statements.push(trimmed(text, start, text.length));
170
+ }
171
+ return statements;
172
+ };
173
+ /*
174
+ * The statement the caret belongs to. A caret in the gap after a statement belongs to it while it
175
+ * stays on that line (so right after the semicolon is still that statement), and to the next one
176
+ * from the next line on. `null` when the text holds no statement.
177
+ */
178
+ export const statementAt = (text, offset, engine) => {
179
+ const statements = splitStatements(text, engine);
180
+ for (const [index, statement] of statements.entries()) {
181
+ if (offset >= statement.start && offset <= statement.end) {
182
+ return statement;
183
+ }
184
+ const next = statements[index + 1];
185
+ if (offset > statement.end && (next === undefined || offset < next.start)) {
186
+ const gap = text.slice(statement.end, offset);
187
+ return gap.includes('\n') && next !== undefined ? next : statement;
188
+ }
189
+ }
190
+ return statements[0] ?? null;
191
+ };
192
+ /* The first word of a statement in upper case, after comments and opening parentheses. */
193
+ export const firstKeyword = (text, engine) => {
194
+ for (const token of tokenize(text, engine)) {
195
+ if (token.kind === 'comment' || (token.kind === 'punct' && text[token.start] === '(')) {
196
+ continue;
197
+ }
198
+ return token.kind === 'word' ? (/^[A-Za-z]*/.exec(text.slice(token.start, token.end))?.[0] ?? '').toUpperCase() : '';
199
+ }
200
+ return '';
201
+ };
package/dist/sql.d.ts ADDED
@@ -0,0 +1,29 @@
1
+ import type { Cell, Engine, Value, ValueKind } from './protocol/index.ts';
2
+ export type SortDirection = 'asc' | 'desc';
3
+ export interface ColumnSort {
4
+ readonly column: string;
5
+ readonly direction: SortDirection;
6
+ }
7
+ export interface SqlTarget {
8
+ readonly engine: Engine;
9
+ readonly table: string;
10
+ readonly schema?: string;
11
+ }
12
+ export type LiteralValue = Cell | Value | {
13
+ readonly kind: 'default';
14
+ };
15
+ export declare const quoteIdentifier: (engine: Engine, name: string) => string;
16
+ export declare const qualifiedName: (target: SqlTarget) => string;
17
+ export declare const sqlLiteral: (engine: Engine, value: LiteralValue, kind?: ValueKind) => string;
18
+ export declare const equalsCondition: (engine: Engine, column: string, value: LiteralValue, kind?: ValueKind) => string;
19
+ export declare const notEqualsCondition: (engine: Engine, column: string, value: LiteralValue, kind?: ValueKind) => string;
20
+ export interface ColumnMatch {
21
+ readonly column: string;
22
+ readonly value: LiteralValue;
23
+ readonly kind?: ValueKind;
24
+ }
25
+ export declare const matchCondition: (engine: Engine, matches: readonly ColumnMatch[]) => string;
26
+ export declare const orderByClause: (engine: Engine, sorts: readonly ColumnSort[]) => string;
27
+ export declare const parseOrderBy: (engine: Engine, text: string, columns: readonly string[]) => ColumnSort[] | null;
28
+ export declare const parseOrderByLoose: (engine: Engine, text: string) => ColumnSort[] | null;
29
+ export declare const findColumn: (engine: Engine, word: string, columns: readonly string[]) => string | undefined;