alinea 2.0.0-preview.7 → 2.0.0-preview.8

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 (283) hide show
  1. package/dist/.init/content/pages/welcome.json +1 -1
  2. package/dist/LICENSES.md +120 -120
  3. package/dist/adapter/next/cms.d.ts +18 -4
  4. package/dist/adapter/next/cms.js +125 -36
  5. package/dist/adapter/next/handler.d.ts +5 -1
  6. package/dist/adapter/next/handler.js +14 -7
  7. package/dist/adapter/next/node.d.ts +5 -0
  8. package/dist/adapter/next/node.js +16 -0
  9. package/dist/adapter/next/previews.d.ts +4 -1
  10. package/dist/adapter/next/previews.js +13 -1
  11. package/dist/adapter/next/renderStats.d.ts +24 -0
  12. package/dist/adapter/next/renderStats.js +74 -0
  13. package/dist/adapter/next/syncCheck.d.ts +8 -2
  14. package/dist/adapter/next/syncCheck.js +3 -3
  15. package/dist/adapter/next/with-alinea.js +0 -18
  16. package/dist/backend/Handler.d.ts +2 -2
  17. package/dist/backend/Handler.js +33 -12
  18. package/dist/backend/api/CreateBackend.js +15 -3
  19. package/dist/backend/api/DatabaseApi.js +22 -135
  20. package/dist/backend/api/database.js +15 -3
  21. package/dist/backend/resolver/ParsePreview.d.ts +2 -2
  22. package/dist/backend/router/NodeHandler.js +2 -0
  23. package/dist/backend/store/GeneratedDatabase.d.ts +5 -0
  24. package/dist/backend/store/GeneratedDatabase.js +31 -0
  25. package/dist/backend/store/GeneratedDatabaseNode.d.ts +4 -0
  26. package/dist/backend/store/GeneratedDatabaseNode.js +35 -0
  27. package/dist/backend/util/ORM.js +4 -2
  28. package/dist/bundled.d.ts +1470 -442
  29. package/dist/chunks/bun-sqlite-ZZDB7YQQ.js +18 -0
  30. package/dist/chunks/chunk-2BJ2IFQM.js +1085 -0
  31. package/dist/chunks/chunk-2PIFHEYR.js +364 -0
  32. package/dist/chunks/{chunk-X47OVDF3.js → chunk-2U43BB6P.js} +356 -1000
  33. package/dist/chunks/chunk-76VMZTLN.js +55 -0
  34. package/dist/chunks/chunk-A42DP5T7.js +94 -0
  35. package/dist/chunks/chunk-ATF42T2B.js +35 -0
  36. package/dist/chunks/{chunk-NWQXN4SB.js → chunk-ETBQTP2S.js} +40 -29
  37. package/dist/chunks/chunk-IL7FJQAY.js +94 -0
  38. package/dist/chunks/chunk-K62JP6HR.js +22 -0
  39. package/dist/chunks/chunk-K7LHQXI4.js +103 -0
  40. package/dist/chunks/chunk-M7KDJEGH.js +495 -0
  41. package/dist/chunks/chunk-N47Y62CI.js +396 -0
  42. package/dist/chunks/chunk-NLZLRQ5U.js +100 -0
  43. package/dist/chunks/chunk-QBPYWU6C.js +24 -0
  44. package/dist/chunks/{chunk-6P4UVRPH.js → chunk-RWWYUNVX.js} +2 -1
  45. package/dist/chunks/chunk-TFMUSWGG.js +605 -0
  46. package/dist/chunks/{chunk-I4GC3E65.js → chunk-UPY2RUZF.js} +0 -1
  47. package/dist/chunks/chunk-XCZXR3C2.js +112 -0
  48. package/dist/chunks/chunk-XTWYBWP2.js +81 -0
  49. package/dist/chunks/node-sqlite-7CSGL27V.js +18 -0
  50. package/dist/cli/Generate.js +74 -64
  51. package/dist/cli/Serve.js +1 -1
  52. package/dist/cli/bin.js +2 -1
  53. package/dist/cli/generate/CopyStaticFiles.js +17 -14
  54. package/dist/cli/generate/DevDB.d.ts +22 -5
  55. package/dist/cli/generate/DevDB.js +136 -24
  56. package/dist/cli/serve/CreateLocalServer.js +22 -4
  57. package/dist/cli/serve/LiveReload.d.ts +1 -1
  58. package/dist/cli/serve/LiveReload.js +3 -0
  59. package/dist/cloud/CloudRemote.js +2 -1
  60. package/dist/components/Calendar.js +6 -6
  61. package/dist/components/Checkbox.js +3 -3
  62. package/dist/components/ColorSwatchPicker.js +2 -2
  63. package/dist/components/ComboBox.js +9 -9
  64. package/dist/components/DateField.js +1 -1
  65. package/dist/components/DatePicker.js +6 -6
  66. package/dist/components/DateRangePicker.js +6 -6
  67. package/dist/components/Disclosure.js +9 -9
  68. package/dist/components/Label.js +5 -5
  69. package/dist/components/List.js +33 -33
  70. package/dist/components/Menu.js +3 -3
  71. package/dist/components/Modal.js +3 -3
  72. package/dist/components/MultipleSelect.js +25 -25
  73. package/dist/components/NumberField.js +6 -6
  74. package/dist/components/ProgressCircle.js +3 -3
  75. package/dist/components/RadioGroup.js +2 -2
  76. package/dist/components/SearchField.js +5 -5
  77. package/dist/components/Select.js +7 -7
  78. package/dist/components/Surface.js +2 -2
  79. package/dist/components/Table.js +6 -6
  80. package/dist/components/Tabs.js +2 -2
  81. package/dist/components/TextField.js +6 -6
  82. package/dist/components/Toggle.js +2 -2
  83. package/dist/components/Toolbar.js +2 -2
  84. package/dist/components/Tooltip.js +4 -4
  85. package/dist/components/Tree.d.ts +2 -1
  86. package/dist/components/Tree.js +5 -5
  87. package/dist/core/Document.js +15 -3
  88. package/dist/core/Entry.d.ts +3 -0
  89. package/dist/core/Entry.js +4 -0
  90. package/dist/core/EntrySeed.d.ts +19 -0
  91. package/dist/core/EntrySeed.js +136 -0
  92. package/dist/core/Field.d.ts +7 -0
  93. package/dist/core/Field.js +4 -0
  94. package/dist/core/Filter.d.ts +40 -2
  95. package/dist/core/Filter.js +145 -0
  96. package/dist/core/Graph.d.ts +9 -0
  97. package/dist/core/ListRow.d.ts +1 -0
  98. package/dist/core/ListRow.js +1 -0
  99. package/dist/core/Reference.d.ts +1 -0
  100. package/dist/core/Root.js +1 -1
  101. package/dist/core/Scope.d.ts +2 -0
  102. package/dist/core/Scope.js +16 -1
  103. package/dist/core/Type.d.ts +2 -1
  104. package/dist/core/Type.js +13 -1
  105. package/dist/core/db/EntryAliases.js +1 -11
  106. package/dist/core/db/EntryReference.d.ts +0 -6
  107. package/dist/core/db/IndexEvent.d.ts +2 -1
  108. package/dist/core/db/IndexEvent.js +11 -3
  109. package/dist/core/db/LinkResolver.d.ts +6 -6
  110. package/dist/core/db/LinkResolver.js +0 -52
  111. package/dist/core/db/LocalStore.d.ts +25 -0
  112. package/dist/core/field/ListField.js +19 -0
  113. package/dist/core/field/RecordField.js +8 -0
  114. package/dist/core/field/RichTextField.js +42 -0
  115. package/dist/core/field/UnionField.js +8 -0
  116. package/dist/core/source/FSSource.d.ts +14 -2
  117. package/dist/core/source/FSSource.js +58 -13
  118. package/dist/core/source/GitUtils.d.ts +4 -0
  119. package/dist/core/source/GitUtils.js +9 -10
  120. package/dist/core/source/GithubSource.js +22 -11
  121. package/dist/core/source/IndexedDBSource.d.ts +2 -1
  122. package/dist/core/source/IndexedDBSource.js +67 -53
  123. package/dist/core/source/MemorySource.js +5 -3
  124. package/dist/core/source/OverlaySource.d.ts +5 -2
  125. package/dist/core/source/OverlaySource.js +31 -3
  126. package/dist/core/source/Source.d.ts +3 -0
  127. package/dist/core/source/Source.js +15 -2
  128. package/dist/core/source/Tree.d.ts +10 -7
  129. package/dist/core/source/Tree.js +118 -70
  130. package/dist/core/source/Utils.js +6 -3
  131. package/dist/core/util/Arrays.d.ts +1 -0
  132. package/dist/core/util/Arrays.js +10 -0
  133. package/dist/core/util/Async.d.ts +7 -0
  134. package/dist/core/util/Async.js +15 -0
  135. package/dist/core/util/Checks.js +1 -1
  136. package/dist/core/util/EntryFilenames.d.ts +22 -1
  137. package/dist/core/util/EntryFilenames.js +56 -2
  138. package/dist/core/util/IndexedDB.d.ts +4 -0
  139. package/dist/core/util/IndexedDB.js +20 -0
  140. package/dist/core/util/Paths.js +5 -1
  141. package/dist/dashboard/App.js +3 -3
  142. package/dist/dashboard/ViewKeys.d.ts +1 -0
  143. package/dist/dashboard/ViewKeys.js +1 -0
  144. package/dist/dashboard/app/AccessDenied.js +4 -4
  145. package/dist/dashboard/app/ActivityStatus.js +11 -11
  146. package/dist/dashboard/app/AppShell.js +2 -2
  147. package/dist/dashboard/app/AuthView.js +9 -9
  148. package/dist/dashboard/app/Badge.js +2 -2
  149. package/dist/dashboard/app/CompactField.js +10 -10
  150. package/dist/dashboard/app/DashboardErrorBoundary.js +6 -6
  151. package/dist/dashboard/app/EntryFields.js +2 -2
  152. package/dist/dashboard/app/EntryHeader.js +10 -10
  153. package/dist/dashboard/app/EntryReferences.js +8 -8
  154. package/dist/dashboard/app/EntrySidebar.js +8 -8
  155. package/dist/dashboard/app/EntrySidebarPreview.js +11 -11
  156. package/dist/dashboard/app/EntryTranslationBanner.js +6 -6
  157. package/dist/dashboard/app/Explorer.js +44 -44
  158. package/dist/dashboard/app/ExplorerCards.js +30 -30
  159. package/dist/dashboard/app/ExplorerFileCard.js +17 -17
  160. package/dist/dashboard/app/ExplorerList.js +14 -14
  161. package/dist/dashboard/app/ExplorerModal.js +5 -5
  162. package/dist/dashboard/app/ExplorerTable.js +47 -47
  163. package/dist/dashboard/app/LinkPicker.js +2 -2
  164. package/dist/dashboard/app/LocaleMenu.js +6 -6
  165. package/dist/dashboard/app/SidebarTree.js +76 -40
  166. package/dist/dashboard/app/WorkspaceMenu.js +10 -10
  167. package/dist/dashboard/app/WorkspaceRoots.js +27 -27
  168. package/dist/dashboard/app/editor/FileEditor.js +24 -24
  169. package/dist/dashboard/app/editor/FilePreview.js +6 -6
  170. package/dist/dashboard/app/modals/CreateEntry.js +4 -4
  171. package/dist/dashboard/app/pages/EntryPage.js +15 -15
  172. package/dist/dashboard/app/pages/RootPage.js +3 -3
  173. package/dist/dashboard/app/pages/SplashPage.js +47 -47
  174. package/dist/dashboard/app/pages/UsersPage.js +36 -36
  175. package/dist/dashboard/app/ui/DashboardModal.js +17 -17
  176. package/dist/dashboard/app/ui/Rail.js +4 -4
  177. package/dist/dashboard/atoms/config.d.ts +4 -4
  178. package/dist/dashboard/atoms/entry.d.ts +8 -9
  179. package/dist/dashboard/atoms/entry.js +34 -4
  180. package/dist/dashboard/atoms/explorer.d.ts +2 -0
  181. package/dist/dashboard/atoms/explorer.js +7 -2
  182. package/dist/dashboard/boot/Boot.js +2 -3
  183. package/dist/dashboard/boot/DashboardWorker.d.ts +3 -3
  184. package/dist/dashboard/boot/DashboardWorker.js +78 -27
  185. package/dist/dashboard/boot/LoadWorker.js +2 -3
  186. package/dist/dashboard/icons.d.ts +2 -0
  187. package/dist/dashboard/icons.js +40 -0
  188. package/dist/dashboard/plugins/alineaFixturePlugin.js +14 -3
  189. package/dist/database/BrowserEntryStore.d.ts +30 -0
  190. package/dist/database/BrowserEntryStore.js +168 -0
  191. package/dist/database/DatabaseSource.d.ts +13 -0
  192. package/dist/database/DatabaseSource.js +25 -0
  193. package/dist/database/DatabaseTables.d.ts +38 -0
  194. package/dist/database/DatabaseTables.js +53 -0
  195. package/dist/database/EntryDatabase.d.ts +21 -0
  196. package/dist/database/EntryDatabase.js +138 -0
  197. package/dist/database/EntryLayer.d.ts +93 -0
  198. package/dist/database/EntryLayer.js +459 -0
  199. package/dist/database/EntryStore.d.ts +60 -0
  200. package/dist/database/EntryStore.js +269 -0
  201. package/dist/database/EntryTransaction.d.ts +33 -0
  202. package/dist/database/EntryTransaction.js +889 -0
  203. package/dist/database/EntryUrlAliases.d.ts +2 -0
  204. package/dist/database/EntryUrlAliases.js +69 -0
  205. package/dist/database/LocalDB.d.ts +39 -0
  206. package/dist/database/LocalDB.js +79 -0
  207. package/dist/database/Version.d.ts +9 -0
  208. package/dist/database/Version.js +13 -0
  209. package/dist/database/driver/RuntimeDatabase.d.ts +8 -0
  210. package/dist/database/driver/RuntimeDatabase.js +33 -0
  211. package/dist/database/driver/WasmDatabase.d.ts +8 -0
  212. package/dist/database/driver/WasmDatabase.js +33 -0
  213. package/dist/database/entry/EntryData.d.ts +13 -0
  214. package/dist/database/entry/EntryData.js +51 -0
  215. package/dist/database/entry/EntryTable.d.ts +173 -0
  216. package/dist/database/entry/EntryTable.js +137 -0
  217. package/dist/database/entry/EntryView.d.ts +22 -0
  218. package/dist/database/entry/EntryView.js +106 -0
  219. package/dist/database/query/Condition.d.ts +8 -0
  220. package/dist/database/query/Condition.js +117 -0
  221. package/dist/database/query/EntryQuery.d.ts +43 -0
  222. package/dist/database/query/EntryQuery.js +414 -0
  223. package/dist/database/query/EntryReferences.d.ts +6 -0
  224. package/dist/database/query/EntryReferences.js +68 -0
  225. package/dist/database/query/Relation.d.ts +11 -0
  226. package/dist/database/query/Relation.js +113 -0
  227. package/dist/database/query/ResolveQuery.d.ts +15 -0
  228. package/dist/database/query/ResolveQuery.js +154 -0
  229. package/dist/database/query/Search.d.ts +47 -0
  230. package/dist/database/query/Search.js +169 -0
  231. package/dist/database/sync/Derive.d.ts +8 -0
  232. package/dist/database/sync/Derive.js +270 -0
  233. package/dist/database/sync/EntryParser.d.ts +4 -0
  234. package/dist/database/sync/EntryParser.js +87 -0
  235. package/dist/database/sync/EntrySyncer.d.ts +37 -0
  236. package/dist/database/sync/EntrySyncer.js +117 -0
  237. package/dist/database/sync/Ingest.d.ts +21 -0
  238. package/dist/database/sync/Ingest.js +136 -0
  239. package/dist/database/sync/SyncQueries.d.ts +157 -0
  240. package/dist/database/sync/SyncQueries.js +192 -0
  241. package/dist/field/code/CodeField.view.js +12 -12
  242. package/dist/field/link/LinkField.js +23 -0
  243. package/dist/field/link/LinkField.view.js +41 -40
  244. package/dist/field/list/ListField.view.js +177 -155
  245. package/dist/field/metadata/MetadataField.d.ts +28 -3
  246. package/dist/field/metadata/MetadataField.js +44 -7
  247. package/dist/field/metadata/MetadataField.view.d.ts +5 -0
  248. package/dist/field/metadata/MetadataField.view.js +34 -19
  249. package/dist/field/richtext/RichTextBlock.js +2 -2
  250. package/dist/field/richtext/RichTextDocument.js +4 -3
  251. package/dist/field/richtext/RichTextExtensions.d.ts +1 -1
  252. package/dist/field/richtext/RichTextExtensions.js +32 -28
  253. package/dist/field/richtext/RichTextField.view.js +15 -6
  254. package/dist/field/views.js +2 -0
  255. package/dist/next.cjs +0 -18
  256. package/dist/next.d.ts +4 -3
  257. package/dist/next.edge.d.ts +1 -1
  258. package/dist/next.js +1 -2
  259. package/dist/picker/entry/EntryPicker.js +2 -1
  260. package/dist/picker/url/UrlPicker.js +1 -0
  261. package/dist/preview/widget.d.ts +16 -0
  262. package/dist/preview/widget.js +70 -1
  263. package/dist/query.d.ts +28 -0
  264. package/package.json +2 -1
  265. package/dist/backend/store/GeneratedSource.d.ts +0 -2
  266. package/dist/backend/store/GeneratedSource.js +0 -21
  267. package/dist/chunks/chunk-G6E35DMJ.js +0 -1997
  268. package/dist/core/db/EntryDB.d.ts +0 -19
  269. package/dist/core/db/EntryDB.js +0 -48
  270. package/dist/core/db/EntryIndex.d.ts +0 -143
  271. package/dist/core/db/EntryIndex.js +0 -2773
  272. package/dist/core/db/EntryReferenceIndex.d.ts +0 -21
  273. package/dist/core/db/EntryReferenceIndex.js +0 -131
  274. package/dist/core/db/EntryResolver.d.ts +0 -56
  275. package/dist/core/db/EntryResolver.js +0 -699
  276. package/dist/core/db/EntryTarget.d.ts +0 -5
  277. package/dist/core/db/EntryTransaction.d.ts +0 -31
  278. package/dist/core/db/EntryTransaction.js +0 -956
  279. package/dist/core/db/LocalDB.d.ts +0 -42
  280. package/dist/core/db/LocalDB.js +0 -127
  281. package/dist/core/db/TestDB.d.ts +0 -19
  282. package/dist/core/db/TestDB.js +0 -50
  283. /package/dist/core/db/{EntryTarget.js → LocalStore.js} +0 -0
