@byline/db-postgres 0.9.3

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 (99) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +18 -0
  3. package/dist/database/schema/auth.d.ts +857 -0
  4. package/dist/database/schema/auth.d.ts.map +1 -0
  5. package/dist/database/schema/auth.js +176 -0
  6. package/dist/database/schema/auth.js.map +1 -0
  7. package/dist/database/schema/index.d.ts +2955 -0
  8. package/dist/database/schema/index.d.ts.map +1 -0
  9. package/dist/database/schema/index.js +500 -0
  10. package/dist/database/schema/index.js.map +1 -0
  11. package/dist/index.d.ts +31 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +30 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/lib/test-helper.d.ts +17 -0
  16. package/dist/lib/test-helper.d.ts.map +1 -0
  17. package/dist/lib/test-helper.js +47 -0
  18. package/dist/lib/test-helper.js.map +1 -0
  19. package/dist/modules/admin/admin-permissions-repository.d.ts +17 -0
  20. package/dist/modules/admin/admin-permissions-repository.d.ts.map +1 -0
  21. package/dist/modules/admin/admin-permissions-repository.js +76 -0
  22. package/dist/modules/admin/admin-permissions-repository.js.map +1 -0
  23. package/dist/modules/admin/admin-roles-repository.d.ts +12 -0
  24. package/dist/modules/admin/admin-roles-repository.d.ts.map +1 -0
  25. package/dist/modules/admin/admin-roles-repository.js +168 -0
  26. package/dist/modules/admin/admin-roles-repository.js.map +1 -0
  27. package/dist/modules/admin/admin-store.d.ts +20 -0
  28. package/dist/modules/admin/admin-store.d.ts.map +1 -0
  29. package/dist/modules/admin/admin-store.js +28 -0
  30. package/dist/modules/admin/admin-store.js.map +1 -0
  31. package/dist/modules/admin/admin-users-repository.d.ts +12 -0
  32. package/dist/modules/admin/admin-users-repository.d.ts.map +1 -0
  33. package/dist/modules/admin/admin-users-repository.js +208 -0
  34. package/dist/modules/admin/admin-users-repository.js.map +1 -0
  35. package/dist/modules/admin/index.d.ts +27 -0
  36. package/dist/modules/admin/index.d.ts.map +1 -0
  37. package/dist/modules/admin/index.js +27 -0
  38. package/dist/modules/admin/index.js.map +1 -0
  39. package/dist/modules/admin/refresh-tokens-repository.d.ts +16 -0
  40. package/dist/modules/admin/refresh-tokens-repository.d.ts.map +1 -0
  41. package/dist/modules/admin/refresh-tokens-repository.js +132 -0
  42. package/dist/modules/admin/refresh-tokens-repository.js.map +1 -0
  43. package/dist/modules/admin/tests/auth-integration.test.d.ts +9 -0
  44. package/dist/modules/admin/tests/auth-integration.test.d.ts.map +1 -0
  45. package/dist/modules/admin/tests/auth-integration.test.js +392 -0
  46. package/dist/modules/admin/tests/auth-integration.test.js.map +1 -0
  47. package/dist/modules/admin/tests/session-provider.test.d.ts +9 -0
  48. package/dist/modules/admin/tests/session-provider.test.d.ts.map +1 -0
  49. package/dist/modules/admin/tests/session-provider.test.js +370 -0
  50. package/dist/modules/admin/tests/session-provider.test.js.map +1 -0
  51. package/dist/modules/storage/@types.d.ts +116 -0
  52. package/dist/modules/storage/@types.d.ts.map +1 -0
  53. package/dist/modules/storage/@types.js +9 -0
  54. package/dist/modules/storage/@types.js.map +1 -0
  55. package/dist/modules/storage/storage-commands.d.ts +136 -0
  56. package/dist/modules/storage/storage-commands.d.ts.map +1 -0
  57. package/dist/modules/storage/storage-commands.js +272 -0
  58. package/dist/modules/storage/storage-commands.js.map +1 -0
  59. package/dist/modules/storage/storage-flatten.d.ts +19 -0
  60. package/dist/modules/storage/storage-flatten.d.ts.map +1 -0
  61. package/dist/modules/storage/storage-flatten.js +261 -0
  62. package/dist/modules/storage/storage-flatten.js.map +1 -0
  63. package/dist/modules/storage/storage-insert.d.ts +22 -0
  64. package/dist/modules/storage/storage-insert.d.ts.map +1 -0
  65. package/dist/modules/storage/storage-insert.js +115 -0
  66. package/dist/modules/storage/storage-insert.js.map +1 -0
  67. package/dist/modules/storage/storage-queries.d.ts +377 -0
  68. package/dist/modules/storage/storage-queries.d.ts.map +1 -0
  69. package/dist/modules/storage/storage-queries.js +976 -0
  70. package/dist/modules/storage/storage-queries.js.map +1 -0
  71. package/dist/modules/storage/storage-restore.d.ts +19 -0
  72. package/dist/modules/storage/storage-restore.d.ts.map +1 -0
  73. package/dist/modules/storage/storage-restore.js +350 -0
  74. package/dist/modules/storage/storage-restore.js.map +1 -0
  75. package/dist/modules/storage/storage-store-manifest.d.ts +71 -0
  76. package/dist/modules/storage/storage-store-manifest.d.ts.map +1 -0
  77. package/dist/modules/storage/storage-store-manifest.js +294 -0
  78. package/dist/modules/storage/storage-store-manifest.js.map +1 -0
  79. package/dist/modules/storage/storage-utils.d.ts +23 -0
  80. package/dist/modules/storage/storage-utils.d.ts.map +1 -0
  81. package/dist/modules/storage/storage-utils.js +72 -0
  82. package/dist/modules/storage/storage-utils.js.map +1 -0
  83. package/dist/modules/storage/tests/storage-field-types.test.d.ts +9 -0
  84. package/dist/modules/storage/tests/storage-field-types.test.d.ts.map +1 -0
  85. package/dist/modules/storage/tests/storage-field-types.test.js +146 -0
  86. package/dist/modules/storage/tests/storage-field-types.test.js.map +1 -0
  87. package/dist/modules/storage/tests/storage-flatten-reconstruct.test.d.ts +9 -0
  88. package/dist/modules/storage/tests/storage-flatten-reconstruct.test.d.ts.map +1 -0
  89. package/dist/modules/storage/tests/storage-flatten-reconstruct.test.js +327 -0
  90. package/dist/modules/storage/tests/storage-flatten-reconstruct.test.js.map +1 -0
  91. package/dist/modules/storage/tests/storage-store-manifest.test.d.ts +9 -0
  92. package/dist/modules/storage/tests/storage-store-manifest.test.d.ts.map +1 -0
  93. package/dist/modules/storage/tests/storage-store-manifest.test.js +141 -0
  94. package/dist/modules/storage/tests/storage-store-manifest.test.js.map +1 -0
  95. package/dist/modules/storage/tests/storage-versioning.test.d.ts +9 -0
  96. package/dist/modules/storage/tests/storage-versioning.test.d.ts.map +1 -0
  97. package/dist/modules/storage/tests/storage-versioning.test.js +336 -0
  98. package/dist/modules/storage/tests/storage-versioning.test.js.map +1 -0
  99. package/package.json +81 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/database/schema/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,500 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ import { eq, relations, sql } from 'drizzle-orm';
