@remix-run/data-table 0.0.0 → 0.2.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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +549 -2
  3. package/dist/index.d.ts +15 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +7 -0
  6. package/dist/lib/adapter.d.ts +550 -0
  7. package/dist/lib/adapter.d.ts.map +1 -0
  8. package/dist/lib/adapter.js +1 -0
  9. package/dist/lib/column.d.ts +193 -0
  10. package/dist/lib/column.d.ts.map +1 -0
  11. package/dist/lib/column.js +302 -0
  12. package/dist/lib/database/execution-context.d.ts +10 -0
  13. package/dist/lib/database/execution-context.d.ts.map +1 -0
  14. package/dist/lib/database/execution-context.js +1 -0
  15. package/dist/lib/database/helpers.d.ts +26 -0
  16. package/dist/lib/database/helpers.d.ts.map +1 -0
  17. package/dist/lib/database/helpers.js +116 -0
  18. package/dist/lib/database/query-execution.d.ts +7 -0
  19. package/dist/lib/database/query-execution.d.ts.map +1 -0
  20. package/dist/lib/database/query-execution.js +401 -0
  21. package/dist/lib/database/relations.d.ts +4 -0
  22. package/dist/lib/database/relations.d.ts.map +1 -0
  23. package/dist/lib/database/relations.js +207 -0
  24. package/dist/lib/database/write-lifecycle.d.ts +13 -0
  25. package/dist/lib/database/write-lifecycle.d.ts.map +1 -0
  26. package/dist/lib/database/write-lifecycle.js +279 -0
  27. package/dist/lib/database.d.ts +264 -0
  28. package/dist/lib/database.d.ts.map +1 -0
  29. package/dist/lib/database.js +319 -0
  30. package/dist/lib/errors.d.ts +59 -0
  31. package/dist/lib/errors.d.ts.map +1 -0
  32. package/dist/lib/errors.js +76 -0
  33. package/dist/lib/inflection.d.ts +3 -0
  34. package/dist/lib/inflection.d.ts.map +1 -0
  35. package/dist/lib/inflection.js +56 -0
  36. package/dist/lib/migrations/filename.d.ts +12 -0
  37. package/dist/lib/migrations/filename.d.ts.map +1 -0
  38. package/dist/lib/migrations/filename.js +20 -0
  39. package/dist/lib/migrations/helpers.d.ts +11 -0
  40. package/dist/lib/migrations/helpers.d.ts.map +1 -0
  41. package/dist/lib/migrations/helpers.js +77 -0
  42. package/dist/lib/migrations/journal-store.d.ts +15 -0
  43. package/dist/lib/migrations/journal-store.d.ts.map +1 -0
  44. package/dist/lib/migrations/journal-store.js +83 -0
  45. package/dist/lib/migrations/registry.d.ts +27 -0
  46. package/dist/lib/migrations/registry.d.ts.map +1 -0
  47. package/dist/lib/migrations/registry.js +51 -0
  48. package/dist/lib/migrations/runner.d.ts +20 -0
  49. package/dist/lib/migrations/runner.d.ts.map +1 -0
  50. package/dist/lib/migrations/runner.js +273 -0
  51. package/dist/lib/migrations/schema-api.d.ts +7 -0
  52. package/dist/lib/migrations/schema-api.d.ts.map +1 -0
  53. package/dist/lib/migrations/schema-api.js +326 -0
  54. package/dist/lib/migrations-node.d.ts +17 -0
  55. package/dist/lib/migrations-node.d.ts.map +1 -0
  56. package/dist/lib/migrations-node.js +65 -0
  57. package/dist/lib/migrations.d.ts +292 -0
  58. package/dist/lib/migrations.d.ts.map +1 -0
  59. package/dist/lib/migrations.js +38 -0
  60. package/dist/lib/operators.d.ts +154 -0
  61. package/dist/lib/operators.d.ts.map +1 -0
  62. package/dist/lib/operators.js +218 -0
  63. package/dist/lib/query.d.ts +159 -0
  64. package/dist/lib/query.d.ts.map +1 -0
  65. package/dist/lib/query.js +401 -0
  66. package/dist/lib/references.d.ts +41 -0
  67. package/dist/lib/references.d.ts.map +1 -0
  68. package/dist/lib/references.js +33 -0
  69. package/dist/lib/sql-helpers.d.ts +50 -0
  70. package/dist/lib/sql-helpers.d.ts.map +1 -0
  71. package/dist/lib/sql-helpers.js +111 -0
  72. package/dist/lib/sql.d.ts +45 -0
  73. package/dist/lib/sql.d.ts.map +1 -0
  74. package/dist/lib/sql.js +65 -0
  75. package/dist/lib/table.d.ts +569 -0
  76. package/dist/lib/table.d.ts.map +1 -0
  77. package/dist/lib/table.js +519 -0
  78. package/dist/lib/types.d.ts +4 -0
  79. package/dist/lib/types.d.ts.map +1 -0
  80. package/dist/lib/types.js +1 -0
  81. package/dist/migrations/node.d.ts +2 -0
  82. package/dist/migrations/node.d.ts.map +1 -0
  83. package/dist/migrations/node.js +1 -0
  84. package/dist/migrations.d.ts +8 -0
  85. package/dist/migrations.d.ts.map +1 -0
  86. package/dist/migrations.js +5 -0
  87. package/dist/operators.d.ts +3 -0
  88. package/dist/operators.d.ts.map +1 -0
  89. package/dist/operators.js +1 -0
  90. package/dist/sql-helpers.d.ts +3 -0
  91. package/dist/sql-helpers.d.ts.map +1 -0
  92. package/dist/sql-helpers.js +1 -0
  93. package/package.json +56 -7
  94. package/src/index.ts +198 -0
  95. package/src/lib/adapter.ts +653 -0
  96. package/src/lib/column.ts +384 -0
  97. package/src/lib/database/execution-context.ts +15 -0
  98. package/src/lib/database/helpers.ts +216 -0
  99. package/src/lib/database/query-execution.ts +638 -0
  100. package/src/lib/database/relations.ts +332 -0
  101. package/src/lib/database/write-lifecycle.ts +487 -0
  102. package/src/lib/database.ts +856 -0
  103. package/src/lib/errors.ts +119 -0
  104. package/src/lib/inflection.ts +69 -0
  105. package/src/lib/migrations/filename.ts +25 -0
  106. package/src/lib/migrations/helpers.ts +108 -0
  107. package/src/lib/migrations/journal-store.ts +122 -0
  108. package/src/lib/migrations/registry.ts +62 -0
  109. package/src/lib/migrations/runner.ts +374 -0
  110. package/src/lib/migrations/schema-api.ts +417 -0
  111. package/src/lib/migrations-node.ts +71 -0
  112. package/src/lib/migrations.ts +328 -0
  113. package/src/lib/operators.ts +436 -0
  114. package/src/lib/query.ts +958 -0
  115. package/src/lib/references.ts +78 -0
  116. package/src/lib/sql-helpers.ts +146 -0
  117. package/src/lib/sql.ts +84 -0
  118. package/src/lib/table.ts +1309 -0
  119. package/src/lib/types.ts +3 -0
  120. package/src/migrations/node.ts +1 -0
  121. package/src/migrations.ts +26 -0
  122. package/src/operators.ts +18 -0
  123. package/src/sql-helpers.ts +9 -0