@@ -1,45 +1,80 @@
1
1
  import {
2
- BatchQuery,
3
- Builder,
4
- Column,
5
- Functions,
6
- JsonColumn,
2
+ connect
3
+ } from "./chunk-A42DP5T7.js";
4
+ import {
5
+ connect as connect2
6
+ } from "./chunk-NLZLRQ5U.js";
7
+ import {
8
+ connect as connect3
9
+ } from "./chunk-IL7FJQAY.js";
10
+ import {
11
+ Dialect,
12
+ Emitter,
13
+ NamedParam,
14
+ ReusedStatement,
15
+ StatementCache,
16
+ ValueParam,
17
+ execTransaction,
18
+ sqliteDialect,
19
+ sqliteDiff
20
+ } from "./chunk-M7KDJEGH.js";
21
+ import {
22
+ AsyncDatabase,
23
+ Batch,
24
+ SyncDatabase,
25
+ txGenerator
26
+ } from "./chunk-N47Y62CI.js";
27
+ import {
7
28
  and,
8
29
  asc,
9
- boolean,
10
- column,
11
- columnConfig,
12
30
  eq,
13
- formatColumn,
14
31
  gt,
15
- integer,
16
32
  isNotNull,
17
33
  isNull,
18
34
  like,
19
35
  not,
20
- oid,
21
36
  or,
37
+ when
38
+ } from "./chunk-XCZXR3C2.js";
39
+ import {
40
+ Column,
41
+ boolean,
42
+ column,
43
+ formatColumn,
44
+ integer,
45
+ oid,
22
46
  primaryKeyColumns,
23
47
  table,
24
- text,
25
- when
26
- } from "./chunk-G6E35DMJ.js";
48
+ tableFields,
49
+ text
50
+ } from "./chunk-TFMUSWGG.js";
51
+ import {
52
+ Field,
53
+ selection
54
+ } from "./chunk-2PIFHEYR.js";
55
+ import {
56
+ Functions
57
+ } from "./chunk-K62JP6HR.js";
58
+ import {
59
+ input
60
+ } from "./chunk-ATF42T2B.js";
27
61
  import {
28
- Sql,
29
- getCreate,
30
62
  getData,
31
- getDrop,
63
+ getField,
32
64
  getQuery,
33
- getResolver,
34
65
  getSelection,
35
66
  getSql,
36
67
  getTable,
37
- hasQuery,
38
- hasSelection,
39
- input,
40
- internalResolver,
68
+ hasField,
69
+ hasSql,
70
+ internalCreate,
71
+ internalData,
72
+ internalDrop,
73
+ internalQuery,
74
+ internalSelection,
75
+ internalTarget,
41
76
  sql
42
- } from "./chunk-NWQXN4SB.js";
77
+ } from "./chunk-ETBQTP2S.js";
43
78
  import {
44
79
  __export
45
80
  } from "./chunk-CQ52GEHY.js";
