@proteinjs/db 1.34.2 → 1.34.4

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 (74) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/generated/index.d.ts +0 -4
  3. package/dist/generated/index.d.ts.map +1 -1
  4. package/dist/generated/index.js +1 -5
  5. package/dist/generated/index.js.map +1 -1
  6. package/dist/generated/test/index.d.ts +0 -4
  7. package/dist/generated/test/index.d.ts.map +1 -1
  8. package/dist/generated/test/index.js +3 -5
  9. package/dist/generated/test/index.js.map +1 -1
  10. package/dist/index.d.ts +1 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +1 -0
  13. package/dist/index.js.map +1 -1
  14. package/dist/src/Db.d.ts +12 -0
  15. package/dist/src/Db.d.ts.map +1 -1
  16. package/dist/src/Db.js +132 -22
  17. package/dist/src/Db.js.map +1 -1
  18. package/dist/src/RecordAccessError.d.ts +18 -0
  19. package/dist/src/RecordAccessError.d.ts.map +1 -0
  20. package/dist/src/RecordAccessError.js +46 -0
  21. package/dist/src/RecordAccessError.js.map +1 -0
  22. package/dist/src/Table.d.ts +28 -1
  23. package/dist/src/Table.d.ts.map +1 -1
  24. package/dist/src/source/SourceRecord.d.ts +35 -2
  25. package/dist/src/source/SourceRecord.d.ts.map +1 -1
  26. package/dist/src/source/SourceRecord.js +8 -1
  27. package/dist/src/source/SourceRecord.js.map +1 -1
  28. package/dist/src/source/SourceRecordLoader.d.ts +98 -7
  29. package/dist/src/source/SourceRecordLoader.d.ts.map +1 -1
  30. package/dist/src/source/SourceRecordLoader.js +348 -93
  31. package/dist/src/source/SourceRecordLoader.js.map +1 -1
  32. package/dist/src/tables/MigrationTable.d.ts +2 -0
  33. package/dist/src/tables/MigrationTable.d.ts.map +1 -1
  34. package/dist/test/reusable/SourceRecordSyncTests.d.ts.map +1 -1
  35. package/dist/test/reusable/SourceRecordSyncTests.js +803 -27
  36. package/dist/test/reusable/SourceRecordSyncTests.js.map +1 -1
  37. package/dist/test/util/tables/cascadeDeleteTestTables.d.ts +15 -115
  38. package/dist/test/util/tables/cascadeDeleteTestTables.d.ts.map +1 -1
  39. package/dist/test/util/tables/cascadeDeleteTestTables.js.map +1 -1
  40. package/dist/test/util/tables/crudTestTables.d.ts +2 -22
  41. package/dist/test/util/tables/crudTestTables.d.ts.map +1 -1
  42. package/dist/test/util/tables/crudTestTables.js.map +1 -1
  43. package/dist/test/util/tables/dynamicReferenceColumnTestTables.d.ts +4 -36
  44. package/dist/test/util/tables/dynamicReferenceColumnTestTables.d.ts.map +1 -1
  45. package/dist/test/util/tables/dynamicReferenceColumnTestTables.js.map +1 -1
  46. package/dist/test/util/tables/sourceRecordSyncTestTables.d.ts +20 -34
  47. package/dist/test/util/tables/sourceRecordSyncTestTables.d.ts.map +1 -1
  48. package/dist/test/util/tables/sourceRecordSyncTestTables.js +23 -1
  49. package/dist/test/util/tables/sourceRecordSyncTestTables.js.map +1 -1
  50. package/dist/test/util/tables/tableManagerTestTables.d.ts +3 -38
  51. package/dist/test/util/tables/tableManagerTestTables.d.ts.map +1 -1
  52. package/dist/test/util/tables/tableManagerTestTables.js.map +1 -1
  53. package/dist/test/util/tables/transactionTestTables.d.ts +2 -22
  54. package/dist/test/util/tables/transactionTestTables.d.ts.map +1 -1
  55. package/dist/test/util/tables/transactionTestTables.js.map +1 -1
  56. package/generated/index.ts +1 -5
  57. package/generated/test/index.ts +3 -5
  58. package/index.ts +1 -0
  59. package/package.json +5 -5
  60. package/src/Db.ts +65 -2
  61. package/src/RecordAccessError.ts +22 -0
  62. package/src/Table.ts +33 -1
  63. package/src/source/SourceRecord.ts +42 -4
  64. package/src/source/SourceRecordLoader.ts +333 -48
  65. package/test/reusable/SourceRecordSyncTests.ts +462 -11
  66. package/test/util/tables/cascadeDeleteTestTables.ts +15 -15
  67. package/test/util/tables/crudTestTables.ts +2 -2
  68. package/test/util/tables/dynamicReferenceColumnTestTables.ts +4 -4
  69. package/test/util/tables/sourceRecordSyncTestTables.ts +24 -4
  70. package/test/util/tables/tableManagerTestTables.ts +3 -3
  71. package/test/util/tables/transactionTestTables.ts +2 -2
  72. package/test.d.ts +2 -0
  73. package/test.js +4 -0
  74. package/tsconfig.json +2 -1