@@ -0,0 +1,279 @@
1
+ import { DataTableQueryError, DataTableValidationError } from "../errors.js";
2
+ import { getTableAfterDelete, getTableAfterRead, getTableAfterWrite, getTableBeforeDelete, getTableBeforeWrite, getTableColumns, getTableName, getTableTimestamps, getTableValidator, } from "../table.js";
3
+ export function prepareInsertValues(table, values, now, touch) {
4
+ let output = validateWriteValues(table, values, 'create');
5
+ let timestamps = getTableTimestamps(table);
6
+ let columns = getTableColumns(table);
7
+ if (touch && timestamps) {
8
+ let createdAt = timestamps.createdAt;
9
+ let updatedAt = timestamps.updatedAt;
10
+ if (Object.prototype.hasOwnProperty.call(columns, createdAt) &&
11
+ output[createdAt] === undefined) {
12
+ output[createdAt] = now;
13
+ }
14
+ if (Object.prototype.hasOwnProperty.call(columns, updatedAt) &&
15
+ output[updatedAt] === undefined) {
16
+ output[updatedAt] = now;
17
+ }
18
+ }
19
+ return output;
20
+ }
21
+ export function prepareUpdateValues(table, values, now, touch, operation = 'update') {
22
+ let output = validateWriteValues(table, values, operation);
23
+ let timestamps = getTableTimestamps(table);
24
+ let columns = getTableColumns(table);
25
+ if (touch && timestamps) {
26
+ let updatedAt = timestamps.updatedAt;
27
+ if (Object.prototype.hasOwnProperty.call(columns, updatedAt) &&
28
+ output[updatedAt] === undefined) {
29
+ output[updatedAt] = now;
30
+ }
31
+ }
32
+ return output;
33
+ }
34
+ export function applyAfterReadHooksToRows(table, rows) {
35
+ let callback = getTableAfterRead(table);
36
+ if (!callback || rows.length === 0) {
37
+ return rows;
38
+ }
39
+ let tableName = getTableName(table);
40
+ return rows.map((row) => {
41
+ let callbackResult = callback({
42
+ tableName,
43
+ value: row,
44
+ });
45
+ assertSynchronousCallbackResult(tableName, 'read', 'afterRead', callbackResult);
46
+ if (hasIssues(callbackResult)) {
47
+ throwValidationIssues(tableName, callbackResult.issues, 'read', 'afterRead');
48
+ }
49
+ if (!hasValue(callbackResult)) {
50
+ throw new DataTableValidationError('Invalid afterRead callback result for table "' + tableName + '"', [{ message: 'Expected afterRead to return { value } or { issues }' }], {
51
+ metadata: {
52
+ table: tableName,
53
+ operation: 'read',
54
+ source: 'afterRead',
55
+ },
56
+ });
57
+ }
58
+ return normalizeReadObject(tableName, callbackResult.value);
59
+ });
60
+ }
61
+ export function applyAfterReadHooksToLoadedRows(table, rows, relationMap) {
62
+ if (rows.length === 0) {
63
+ return rows;
64
+ }
65
+ let relationNames = Object.keys(relationMap);
66
+ if (relationNames.length > 0) {
67
+ for (let row of rows) {
68
+ for (let relationName of relationNames) {
69
+ let relation = relationMap[relationName];
70
+ let relationValue = row[relationName];
71
+ if (relation.cardinality === 'many') {
72
+ if (!Array.isArray(relationValue)) {
73
+ continue;
74
+ }
75
+ row[relationName] = applyAfterReadHooksToLoadedRows(relation.targetTable, relationValue, relation.modifiers.with);
76
+ continue;
77
+ }
78
+ if (relationValue === null || relationValue === undefined) {
79
+ continue;
80
+ }
81
+ if (typeof relationValue !== 'object' || Array.isArray(relationValue)) {
82
+ continue;
83
+ }
84
+ let transformed = applyAfterReadHooksToLoadedRows(relation.targetTable, [relationValue], relation.modifiers.with);
85
+ row[relationName] = transformed[0] ?? null;
86
+ }
87
+ }
88
+ }
89
+ return applyAfterReadHooksToRows(table, rows);
90
+ }
91
+ export function runBeforeDeleteHook(table, context) {
92
+ let callback = getTableBeforeDelete(table);
93
+ if (!callback) {
94
+ return;
95
+ }
96
+ let callbackResult = callback(context);
97
+ assertSynchronousCallbackResult(context.tableName, 'delete', 'beforeDelete', callbackResult);
98
+ if (callbackResult === undefined) {
99
+ return;
100
+ }
101
+ if (hasIssues(callbackResult)) {
102
+ throwValidationIssues(context.tableName, callbackResult.issues, 'delete', 'beforeDelete');
103
+ }
104
+ throw new DataTableValidationError('Invalid beforeDelete callback result for table "' + context.tableName + '"', [{ message: 'Expected beforeDelete to return nothing or { issues }' }], {
105
+ metadata: {
106
+ table: context.tableName,
107
+ operation: 'delete',
108
+ source: 'beforeDelete',
109
+ },
110
+ });
111
+ }
112
+ export function runAfterWriteHook(table, context) {
113
+ let callback = getTableAfterWrite(table);
114
+ if (!callback) {
115
+ return;
116
+ }
117
+ let callbackResult = callback(context);
118
+ assertSynchronousCallbackResult(context.tableName, context.operation, 'afterWrite', callbackResult);
119
+ }
120
+ export function runAfterDeleteHook(table, context) {
121
+ let callback = getTableAfterDelete(table);
122
+ if (!callback) {
123
+ return;
124
+ }
125
+ let callbackResult = callback(context);
126
+ assertSynchronousCallbackResult(context.tableName, 'delete', 'afterDelete', callbackResult);
127
+ }
128
+ export function assertReturningCapability(adapter, operation, returning) {
129
+ if (returning && !adapter.capabilities.returning) {
130
+ throw new DataTableQueryError(operation + '() returning is not supported by this adapter');
131
+ }
132
+ }
133
+ export function normalizeReturningSelection(returning) {
134
+ if (returning === '*') {
135
+ return '*';
136
+ }
137
+ return [...returning];
138
+ }
139
+ function validateWriteValues(table, values, operation) {
140
+ let tableName = getTableName(table);
141
+ let normalizedInput = normalizeWriteObject(table, values, operation);
142
+ let beforeWrite = getTableBeforeWrite(table);
143
+ if (beforeWrite) {
144
+ let beforeWriteResult = beforeWrite({
145
+ operation,
146
+ tableName,
147
+ value: normalizedInput,
148
+ });
149
+ assertSynchronousCallbackResult(tableName, operation, 'beforeWrite', beforeWriteResult);
150
+ if (hasIssues(beforeWriteResult)) {
151
+ throwValidationIssues(tableName, beforeWriteResult.issues, operation, 'beforeWrite');
152
+ }
153
+ if (!hasValue(beforeWriteResult)) {
154
+ throw new DataTableValidationError('Invalid beforeWrite callback result for table "' + tableName + '"', [{ message: 'Expected beforeWrite to return { value } or { issues }' }], {
155
+ metadata: {
156
+ table: tableName,
157
+ operation,
158
+ source: 'beforeWrite',
159
+ },
160
+ });
161
+ }
162
+ normalizedInput = normalizeWriteObject(table, beforeWriteResult.value, operation, 'beforeWrite');
163
+ }
164
+ let validator = getTableValidator(table);
165
+ if (!validator) {
166
+ return normalizedInput;
167
+ }
168
+ let validationResult = validator({
169
+ operation,
170
+ tableName,
171
+ value: normalizedInput,
172
+ });
173
+ assertSynchronousCallbackResult(tableName, operation, 'validate', validationResult);
174
+ if (hasIssues(validationResult)) {
175
+ throwValidationIssues(tableName, validationResult.issues, operation, 'validate');
176
+ }
177
+ if (!hasValue(validationResult)) {
178
+ throw new DataTableValidationError('Invalid validator result for table "' + tableName + '"', [{ message: 'Expected validator to return { value } or { issues }' }], {
179
+ metadata: {
180
+ table: tableName,
181
+ operation,
182
+ source: 'validate',
183
+ },
184
+ });
185
+ }
186
+ return normalizeWriteObject(table, validationResult.value, operation, 'validate');
187
+ }
188
+ function hasIssues(value) {
189
+ return typeof value === 'object' && value !== null && 'issues' in value;
190
+ }
191
+ function hasValue(value) {
192
+ return typeof value === 'object' && value !== null && 'value' in value;
193
+ }
194
+ function normalizeWriteObject(table, value, operation, source) {
195
+ let tableName = getTableName(table);
196
+ let columns = getTableColumns(table);
197
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
198
+ throw new DataTableValidationError('Invalid value for table "' + tableName + '"', [{ message: 'Expected object' }], {
199
+ metadata: {
200
+ table: tableName,
201
+ operation,
202
+ ...(source ? { source } : {}),
203
+ },
204
+ });
205
+ }
206
+ let output = {};
207
+ for (let key in value) {
208
+ if (!Object.prototype.hasOwnProperty.call(value, key)) {
209
+ continue;
210
+ }
211
+ if (!Object.prototype.hasOwnProperty.call(columns, key)) {
212
+ throw new DataTableValidationError('Unknown column "' + key + '" for table "' + tableName + '"', [], {
213
+ metadata: {
214
+ table: tableName,
215
+ column: key,
216
+ operation,
217
+ ...(source ? { source } : {}),
218
+ },
219
+ });
220
+ }
221
+ output[key] = value[key];
222
+ }
223
+ return output;
224
+ }
225
+ function throwValidationIssues(tableName, issues, operation, source) {
226
+ let firstIssue = issues[0];
227
+ let issuePath = firstIssue?.path;
228
+ let firstPathSegment = issuePath && issuePath.length > 0 ? issuePath[0] : undefined;
229
+ let column = typeof firstPathSegment === 'string' ? firstPathSegment : undefined;
230
+ if (column) {
231
+ throw new DataTableValidationError('Invalid value for column "' + column + '" in table "' + tableName + '"', issues, {
232
+ metadata: {
233
+ table: tableName,
234
+ column,
235
+ operation,
236
+ ...(source ? { source } : {}),
237
+ },
238
+ });
239
+ }
240
+ throw new DataTableValidationError('Invalid value for table "' + tableName + '"', issues, {
241
+ metadata: {
242
+ table: tableName,
243
+ operation,
244
+ ...(source ? { source } : {}),
245
+ },
246
+ });
247
+ }
248
+ function assertSynchronousCallbackResult(tableName, operation, callbackName, value) {
249
+ if (!isPromiseLike(value)) {
250
+ return;
251
+ }
252
+ throw new DataTableValidationError('Invalid ' + callbackName + ' callback result for table "' + tableName + '"', [{ message: callbackName + ' callbacks must be synchronous and cannot return a Promise' }], {
253
+ metadata: {
254
+ table: tableName,
255
+ operation,
256
+ source: callbackName,
257
+ },
258
+ });
259
+ }
260
+ function isPromiseLike(value) {
261
+ return ((typeof value === 'object' || typeof value === 'function') &&
262
+ value !== null &&
263
+ 'then' in value &&
264
+ typeof value.then === 'function');
265
+ }
266
+ function normalizeReadObject(tableName, value) {
267
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
268
+ throw new DataTableValidationError('Invalid afterRead callback result for table "' + tableName + '"', [{ message: 'Expected afterRead to return an object value' }], {
269
+ metadata: {
270
+ table: tableName,
271
+ operation: 'read',
272
+ source: 'afterRead',
273
+ },
274
+ });
275
+ }
276
+ return {
277
+ ...value,
278
+ };
279
+ }
@@ -0,0 +1,264 @@
1
+ import type { ColumnDefinition, DataManipulationOperation, DataManipulationResult, DatabaseAdapter, TransactionOptions, TransactionToken } from './adapter.ts';
2
+ import type { ColumnBuilder } from './column.ts';
3
+ import { executeOperation, type QueryExecutionContext } from './database/execution-context.ts';
4
+ import type { AnyQuery, BoundQueryPhase, Query as QueryObject, QueryExecutionResult } from './query.ts';
5
+ import type { ColumnInput, NormalizeColumnInput, TableMetadataLike } from './references.ts';
6
+ import type { SqlStatement } from './sql.ts';
7
+ import type { AnyRelation, AnyTable, LoadedRelationMap, OrderDirection, PrimaryKeyInput, TableName, TablePrimaryKey, TableRow, TableRowWith, TableValidate, tableMetadataKey, TimestampConfig } from './table.ts';
8
+ import type { Pretty } from './types.ts';
9
+ import type { WhereInput } from './operators.ts';
10
+ export type TableColumnName<table extends AnyTable> = keyof TableRow<table> & string;
11
+ export type QualifiedTableColumnName<table extends AnyTable> = `${TableName<table>}.${TableColumnName<table>}`;
12
+ export type QueryColumnName<table extends AnyTable> = TableColumnName<table> | QualifiedTableColumnName<table>;
13
+ type RowColumnName<row extends Record<string, unknown>> = keyof row & string;
14
+ type QualifiedRowColumnName<tableName extends string, row extends Record<string, unknown>> = `${tableName}.${RowColumnName<row>}`;
15
+ export type QueryColumnTypeMapFromRow<tableName extends string, row extends Record<string, unknown>> = {
16
+ [column in RowColumnName<row> | QualifiedRowColumnName<tableName, row>]: column extends RowColumnName<row> ? row[column] : column extends `${tableName}.${infer name extends RowColumnName<row>}` ? row[name] : never;
17
+ };
18
+ export type QueryColumnTypeMap<table extends AnyTable> = Pretty<QueryColumnTypeMapFromRow<TableName<table>, TableRow<table>>>;
19
+ export type MergeColumnTypeMaps<left extends Record<string, unknown>, right extends Record<string, unknown>> = Pretty<{
20
+ [column in Extract<keyof left | keyof right, string>]: column extends keyof right ? column extends keyof left ? left[column] | right[column] : right[column] : column extends keyof left ? left[column] : never;
21
+ }>;
22
+ export type QueryColumns<columnTypes extends Record<string, unknown>> = Extract<keyof columnTypes, string>;
23
+ export type QueryColumnInput<columnTypes extends Record<string, unknown>> = ColumnInput<QueryColumns<columnTypes>>;
24
+ export type SelectedAliasRow<columnTypes extends Record<string, unknown>, selection extends Record<string, QueryColumnInput<columnTypes>>> = Pretty<{
25
+ [alias in keyof selection]: NormalizeColumnInput<selection[alias]> extends keyof columnTypes ? columnTypes[NormalizeColumnInput<selection[alias]>] : never;
26
+ }>;
27
+ export type RelationMapForSourceName<tableName extends string> = Record<string, AnyRelation & {
28
+ sourceTable: {
29
+ [tableMetadataKey]: {
30
+ name: tableName;
31
+ };
32
+ };
33
+ }>;
34
+ export type PrimaryKeyInputForRow<row extends Record<string, unknown>, primaryKey extends readonly string[]> = primaryKey extends readonly [infer column extends keyof row & string] ? row[column] : {
35
+ [column in primaryKey[number] & keyof row]: row[column];
36
+ };
37
+ export type ReturningInput<row extends Record<string, unknown>> = '*' | (keyof row & string)[];
38
+ /**
39
+ * Table-like metadata accepted by `database.query()`.
40
+ */
41
+ export type QueryTableInput<tableName extends string, row extends Record<string, unknown>, primaryKey extends readonly (keyof row & string)[]> = TableMetadataLike<tableName, {
42
+ [column in keyof row & string]: ColumnBuilder<row[column]>;
43
+ }, primaryKey, TimestampConfig | null> & {
44
+ [tableMetadataKey]: {
45
+ name: tableName;
46
+ columns: {
47
+ [column in keyof row & string]: ColumnBuilder<row[column]>;
48
+ };
49
+ primaryKey: primaryKey;
50
+ timestamps: TimestampConfig | null;
51
+ columnDefinitions: Record<string, ColumnDefinition>;
52
+ validate?: TableValidate<Record<string, unknown>>;
53
+ };
54
+ } & Record<string, unknown>;
55
+ /**
56
+ * Result metadata for write operations that do not return rows.
57
+ */
58
+ export type WriteResult = {
59
+ affectedRows: number;
60
+ insertId?: unknown;
61
+ };
62
+ /**
63
+ * Result metadata for write operations that return multiple rows.
64
+ */
65
+ export type WriteRowsResult<row> = {
66
+ affectedRows: number;
67
+ insertId?: unknown;
68
+ rows: row[];
69
+ };
70
+ /**
71
+ * Result metadata for write operations that return a single row.
72
+ */
73
+ export type WriteRowResult<row> = {
74
+ affectedRows: number;
75
+ insertId?: unknown;
76
+ row: row | null;
77
+ };
78
+ /**
79
+ * Queryable column type map for a concrete table.
80
+ */
81
+ export type QueryColumnTypesForTable<table extends AnyTable> = QueryColumnTypeMap<table>;
82
+ /**
83
+ * Query type produced for a concrete table.
84
+ */
85
+ export type QueryForTable<table extends AnyTable, loaded extends Record<string, unknown> = {}> = QueryObject<QueryTableInput<TableName<table>, TableRow<table>, TablePrimaryKey<table>>, QueryColumnTypesForTable<table>, TableRow<table>, loaded, BoundQueryPhase<'all'>>;
86
+ /**
87
+ * Column names accepted in single-table queries.
88
+ */
89
+ export type SingleTableColumn<table extends AnyTable> = QueryColumns<QueryColumnTypeMap<table>>;
90
+ /**
91
+ * `where` input accepted in single-table queries.
92
+ */
93
+ export type SingleTableWhere<table extends AnyTable> = WhereInput<SingleTableColumn<table>>;
94
+ /**
95
+ * Tuple form accepted by `orderBy` for a single table.
96
+ */
97
+ export type OrderByTuple<table extends AnyTable> = [
98
+ column: SingleTableColumn<table>,
99
+ direction?: OrderDirection
100
+ ];
101
+ /**
102
+ * `orderBy` input accepted in single-table queries.
103
+ */
104
+ export type OrderByInput<table extends AnyTable> = OrderByTuple<table> | OrderByTuple<table>[];
105
+ /**
106
+ * Options for loading many rows from a table.
107
+ */
108
+ export type FindManyOptions<table extends AnyTable, relations extends RelationMapForSourceName<TableName<table>> = {}> = {
109
+ where?: SingleTableWhere<table>;
110
+ orderBy?: OrderByInput<table>;
111
+ limit?: number;
112
+ offset?: number;
113
+ with?: relations;
114
+ };
115
+ /**
116
+ * Options for loading a single row from a table.
117
+ */
118
+ export type FindOneOptions<table extends AnyTable, relations extends RelationMapForSourceName<TableName<table>> = {}> = Omit<FindManyOptions<table, relations>, 'limit' | 'offset'> & {
119
+ where: SingleTableWhere<table>;
120
+ };
121
+ /**
122
+ * Options for updating a single row.
123
+ */
124
+ export type UpdateOptions<table extends AnyTable, relations extends RelationMapForSourceName<TableName<table>> = {}> = {
125
+ touch?: boolean;
126
+ with?: relations;
127
+ };
128
+ /**
129
+ * Options for updating many rows.
130
+ */
131
+ export type UpdateManyOptions<table extends AnyTable> = {
132
+ where: SingleTableWhere<table>;
133
+ orderBy?: OrderByInput<table>;
134
+ limit?: number;
135
+ offset?: number;
136
+ touch?: boolean;
137
+ };
138
+ /**
139
+ * Options for deleting many rows.
140
+ */
141
+ export type DeleteManyOptions<table extends AnyTable> = {
142
+ where: SingleTableWhere<table>;
143
+ orderBy?: OrderByInput<table>;
144
+ limit?: number;
145
+ offset?: number;
146
+ };
147
+ /**
148
+ * Options for counting rows.
149
+ */
150
+ export type CountOptions<table extends AnyTable> = {
151
+ where?: SingleTableWhere<table>;
152
+ };
153
+ /**
154
+ * Options for create operations that return only write metadata.
155
+ */
156
+ export type CreateResultOptions = {
157
+ touch?: boolean;
158
+ returnRow?: false;
159
+ };
160
+ /**
161
+ * Options for create operations that return the inserted row.
162
+ */
163
+ export type CreateRowOptions<table extends AnyTable, relations extends RelationMapForSourceName<TableName<table>> = {}> = {
164
+ touch?: boolean;
165
+ with?: relations;
166
+ returnRow: true;
167
+ };
168
+ /**
169
+ * Options for bulk-create operations that return only write metadata.
170
+ */
171
+ export type CreateManyResultOptions = {
172
+ touch?: boolean;
173
+ returnRows?: false;
174
+ };
175
+ /**
176
+ * Options for bulk-create operations that return inserted rows.
177
+ */
178
+ export type CreateManyRowsOptions = {
179
+ touch?: boolean;
180
+ returnRows: true;
181
+ };
182
+ type SavepointCounter = {
183
+ value: number;
184
+ };
185
+ type DatabaseOptions = {
186
+ now?: () => unknown;
187
+ };
188
+ type DatabaseInternalState = {
189
+ token?: TransactionToken;
190
+ savepointCounter: SavepointCounter;
191
+ };
192
+ declare const createInternalDatabase: unique symbol;
193
+ /**
194
+ * High-level database runtime used to build and execute data manipulation operations.
195
+ *
196
+ * Create instances directly with `new Database(adapter, options)` or use
197
+ * `createDatabase(adapter, options)` as a thin wrapper.
198
+ */
199
+ export declare class Database implements QueryExecutionContext {
200
+ #private;
201
+ constructor(adapter: DatabaseAdapter, options?: DatabaseOptions);
202
+ static [createInternalDatabase](adapter: DatabaseAdapter, options: DatabaseOptions | undefined, internal: DatabaseInternalState): Database;
203
+ get adapter(): DatabaseAdapter;
204
+ now(): unknown;
205
+ query<tableName extends string, row extends Record<string, unknown>, primaryKey extends readonly (keyof row & string)[]>(table: QueryTableInput<tableName, row, primaryKey>): QueryObject<QueryTableInput<tableName, row, primaryKey>, Pretty<QueryColumnTypeMapFromRow<tableName, row>>, row, {}, BoundQueryPhase<'all'>>;
206
+ create<table extends AnyTable>(table: table, values: Partial<TableRow<table>>, options?: CreateResultOptions): Promise<WriteResult>;
207
+ create<table extends AnyTable, relations extends RelationMapForSourceName<TableName<table>> = {}>(table: table, values: Partial<TableRow<table>>, options: CreateRowOptions<table, relations>): Promise<TableRowWith<table, LoadedRelationMap<relations>>>;
208
+ createMany<table extends AnyTable>(table: table, values: Array<Partial<TableRow<table>>>, options?: CreateManyResultOptions): Promise<WriteResult>;
209
+ createMany<table extends AnyTable>(table: table, values: Array<Partial<TableRow<table>>>, options: CreateManyRowsOptions): Promise<TableRow<table>[]>;
210
+ find<table extends AnyTable, relations extends RelationMapForSourceName<TableName<table>> = {}>(table: table, value: PrimaryKeyInput<table>, options?: {
211
+ with?: relations;
212
+ }): Promise<TableRowWith<table, LoadedRelationMap<relations>> | null>;
213
+ findOne<table extends AnyTable, relations extends RelationMapForSourceName<TableName<table>> = {}>(table: table, options: FindOneOptions<table, relations>): Promise<TableRowWith<table, LoadedRelationMap<relations>> | null>;
214
+ findMany<table extends AnyTable, relations extends RelationMapForSourceName<TableName<table>> = {}>(table: table, options?: FindManyOptions<table, relations>): Promise<Array<TableRowWith<table, LoadedRelationMap<relations>>>>;
215
+ count<table extends AnyTable>(table: table, options?: CountOptions<table>): Promise<number>;
216
+ update<table extends AnyTable, relations extends RelationMapForSourceName<TableName<table>> = {}>(table: table, value: PrimaryKeyInput<table>, changes: Partial<TableRow<table>>, options?: UpdateOptions<table, relations>): Promise<TableRowWith<table, LoadedRelationMap<relations>>>;
217
+ updateMany<table extends AnyTable>(table: table, changes: Partial<TableRow<table>>, options: UpdateManyOptions<table>): Promise<WriteResult>;
218
+ delete<table extends AnyTable>(table: table, value: PrimaryKeyInput<table>): Promise<boolean>;
219
+ deleteMany<table extends AnyTable>(table: table, options: DeleteManyOptions<table>): Promise<WriteResult>;
220
+ exec(statement: string | SqlStatement, values?: unknown[]): Promise<DataManipulationResult>;
221
+ exec<input extends AnyQuery>(input: input): Promise<QueryExecutionResult<input>>;
222
+ transaction<result>(callback: (database: Database) => Promise<result>, options?: TransactionOptions): Promise<result>;
223
+ [executeOperation](operation: DataManipulationOperation): Promise<DataManipulationResult>;
224
+ }
225
+ /**
226
+ * Creates a database runtime from an adapter.
227
+ * Thin wrapper around `new Database(adapter, options)`.
228
+ * @param adapter Adapter implementation responsible for SQL execution.
229
+ * @param options Optional runtime options.
230
+ * @param options.now Clock function used for auto-managed timestamps.
231
+ * @returns A {@link Database} API instance.
232
+ * @example
233
+ * ```ts
234
+ * import { column as c, createDatabase, table } from 'remix/data-table'
235
+ *
236
+ * let users = table({
237
+ * name: 'users',
238
+ * columns: {
239
+ * id: c.integer(),
240
+ * email: c.varchar(255),
241
+ * },
242
+ * })
243
+ *
244
+ * let db = createDatabase(adapter)
245
+ * let rows = await db.query(users).where({ id: 1 }).all()
246
+ * ```
247
+ */
248
+ export declare function createDatabase(adapter: DatabaseAdapter, options?: {
249
+ now?: () => unknown;
250
+ }): Database;
251
+ /**
252
+ * Creates a database runtime bound to an existing adapter transaction token.
253
+ * This is an internal helper used by the migration runner.
254
+ * @param adapter Adapter implementation responsible for SQL execution.
255
+ * @param token Active adapter transaction token.
256
+ * @param options Optional runtime options.
257
+ * @param options.now Clock function used for auto-managed timestamps.
258
+ * @returns A {@link Database} API instance bound to the provided transaction.
259
+ */
260
+ export declare function createDatabaseWithTransaction(adapter: DatabaseAdapter, token: TransactionToken, options?: {
261
+ now?: () => unknown;
262
+ }): Database;
263
+ export {};
264
+ //# sourceMappingURL=database.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/lib/database.ts"],"names":[],"mappings":"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"}