@@ -47,17 +82,17 @@ import {
47
82
  // node_modules/rado/dist/driver.js
48
83
  var driver_exports = {};
49
84
  __export(driver_exports, {
50
- "@electric-sql/pglite": () => connect8,
51
- "@libsql/client": () => connect4,
52
- "@neondatabase/serverless": () => connect7,
53
- "@vercel/postgres": () => connect7,
54
- "better-sqlite3": () => connect,
55
- "bun:sqlite": () => connect2,
56
- d1: () => connect3,
57
- mysql2: () => connect5,
58
- "node:sqlite": () => connect6,
59
- pg: () => connect7,
60
- "sql.js": () => connect9
85
+ "@electric-sql/pglite": () => connect9,
86
+ "@libsql/client": () => connect6,
87
+ "@neondatabase/serverless": () => connect8,
88
+ "@vercel/postgres": () => connect8,
89
+ "better-sqlite3": () => connect4,
90
+ "bun:sqlite": () => connect,
91
+ d1: () => connect5,
92
+ mysql2: () => connect7,
93
+ "node:sqlite": () => connect2,
94
+ pg: () => connect8,
95
+ "sql.js": () => connect3
61
96
  });
62
97
 
63
98
  // node_modules/rado/dist/universal/functions.js
@@ -76,785 +111,213 @@ function concat(...slices) {
76
111
  });
77
112
  }
78
113
 