@@ -118,13 +118,13 @@ const MISSION_TABLE = 'db_test_cd_missions';
118
118
  // Cascade: ReferenceColumn
119
119
  export class MemberRefTable extends Table<MemberRef> {
120
120
  name = MEMBER_REF_TABLE;
121
- columns = withRecordColumns<MemberRef>({
121
+ columns: Table<MemberRef>['columns'] = withRecordColumns<MemberRef>({
122
122
  name: new StringColumn('name'),
123
123
  });
124
124
  }
125
125
  export class GroupRefTable extends Table<GroupRef> {
126
126
  name = GROUP_REF_TABLE;
127
- columns = withRecordColumns<GroupRef>({
127
+ columns: Table<GroupRef>['columns'] = withRecordColumns<GroupRef>({
128
128
  groupName: new StringColumn('group_name'),
129
129
  memberRef: new ReferenceColumn<MemberRef>(
130
130
  'member_id',
@@ -137,13 +137,13 @@ export class GroupRefTable extends Table<GroupRef> {
137
137
  // Cascade: ReferenceArrayColumn
138
138
  export class MemberArrTable extends Table<MemberArr> {
139
139
  name = MEMBER_ARR_TABLE;
140
- columns = withRecordColumns<MemberArr>({
140
+ columns: Table<MemberArr>['columns'] = withRecordColumns<MemberArr>({
141
141
  name: new StringColumn('name'),
142
142
  });
143
143
  }
144
144
  export class GroupArrTable extends Table<GroupArr> {
145
145
  name = GROUP_ARR_TABLE;
146
- columns = withRecordColumns<GroupArr>({
146
+ columns: Table<GroupArr>['columns'] = withRecordColumns<GroupArr>({
147
147
  groupName: new StringColumn('group_name'),
148
148
  memberRefs: new ReferenceArrayColumn<MemberArr>(
149
149
  'member_ids',
@@ -156,13 +156,13 @@ export class GroupArrTable extends Table<GroupArr> {
156
156
  // Cascade: DynamicReferenceColumn
157
157
  export class MemberDynTable extends Table<MemberDyn> {
158
158
  name = MEMBER_DYN_TABLE;
159
- columns = withRecordColumns<MemberDyn>({
159
+ columns: Table<MemberDyn>['columns'] = withRecordColumns<MemberDyn>({
160
160
  name: new StringColumn('name'),
161
161
  });
162
162
  }
163
163
  export class GroupDynTable extends Table<GroupDyn> {
164
164
  name = GROUP_DYN_TABLE;
165
- columns = withRecordColumns<GroupDyn>({
165
+ columns: Table<GroupDyn>['columns'] = withRecordColumns<GroupDyn>({
166
166
  groupName: new StringColumn('group_name'),
167
167
  memberDynTableName: new DynamicReferenceTableNameColumn('member_dyn_table_name', 'member_dyn_ref'),
168
168
  memberDynRef: new DynamicReferenceColumn<MemberDyn>(
@@ -176,13 +176,13 @@ export class GroupDynTable extends Table<GroupDyn> {
176
176
  // Reverse: ReferenceColumn
177
177
  export class PostTable extends Table<Post> {
178
178
  name = POST_TABLE;
179
- columns = withRecordColumns<Post>({
179
+ columns: Table<Post>['columns'] = withRecordColumns<Post>({
180
180
  title: new StringColumn('title'),
181
181
  });
182
182
  }
183
183
  export class CommentTable extends Table<Comment> {
184
184
  name = COMMENT_TABLE;
185
- columns = withRecordColumns<Comment>({
185
+ columns: Table<Comment>['columns'] = withRecordColumns<Comment>({
186
186
  text: new StringColumn('text'),
187
187
  postRef: new ReferenceColumn<Post>(
188
188
  'post_id',
@@ -196,13 +196,13 @@ export class CommentTable extends Table<Comment> {
196
196
  // Reverse: ReferenceArrayColumn
197
197
  export class MemberArrRevTable extends Table<MemberArrRev> {
198
198
  name = MEMBER_ARR_REV_TABLE;
199
- columns = withRecordColumns<MemberArrRev>({
199
+ columns: Table<MemberArrRev>['columns'] = withRecordColumns<MemberArrRev>({
200
200
  name: new StringColumn('name'),
201
201
  });
202
202
  }
203
203
  export class GroupArrRevTable extends Table<GroupArrRev> {
204
204
  name = GROUP_ARR_REV_TABLE;
205
- columns = withRecordColumns<GroupArrRev>({
205
+ columns: Table<GroupArrRev>['columns'] = withRecordColumns<GroupArrRev>({
206
206
  groupName: new StringColumn('group_name'),
207
207
  memberRefs: new ReferenceArrayColumn<MemberArrRev>(
208
208
  'member_ids',
@@ -216,13 +216,13 @@ export class GroupArrRevTable extends Table<GroupArrRev> {
216
216
  // Reverse: DynamicReferenceColumn
217
217
  export class WorkerTable extends Table<Worker> {
218
218
  name = WORKER_TABLE;
219
- columns = withRecordColumns<Worker>({
219
+ columns: Table<Worker>['columns'] = withRecordColumns<Worker>({
220
220
  name: new StringColumn('name'),
221
221
  });
222
222
  }
223
223
  export class TaskTable extends Table<Task> {
224
224
  name = TASK_TABLE;
225
- columns = withRecordColumns<Task>({
225
+ columns: Table<Task>['columns'] = withRecordColumns<Task>({
226
226
  title: new StringColumn('title'),
227
227
  assigneeTableName: new DynamicReferenceTableNameColumn('assignee_table_name', 'assignee_ref'),
228
228
  assigneeRef: new DynamicReferenceColumn<Worker>(
@@ -237,19 +237,19 @@ export class TaskTable extends Table<Task> {
237
237
  // Reverse: DynamicReferenceColumn across multiple target tables
238
238
  export class PilotTable extends Table<Pilot> {
239
239
  name = PILOT_TABLE;
240
- columns = withRecordColumns<Pilot>({
240
+ columns: Table<Pilot>['columns'] = withRecordColumns<Pilot>({
241
241
  name: new StringColumn('name'),
242
242
  });
243
243
  }
244
244
  export class RobotTable extends Table<Robot> {
245
245
  name = ROBOT_TABLE;
246
- columns = withRecordColumns<Robot>({
246
+ columns: Table<Robot>['columns'] = withRecordColumns<Robot>({
247
247
  name: new StringColumn('name'),
248
248
  });
249
249
  }
250
250
  export class MissionTable extends Table<Mission> {
251
251
  name = MISSION_TABLE;
252
- columns = withRecordColumns<Mission>({
252
+ columns: Table<Mission>['columns'] = withRecordColumns<Mission>({
253
253
  title: new StringColumn('title'),
254
254
  assigneeTableName: new DynamicReferenceTableNameColumn('assignee_table_name', 'assignee_ref'),
255
255
  assigneeRef: new DynamicReferenceColumn<Pilot | Robot>(
@@ -11,7 +11,7 @@ export interface Employee extends Record {
11
11
 
12
12
  export class EmployeeTestTable extends Table<Employee> {
13
13
  name = 'db_test_employee';
14
- columns = withRecordColumns<Employee>({
14
+ columns: Table<Employee>['columns'] = withRecordColumns<Employee>({
15
15
  name: new StringColumn('name'),
16
16
  department: new StringColumn('department'),
17
17
  isRemote: new BooleanColumn('is_remote'),
@@ -30,7 +30,7 @@ export interface ReservedWordTest extends Record {
30
30
 
31
31
  export class ReservedWordTestTable extends Table<ReservedWordTest> {
32
32
  name = 'db_test_reserved_word';
33
- columns = withRecordColumns<ReservedWordTest>({
33
+ columns: Table<ReservedWordTest>['columns'] = withRecordColumns<ReservedWordTest>({
34
34
  name: new StringColumn('name'),
35
35
  order: new StringColumn('order'),
36
36
  select: new StringColumn('select'),
@@ -34,7 +34,7 @@ export interface ProjectManager extends Record {
34
34
 
35
35
  export class ProjectAssignmentTable extends Table<ProjectAssignment> {
36
36
  name = 'db_test_dr_project_assignments';
37
- columns = withRecordColumns<ProjectAssignment>({
37
+ columns: Table<ProjectAssignment>['columns'] = withRecordColumns<ProjectAssignment>({
38
38
  projectName: new StringColumn('project_name'),
39
39
  employeeTableName: new DynamicReferenceTableNameColumn('employee_table_name', 'employee_ref'),
40
40
  employeeRef: new DynamicReferenceColumn<Engineer | Designer | ProjectManager>(
@@ -57,7 +57,7 @@ export class ProjectAssignmentTable extends Table<ProjectAssignment> {
57
57
 
58
58
  export class EngineerTable extends Table<Engineer> {
59
59
  name = 'db_test_dr_engineers';
60
- columns = withRecordColumns<Engineer>({
60
+ columns: Table<Engineer>['columns'] = withRecordColumns<Engineer>({
61
61
  name: new StringColumn('name'),
62
62
  yearsOfExperience: new StringColumn('years_of_experience'),
63
63
  });
@@ -65,7 +65,7 @@ export class EngineerTable extends Table<Engineer> {
65
65
 
66
66
  export class DesignerTable extends Table<Designer> {
67
67
  name = 'db_test_dr_designers';
68
- columns = withRecordColumns<Designer>({
68
+ columns: Table<Designer>['columns'] = withRecordColumns<Designer>({
69
69
  name: new StringColumn('name'),
70
70
  specialization: new StringColumn('specialization'),
71
71
  });
@@ -73,7 +73,7 @@ export class DesignerTable extends Table<Designer> {
73
73
 
74
74
  export class ProjectManagerTable extends Table<ProjectManager> {
75
75
  name = 'db_test_dr_project_managers';
76
- columns = withRecordColumns<ProjectManager>({
76
+ columns: Table<ProjectManager>['columns'] = withRecordColumns<ProjectManager>({
77
77
  name: new StringColumn('name'),
78
78
  certificate: new StringColumn('certificate'),
79
79
  });
@@ -30,7 +30,7 @@ export interface SyncMachineAccount extends SourceRecord {
30
30
  /** The machine-account shape: natural-key adoption by email, removed rows flagged not deleted. */
31
31
  export class SyncMachineAccountTable extends Table<SyncMachineAccount> {
32
32
  name = 'db_test_sync_machine_account';
33
- columns = withSourceRecordColumns<SyncMachineAccount>({
33
+ columns: Table<SyncMachineAccount>['columns'] = withSourceRecordColumns<SyncMachineAccount>({
34
34
  email: new StringColumn('email', {
35
35
  unique: { unique: true, indexName: 'db_test_sync_machine_account_email_unique' },
36
36
  }),
@@ -52,7 +52,7 @@ export interface SyncDefaultPolicyRecord extends SourceRecord {
52
52
  /** Default options: id-keyed, removed source rows are deleted (today's behavior). */
53
53
  export class SyncDefaultPolicyTable extends Table<SyncDefaultPolicyRecord> {
54
54
  name = 'db_test_sync_default_policy';
55
- columns = withSourceRecordColumns<SyncDefaultPolicyRecord>({
55
+ columns: Table<SyncDefaultPolicyRecord>['columns'] = withSourceRecordColumns<SyncDefaultPolicyRecord>({
56
56
  email: new StringColumn('email'),
57
57
  displayName: new StringColumn('display_name'),
58
58
  });
@@ -65,7 +65,7 @@ export interface DupePreflightRecord extends DbRecord {
65
65
  /** Generation 1: no uniqueness — the table under which duplicate rows accumulate. */
66
66
  export class DupePreflightTable extends Table<DupePreflightRecord> {
67
67
  name = 'db_test_dupe_preflight';
68
- columns = withRecordColumns<DupePreflightRecord>({
68
+ columns: Table<DupePreflightRecord>['columns'] = withRecordColumns<DupePreflightRecord>({
69
69
  email: new StringColumn('email'),
70
70
  });
71
71
  }
@@ -73,12 +73,32 @@ export class DupePreflightTable extends Table<DupePreflightRecord> {
73
73
  /** Generation 2: same table, email now unique — loading it runs the alter-path preflight. */
74
74
  export class DupePreflightUniqueEmailTable extends Table<DupePreflightRecord> {
75
75
  name = 'db_test_dupe_preflight';
76
- columns = withRecordColumns<DupePreflightRecord>({
76
+ columns: Table<DupePreflightRecord>['columns'] = withRecordColumns<DupePreflightRecord>({
77
77
  email: new StringColumn('email', { unique: { unique: true, indexName: 'db_test_dupe_preflight_email_unique' } }),
78
78
  });
79
79
  }
80
80
 
81
+ export interface InheritedStampRecord extends SourceRecord {
82
+ email: string;
83
+ }
84
+
85
+ /**
86
+ * The one-owner guard fixture: declares ONLY its own column. The ownership stamps
87
+ * (source_package, source_package_version) must arrive from withSourceRecordColumns — the single
88
+ * owner of the SourceRecord column set — never by per-table declaration. Its physical table is
89
+ * minted by the harness through the normal schema-sync path (TableManager deriving DDL from the
90
+ * type), so the inheritance guard test proves a NEW table gets the stamp columns without
91
+ * declaring them.
92
+ */
93
+ export class InheritedStampTable extends Table<InheritedStampRecord> {
94
+ name = 'db_test_sync_inherited_stamp';
95
+ columns: Table<InheritedStampRecord>['columns'] = withSourceRecordColumns<InheritedStampRecord>({
96
+ email: new StringColumn('email'),
97
+ });
98
+ }
99
+
81
100
  export const sourceRecordSyncTestTables = {
82
101
  SyncMachineAccount: new SyncMachineAccountTable() as Table<SyncMachineAccount>,
83
102
  SyncDefaultPolicy: new SyncDefaultPolicyTable() as Table<SyncDefaultPolicyRecord>,
103
+ InheritedStamp: new InheritedStampTable() as Table<InheritedStampRecord>,
84
104
  };
@@ -22,7 +22,7 @@ export interface User extends Record {
22
22
 
23
23
  export class UserTestTable extends Table<User> {
24
24
  name = 'db_test_user';
25
- columns = withRecordColumns<User>({
25
+ columns: Table<User>['columns'] = withRecordColumns<User>({
26
26
  name: new StringColumn('name'),
27
27
  email: new StringColumn('email'),
28
28
  active: new BooleanColumn('active'),
@@ -41,7 +41,7 @@ export interface MappedIndexUser extends Record {
41
41
 
42
42
  export class MappedIndexUserTable extends Table<MappedIndexUser> {
43
43
  name = 'db_test_tm_mapped_index_user';
44
- columns = withRecordColumns<MappedIndexUser>({
44
+ columns: Table<MappedIndexUser>['columns'] = withRecordColumns<MappedIndexUser>({
45
45
  emailAddress: new StringColumn('email_address'),
46
46
  accountStatus: new StringColumn('account_status'),
47
47
  createdOn: new DateColumn('created_on'),
@@ -75,7 +75,7 @@ export interface ColumnTypes extends Record {
75
75
 
76
76
  export class ColumnTypesTable extends Table<ColumnTypes> {
77
77
  name = 'db_test_tm_column_types';
78
- columns = withRecordColumns<ColumnTypes>({
78
+ columns: Table<ColumnTypes>['columns'] = withRecordColumns<ColumnTypes>({
79
79
  integer: new IntegerColumn('integer', { nullable: true }),
80
80
  bigInteger: new IntegerColumn('big_integer', { nullable: false }, true),
81
81
  string: new StringColumn('string', { references: { table: 'db_test_user' } }),
@@ -11,7 +11,7 @@ export interface TransactionEmployee extends Record {
11
11
 
12
12
  export class TransactionEmployeeTestTable extends Table<TransactionEmployee> {
13
13
  name = 'db_test_transaction_employee';
14
- columns = withRecordColumns<TransactionEmployee>({
14
+ columns: Table<TransactionEmployee>['columns'] = withRecordColumns<TransactionEmployee>({
15
15
  name: new StringColumn('name'),
16
16
  department: new StringColumn('department'),
17
17
  isRemote: new BooleanColumn('is_remote'),
@@ -30,7 +30,7 @@ export interface TransactionReservedWordTest extends Record {
30
30
 
31
31
  export class TransactionReservedWordTestTable extends Table<TransactionReservedWordTest> {
32
32
  name = 'db_test_transaction_reserved_word';
33
- columns = withRecordColumns<TransactionReservedWordTest>({
33
+ columns: Table<TransactionReservedWordTest>['columns'] = withRecordColumns<TransactionReservedWordTest>({
34
34
  name: new StringColumn('name'),
35
35
  order: new StringColumn('order'),
36
36
  select: new StringColumn('select'),
package/test.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ // Types counterpart of test.js — see that file for why this stub exists.
2
+ export * from './dist/generated/test/index';
package/test.js ADDED
@@ -0,0 +1,4 @@
1
+ // Node10/classic-resolution stub for the `./test` subpath, owned by reflection-build.
2
+ // Consumers that bypass the exports map (node10 resolution, tsconfig paths mappings) resolve
3
+ // this file path first, so every install shape loads the built dist — never sources.
4
+ module.exports = require('./dist/generated/test/index.js');
package/tsconfig.json CHANGED
@@ -22,5 +22,6 @@
22
22
  "@proteinjs/db/*": ["src/*"],
23
23
  "@proteinjs/db/test": ["test/index.ts"]
24
24
  }
25
- }
25
+ },
26
+ "exclude": ["node_modules", "test.js", "test.d.ts"]
26
27
  }