9
+ import { bigint, boolean, date, decimal, index, integer, jsonb, pgTable, pgView, real, text, time, timestamp, unique, uuid, varchar, } from 'drizzle-orm/pg-core';
10
+ // Collections table
11
+ export const collections = pgTable('byline_collections', {
12
+ id: uuid('id').primaryKey(),
13
+ path: varchar('path', { length: 255 }).unique().notNull(),
14
+ singular: text('singular').notNull(), // Singular label for the collection
15
+ plural: text('plural').notNull(), // Plural label for the collection
16
+ config: jsonb('config').notNull(), // Store CollectionConfig
17
+ // Monotonically-increasing schema version. Incremented by the startup
18
+ // bootstrap whenever `schema_hash` changes (or to a value pinned
19
+ // explicitly via `CollectionDefinition.version`).
20
+ version: integer('version').notNull().default(1),
21
+ // SHA-256 fingerprint of the data-shape-relevant portion of the
22
+ // collection's definition. Nullable in Phase 1 — populated on first
23
+ // `ensureCollections()` run post-migration, tightens to NOT NULL when
24
+ // the `collection_versions` history table lands.
25
+ schema_hash: varchar('schema_hash', { length: 64 }),
26
+ created_at: timestamp('created_at').defaultNow(),
27
+ updated_at: timestamp('updated_at').defaultNow(),
28
+ });
29
+ // Documents table
30
+ export const documents = pgTable('byline_documents', {
31
+ id: uuid('id').primaryKey(),
32
+ collection_id: uuid('collection_id')
33
+ .notNull()
34
+ .references(() => collections.id, { onDelete: 'cascade' }),
35
+ created_at: timestamp('created_at').defaultNow(),
36
+ updated_at: timestamp('updated_at').defaultNow(),
37
+ }, (table) => [index('idx_documents_collection').on(table.collection_id)]);
38
+ // Document versions table
39
+ export const documentVersions = pgTable('byline_document_versions', {
40
+ id: uuid('id').primaryKey(), // UUIDv7 versioning by default
41
+ document_id: uuid('document_id')
42
+ .notNull()
43
+ .references(() => documents.id, { onDelete: 'cascade' }),
44
+ collection_id: uuid('collection_id')
45
+ .notNull()
46
+ .references(() => collections.id, { onDelete: 'cascade' }),
47
+ // Collection schema version this row was authored against. Used by
48
+ // future in-memory migration code to resolve historical document
49
+ // shapes. Phase 1 records the number; no composite FK yet — that
50
+ // anchors in Phase 2 alongside the history table.
51
+ collection_version: integer('collection_version').notNull(),
52
+ path: varchar('path', { length: 255 }).notNull(), // Can change between versions
53
+ doc: jsonb('doc'), // optionally store the original document
54
+ event_type: varchar('event_type', { length: 20 }).notNull().default('create'), // 'create', 'update', 'delete'
55
+ status: varchar('status', { length: 50 }).default('draft'),
56
+ is_deleted: boolean('is_deleted').default(false), // Tombstone for soft deletes
57
+ created_at: timestamp('created_at').defaultNow(),
58
+ updated_at: timestamp('updated_at').defaultNow(),
59
+ created_by: uuid('created_by'),
60
+ change_summary: text('change_summary'),
61
+ }, (table) => [
62
+ // Index for finding all versions of a logical document
63
+ index('idx_documents_document_id').on(table.document_id),
64
+ // Index for current document lookup by path
65
+ index('idx_documents_collection_path_deleted').on(table.collection_id, table.path, table.is_deleted),
66
+ // Index for current document lookup by logical document ID
67
+ index('idx_documents_collection_document_deleted').on(table.collection_id, table.document_id, table.is_deleted),
68
+ // Index to optimize the current documents view
69
+ index('idx_documents_current_view').on(table.collection_id, table.document_id, table.is_deleted, table.id),
70
+ // Event and audit indexes
71
+ index('idx_documents_event_type').on(table.event_type),
72
+ index('idx_documents_created_at').on(table.created_at),
73
+ // Ensure logical document belongs to only one collection
74
+ index('idx_documents_document_collection').on(table.document_id, table.collection_id),
75
+ // Per-collection path uniqueness is a DEFERRED design decision — it
76
+ // depends on a collision-handling policy (reject vs auto-suffix) and
77
+ // is planned to land alongside preview-link UX. See
78
+ // `docs/analysis/DOCUMENT-PATH-ANALYSIS.md` § "Path uniqueness".
79
+ ]);
80
+ // Document Relationships (Parent/Child) - Many-to-Many
81
+ export const documentRelationships = pgTable('byline_document_relationships', {
82
+ // Note: These reference the logical `document_id`, not the version `id`.
83
+ // Foreign key constraints are not used; integrity is handled at the application layer.
84
+ parent_document_id: uuid('parent_document_id')
85
+ .notNull()
86
+ .references(() => documents.id, { onDelete: 'cascade' }),
87
+ child_document_id: uuid('child_document_id')
88
+ .notNull()
89
+ .references(() => documents.id, { onDelete: 'cascade' }),
90
+ created_at: timestamp('created_at').defaultNow(),
91
+ }, (table) => [
92
+ // Composite primary key to ensure a child is only parented once by the same parent.
93
+ unique().on(table.parent_document_id, table.child_document_id),
94
+ // Indexes for efficient lookups of children and parents.
95
+ index('idx_document_relationships_parent').on(table.parent_document_id),
96
+ index('idx_document_relationships_child').on(table.child_document_id),
97
+ ]);
98
+ // Current Documents View — latest version of each logical document via
99
+ // `ROW_NUMBER() OVER (PARTITION BY document_id ORDER BY id DESC)`.
100
+ // `selectDistinct` is not an option here: it distincts on the whole row,
101
+ // not on `document_id`.
102
+ export const currentDocumentsView = pgView('byline_current_documents').as((qb) => {
103
+ const sq = qb.$with('sq').as(qb
104
+ .select({
105
+ id: documentVersions.id,
106
+ document_id: documentVersions.document_id,
107
+ collection_id: documentVersions.collection_id,
108
+ collection_version: documentVersions.collection_version,
109
+ path: documentVersions.path,
110
+ event_type: documentVersions.event_type,
111
+ status: documentVersions.status,
112
+ is_deleted: documentVersions.is_deleted,
113
+ created_at: documentVersions.created_at,
114
+ updated_at: documentVersions.updated_at,
115
+ created_by: documentVersions.created_by,
116
+ change_summary: documentVersions.change_summary,
117
+ rn: sql `row_number() OVER (PARTITION BY ${documentVersions.document_id} ORDER BY ${documentVersions.id} DESC)`.as('rn'),
118
+ })
119
+ .from(documentVersions)
120
+ .where(eq(documentVersions.is_deleted, false)));
121
+ return qb
122
+ .with(sq)
123
+ .select({
124
+ id: sq.id,
125
+ document_id: sq.document_id,
126
+ collection_id: sq.collection_id,
127
+ collection_version: sq.collection_version,
128
+ path: sq.path,
129
+ event_type: sq.event_type,
130
+ status: sq.status,
131
+ is_deleted: sq.is_deleted,
132
+ created_at: sq.created_at,
133
+ updated_at: sq.updated_at,
134
+ created_by: sq.created_by,
135
+ change_summary: sq.change_summary,
136
+ })
137
+ .from(sq)
138
+ .where(eq(sq.rn, 1));
139
+ });
140
+ // Current Published Documents View - gets the latest version of each logical
141
+ // document whose status is 'published', regardless of whether a newer draft
142
+ // version exists. Used by `readMode: 'published'` on reads so public
143
+ // consumers keep seeing the last published content while editors work on
144
+ // drafts. Row-wise shape is identical to `current_documents`.
145
+ export const currentPublishedDocumentsView = pgView('byline_current_published_documents').as((qb) => {
146
+ const sq = qb.$with('sq').as(qb
147
+ .select({
148
+ id: documentVersions.id,
149
+ document_id: documentVersions.document_id,
150
+ collection_id: documentVersions.collection_id,
151
+ collection_version: documentVersions.collection_version,
152
+ path: documentVersions.path,
153
+ event_type: documentVersions.event_type,
154
+ status: documentVersions.status,
155
+ is_deleted: documentVersions.is_deleted,
156
+ created_at: documentVersions.created_at,
157
+ updated_at: documentVersions.updated_at,
158
+ created_by: documentVersions.created_by,
159
+ change_summary: documentVersions.change_summary,
160
+ rn: sql `row_number() OVER (PARTITION BY ${documentVersions.document_id} ORDER BY ${documentVersions.id} DESC)`.as('rn'),
161
+ })
162
+ .from(documentVersions)
163
+ .where(sql `${documentVersions.is_deleted} = false AND ${documentVersions.status} = 'published'`));
164
+ return qb
165
+ .with(sq)
166
+ .select({
167
+ id: sq.id,
168
+ document_id: sq.document_id,
169
+ collection_id: sq.collection_id,
170
+ collection_version: sq.collection_version,
171
+ path: sq.path,
172
+ event_type: sq.event_type,
173
+ status: sq.status,
174
+ is_deleted: sq.is_deleted,
175
+ created_at: sq.created_at,
176
+ updated_at: sq.updated_at,
177
+ created_by: sq.created_by,
178
+ change_summary: sq.change_summary,
179
+ })
180
+ .from(sq)
181
+ .where(eq(sq.rn, 1));
182
+ });
183
+ // Base field values structure
184
+ const baseStoreColumns = {
185
+ id: uuid('id').primaryKey(),
186
+ document_version_id: uuid('document_version_id')
187
+ .references(() => documentVersions.id, { onDelete: 'cascade' })
188
+ .notNull(), // References the version ID
189
+ collection_id: uuid('collection_id')
190
+ .references(() => collections.id, { onDelete: 'cascade' })
191
+ .notNull(), // For cross-collection queries
192
+ field_path: varchar('field_path', { length: 500 }).notNull(),
193
+ field_name: varchar('field_name', { length: 255 }).notNull(),
194
+ locale: varchar('locale', { length: 10 }).notNull().default('default'),
195
+ parent_path: varchar('parent_path', { length: 500 }),
196
+ created_at: timestamp('created_at').defaultNow(),
197
+ updated_at: timestamp('updated_at').defaultNow(),
198
+ };
199
+ // 1. TEXT FIELDS TABLE
200
+ export const textStore = pgTable('byline_store_text', {
201
+ ...baseStoreColumns,
202
+ value: text('value').notNull(),
203
+ word_count: integer('word_count'), // Pre-computed for analytics
204
+ }, (table) => [
205
+ // Optimized indexes for text operations
206
+ index('idx_text_value').on(table.value),
207
+ index('idx_text_fulltext').using('gin', sql `to_tsvector('english', ${table.value})`),
208
+ index('idx_text_locale_value').on(table.locale, table.value),
209
+ index('idx_text_path_value').on(table.field_path, table.value),
210
+ // Unique constraints for unique fields
211
+ unique('unique_text_field').on(table.document_version_id, table.field_path, table.locale),
212
+ ]);
213
+ // 2. NUMERIC FIELDS TABLE
214
+ export const numericStore = pgTable('byline_store_numeric', {
215
+ ...baseStoreColumns,
216
+ // Store the original number type for reconstruction
217
+ number_type: varchar('number_type', { length: 20 }).notNull(), // 'integer', 'decimal', 'float'
218
+ value_integer: integer('value_integer'),
219
+ value_decimal: decimal('value_decimal', { precision: 10, scale: 2 }),
220
+ value_float: real('value_float'),
221
+ }, (table) => [
222
+ // Optimized indexes for numeric operations
223
+ index('idx_numeric_integer').on(table.value_integer),
224
+ index('idx_numeric_decimal').on(table.value_decimal),
225
+ index('idx_numeric_float').on(table.value_float),
226
+ // Range indexes for common queries
227
+ index('idx_numeric_integer_range').on(table.field_path, table.value_integer),
228
+ index('idx_numeric_decimal_range').on(table.field_path, table.value_decimal),
229
+ unique('unique_numeric_field').on(table.document_version_id, table.field_path, table.locale),
230
+ ]);
231
+ // 3. BOOLEAN FIELDS TABLE
232
+ export const booleanStore = pgTable('byline_store_boolean', {
233
+ ...baseStoreColumns,
234
+ value: boolean('value').notNull(),
235
+ }, (table) => [
236
+ // Simple but effective indexes for boolean queries
237
+ index('idx_boolean_value').on(table.value),
238
+ index('idx_boolean_path_value').on(table.field_path, table.value),
239
+ index('idx_boolean_collection_value').on(table.collection_id, table.field_path, table.value),
240
+ unique('unique_boolean_field').on(table.document_version_id, table.field_path, table.locale),
241
+ ]);
242
+ // 4. DATE/TIME FIELDS TABLE
243
+ export const datetimeStore = pgTable('byline_store_datetime', {
244
+ ...baseStoreColumns,
245
+ // Store the original date type for reconstruction
246
+ date_type: varchar('date_type', { length: 20 }).notNull(), // 'date', 'time', 'timestamptz'
247
+ value_date: date('value_date'),
248
+ value_time: time('value_time'),
249
+ value_timestamp_tz: timestamp('value_timestamp_tz', { withTimezone: true }),
250
+ }, (table) => [
251
+ // Optimized for date range queries
252
+ index('idx_datetime_date').on(table.value_date),
253
+ index('idx_datetime_timestamp_tz').on(table.value_timestamp_tz),
254
+ // Common date query patterns
255
+ index('idx_datetime_path_date').on(table.field_path, table.value_timestamp_tz),
256
+ index('idx_datetime_collection_date').on(table.collection_id, table.value_timestamp_tz),
257
+ unique('unique_datetime_field').on(table.document_version_id, table.field_path, table.locale),
258
+ ]);
259
+ // 5. RELATION FIELDS TABLE
260
+ export const relationStore = pgTable('byline_store_relation', {
261
+ ...baseStoreColumns,
262
+ target_document_id: uuid('target_document_id')
263
+ .references(() => documents.id)
264
+ .notNull(),
265
+ target_collection_id: uuid('target_collection_id')
266
+ .references(() => collections.id)
267
+ .notNull(),
268
+ // Relationship metadata
269
+ relationship_type: varchar('relationship_type', { length: 50 }).default('reference'), // 'reference', 'embed', 'weak'
270
+ cascade_delete: boolean('cascade_delete').default(false),
271
+ }, (table) => [
272
+ // Critical indexes for relationship queries
273
+ index('idx_relation_target_document').on(table.target_document_id),
274
+ index('idx_relation_target_collection').on(table.target_collection_id),
275
+ index('idx_relation_type').on(table.relationship_type),
276
+ // Reverse relationship lookup
277
+ index('idx_relation_reverse').on(table.target_document_id, table.field_path),
278
+ // Cross-collection relationship queries
279
+ index('idx_relation_collection_to_collection').on(table.collection_id, table.target_collection_id),
280
+ unique('unique_relation_field').on(table.document_version_id, table.field_path, table.locale),
281
+ ]);
282
+ // Generic meta store for document nodes (blocks, array items, fields, etc.)
283
+ // This allows attaching durable IDs and arbitrary metadata to any node
284
+ // in a document tree, keyed by document version and path.
285
+ export const metaStore = pgTable('byline_store_meta', {
286
+ id: uuid('id').primaryKey(),
287
+ document_version_id: uuid('document_version_id')
288
+ .notNull()
289
+ .references(() => documentVersions.id, { onDelete: 'cascade' }),
290
+ collection_id: uuid('collection_id')
291
+ .notNull()
292
+ .references(() => collections.id, { onDelete: 'cascade' }),
293
+ // Node classification and linkage back into the reconstructed tree.
294
+ type: text('type').notNull(),
295
+ path: text('path').notNull(),
296
+ // Durable identifier for this item within a document version. This is the
297
+ // ID exposed to the dashboard/API for blocks, array items, etc.
298
+ item_id: varchar('item_id', { length: 255 }).notNull(),
299
+ // Optional opaque metadata payload for this node. Common attributes like
300
+ // label, icon, collapsed state, etc. can be stored here.
301
+ meta: jsonb('meta'),
302
+ created_at: timestamp('created_at').defaultNow(),
303
+ updated_at: timestamp('updated_at').defaultNow(),
304
+ }, (table) => [
305
+ // Fast lookup by document and node type/path when enriching reconstructed
306
+ // trees with meta information.
307
+ index('idx_meta_document_type_path').on(table.document_version_id, table.type, table.path),
308
+ // Resolve durable IDs (e.g. for array.move by item_id) back to a node path.
309
+ index('idx_meta_item_id').on(table.item_id),
310
+ // Support queries scoped by collection and type (e.g. all blocks in a collection).
311
+ index('idx_meta_collection_type').on(table.collection_id, table.type),
312
+ // Ensure only a single meta row exists for a given node in a document version.
313
+ unique('unique_meta_node').on(table.document_version_id, table.type, table.path),
314
+ ]);
315
+ // 6. FILE FIELDS TABLE (Your composite type example)
316
+ export const fileStore = pgTable('byline_store_file', {
317
+ ...baseStoreColumns,
318
+ // File identity
319
+ file_id: uuid('file_id').notNull(), // Reference to file storage system
320
+ filename: varchar('filename', { length: 255 }).notNull(),
321
+ original_filename: varchar('original_filename', { length: 255 }).notNull(),
322
+ // File metadata
323
+ mime_type: varchar('mime_type', { length: 100 }).notNull(),
324
+ file_size: bigint('file_size', { mode: 'number' }).notNull(), // Size in bytes
325
+ file_hash: varchar('file_hash', { length: 64 }), // SHA-256 hash for deduplication
326
+ // Storage information
327
+ storage_provider: varchar('storage_provider', { length: 50 }).notNull(), // 'local', 's3', 'gcs', etc.
328
+ storage_path: text('storage_path').notNull(),
329
+ storage_url: text('storage_url'), // CDN or direct URL
330
+ // Image-specific metadata (when applicable)
331
+ image_width: integer('image_width'),
332
+ image_height: integer('image_height'),
333
+ image_format: varchar('image_format', { length: 20 }),
334
+ // File processing status
335
+ processing_status: varchar('processing_status', { length: 20 }).default('pending'), // 'pending', 'processing', 'completed', 'failed'
336
+ thumbnail_generated: boolean('thumbnail_generated').default(false),
337
+ // Image variants (Sharp-generated derivatives). Persisted as jsonb so
338
+ // the read path can return a `<picture>` / `srcset`-ready array
339
+ // without a sidecar table. Shape: FileStoreVariant[] —
340
+ // { name, storage_path, storage_url?, width?, height?, format? }.
341
+ variants: jsonb('variants'),
342
+ }, (table) => [
343
+ // File-specific indexes
344
+ index('idx_file_file_id').on(table.file_id),
345
+ index('idx_file_mime_type').on(table.mime_type),
346
+ index('idx_file_size').on(table.file_size),
347
+ index('idx_file_hash').on(table.file_hash),
348
+ // Image queries
349
+ index('idx_file_image_dimensions').on(table.image_width, table.image_height),
350
+ // Storage queries
351
+ index('idx_file_storage_provider').on(table.storage_provider),
352
+ index('idx_file_processing_status').on(table.processing_status),
353
+ unique('unique_file_field').on(table.document_version_id, table.field_path, table.locale),
354
+ ]);
355
+ // 7. JSON/STRUCTURED DATA FIELDS TABLE
356
+ export const jsonStore = pgTable('byline_store_json', {
357
+ ...baseStoreColumns,
358
+ value: jsonb('value').notNull(),
359
+ // JSON metadata for optimization
360
+ json_schema: varchar('json_schema', { length: 100 }), // Schema identifier for validation
361
+ object_keys: text('object_keys').array(), // Array of top-level keys for indexing
362
+ }, (table) => [
363
+ // JSONB indexes
364
+ index('idx_json_value_gin').using('gin', table.value),
365
+ index('idx_json_schema').on(table.json_schema),
366
+ index('idx_json_keys').using('gin', table.object_keys),
367
+ unique('unique_json_field').on(table.document_version_id, table.field_path, table.locale),
368
+ ]);
369
+ // RELATIONS
370
+ // =========
371
+ export const collectionsRelations = relations(collections, ({ many }) => ({
372
+ documents: many(documentVersions),
373
+ text_values: many(textStore),
374
+ numeric_values: many(numericStore),
375
+ boolean_values: many(booleanStore),
376
+ datetime_values: many(datetimeStore),
377
+ relation_values: many(relationStore, { relationName: 'source_collection' }),
378
+ file_values: many(fileStore),
379
+ json_values: many(jsonStore),
380
+ }));
381
+ export const documentsRelations = relations(documentVersions, ({ one, many }) => ({
382
+ collection: one(collections, {
383
+ fields: [documentVersions.collection_id],
384
+ references: [collections.id],
385
+ }),
386
+ // Relations for parent/child documents
387
+ // A document can be a child in many relationships. This finds the links.
388
+ parent_relationships: many(documentRelationships, { relationName: 'child' }),
389
+ // A document can be a parent in many relationships. This finds the links.
390
+ child_relationships: many(documentRelationships, { relationName: 'parent' }),
391
+ // Relations for field values
392
+ text_values: many(textStore),
393
+ numeric_values: many(numericStore),
394
+ boolean_values: many(booleanStore),
395
+ datetime_values: many(datetimeStore),
396
+ relation_values: many(relationStore),
397
+ file_values: many(fileStore),
398
+ json_values: many(jsonStore),
399
+ }));
400
+ export const documentRelationshipsRelations = relations(documentRelationships, ({ one }) => ({
401
+ parent: one(documentVersions, {
402
+ fields: [documentRelationships.parent_document_id],
403
+ references: [documentVersions.document_id],
404
+ relationName: 'parent',
405
+ }),
406
+ child: one(documentVersions, {
407
+ fields: [documentRelationships.child_document_id],
408
+ references: [documentVersions.document_id],
409
+ relationName: 'child',
410
+ }),
411
+ }));
412
+ // Field value relations
413
+ export const textStoreRelations = relations(textStore, ({ one }) => ({
414
+ document: one(documentVersions, {
415
+ fields: [textStore.document_version_id],
416
+ references: [documentVersions.id],
417
+ }),
418
+ collection: one(collections, {
419
+ fields: [textStore.collection_id],
420
+ references: [collections.id],
421
+ }),
422
+ }));
423
+ export const numericStoreRelations = relations(numericStore, ({ one }) => ({
424
+ document: one(documentVersions, {
425
+ fields: [numericStore.document_version_id],
426
+ references: [documentVersions.id],
427
+ }),
428
+ collection: one(collections, {
429
+ fields: [numericStore.collection_id],
430
+ references: [collections.id],
431
+ }),
432
+ }));
433
+ export const booleanStoreRelations = relations(booleanStore, ({ one }) => ({
434
+ document: one(documentVersions, {
435
+ fields: [booleanStore.document_version_id],
436
+ references: [documentVersions.id],
437
+ }),
438
+ collection: one(collections, {
439
+ fields: [booleanStore.collection_id],
440
+ references: [collections.id],
441
+ }),
442
+ }));
443
+ export const datetimeStoreRelations = relations(datetimeStore, ({ one }) => ({
444
+ document: one(documentVersions, {
445
+ fields: [datetimeStore.document_version_id],
446
+ references: [documentVersions.id],
447
+ }),
448
+ collection: one(collections, {
449
+ fields: [datetimeStore.collection_id],
450
+ references: [collections.id],
451
+ }),
452
+ }));
453
+ export const relationStoreRelations = relations(relationStore, ({ one }) => ({
454
+ document: one(documentVersions, {
455
+ fields: [relationStore.document_version_id],
456
+ references: [documentVersions.id],
457
+ }),
458
+ collection: one(collections, {
459
+ fields: [relationStore.collection_id],
460
+ references: [collections.id],
461
+ relationName: 'source_collection',
462
+ }),
463
+ // This relation is now based on the logical document_id.
464
+ // Note: This will relate to *all* versions of the document.
465
+ // You will typically query against the `currentDocumentsView` to get the latest version.
466
+ target_document: one(documentVersions, {
467
+ fields: [relationStore.target_document_id],
468
+ references: [documentVersions.document_id],
469
+ }),
470
+ target_collection: one(collections, {
471
+ fields: [relationStore.target_collection_id],
472
+ references: [collections.id],
473
+ }),
474
+ }));
475
+ export const fileStoreRelations = relations(fileStore, ({ one }) => ({
476
+ document: one(documentVersions, {
477
+ fields: [fileStore.document_version_id],
478
+ references: [documentVersions.id],
479
+ }),
480
+ collection: one(collections, {
481
+ fields: [fileStore.collection_id],
482
+ references: [collections.id],
483
+ }),
484
+ }));
485
+ export const jsonStoreRelations = relations(jsonStore, ({ one }) => ({
486
+ document: one(documentVersions, {
487
+ fields: [jsonStore.document_version_id],
488
+ references: [documentVersions.id],
489
+ }),
490
+ collection: one(collections, {
491
+ fields: [jsonStore.collection_id],
492
+ references: [collections.id],
493
+ }),
494
+ }));
495
+ // ---------------------------------------------------------------------------
496
+ // Auth schema — byline_admin_users, byline_admin_roles, etc.
497
+ // See ./auth.ts for definitions and rationale.
498
+ // ---------------------------------------------------------------------------
499
+ export { adminPermissions, adminPermissionsRelations, adminRefreshTokens, adminRefreshTokensRelations, adminRoleAdminUser, adminRoleAdminUserRelations, adminRoles, adminRolesRelations, adminUsers, adminUsersRelations, } from './auth.js';
500
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/database/schema/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ import type { CollectionDefinition, IDbAdapter } from '@byline/core';
9
+ import { type NodePgDatabase } from 'drizzle-orm/node-postgres';
10
+ import pg from 'pg';
11
+ import * as schema from './database/schema/index.js';
12
+ /**
13
+ * Public return type of `pgAdapter`. Extends `IDbAdapter` with concrete
14
+ * Drizzle + pg handles so integrations that need the raw database (the
15
+ * session provider, housekeeping scripts, migration tooling) don't have
16
+ * to construct a second connection pool.
17
+ *
18
+ * Consumers that only need the adapter contract can still annotate as
19
+ * `IDbAdapter` and ignore the extra properties.
20
+ */
21
+ export interface PgAdapter extends IDbAdapter {
22
+ /** The underlying Drizzle instance typed against the full schema. */
23
+ drizzle: NodePgDatabase<typeof schema>;
24
+ /** The pg connection pool — exposed for housekeeping and teardown. */
25
+ pool: pg.Pool;
26
+ }
27
+ export declare const pgAdapter: ({ connectionString, collections, }: {
28
+ connectionString: string;
29
+ collections: CollectionDefinition[];
30
+ }) => PgAdapter;
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACpE,OAAO,EAAW,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAA;AACxE,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAA;AAIpD;;;;;;;;GAQG;AACH,MAAM,WAAW,SAAU,SAAQ,UAAU;IAC3C,qEAAqE;IACrE,OAAO,EAAE,cAAc,CAAC,OAAO,MAAM,CAAC,CAAA;IACtC,sEAAsE;IACtE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAA;CACd;AAED,eAAO,MAAM,SAAS,GAAI,oCAGvB;IACD,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,EAAE,oBAAoB,EAAE,CAAA;CACpC,KAAG,SAmBH,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+ import { drizzle } from 'drizzle-orm/node-postgres';
9
+ import pg from 'pg';
10
+ import * as schema from './database/schema/index.js';
11
+ import { createCommandBuilders } from './modules/storage/storage-commands.js';
12
+ import { createQueryBuilders } from './modules/storage/storage-queries.js';
13
+ export const pgAdapter = ({ connectionString, collections, }) => {
14
+ const pool = new pg.Pool({
15
+ connectionString: connectionString,
16
+ max: 20,
17
+ idleTimeoutMillis: 2000,
18
+ connectionTimeoutMillis: 1000,
19
+ });
20
+ const db = drizzle(pool, { schema });
21
+ const commandBuilders = createCommandBuilders(db);
22
+ const queryBuilders = createQueryBuilders(db, collections);
23
+ return {
24
+ commands: commandBuilders,
25
+ queries: queryBuilders,
26
+ drizzle: db,
27
+ pool,
28
+ };
29
+ };
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,OAAO,EAAuB,MAAM,2BAA2B,CAAA;AACxE,OAAO,EAAE,MAAM,IAAI,CAAA;AAEnB,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAA;AAkB1E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EACxB,gBAAgB,EAChB,WAAW,GAIZ,EAAa,EAAE;IACd,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;QACvB,gBAAgB,EAAE,gBAAgB;QAClC,GAAG,EAAE,EAAE;QACP,iBAAiB,EAAE,IAAI;QACvB,uBAAuB,EAAE,IAAI;KAC9B,CAAC,CAAA;IAEF,MAAM,EAAE,GAAkC,OAAO,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;IAEnE,MAAM,eAAe,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAA;IACjD,MAAM,aAAa,GAAG,mBAAmB,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;IAE1D,OAAO;QACL,QAAQ,EAAE,eAAe;QACzB,OAAO,EAAE,aAAa;QACtB,OAAO,EAAE,EAAE;QACX,IAAI;KACL,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,17 @@
1
+ import type { CollectionDefinition } from '@byline/core';
2
+ import { type NodePgDatabase } from 'drizzle-orm/node-postgres';
3
+ import * as schema from '../database/schema/index.js';
4
+ export declare function setupTestDB(collections?: CollectionDefinition[]): {
5
+ pool: import("pg").Pool;
6
+ db: NodePgDatabase<typeof schema>;
7
+ commandBuilders: {
8
+ collections: import("../modules/storage/storage-commands.js").CollectionCommands;
9
+ documents: import("../modules/storage/storage-commands.js").DocumentCommands;
10
+ };
11
+ queryBuilders: {
12
+ collections: import("../modules/storage/storage-queries.js").CollectionQueries;
13
+ documents: import("../modules/storage/storage-queries.js").DocumentQueries;
14
+ };
15
+ };
16
+ export declare function teardownTestDB(): Promise<void>;
17
+ //# sourceMappingURL=test-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-helper.d.ts","sourceRoot":"","sources":["../../src/lib/test-helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAW,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAGxE,OAAO,KAAK,MAAM,MAAM,6BAA6B,CAAA;AASrD,wBAAgB,WAAW,CAAC,WAAW,GAAE,oBAAoB,EAAO;;;;;;;;;;;EA+BnE;AAED,wBAAsB,cAAc,kBAQnC"}