79
- // node_modules/rado/dist/universal/transactions.js
80
- function txGenerator(create) {
81
- function run(tx) {
82
- const iter = create(tx);
83
- const next = (inner) => {
84
- if (inner instanceof Promise)
85
- return inner.then(iter.next.bind(iter)).catch(iter.throw.bind(iter)).then(handle);
86
- try {
87
- return handle(iter.next(inner));
88
- } catch (err) {
89
- return handle(iter.throw(err));
90
- }
91
- };
92
- const handle = ({ done, value }) => {
93
- if (done) return value;
94
- return next(typeof value === "function" ? tx.transaction(value) : value);
95
- };
96
- return next();
114
+ // node_modules/rado/dist/core/View.js
115
+ var ViewBase = class {
116
+ [internalData];
117
+ constructor(data) {
118
+ this[internalData] = data;
97
119
  }
98
- return Object.assign(run, {
99
- *[Symbol.iterator]() {
100
- return yield run;
101
- }
120
+ };
121
+ function viewIdentifier({ name, schemaName }) {
122
+ return schemaName ? sql.join([sql.identifier(schemaName), sql.identifier(name)], sql`.`) : sql.identifier(name);
123
+ }
124
+ function createView(data, as) {
125
+ const createKeyword = data.materialized ? sql`create materialized view` : sql`create view`;
126
+ const { columns, columnNames } = data;
127
+ const columnList = columnNames ? sql.join(
128
+ columnNames.map((name) => sql.identifier(name)),
129
+ sql`, `
130
+ ) : columns ? sql.join(
131
+ Object.entries(columns).map(([name, column2]) => {
132
+ const columnData = getData(column2);
133
+ return sql.identifier(columnData.name ?? name);
134
+ }),
135
+ sql`, `
136
+ ) : void 0;
137
+ return sql.join([
138
+ createKeyword,
139
+ viewIdentifier(data),
140
+ columnList ? sql`(${columnList})` : void 0,
141
+ sql`as`,
142
+ as
143
+ ]).inlineValues();
144
+ }
145
+ function viewColumnNames(input2) {
146
+ const expr = getSql(input2);
147
+ if (expr) {
148
+ if (hasField(input2)) return [getField(input2).fieldName];
149
+ if (expr.alias) return [expr.alias];
150
+ throw new Error("Missing field name");
151
+ }
152
+ return Object.entries(input2).flatMap(([name, value]) => {
153
+ const expr2 = getSql(value);
154
+ if (expr2 && !hasField(value)) return [expr2.alias ?? name];
155
+ return viewColumnNames(value);
102
156
  });
103
157
  }
104
-
105
- // node_modules/rado/dist/core/expr/Aggregate.js
106
- function count(input2) {
107
- return Functions.count(input2 ?? sql`*`).mapWith(Number);
158
+ function viewFields(alias, source) {
159
+ return Object.fromEntries(
160
+ Object.entries(source).map(([key, value]) => {
161
+ if (value && typeof value === "object" && !hasSql(value))
162
+ return [key, viewFields(alias, value)];
163
+ const fieldName = hasField(value) ? getField(value).fieldName : key;
164
+ return [key, new Field(alias, fieldName, getSql(value))];
165
+ })
166
+ );
108
167
  }
109
-
110
- // node_modules/rado/dist/core/Resolver.js
111
- var Resolver = class {
112
- #driver;
113
- #dialect;
114
- constructor(driver, dialect) {
115
- this.#driver = driver;
116
- this.#dialect = dialect;
117
- }
118
- toSQL(query) {
119
- const emitter = this.#dialect.emit(query);
120
- return { sql: emitter.sql, params: emitter.bind() };
121
- }
122
- prepare(query, name) {
123
- const isSelection = hasSelection(query);
124
- const mapRow = isSelection ? getSelection(query).mapRow : void 0;
125
- const emitter = this.#dialect.emit(query);
126
- const stmt = this.#driver.prepare(emitter.sql, {
127
- isSelection,
128
- name
129
- });
130
- return new PreparedStatement(emitter, stmt, mapRow, this.#driver);
131
- }
132
- batch(queries) {
133
- return new Batch(
134
- this.#driver,
135
- queries.map((query) => {
136
- const isSelection = hasSelection(query);
137
- const mapRow = isSelection ? getSelection(query).mapRow : void 0;
138
- const emitter = this.#dialect.emit(query);
139
- return { sql: emitter.sql, params: emitter.bind(), isSelection, mapRow };
140
- })
141
- );
142
- }
143
- };
144
- var Batch = class {
145
- #driver;
146
- #queries;
147
- constructor(driver, queries) {
148
- this.#driver = driver;
149
- this.#queries = queries;
150
- }
151
- #transform = (results) => {
152
- const ctx = {
153
- values: void 0,
154
- index: 0,
155
- specs: this.#driver
168
+ function dropView(data) {
169
+ const dropKeyword = data.materialized ? sql`drop materialized view` : sql`drop view`;
170
+ return sql.join([dropKeyword, sql`if exists`, viewIdentifier(data)]);
171
+ }
172
+ var QueryView = class extends ViewBase {
173
+ as(query) {
174
+ const data = getData(this);
175
+ const input2 = getSelection(query).input;
176
+ const target = {
177
+ [internalTarget]: viewIdentifier(data),
178
+ ...viewFields(data.name, input2)
179
+ };
180
+ const createData = {
181
+ ...data,
182
+ columnNames: viewColumnNames(input2)
156
183
  };
157
- for (let i = 0; i < this.#queries.length; i++) {
158
- const { mapRow } = this.#queries[i];
159
- if (!mapRow) continue;
160
- const rows = results[i];
161
- for (let j = 0; j < results[i].length; j++) {
162
- ctx.values = rows[j];
163
- ctx.index = 0;
164
- rows[j] = mapRow(ctx);
184
+ return {
185
+ ...target,
186
+ [internalSelection]: selection(target),
187
+ [internalQuery]: getQuery(query),
188
+ get [internalCreate]() {
189
+ const result = createView(createData, getQuery(query));
190
+ return [result];
191
+ },
192
+ get [internalDrop]() {
193
+ return [dropView(data)];
165
194
  }
166
- }
167
- return results;
168
- };
169
- execute() {
170
- const results = this.#driver.batch(this.#queries);
171
- if (results instanceof Promise) return results.then(this.#transform);
172
- return this.#transform(results);
173
- }
174
- };
175
- var PreparedStatement = class {
176
- #emitter;
177
- #stmt;
178
- #mapRow;
179
- #specs;
180
- constructor(emitter, stmt, mapRow, specs) {
181
- this.#emitter = emitter;
182
- this.#stmt = stmt;
183
- this.#mapRow = mapRow;
184
- this.#specs = specs;
185
- }
186
- #transform = (rows) => {
187
- if (!this.#mapRow) return rows;
188
- const ctx = {
189
- values: void 0,
190
- index: 0,
191
- specs: this.#specs
192
195
  };
193
- for (let i = 0; i < rows.length; i++) {
194
- ctx.values = rows[i];
195
- ctx.index = 0;
196
- rows[i] = this.#mapRow(ctx);
197
- }
198
- return rows;
199
- };
200
- all(inputs) {
201
- const rows = this.#stmt.values(this.#emitter.bind(inputs));
202
- if (rows instanceof Promise) return rows.then(this.#transform);
203
- return this.#transform(rows);
204
- }
205
- get(inputs) {
206
- const rows = this.all(inputs);
207
- if (rows instanceof Promise) return rows.then((rows2) => rows2[0]);
208
- return rows[0];
209
- }
210
- run(inputs) {
211
- return this.#stmt.run(this.#emitter.bind(inputs));
212
- }
213
- async execute(inputs) {
214
- return this.all(inputs);
215
- }
216
- free() {
217
- this.#stmt.free();
218
196
  }
219
197
  };
220
-
221
- // node_modules/rado/dist/core/Database.js
222
- var Database = class extends Builder {
223
- driver;
224
- dialect;
225
- diff;
226
- [internalResolver];
227
- constructor(driver, dialect, diff) {
228
- const resolver = new Resolver(driver, dialect);
229
- super({ resolver });
230
- this[internalResolver] = resolver;
231
- this.driver = driver;
232
- this.dialect = dialect;
233
- this.diff = diff;
234
- }
235
- close() {
236
- return this.driver.close();
237
- }
238
- [Symbol.dispose]() {
239
- this.close();
240
- }
241
- async [Symbol.asyncDispose]() {
242
- return this.close();
243
- }
244
- create(...createables) {
245
- return new BatchQuery(getResolver(this), createables.flatMap(getCreate));
246
- }
247
- drop(...droppables) {
248
- return new BatchQuery(getResolver(this), droppables.flatMap(getDrop));
249
- }
250
- run(input2) {
251
- const sql2 = this.dialect.inline(input2);
252
- return this.driver.exec(sql2);
253
- }
254
- get(input2) {
255
- const emitter = this.dialect.emit(input2);
256
- return this.driver.prepare(emitter.sql).get(emitter.bind());
257
- }
258
- all(input2) {
259
- const emitter = this.dialect.emit(input2);
260
- return this.driver.prepare(emitter.sql).all(emitter.bind());
261
- }
262
- migrate(...tables) {
263
- if (this.dialect.runtime === "mysql" && tables.length > 1) {
264
- const run = async () => {
265
- for (const table2 of tables) await this.migrate(table2);
266
- };
267
- return run();
268
- }
269
- const computeDiff = this.diff;
270
- return this.transaction(
271
- txGenerator(function* (tx) {
272
- for (const table2 of tables) {
273
- const diff = yield* computeDiff(table2);
274
- if (diff.length > 0) yield* tx.batch(diff.map(sql.unsafe));
275
- }
276
- })
277
- );
198
+ var DefinedView = class extends ViewBase {
199
+ existing() {
200
+ const data = getData(this);
201
+ const { name, columns } = data;
202
+ const fields = tableFields(name, columns);
203
+ return {
204
+ [internalTarget]: viewIdentifier(data),
205
+ ...fields,
206
+ [internalSelection]: selection(fields)
207
+ };
278
208
  }
279
- batch(queries) {
280
- return new BatchQuery(getResolver(this), queries);
281
- }
282
- execute(input2) {
283
- const inner = getSql(input2);
284
- const emitter = this.dialect.emit(inner.inlineValues());
285
- if (emitter.hasParams) throw new Error("Query has parameters");
286
- return this.driver.exec(emitter.sql);
287
- }
288
- refreshMaterializedView(view) {
289
- return this.execute(sql`refresh materialized view ${view}`);
290
- }
291
- transaction(run, options = {}) {
292
- return this.driver.transaction(
293
- (inner) => {
294
- const tx = new Transaction(inner, this.dialect, this.diff);
295
- return run(tx);
296
- },
297
- { async: run.constructor.name === "AsyncFunction", ...options }
209
+ as(query) {
210
+ const data = getData(this);
211
+ const fields = tableFields(
212
+ data.name,
213
+ data.columns
298
214
  );
299
- }
300
- $count(source, condition) {
301
- return this.select(count()).from(source).where(condition).$first();
302
- }
303
- };
304
- var Rollback = class extends Error {
305
- constructor(data) {
306
- super("Rollback");
307
- this.data = data;
308
- }
309
- data;
310
- };
311
- var Transaction = class extends Database {
312
- rollback(data) {
313
- throw new Rollback(data);
314
- }
315
- };
316
- var SyncDatabase = class extends Database {
317
- };
318
- var AsyncDatabase = class extends Database {
319
- };
320
-
321
- // node_modules/rado/dist/sqlite/columns.js
322
- function boolean2(name) {
323
- return new Column({
324
- name,
325
- type: column.integer(),
326
- mapFromDriverValue(value) {
327
- return value === 1;
328
- },
329
- mapToDriverValue(value) {
330
- return value ? 1 : 0;
331
- }
332
- });
333
- }
334
- function integer2(...args) {
335
- const { name, options } = columnConfig(args);
336
- if (options?.mode === "timestamp" || options?.mode === "timestamp_ms") {
337
- const scale = options.mode === "timestamp" ? 1e3 : 1;
338
- return new Column({
339
- name,
340
- type: column.integer(),
341
- mapFromDriverValue(value) {
342
- if (value === null) return null;
343
- return new Date(value * scale);
344
- },
345
- mapToDriverValue(value) {
346
- return Math.floor(value.getTime() / scale);
347
- }
348
- });
349
- }
350
- if (options?.mode === "boolean") return boolean2();
351
- return new Column({ name, type: column.integer() });
352
- }
353
- function text2(...args) {
354
- const { name, options } = columnConfig(args);
355
- if (options?.mode === "json")
356
- return new JsonColumn({
357
- name,
358
- type: column.text(options?.length),
359
- mapToDriverValue(value) {
360
- return JSON.stringify(value);
215
+ return {
216
+ [internalTarget]: viewIdentifier(data),
217
+ ...fields,
218
+ [internalSelection]: selection(fields),
219
+ [internalQuery]: getSql(query),
220
+ get [internalCreate]() {
221
+ const result = createView(data, query);
222
+ return [result];
361
223
  },
362
- mapFromDriverValue(value) {
363
- return JSON.parse(value);
224
+ get [internalDrop]() {
225
+ return [dropView(data)];
364
226
  }
365
- });
366
- return new Column({ name, type: column.text(options?.length) });
367
- }
368
-
369
- // node_modules/rado/dist/core/Dialect.js
370
- var Dialect = class {
371
- runtime;
372
- #createEmitter;
373
- constructor(runtime, createEmitter) {
374
- this.runtime = runtime;
375
- this.#createEmitter = createEmitter;
376
- }
377
- emit = (input2) => {
378
- const sql2 = hasQuery(input2) ? getQuery(input2) : getSql(input2);
379
- const emitter = new this.#createEmitter(this.runtime);
380
- sql2.emit(emitter);
381
- return emitter;
382
- };
383
- inline = (input2) => {
384
- const sql2 = hasQuery(input2) ? getQuery(input2) : getSql(input2);
385
- const emitter = new this.#createEmitter(this.runtime);
386
- sql2.inlineValues().emit(emitter);
387
- return emitter.sql;
388
- };
389
- };
390
-
391
- // node_modules/rado/dist/core/Param.js
392
- var NamedParam = class {
393
- constructor(name) {
394
- this.name = name;
395
- }
396
- name;
397
- };
398
- var ValueParam = class {
399
- constructor(value) {
400
- this.value = value;
401
- }
402
- value;
403
- };
404
-
405
- // node_modules/rado/dist/core/Emitter.js
406
- var Emitter = class {
407
- #runtime;
408
- sql = "";
409
- params = [];
410
- constructor(runtime) {
411
- this.#runtime = runtime;
412
- }
413
- get hasParams() {
414
- return this.params.length > 0;
415
- }
416
- bind(inputs) {
417
- return this.params.map((param) => {
418
- if (param instanceof ValueParam) return this.processValue(param.value);
419
- if (inputs && param.name in inputs)
420
- return this.processValue(inputs[param.name]);
421
- throw new Error(`Missing input for named parameter: ${param.name}`);
422
- });
423
- }
424
- processValue(value) {
425
- return value;
426
- }
427
- emitIdentifierOrSelf(value) {
428
- if (value === Sql.SELF_TARGET) {
429
- if (!this.#selfName) throw new Error("Self target not defined");
430
- this.emitIdentifier(this.#selfName);
431
- } else {
432
- this.emitIdentifier(value);
433
- }
434
- }
435
- emitUnsafe(value) {
436
- this.sql += value;
437
- }
438
- #selfName;
439
- emitSelf(inner, name) {
440
- this.#selfName = name;
441
- inner.emit(this);
442
- this.#selfName = void 0;
443
- }
444
- #inlineFields = false;
445
- inlineFields(inner, withTableName) {
446
- const previous = this.#inlineFields;
447
- this.#inlineFields = !withTableName;
448
- inner.emit(this);
449
- this.#inlineFields = previous;
450
- }
451
- #inlineValues = false;
452
- inlineValues(inner) {
453
- const previous = this.#inlineValues;
454
- this.#inlineValues = true;
455
- inner.emit(this);
456
- this.#inlineValues = previous;
457
- }
458
- emitField({ targetName, fieldName }) {
459
- if (this.#inlineFields) return this.emitIdentifier(fieldName);
460
- this.emitIdentifierOrSelf(targetName);
461
- this.emitUnsafe(".");
462
- this.emitIdentifier(fieldName);
463
- }
464
- emitValueOrInline(value) {
465
- if (this.#inlineValues) this.emitInline(value);
466
- else this.emitValue(value);
467
- }
468
- emitUniversal(runtimes) {
469
- const sql2 = runtimes[this.#runtime] ?? runtimes.default;
470
- if (!sql2) throw new Error("Unsupported runtime");
471
- getSql(sql2).emit(this);
472
- }
473
- };
474
-
475
- // node_modules/rado/dist/sqlite/dialect.js
476
- var DOUBLE_QUOTE = '"';
477
- var ESCAPE_DOUBLE_QUOTE = '""';
478
- var MATCH_DOUBLE_QUOTE = /"/g;
479
- var SINGLE_QUOTE = "'";
480
- var ESCAPE_SINGLE_QUOTE = "''";
481
- var MATCH_SINGLE_QUOTE = /'/g;
482
- var sqliteDialect = new Dialect(
483
- "sqlite",
484
- class extends Emitter {
485
- processValue(value) {
486
- return typeof value === "boolean" ? value ? 1 : 0 : value;
487
- }
488
- emitValue(value) {
489
- this.params.push(new ValueParam(value));
490
- this.sql += "?";
491
- }
492
- emitPlaceholder(name) {
493
- this.params.push(new NamedParam(name));
494
- this.sql += "?";
495
- }
496
- emitJsonPath({ target, asSql, segments }) {
497
- target.emit(this);
498
- this.sql += asSql ? "->>" : "->";
499
- this.sql += this.quoteString(
500
- `$${segments.map(
501
- (p) => typeof p === "number" ? `[${p}]` : `.${JSON.stringify(p)}`
502
- ).join("")}`
503
- );
504
- }
505
- emitInline(value) {
506
- if (value === null || value === void 0) return this.sql += "null";
507
- if (typeof value === "number") return this.sql += value;
508
- if (typeof value === "string")
509
- return this.sql += this.quoteString(value);
510
- if (typeof value === "boolean") return this.sql += value ? "1" : "0";
511
- this.sql += `json(${this.quoteString(JSON.stringify(value))})`;
512
- }
513
- emitIdentifier(identifier) {
514
- this.sql += DOUBLE_QUOTE + identifier.replace(MATCH_DOUBLE_QUOTE, ESCAPE_DOUBLE_QUOTE) + DOUBLE_QUOTE;
515
- }
516
- quoteString(input2) {
517
- return SINGLE_QUOTE + input2.replace(MATCH_SINGLE_QUOTE, ESCAPE_SINGLE_QUOTE) + SINGLE_QUOTE;
518
- }
227
+ };
519
228
  }
520
- );
521
-
522
- // node_modules/rado/dist/sqlite/diff.js
523
- var TableInfo = table("TableInfo", {
524
- cid: integer2().notNull(),
525
- name: text2().notNull(),
526
- type: text2().notNull(),
527
- notnull: boolean2().notNull(),
528
- dflt_value: text2(),
529
- pk: integer2().notNull()
530
- });
531
- var SqliteMaster = table("SqliteMaster", {
532
- type: text2().notNull(),
533
- name: text2().notNull(),
534
- tbl_name: text2().notNull(),
535
- rootpage: integer2().notNull(),
536
- sql: text2().notNull()
537
- });
538
- var inline = (sql2) => sqliteDialect.inline(sql2);
539
- var sqliteDiff = (targetTable) => {
540
- return txGenerator(function* (tx) {
541
- const tableApi = getTable(targetTable);
542
- const columnInfo = yield* tx.select(TableInfo).from(sql`pragma_table_info(${sql.inline(tableApi.name)}) as "TableInfo"`);
543
- if (columnInfo.length === 0) return tableApi.create().map(inline);
544
- const indexInfo = yield* tx.select(SqliteMaster).from(sql`sqlite_master as "SqliteMaster"`).where(
545
- eq(SqliteMaster.tbl_name, tableApi.name),
546
- eq(SqliteMaster.type, "index")
547
- );
548
- const hasSinglePrimaryKey = columnInfo.reduce((acc, column2) => acc + column2.pk, 0) === 1;
549
- const localColumns = new Map(
550
- columnInfo.map((column2) => {
551
- return [
552
- column2.name,
553
- inline(
554
- formatColumn({
555
- type: sql.unsafe(column2.type.toLowerCase()),
556
- notNull: column2.notnull,
557
- primary: hasSinglePrimaryKey && column2.pk === 1,
558
- defaultValue: column2.dflt_value !== null ? sql.unsafe(column2.dflt_value) : void 0
559
- })
560
- )
561
- ];
562
- })
563
- );
564
- const schemaColumns = new Map(
565
- Object.entries(tableApi.columns).map(([name, column2]) => {
566
- const columnApi = getData(column2);
567
- return [columnApi.name ?? name, inline(formatColumn(columnApi))];
568
- })
569
- );
570
- const localIndexes = new Map(
571
- indexInfo.filter((index) => !index.name.startsWith("sqlite_autoindex_")).map((index) => [index.name, index.sql])
572
- );
573
- const schemaIndexes = new Map(
574
- Object.entries(tableApi.indexes()).map(([name, index]) => {
575
- const indexApi = getData(index);
576
- return [name, inline(indexApi.toSql(tableApi.name, name, false))];
577
- })
578
- );
579
- const stmts = [];
580
- const columnNames = /* @__PURE__ */ new Set([
581
- ...localColumns.keys(),
582
- ...schemaColumns.keys()
583
- ]);
584
- for (const columnName of columnNames) {
585
- const localInstruction = localColumns.get(columnName);
586
- const schemaInstruction = schemaColumns.get(columnName);
587
- if (!schemaInstruction) {
588
- stmts.push(
589
- sql.query({
590
- alterTable: sql.identifier(tableApi.name),
591
- dropColumn: sql.identifier(columnName)
592
- })
593
- );
594
- } else if (!localInstruction) {
595
- stmts.push(
596
- sql.query({
597
- alterTable: sql.identifier(tableApi.name),
598
- addColumn: [
599
- sql.identifier(columnName),
600
- sql.unsafe(schemaInstruction)
601
- ]
602
- })
603
- );
604
- } else if (localInstruction !== schemaInstruction) {
605
- return recreate();
606
- }
607
- }
608
- const indexNames = /* @__PURE__ */ new Set([
609
- ...localIndexes.keys(),
610
- ...schemaIndexes.keys()
611
- ]);
612
- for (const indexName of indexNames) {
613
- const localInstruction = localIndexes.get(indexName);
614
- const schemaInstruction = schemaIndexes.get(indexName);
615
- const dropLocal = sql.query({
616
- dropIndex: sql.identifier(indexName)
617
- });
618
- if (!schemaInstruction) {
619
- stmts.unshift(dropLocal);
620
- } else if (schemaInstruction && !localInstruction) {
621
- stmts.push(sql.unsafe(schemaInstruction));
622
- } else if (schemaInstruction && localInstruction !== schemaInstruction) {
623
- stmts.unshift(dropLocal);
624
- stmts.push(sql.unsafe(schemaInstruction));
625
- }
626
- }
627
- try {
628
- yield* txGenerator(function* (sp) {
629
- yield* sp.batch(stmts);
630
- const [tableInfo] = yield* sp.select(SqliteMaster.sql).from(sql`sqlite_master as "SqliteMaster"`).where(
631
- eq(SqliteMaster.tbl_name, tableApi.name),
632
- eq(SqliteMaster.type, "table")
633
- );
634
- sp.rollback(tableInfo);
635
- });
636
- } catch (err) {
637
- if (!(err instanceof Rollback)) throw err;
638
- const localInstruction = err.data;
639
- const schemaInstruction = inline(tableApi.createTable());
640
- const stripStmt = (q) => q.slice("create table ".length);
641
- if (stripStmt(localInstruction) !== stripStmt(schemaInstruction)) {
642
- return recreate();
643
- }
644
- }
645
- return stmts.map(inline);
646
- function recreate() {
647
- const tempName = `new_${tableApi.name}`;
648
- const tempTable = table(tempName, tableApi.columns);
649
- const missingColumns = new Set(
650
- Array.from(columnNames).filter((name) => !localColumns.has(name))
651
- );
652
- const selection = Object.fromEntries(
653
- Object.entries(tableApi.columns).map(([name, column2]) => {
654
- const columnApi = getData(column2);
655
- const key = columnApi.name ?? name;
656
- if (missingColumns.has(key))
657
- return [name, columnApi.defaultValue ?? sql`null`];
658
- return [name, targetTable[name]];
659
- })
660
- );
661
- return [
662
- // Create a new temporary table with the new definition
663
- tableApi.createTable(tempName),
664
- // Copy the data from the old table to the new table
665
- getQuery(
666
- tx.insert(tempTable).select(tx.select(selection).from(targetTable))
667
- ),
668
- // Drop the old table
669
- sql.query({ dropTable: sql.identifier(tableApi.name) }),
670
- // Rename the temporary table to the old table name
671
- sql.query({
672
- alterTable: sql.identifier(tempName),
673
- renameTo: sql.identifier(tableApi.name)
674
- }),
675
- // Create missing indexes
676
- ...tableApi.createIndexes()
677
- ].map(inline);
678
- }
679
- });
680
229
  };
681
-
682
- // node_modules/rado/dist/sqlite/transactions.js
683
- var locks = /* @__PURE__ */ new WeakMap();
684
- function execTransaction(driver, depth, wrap, run, options) {
685
- const needsLock = options.async;
686
- const behavior = options.behavior ?? "deferred";
687
- if (!needsLock) return transact();
688
- let trigger;
689
- const lock = new Promise((resolve) => trigger = resolve);
690
- const current = Promise.resolve(locks.get(driver));
691
- locks.set(driver, lock);
692
- return current.then(transact).finally(trigger);
693
- function transact() {
694
- try {
695
- driver.exec(depth > 0 ? `savepoint d${depth}` : `begin ${behavior}`);
696
- const result = run(wrap(depth + 1));
697
- if (result instanceof Promise) return result.then(release, rollback);
698
- return release(result);
699
- } catch (error) {
700
- return rollback(error);
701
- }
702
- }
703
- function release(result) {
704
- driver.exec(depth > 0 ? `release d${depth}` : "commit");
705
- return result;
706
- }
707
- function rollback(error) {
708
- driver.exec(depth > 0 ? `rollback to d${depth}` : "rollback");
709
- throw error;
710
- }
230
+ function view(name, columns, schemaName) {
231
+ if (columns) return new DefinedView({ name, columns, schemaName });
232
+ return new QueryView({ name, columns, schemaName });
711
233
  }
712
234
 
713
235
  // node_modules/rado/dist/driver/better-sqlite3.js
714
- var PreparedStatement2 = class {
715
- constructor(stmt, isSelection) {
716
- this.stmt = stmt;
236
+ var PreparedStatement = class extends ReusedStatement {
237
+ constructor(statements, sql2, isSelection) {
238
+ super(statements, sql2);
717
239
  this.isSelection = isSelection;
718
240
  }
719
- stmt;
720
241
  isSelection;
721
242
  all(params) {
722
243
  return this.stmt.all(...params);
723
244
  }
724
245
  run(params) {
725
- return this.stmt.run(...params);
246
+ const result = this.stmt.run(...params);
247
+ return {
248
+ affectedRows: result.changes,
249
+ insertId: result.lastInsertRowid
250
+ };
726
251
  }
727
252
  get(params) {
728
- return this.stmt.get(...params);
253
+ return this.stmt.get(...params) ?? null;
729
254
  }
730
255
  values(params) {
731
- if (this.isSelection)
256
+ if (!this.isSelection) {
257
+ this.stmt.run(...params);
258
+ return [];
259
+ }
260
+ try {
732
261
  return this.stmt.raw(true).all(...params);
733
- this.stmt.run(...params);
734
- return [];
735
- }
736
- free() {
262
+ } finally {
263
+ this.stmt.raw(false);
264
+ }
737
265
  }
738
266
  };
739
267
  var BetterSqlite3Driver = class _BetterSqlite3Driver {
740
- constructor(client, depth = 0) {
268
+ constructor(client, depth = 0, statements = new StatementCache(
269
+ (sql2) => client.prepare(sql2),
270
+ () => {
271
+ }
272
+ )) {
741
273
  this.client = client;
742
274
  this.depth = depth;
275
+ this.statements = statements;
743
276
  }
744
277
  client;
745
278
  depth;
279
+ statements;
746
280
  parsesJson = false;
747
281
  supportsTransactions = true;
748
282
  exec(query) {
283
+ this.statements.invalidate(query);
749
284
  this.client.exec(query);
750
285
  }
751
286
  close() {
287
+ this.statements.clear();
752
288
  this.client.close();
753
289
  }
754
290
  prepare(sql2, options) {
755
- return new PreparedStatement2(
756
- this.client.prepare(sql2),
291
+ return new PreparedStatement(
292
+ this.statements,
293
+ sql2,
757
294
  options?.isSelection ?? false
758
295
  );
759
296
  }
760
297
  batch(queries) {
761
- return this.transaction(
762
- (tx) => queries.map(
763
- ({ sql: sql2, params, isSelection }) => tx.prepare(sql2, { isSelection }).values(params)
764
- ),
765
- {}
766
- );
298
+ return this.transaction((tx) => Batch.run(tx, queries), {});
767
299
  }
768
300
  transaction(run, options) {
769
301
  return execTransaction(
770
302
  this,
771
303
  this.depth,
772
- (depth) => new _BetterSqlite3Driver(this.client, depth),
304
+ (depth) => new _BetterSqlite3Driver(this.client, depth, this.statements),
773
305
  run,
774
306
  options
775
307
  );
776
308
  }
777
309
  };
778
- function connect(db) {
310
+ function connect4(db, options) {
779
311
  return new SyncDatabase(
780
312
  new BetterSqlite3Driver(db),
781
313
  sqliteDialect,
782
- sqliteDiff
314
+ sqliteDiff,
315
+ options
783
316
  );
784
317
  }
785
318
 
786
- // node_modules/rado/dist/driver/bun-sqlite.js
787
- var PreparedStatement3 = class {
788
- constructor(stmt, isSelection) {
789
- this.stmt = stmt;
790
- this.isSelection = isSelection;
791
- }
792
- stmt;
793
- isSelection;
794
- all(params) {
795
- return this.stmt.all(...params);
796
- }
797
- run(params) {
798
- return this.stmt.run(...params);
799
- }
800
- get(params) {
801
- return this.stmt.get(...params);
802
- }
803
- values(params) {
804
- if (!this.isSelection) {
805
- this.stmt.run(...params);
806
- return [];
807
- }
808
- return this.stmt.values(...params);
809
- }
810
- free() {
811
- this.stmt.finalize();
812
- }
813
- };
814
- var BunSqliteDriver = class _BunSqliteDriver {
815
- constructor(client, depth = 0) {
816
- this.client = client;
817
- this.depth = depth;
818
- }
819
- client;
820
- depth;
821
- parsesJson = false;
822
- supportsTransactions = true;
823
- exec(query) {
824
- this.client.exec(query);
825
- }
826
- close() {
827
- this.client.close();
828
- }
829
- prepare(sql2, options) {
830
- return new PreparedStatement3(
831
- this.client.prepare(sql2),
832
- options?.isSelection ?? false
833
- );
834
- }
835
- batch(queries) {
836
- return this.transaction((tx) => {
837
- return queries.map(
838
- ({ sql: sql2, params, isSelection }) => tx.prepare(sql2, { isSelection }).values(params)
839
- );
840
- }, {});
841
- }
842
- transaction(run, options) {
843
- return execTransaction(
844
- this,
845
- this.depth,
846
- (depth) => new _BunSqliteDriver(this.client, depth),
847
- run,
848
- options
849
- );
850
- }
851
- };
852
- function connect2(db) {
853
- return new SyncDatabase(new BunSqliteDriver(db), sqliteDialect, sqliteDiff);
854
- }
855
-
856
319
  // node_modules/rado/dist/driver/d1.js
857
- var PreparedStatement4 = class {
320
+ var PreparedStatement2 = class {
858
321
  constructor(stmt, isSelection) {
859
322
  this.stmt = stmt;
860
323
  this.isSelection = isSelection;
@@ -866,6 +329,11 @@ var PreparedStatement4 = class {
866
329
  }
867
330
  async run(params) {
868
331
  const results = await this.stmt.bind(...params).run();
332
+ const meta = results.meta;
333
+ return {
334
+ affectedRows: meta.changes ?? meta.rows_written ?? 0,
335
+ insertId: meta.last_row_id
336
+ };
869
337
  }
870
338
  async get(params) {
871
339
  return this.stmt.bind(...params).first();
@@ -889,7 +357,7 @@ var D1Driver = class {
889
357
  await this.client.exec(query);
890
358
  }
891
359
  prepare(sql2, options) {
892
- return new PreparedStatement4(
360
+ return new PreparedStatement2(
893
361
  this.client.prepare(sql2),
894
362
  options?.isSelection ?? false
895
363
  );
@@ -911,12 +379,17 @@ var D1Driver = class {
911
379
  throw new Error("Transactions are not supported in D1");
912
380
  }
913
381
  };
914
- function connect3(client) {
915
- return new AsyncDatabase(new D1Driver(client), sqliteDialect, sqliteDiff);
382
+ function connect5(client, options) {
383
+ return new AsyncDatabase(
384
+ new D1Driver(client),
385
+ sqliteDialect,
386
+ sqliteDiff,
387
+ options
388
+ );
916
389
  }
917
390
 
918
391
  // node_modules/rado/dist/driver/libsql.js
919
- var PreparedStatement5 = class {
392
+ var PreparedStatement3 = class {
920
393
  constructor(client, sql2) {
921
394
  this.client = client;
922
395
  this.sql = sql2;
@@ -929,6 +402,10 @@ var PreparedStatement5 = class {
929
402
  }
930
403
  async run(params) {
931
404
  const result = await this.client.execute({ sql: this.sql, args: params });
405
+ return {
406
+ affectedRows: result.rowsAffected,
407
+ insertId: result.lastInsertRowid
408
+ };
932
409
  }
933
410
  async get(params) {
934
411
  return (await this.all(params))[0] ?? null;
@@ -953,7 +430,7 @@ var LibSQLClient = class _LibSQLClient {
953
430
  await this.client.execute(query);
954
431
  }
955
432
  prepare(sql2, options) {
956
- return new PreparedStatement5(this.client, sql2);
433
+ return new PreparedStatement3(this.client, sql2);
957
434
  }
958
435
  async close() {
959
436
  if ("close" in this.client) return this.client.close();
@@ -976,17 +453,25 @@ var LibSQLClient = class _LibSQLClient {
976
453
  else await client.commit();
977
454
  return result;
978
455
  } catch (error) {
979
- if (this.depth > 0)
980
- await client.execute(`rollback to savepoint d${this.depth}`);
981
- else await client.rollback();
456
+ try {
457
+ if (this.depth > 0)
458
+ await client.execute(`rollback to savepoint d${this.depth}`);
459
+ else await client.rollback();
460
+ } catch {
461
+ }
982
462
  throw error;
983
463
  } finally {
984
464
  if (this.depth === 0) client.close();
985
465
  }
986
466
  }
987
467
  };
988
- function connect4(client) {
989
- return new AsyncDatabase(new LibSQLClient(client), sqliteDialect, sqliteDiff);
468
+ function connect6(client, options) {
469
+ return new AsyncDatabase(
470
+ new LibSQLClient(client),
471
+ sqliteDialect,
472
+ sqliteDiff,
473
+ options
474
+ );
990
475
  }
991
476
 
992
477
  // node_modules/rado/dist/mysql/dialect.js
@@ -995,9 +480,9 @@ var ESCAPE_BACKTICK = "``";
995
480
  var MATCH_BACKTICK = /`/g;
996
481
  var ESCAPE_BACKSLASH = "\\\\";
997
482
  var MATCH_BACKSLASH = /\\/g;
998
- var SINGLE_QUOTE2 = "'";
999
- var ESCAPE_SINGLE_QUOTE2 = "''";
1000
- var MATCH_SINGLE_QUOTE2 = /'/g;
483
+ var SINGLE_QUOTE = "'";
484
+ var ESCAPE_SINGLE_QUOTE = "''";
485
+ var MATCH_SINGLE_QUOTE = /'/g;
1001
486
  var mysqlDialect = new Dialect(
1002
487
  "mysql",
1003
488
  class extends Emitter {
@@ -1028,7 +513,7 @@ var mysqlDialect = new Dialect(
1028
513
  this.sql += this.quoteString(JSON.stringify(value));
1029
514
  }
1030
515
  quoteString(input2) {
1031
- return SINGLE_QUOTE2 + input2.replace(MATCH_BACKSLASH, ESCAPE_BACKSLASH).replace(MATCH_SINGLE_QUOTE2, ESCAPE_SINGLE_QUOTE2) + SINGLE_QUOTE2;
516
+ return SINGLE_QUOTE + input2.replace(MATCH_BACKSLASH, ESCAPE_BACKSLASH).replace(MATCH_SINGLE_QUOTE, ESCAPE_SINGLE_QUOTE) + SINGLE_QUOTE;
1032
517
  }
1033
518
  emitIdentifier(identifier) {
1034
519
  this.sql += BACKTICK + identifier.replace(MATCH_BACKTICK, ESCAPE_BACKTICK) + BACKTICK;
@@ -1041,44 +526,47 @@ function schema(schemaName) {
1041
526
  return {
1042
527
  table(tableName, columns, config) {
1043
528
  return table(tableName, columns, config, schemaName);
529
+ },
530
+ view(viewName, columns) {
531
+ return columns ? view(viewName, columns, schemaName) : view(viewName, void 0, schemaName);
1044
532
  }
1045
533
  };
1046
534
  }
1047
535
 
1048
536
  // node_modules/rado/dist/mysql/columns.js
1049
- function integer3(name) {
537
+ function integer2(name) {
1050
538
  return new Column({ name, type: column.integer() });
1051
539
  }
1052
- function text3(name) {
540
+ function text2(name) {
1053
541
  return new Column({ name, type: column.text() });
1054
542
  }
1055
543
 
1056
544
  // node_modules/rado/dist/mysql/diff.js
1057
545
  var ns = schema("information_schema");
1058
546
  var Information = ns.table("columns", {
1059
- table_name: text3().notNull(),
1060
- column_name: text3().notNull(),
1061
- column_type: text3().notNull(),
1062
- is_nullable: text3().notNull(),
1063
- column_default: text3(),
1064
- extra: text3().notNull(),
1065
- table_schema: text3().notNull()
547
+ table_name: text2().notNull(),
548
+ column_name: text2().notNull(),
549
+ column_type: text2().notNull(),
550
+ is_nullable: text2().notNull(),
551
+ column_default: text2(),
552
+ extra: text2().notNull(),
553
+ table_schema: text2().notNull()
1066
554
  });
1067
555
  var Statistics = ns.table("statistics", {
1068
- table_name: text3().notNull(),
1069
- column_name: text3().notNull(),
1070
- index_name: text3().notNull(),
1071
- non_unique: integer3().notNull(),
1072
- seq_in_index: integer3().notNull(),
1073
- table_schema: text3().notNull()
556
+ table_name: text2().notNull(),
557
+ column_name: text2().notNull(),
558
+ index_name: text2().notNull(),
559
+ non_unique: integer2().notNull(),
560
+ seq_in_index: integer2().notNull(),
561
+ table_schema: text2().notNull()
1074
562
  });
1075
563
  var TableConstraints = ns.table("table_constraints", {
1076
- constraint_name: text3().notNull(),
1077
- table_name: text3().notNull(),
1078
- constraint_type: text3().notNull(),
1079
- table_schema: text3().notNull()
564
+ constraint_name: text2().notNull(),
565
+ table_name: text2().notNull(),
566
+ constraint_type: text2().notNull(),
567
+ table_schema: text2().notNull()
1080
568
  });
1081
- var inline2 = (sql2) => mysqlDialect.inline(sql2);
569
+ var inline = (sql2) => mysqlDialect.inline(sql2);
1082
570
  var mysqlDiff = (hasTable) => {
1083
571
  return txGenerator(function* (tx) {
1084
572
  const tableApi = getTable(hasTable);
@@ -1093,7 +581,7 @@ var mysqlDiff = (hasTable) => {
1093
581
  eq(Information.table_name, tableApi.name),
1094
582
  eq(Information.table_schema, sql`database()`)
1095
583
  );
1096
- if (columnInfo.length === 0) return tableApi.create().map(inline2);
584
+ if (columnInfo.length === 0) return tableApi.create().map(inline);
1097
585
  const indexInfo = yield* tx.select({
1098
586
  index_name: Statistics.index_name,
1099
587
  column_name: Statistics.column_name,
@@ -1168,7 +656,7 @@ var mysqlDiff = (hasTable) => {
1168
656
  })
1169
657
  );
1170
658
  } else {
1171
- if (inline2(localInstruction.type) !== inline2(schemaInstruction.type)) {
659
+ if (inline(localInstruction.type) !== inline(schemaInstruction.type)) {
1172
660
  stmts.push(
1173
661
  sql.query({
1174
662
  alterTable,
@@ -1189,8 +677,8 @@ var mysqlDiff = (hasTable) => {
1189
677
  }
1190
678
  const localDefault = localInstruction.defaultValue;
1191
679
  const schemaDefault = schemaInstruction.defaultValue;
1192
- const localDefaultStr = localDefault && inline2(localDefault);
1193
- const schemaDefaultStr = schemaDefault && inline2(schemaDefault);
680
+ const localDefaultStr = localDefault && inline(localDefault);
681
+ const schemaDefaultStr = schemaDefault && inline(schemaDefault);
1194
682
  if (localDefaultStr !== schemaDefaultStr) {
1195
683
  stmts.push(
1196
684
  sql.query({
@@ -1234,7 +722,7 @@ var mysqlDiff = (hasTable) => {
1234
722
  );
1235
723
  } else if (!localInstruction) {
1236
724
  stmts.push(schemaInstruction);
1237
- } else if (inline2(localInstruction) !== inline2(schemaInstruction)) {
725
+ } else if (inline(localInstruction) !== inline(schemaInstruction)) {
1238
726
  if (indexName === "PRIMARY") {
1239
727
  stmts.unshift(
1240
728
  sql.query({
@@ -1254,7 +742,7 @@ var mysqlDiff = (hasTable) => {
1254
742
  }
1255
743
  }
1256
744
  }
1257
- return stmts.map(inline2);
745
+ return stmts.map(inline);
1258
746
  });
1259
747
  };
1260
748
 
@@ -1275,7 +763,7 @@ function setTransaction(options) {
1275
763
  }
1276
764
 
1277
765
  // node_modules/rado/dist/driver/mysql2.js
1278
- var PreparedStatement6 = class {
766
+ var PreparedStatement4 = class {
1279
767
  constructor(client, sql2, isSelection, name) {
1280
768
  this.client = client;
1281
769
  this.sql = sql2;
@@ -1291,10 +779,25 @@ var PreparedStatement6 = class {
1291
779
  return param;
1292
780
  };
1293
781
  all(params) {
1294
- return this.client.query(this.sql, params.map(this.#transformParam)).then((res) => res[0]);
782
+ return this.client.query({
783
+ sql: this.sql,
784
+ values: params.map(this.#transformParam),
785
+ dateStrings: true,
786
+ supportBigNumbers: true
787
+ }).then((res) => res[0]);
1295
788
  }
1296
789
  async run(params) {
1297
- await this.client.query(this.sql, params.map(this.#transformParam));
790
+ const [result] = await this.client.query({
791
+ sql: this.sql,
792
+ values: params.map(this.#transformParam),
793
+ supportBigNumbers: true
794
+ });
795
+ const header = result;
796
+ return {
797
+ affectedRows: header.affectedRows ?? 0,
798
+ changedRows: header.changedRows ?? 0,
799
+ insertId: header.insertId ?? 0
800
+ };
1298
801
  }
1299
802
  get(params) {
1300
803
  return this.all(params).then((rows) => rows[0] ?? null);
@@ -1304,7 +807,9 @@ var PreparedStatement6 = class {
1304
807
  return this.client.query({
1305
808
  sql: this.sql,
1306
809
  values: params.map(this.#transformParam),
1307
- rowsAsArray: true
810
+ rowsAsArray: true,
811
+ dateStrings: true,
812
+ supportBigNumbers: true
1308
813
  }).then((res) => res[0]);
1309
814
  }
1310
815
  free() {
@@ -1323,7 +828,7 @@ var Mysql2Driver = class _Mysql2Driver {
1323
828
  await this.client.query(query);
1324
829
  }
1325
830
  prepare(sql2, options) {
1326
- return new PreparedStatement6(
831
+ return new PreparedStatement4(
1327
832
  this.client,
1328
833
  sql2,
1329
834
  options?.isSelection ?? false,
@@ -1334,12 +839,7 @@ var Mysql2Driver = class _Mysql2Driver {
1334
839
  if ("end" in this.client) return this.client.end();
1335
840
  }
1336
841
  async batch(queries) {
1337
- const transact = async (tx) => {
1338
- const results = [];
1339
- for (const { sql: sql2, params, isSelection } of queries)
1340
- results.push(await tx.prepare(sql2, { isSelection }).values(params));
1341
- return results;
1342
- };
842
+ const transact = (tx) => Batch.run(tx, queries);
1343
843
  if (this.depth > 0) return transact(this);
1344
844
  return this.transaction(transact, {});
1345
845
  }
@@ -1347,22 +847,25 @@ var Mysql2Driver = class _Mysql2Driver {
1347
847
  const client = isPool(this.client) ? await this.client.getConnection() : this.client;
1348
848
  const driver = new _Mysql2Driver(client, this.depth + 1);
1349
849
  try {
1350
- await client.query(
1351
- this.depth > 0 ? `savepoint d${this.depth}` : startTransaction(options)
1352
- );
1353
850
  if (this.depth === 0) {
1354
851
  const setOptions = setTransaction(options);
1355
852
  if (setOptions) await client.query(setOptions);
1356
853
  }
854
+ await client.query(
855
+ this.depth > 0 ? `savepoint d${this.depth}` : startTransaction(options)
856
+ );
1357
857
  const result = await run(driver);
1358
858
  await client.query(
1359
859
  this.depth > 0 ? `release savepoint d${this.depth}` : "commit"
1360
860
  );
1361
861
  return result;
1362
862
  } catch (error) {
1363
- await client.query(
1364
- this.depth > 0 ? `rollback to savepoint d${this.depth}` : "rollback"
1365
- );
863
+ try {
864
+ await client.query(
865
+ this.depth > 0 ? `rollback to savepoint d${this.depth}` : "rollback"
866
+ );
867
+ } catch {
868
+ }
1366
869
  throw error;
1367
870
  } finally {
1368
871
  if (isPool(this.client))
@@ -1373,96 +876,22 @@ var Mysql2Driver = class _Mysql2Driver {
1373
876
  function isPool(client) {
1374
877
  return "getConnection" in client;
1375
878
  }
1376
- function connect5(client) {
879
+ function connect7(client, options) {
1377
880
  return new AsyncDatabase(
1378
881
  new Mysql2Driver("promise" in client ? client.promise() : client),
1379
882
  mysqlDialect,
1380
- mysqlDiff
883
+ mysqlDiff,
884
+ options
1381
885
  );
1382
886
  }
1383
887
 
1384
- // node_modules/rado/dist/driver/node-sqlite.js
1385
- var PreparedStatement7 = class {
1386
- constructor(stmt, isSelection) {
1387
- this.stmt = stmt;
1388
- this.isSelection = isSelection;
1389
- }
1390
- stmt;
1391
- isSelection;
1392
- all(params) {
1393
- return this.stmt.all(...params);
1394
- }
1395
- run(params) {
1396
- this.stmt.run(...params);
1397
- }
1398
- get(params) {
1399
- return this.stmt.get(...params);
1400
- }
1401
- values(params) {
1402
- if (!this.isSelection) {
1403
- this.stmt.run(...params);
1404
- return [];
1405
- }
1406
- this.stmt.setReturnArrays(true);
1407
- try {
1408
- return this.stmt.all(...params);
1409
- } finally {
1410
- this.stmt.setReturnArrays(false);
1411
- }
1412
- }
1413
- free() {
1414
- }
1415
- };
1416
- var NodeSqliteDriver = class _NodeSqliteDriver {
1417
- constructor(client, depth = 0) {
1418
- this.client = client;
1419
- this.depth = depth;
1420
- }
1421
- client;
1422
- depth;
1423
- parsesJson = false;
1424
- supportsTransactions = true;
1425
- exec(query) {
1426
- this.client.exec(query);
1427
- }
1428
- close() {
1429
- this.client.close();
1430
- }
1431
- prepare(sql2, options) {
1432
- return new PreparedStatement7(
1433
- this.client.prepare(sql2),
1434
- options?.isSelection ?? false
1435
- );
1436
- }
1437
- batch(queries) {
1438
- return this.transaction(
1439
- (tx) => queries.map(
1440
- ({ sql: sql2, params, isSelection }) => tx.prepare(sql2, { isSelection }).values(params)
1441
- ),
1442
- {}
1443
- );
1444
- }
1445
- transaction(run, options) {
1446
- return execTransaction(
1447
- this,
1448
- this.depth,
1449
- (depth) => new _NodeSqliteDriver(this.client, depth),
1450
- run,
1451
- options
1452
- );
1453
- }
1454
- };
1455
- function connect6(db) {
1456
- return new SyncDatabase(new NodeSqliteDriver(db), sqliteDialect, sqliteDiff);
1457
- }
1458
-
1459
888
  // node_modules/rado/dist/postgres/dialect.js
1460
- var DOUBLE_QUOTE2 = '"';
1461
- var ESCAPE_DOUBLE_QUOTE2 = '""';
1462
- var MATCH_DOUBLE_QUOTE2 = /"/g;
1463
- var SINGLE_QUOTE3 = "'";
1464
- var ESCAPE_SINGLE_QUOTE3 = "''";
1465
- var MATCH_SINGLE_QUOTE3 = /'/g;
889
+ var DOUBLE_QUOTE = '"';
890
+ var ESCAPE_DOUBLE_QUOTE = '""';
891
+ var MATCH_DOUBLE_QUOTE = /"/g;
892
+ var SINGLE_QUOTE2 = "'";
893
+ var ESCAPE_SINGLE_QUOTE2 = "''";
894
+ var MATCH_SINGLE_QUOTE2 = /'/g;
1466
895
  var postgresDialect = new Dialect(
1467
896
  "postgres",
1468
897
  class extends Emitter {
@@ -1494,10 +923,10 @@ var postgresDialect = new Dialect(
1494
923
  this.sql += this.quoteString(JSON.stringify(value));
1495
924
  }
1496
925
  quoteString(input2) {
1497
- return SINGLE_QUOTE3 + input2.replace(MATCH_SINGLE_QUOTE3, ESCAPE_SINGLE_QUOTE3) + SINGLE_QUOTE3;
926
+ return SINGLE_QUOTE2 + input2.replace(MATCH_SINGLE_QUOTE2, ESCAPE_SINGLE_QUOTE2) + SINGLE_QUOTE2;
1498
927
  }
1499
928
  emitIdentifier(identifier) {
1500
- this.sql += DOUBLE_QUOTE2 + identifier.replace(MATCH_DOUBLE_QUOTE2, ESCAPE_DOUBLE_QUOTE2) + DOUBLE_QUOTE2;
929
+ this.sql += DOUBLE_QUOTE + identifier.replace(MATCH_DOUBLE_QUOTE, ESCAPE_DOUBLE_QUOTE) + DOUBLE_QUOTE;
1501
930
  }
1502
931
  }
1503
932
  );
@@ -1532,7 +961,7 @@ var AttrDef = table("pg_attrdef", {
1532
961
  num: integer("adnum").notNull(),
1533
962
  bin: text("adbin").notNull()
1534
963
  });
1535
- var inline3 = (sql2) => postgresDialect.inline(sql2);
964
+ var inline2 = (sql2) => postgresDialect.inline(sql2);
1536
965
  var columnType = sql`pg_catalog.format_type(${Attr.typId}, ${Attr.typMod})`;
1537
966
  var columnDefaultValue = when(
1538
967
  [Attr.hasDef, sql`pg_catalog.pg_get_expr(${AttrDef.bin}, ${AttrDef.relId})`],
@@ -1592,7 +1021,7 @@ var postgresDiff = (hasTable) => {
1592
1021
  notNull: and(def.notNull, isNull(def.identity)),
1593
1022
  defaultValue
1594
1023
  }).from(def);
1595
- if (columnInfo.length === 0) return tableApi.create().map(inline3);
1024
+ if (columnInfo.length === 0) return tableApi.create().map(inline2);
1596
1025
  const localColumns = new Map(
1597
1026
  columnInfo.map((column2) => {
1598
1027
  return [
@@ -1645,7 +1074,7 @@ var postgresDiff = (hasTable) => {
1645
1074
  })
1646
1075
  );
1647
1076
  } else {
1648
- if (inline3(localInstruction.type) !== inline3(schemaInstruction.type)) {
1077
+ if (inline2(localInstruction.type) !== inline2(schemaInstruction.type)) {
1649
1078
  stmts.push(
1650
1079
  sql.query({
1651
1080
  alterTable,
@@ -1666,8 +1095,8 @@ var postgresDiff = (hasTable) => {
1666
1095
  }
1667
1096
  const localDefault = localInstruction.defaultValue;
1668
1097
  const schemaDefault = schemaInstruction.defaultValue;
1669
- const localDefaultStr = localDefault && inline3(localDefault);
1670
- const schemaDefaultStr = schemaDefault && inline3(schemaDefault);
1098
+ const localDefaultStr = localDefault && inline2(localDefault);
1099
+ const schemaDefaultStr = schemaDefault && inline2(schemaDefault);
1671
1100
  if (localDefaultStr !== schemaDefaultStr) {
1672
1101
  stmts.push(
1673
1102
  sql.query({
@@ -1681,7 +1110,7 @@ var postgresDiff = (hasTable) => {
1681
1110
  }
1682
1111
  }
1683
1112
  }
1684
- return stmts.map(inline3);
1113
+ return stmts.map(inline2);
1685
1114
  });
1686
1115
  };
1687
1116
 
@@ -1707,7 +1136,7 @@ async function acquireClient(client, depth) {
1707
1136
  release: () => acquired.release()
1708
1137
  };
1709
1138
  }
1710
- var PreparedStatement8 = class {
1139
+ var PreparedStatement5 = class {
1711
1140
  constructor(client, sql2, name) {
1712
1141
  this.client = client;
1713
1142
  this.sql = sql2;
@@ -1724,14 +1153,12 @@ var PreparedStatement8 = class {
1724
1153
  }).then((res) => res.rows);
1725
1154
  }
1726
1155
  async run(params) {
1727
- await this.client.query(
1728
- {
1729
- name: this.name,
1730
- text: this.sql,
1731
- values: params
1732
- },
1733
- params
1734
- );
1156
+ const result = await this.client.query({
1157
+ name: this.name,
1158
+ text: this.sql,
1159
+ values: params
1160
+ });
1161
+ return { affectedRows: result.rowCount ?? 0 };
1735
1162
  }
1736
1163
  get(params) {
1737
1164
  return this.all(params).then((rows) => rows[0] ?? null);
@@ -1760,7 +1187,7 @@ var PgDriver = class _PgDriver {
1760
1187
  await this.client.query(query);
1761
1188
  }
1762
1189
  prepare(sql2, options) {
1763
- return new PreparedStatement8(this.client, sql2, options?.name);
1190
+ return new PreparedStatement5(this.client, sql2, options?.name);
1764
1191
  }
1765
1192
  async close() {
1766
1193
  if (this.depth > 0) throw new Error("Cannot close a transaction");
@@ -1768,12 +1195,7 @@ var PgDriver = class _PgDriver {
1768
1195
  if ("end" in this.client) return this.client.end();
1769
1196
  }
1770
1197
  async batch(queries) {
1771
- return this.transaction(async (tx) => {
1772
- const results = [];
1773
- for (const { sql: sql2, params } of queries)
1774
- results.push(await tx.prepare(sql2).values(params));
1775
- return results;
1776
- }, {});
1198
+ return this.transaction((tx) => Batch.run(tx, queries), {});
1777
1199
  }
1778
1200
  async transaction(run, options) {
1779
1201
  const { client, release } = await acquireClient(this.client, this.depth);
@@ -1786,20 +1208,24 @@ var PgDriver = class _PgDriver {
1786
1208
  );
1787
1209
  return result;
1788
1210
  } catch (error) {
1789
- await client.query(
1790
- this.depth > 0 ? `rollback to savepoint d${this.depth}` : "rollback"
1791
- );
1211
+ try {
1212
+ await client.query(
1213
+ this.depth > 0 ? `rollback to savepoint d${this.depth}` : "rollback"
1214
+ );
1215
+ } catch {
1216
+ }
1792
1217
  throw error;
1793
1218
  } finally {
1794
1219
  release?.();
1795
1220
  }
1796
1221
  }
1797
1222
  };
1798
- function connect7(client) {
1223
+ function connect8(client, options) {
1799
1224
  return new AsyncDatabase(
1800
1225
  new PgDriver(client),
1801
1226
  postgresDialect,
1802
- postgresDiff
1227
+ postgresDiff,
1228
+ options
1803
1229
  );
1804
1230
  }
1805
1231
 
@@ -1814,7 +1240,7 @@ var RAW_DATE_TIME_PARSERS = {
1814
1240
  1184: (value) => value
1815
1241
  // timestamptz
1816
1242
  };
1817
- var PreparedStatement9 = class {
1243
+ var PreparedStatement6 = class {
1818
1244
  constructor(client, sql2) {
1819
1245
  this.client = client;
1820
1246
  this.sql = sql2;
@@ -1828,10 +1254,11 @@ var PreparedStatement9 = class {
1828
1254
  }).then((res) => res.rows);
1829
1255
  }
1830
1256
  async run(params) {
1831
- await this.client.query(this.sql, params, {
1257
+ const result = await this.client.query(this.sql, params, {
1832
1258
  rowMode: "array",
1833
1259
  parsers: RAW_DATE_TIME_PARSERS
1834
1260
  });
1261
+ return { affectedRows: result.affectedRows ?? 0 };
1835
1262
  }
1836
1263
  get(params) {
1837
1264
  return this.all(params).then((rows) => rows[0] ?? null);
@@ -1862,15 +1289,10 @@ var PGliteDriver = class _PGliteDriver {
1862
1289
  throw new Error("Cannot close a transaction");
1863
1290
  }
1864
1291
  prepare(sql2) {
1865
- return new PreparedStatement9(this.client, sql2);
1292
+ return new PreparedStatement6(this.client, sql2);
1866
1293
  }
1867
1294
  async batch(queries) {
1868
- const transact = async (tx) => {
1869
- const results = [];
1870
- for (const { sql: sql2, params } of queries)
1871
- results.push(await tx.prepare(sql2).values(params));
1872
- return results;
1873
- };
1295
+ const transact = (tx) => Batch.run(tx, queries);
1874
1296
  if (this.depth > 0) return transact(this);
1875
1297
  return this.transaction(transact, {});
1876
1298
  }
@@ -1886,87 +1308,21 @@ var PGliteDriver = class _PGliteDriver {
1886
1308
  await this.exec(`release d${this.depth}`);
1887
1309
  return result;
1888
1310
  } catch (error) {
1889
- await this.exec(`rollback to d${this.depth}`);
1311
+ try {
1312
+ await this.exec(`rollback to d${this.depth}`);
1313
+ } catch {
1314
+ }
1890
1315
  throw error;
1891
1316
  }
1892
1317
  }
1893
1318
  };
1894
- function connect8(db) {
1895
- return new AsyncDatabase(new PGliteDriver(db), postgresDialect, postgresDiff);
1896
- }
1897
-
1898
- // node_modules/rado/dist/driver/sql.js.js
1899
- var PreparedStatement10 = class {
1900
- constructor(client, stmt) {
1901
- this.client = client;
1902
- this.stmt = stmt;
1903
- }
1904
- client;
1905
- stmt;
1906
- *iterate(params) {
1907
- this.stmt.bind(params);
1908
- while (this.stmt.step()) yield this.stmt.getAsObject();
1909
- this.stmt.reset();
1910
- }
1911
- *iterateValues(params) {
1912
- this.stmt.bind(params);
1913
- while (this.stmt.step()) yield this.stmt.get();
1914
- this.stmt.reset();
1915
- }
1916
- all(params) {
1917
- return Array.from(this.iterate(params));
1918
- }
1919
- run(params) {
1920
- this.stmt.run(params);
1921
- this.stmt.reset();
1922
- return { rowsAffected: this.client.getRowsModified() };
1923
- }
1924
- get(params) {
1925
- return this.all(params)[0] ?? null;
1926
- }
1927
- values(params) {
1928
- return Array.from(this.iterateValues(params));
1929
- }
1930
- free() {
1931
- this.stmt.free();
1932
- }
1933
- };
1934
- var SqlJsDriver = class _SqlJsDriver {
1935
- constructor(client, depth = 0) {
1936
- this.client = client;
1937
- this.depth = depth;
1938
- }
1939
- client;
1940
- depth;
1941
- parsesJson = false;
1942
- supportsTransactions = true;
1943
- exec(query) {
1944
- this.client.exec(query);
1945
- }
1946
- close() {
1947
- this.client.close();
1948
- }
1949
- prepare(sql2) {
1950
- return new PreparedStatement10(this.client, this.client.prepare(sql2));
1951
- }
1952
- batch(queries) {
1953
- return this.transaction(
1954
- (tx) => queries.map(({ sql: sql2, params }) => tx.prepare(sql2).values(params)),
1955
- {}
1956
- );
1957
- }
1958
- transaction(run, options) {
1959
- return execTransaction(
1960
- this,
1961
- this.depth,
1962
- (depth) => new _SqlJsDriver(this.client, depth),
1963
- run,
1964
- options
1965
- );
1966
- }
1967
- };
1968
- function connect9(db) {
1969
- return new SyncDatabase(new SqlJsDriver(db), sqliteDialect, sqliteDiff);
1319
+ function connect9(db, options) {
1320
+ return new AsyncDatabase(
1321
+ new PGliteDriver(db),
1322
+ postgresDialect,
1323
+ postgresDiff,
1324
+ options
1325
+ );
1970
1326
  }
1971
1327
 
1972
1328
  export {