@proteinjs/db 1.48.0 → 1.49.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 (98) hide show
  1. package/.eslintrc.js +1 -1
  2. package/.prettierignore +2 -1
  3. package/CHANGELOG.md +20 -0
  4. package/dist/generated/index.d.ts.map +1 -1
  5. package/dist/generated/index.js +1 -3
  6. package/dist/generated/index.js.map +1 -1
  7. package/dist/generated/test/index.d.ts.map +1 -1
  8. package/dist/generated/test/index.js +1 -3
  9. package/dist/generated/test/index.js.map +1 -1
  10. package/dist/index.d.ts +1 -1
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +4 -5
  13. package/dist/index.js.map +1 -1
  14. package/dist/src/Db.js +2 -2
  15. package/dist/src/Db.js.map +1 -1
  16. package/dist/src/MigrationRunner.js +2 -2
  17. package/dist/src/MigrationRunner.js.map +1 -1
  18. package/dist/src/Table.d.ts +16 -1
  19. package/dist/src/Table.d.ts.map +1 -1
  20. package/dist/src/Table.js +14 -0
  21. package/dist/src/Table.js.map +1 -1
  22. package/dist/src/auth/TableAuth.d.ts +4 -0
  23. package/dist/src/auth/TableAuth.d.ts.map +1 -1
  24. package/dist/src/auth/TableAuth.js +12 -0
  25. package/dist/src/auth/TableAuth.js.map +1 -1
  26. package/dist/src/auth/TableServiceAuth.d.ts.map +1 -1
  27. package/dist/src/auth/TableServiceAuth.js +5 -0
  28. package/dist/src/auth/TableServiceAuth.js.map +1 -1
  29. package/dist/src/schema/SchemaOperations.d.ts +4 -3
  30. package/dist/src/schema/SchemaOperations.d.ts.map +1 -1
  31. package/dist/src/schema/TableManager.d.ts +24 -6
  32. package/dist/src/schema/TableManager.d.ts.map +1 -1
  33. package/dist/src/schema/TableManager.js +93 -26
  34. package/dist/src/schema/TableManager.js.map +1 -1
  35. package/dist/src/source/SourceRecord.d.ts +2 -2
  36. package/dist/src/source/{SourceRecordLoader.d.ts → SourceRecordSyncRunner.d.ts} +15 -7
  37. package/dist/src/source/SourceRecordSyncRunner.d.ts.map +1 -0
  38. package/dist/src/source/{SourceRecordLoader.js → SourceRecordSyncRunner.js} +46 -31
  39. package/dist/src/source/SourceRecordSyncRunner.js.map +1 -0
  40. package/dist/src/tables/MigrationTable.d.ts +10 -2
  41. package/dist/src/tables/MigrationTable.d.ts.map +1 -1
  42. package/dist/src/tables/MigrationTable.js +12 -4
  43. package/dist/src/tables/MigrationTable.js.map +1 -1
  44. package/dist/test/DurableTable.test.d.ts +2 -0
  45. package/dist/test/DurableTable.test.d.ts.map +1 -0
  46. package/dist/test/DurableTable.test.js +172 -0
  47. package/dist/test/DurableTable.test.js.map +1 -0
  48. package/dist/test/MigrationAuth.test.js +12 -9
  49. package/dist/test/MigrationAuth.test.js.map +1 -1
  50. package/dist/test/SchemaReconcileLines.test.d.ts +2 -0
  51. package/dist/test/SchemaReconcileLines.test.d.ts.map +1 -0
  52. package/dist/test/SchemaReconcileLines.test.js +176 -0
  53. package/dist/test/SchemaReconcileLines.test.js.map +1 -0
  54. package/dist/test/SourceRecordLoaderQualifiedName.test.d.ts +2 -0
  55. package/dist/test/SourceRecordLoaderQualifiedName.test.d.ts.map +1 -0
  56. package/dist/test/SourceRecordLoaderQualifiedName.test.js +79 -0
  57. package/dist/test/SourceRecordLoaderQualifiedName.test.js.map +1 -0
  58. package/dist/test/SourceRecordSyncRunner.test.d.ts +2 -0
  59. package/dist/test/SourceRecordSyncRunner.test.d.ts.map +1 -0
  60. package/dist/test/{SourceRecordLoader.test.js → SourceRecordSyncRunner.test.js} +63 -7
  61. package/dist/test/SourceRecordSyncRunner.test.js.map +1 -0
  62. package/dist/test/TableManagerCreateOrder.test.d.ts +2 -0
  63. package/dist/test/TableManagerCreateOrder.test.d.ts.map +1 -0
  64. package/dist/test/TableManagerCreateOrder.test.js +66 -0
  65. package/dist/test/TableManagerCreateOrder.test.js.map +1 -0
  66. package/dist/test/reusable/SourceRecordSyncTests.d.ts.map +1 -1
  67. package/dist/test/reusable/SourceRecordSyncTests.js +3 -5
  68. package/dist/test/reusable/SourceRecordSyncTests.js.map +1 -1
  69. package/dist/test/reusable/TableManagerTests.d.ts.map +1 -1
  70. package/dist/test/reusable/TableManagerTests.js +180 -0
  71. package/dist/test/reusable/TableManagerTests.js.map +1 -1
  72. package/generated/index.ts +20 -19
  73. package/generated/test/index.ts +54 -53
  74. package/index.ts +3 -4
  75. package/package.json +4 -4
  76. package/src/Db.ts +2 -2
  77. package/src/MigrationRunner.ts +2 -2
  78. package/src/Table.ts +16 -1
  79. package/src/auth/TableAuth.ts +14 -0
  80. package/src/auth/TableServiceAuth.ts +6 -1
  81. package/src/schema/SchemaOperations.ts +4 -3
  82. package/src/schema/TableManager.ts +84 -26
  83. package/src/source/SourceRecord.ts +2 -2
  84. package/src/source/{SourceRecordLoader.ts → SourceRecordSyncRunner.ts} +31 -13
  85. package/src/tables/MigrationTable.ts +12 -4
  86. package/test/DurableTable.test.ts +156 -0
  87. package/test/MigrationAuth.test.ts +7 -5
  88. package/test/SchemaReconcileLines.test.ts +127 -0
  89. package/test/SourceRecordLoaderQualifiedName.test.ts +63 -0
  90. package/test/{SourceRecordLoader.test.ts → SourceRecordSyncRunner.test.ts} +75 -8
  91. package/test/TableManagerCreateOrder.test.ts +78 -0
  92. package/test/reusable/SourceRecordSyncTests.ts +3 -5
  93. package/test/reusable/TableManagerTests.ts +95 -0
  94. package/dist/src/source/SourceRecordLoader.d.ts.map +0 -1
  95. package/dist/src/source/SourceRecordLoader.js.map +0 -1
  96. package/dist/test/SourceRecordLoader.test.d.ts +0 -2
  97. package/dist/test/SourceRecordLoader.test.d.ts.map +0 -1
  98. package/dist/test/SourceRecordLoader.test.js.map +0 -1
@@ -100,13 +100,15 @@ describe('migrations ride the dev permission', () => {
100
100
  }
101
101
  });
102
102
 
103
- it('delete keeps its dev door (ledger hygiene stays possible)', () => {
104
- setUser(['dev-crew']);
103
+ it('delete has no door — for anyone, break-glass included: the ledger is durable', () => {
105
104
  const auth = new TableAuth();
106
105
  const table = new MigrationTable();
107
- for (const api of ['db', 'service'] as const) {
108
- expect(() => auth.canDelete(table, api)).not.toThrow();
109
- expect(auth.canPerform(table, 'delete', api)).toBe(true);
106
+ for (const roles of [['dev-crew'], ['admin']]) {
107
+ setUser(roles);
108
+ for (const api of ['db', 'service'] as const) {
109
+ expect(() => auth.canDelete(table, api)).toThrow('Table migration is durable: its rows are never deleted');
110
+ expect(auth.canPerform(table, 'delete', api)).toBe(false);
111
+ }
110
112
  }
111
113
  });
112
114
  });
@@ -0,0 +1,127 @@
1
+ import { inspect } from 'util';
2
+ import { Logger, LogLineErrors } from '@proteinjs/logger';
3
+ import { TableManager } from '../src/schema/TableManager';
4
+ import { TableChanges } from '../src/schema/SchemaOperations';
5
+ import { Table } from '../src/Table';
6
+
7
+ /**
8
+ * The schema-reconcile WARN lines (`TableManager.reconcileConcurrentSchemaChange`) carry the
9
+ * error a driver rejected with — never text copied out of it.
10
+ *
11
+ * A backend words a schema error itself and can quote row data in it (a unique index whose
12
+ * backfill meets duplicate rows names the duplicate key). A driver marks such an error so the
13
+ * logger prints its status and the driver's sentence in its place (`LogLineErrors`) — which the
14
+ * logger can only do for the error OBJECT. These lines used to interpolate the error's `details`
15
+ * / `message` into their own message, where nothing can recognize it.
16
+ *
17
+ * Judged at the log WRITER, as the text a writer would print, for each of the three outcomes
18
+ * that log: tolerated, still absent, a genuine conflict.
19
+ */
20
+
21
+ // A fixture value shaped like row content (not a real credential).
22
+ const VALUE = 'rst_reconcile_5d41402abc4b2a76b9719d911017c592';
23
+ const SENTENCE =
24
+ 'Failed when executing schema update (ALREADY_EXISTS, code 6): what the statement creates already exists';
25
+
26
+ type CapturedLog = { logLevel: string; message?: string; obj?: any };
27
+ type ManagerInternals = {
28
+ logger: Logger;
29
+ reconcileConcurrentSchemaChange(tables: Table<any>[], error: unknown): Promise<void>;
30
+ getTableChanges(table: Table<any>): Promise<TableChanges>;
31
+ delay(ms: number): Promise<void>;
32
+ };
33
+
34
+ const noChanges = (): TableChanges =>
35
+ ({
36
+ columnsToCreate: [],
37
+ columnsToRename: [],
38
+ columnsToAlter: [],
39
+ columnsWithForeignKeysToDrop: [],
40
+ columnsWithUniqueConstraintsToDrop: [],
41
+ indexesToCreate: [],
42
+ indexesToDrop: [],
43
+ }) as unknown as TableChanges;
44
+
45
+ /** What a driver rejects with when the backend refuses a schema change — marked, as a driver marks it. */
46
+ const backendError = () => {
47
+ const message = `6 ALREADY_EXISTS: Duplicate name in schema: ledger_by_email. duplicate key: {String("${VALUE}")}`;
48
+ const error = Object.assign(new Error(message), { code: 6, details: message });
49
+ LogLineErrors.mark(error, () => ({ code: 6, sentence: SENTENCE, facts: { status: 'ALREADY_EXISTS' } }));
50
+ return error;
51
+ };
52
+
53
+ const printedLine = (log: CapturedLog) =>
54
+ [log.message ?? '', inspect(log.obj, { depth: 10, maxStringLength: null }), JSON.stringify(log.obj) ?? ''].join('\n');
55
+
56
+ describe('the schema-reconcile lines carry the error itself, never its text', () => {
57
+ const table = { name: 'ledger' } as Table<any>;
58
+ let captured: CapturedLog[];
59
+
60
+ const managerWhere = (live: { exists: boolean; changes: TableChanges }) => {
61
+ const manager = new TableManager(
62
+ {} as never,
63
+ {} as never,
64
+ { isAlreadyExistsError: () => true } as never,
65
+ { tableExists: async () => live.exists } as never
66
+ );
67
+ const internals = manager as unknown as ManagerInternals;
68
+ internals.logger = new Logger({
69
+ name: 'TableManager',
70
+ logWriter: { write: (log: CapturedLog) => captured.push(log) } as never,
71
+ });
72
+ internals.getTableChanges = async () => live.changes;
73
+ internals.delay = async () => undefined;
74
+ return internals;
75
+ };
76
+
77
+ beforeEach(() => {
78
+ captured = [];
79
+ });
80
+
81
+ const expectTheErrorNotItsText = (line: CapturedLog, error: Error) => {
82
+ expect(error.message).toContain(VALUE);
83
+ expect(printedLine(line)).not.toContain(VALUE);
84
+ expect(printedLine(line)).not.toContain('Duplicate name in schema');
85
+ expect(line.obj.error).toBeInstanceOf(Error);
86
+ expect(line.obj.error.message).toBe(SENTENCE);
87
+ expect(line.message).toContain('ledger');
88
+ };
89
+
90
+ test('tolerated: the table is there with the intended definition', async () => {
91
+ const error = backendError();
92
+
93
+ await managerWhere({ exists: true, changes: noChanges() }).reconcileConcurrentSchemaChange([table], error);
94
+
95
+ expect(captured).toHaveLength(1);
96
+ expect(captured[0].message).toContain('tolerated concurrent ALREADY_EXISTS');
97
+ expectTheErrorNotItsText(captured[0], error);
98
+ });
99
+
100
+ test('still absent after every re-read: the original error is thrown as it is', async () => {
101
+ const error = backendError();
102
+
103
+ const thrown = await managerWhere({ exists: false, changes: noChanges() })
104
+ .reconcileConcurrentSchemaChange([table], error)
105
+ .catch((each: unknown) => each);
106
+
107
+ expect(thrown).toBe(error);
108
+ expect(captured).toHaveLength(1);
109
+ expect(captured[0].message).toContain('still absent');
110
+ expectTheErrorNotItsText(captured[0], error);
111
+ });
112
+
113
+ test('a genuine conflict: the live schema differs from the intended definition', async () => {
114
+ const error = backendError();
115
+ const changes = { ...noChanges(), columnsToCreate: ['email'] } as unknown as TableChanges;
116
+
117
+ const thrown = await managerWhere({ exists: true, changes })
118
+ .reconcileConcurrentSchemaChange([table], error)
119
+ .catch((each: unknown) => each);
120
+
121
+ expect(thrown).toBe(error);
122
+ expect(captured).toHaveLength(1);
123
+ expect(captured[0].message).toContain('genuine conflict');
124
+ expect(captured[0].obj.remainingChanges).toEqual(changes);
125
+ expectTheErrorNotItsText(captured[0], error);
126
+ });
127
+ });
@@ -0,0 +1,63 @@
1
+ import * as fs from 'fs';
2
+ import * as path from 'path';
3
+ import { SourceType } from '@proteinjs/reflection';
4
+ import { graphSerializer } from '@proteinjs/util';
5
+
6
+ /**
7
+ * `@proteinjs/db/SourceRecordLoader` is the qualified name every source-record declaration
8
+ * implements (`class X implements SourceRecordLoader<T>`) and the name `getSourceRecordLoaders`
9
+ * resolves through the reflection registry. The generated index keeps ONE node per qualified
10
+ * name, so a second declaration of the name anywhere in the package's reflected sources leaves
11
+ * which one the artifact records to the build's file order — and the loser disappears without
12
+ * a trace. These tests read the artifacts the build wrote (`generated/index.ts` for the package
13
+ * entry, `generated/test/index.ts` for the `./test` subpath, both built from `src/`) and assert
14
+ * the name holds the declaration interface, not some other declaration that shares it.
15
+ */
16
+ const QUALIFIED_NAME = '@proteinjs/db/SourceRecordLoader';
17
+ const ARTIFACTS = ['generated/index.ts', 'generated/test/index.ts'];
18
+
19
+ /** The fields of an emitted node value these tests read. */
20
+ type EmittedDeclaration = { packageName: string; name: string; qualifiedName: string; sourceType: SourceType };
21
+ type EmittedEdge = { v: string; w: string };
22
+
23
+ const readArtifact = (relativePath: string) => fs.readFileSync(path.join(__dirname, '..', relativePath), 'utf8');
24
+
25
+ /** The source graph exactly as the generated index hands it to `SourceRepository.merge`. */
26
+ const emittedGraph = (artifact: string) => {
27
+ const literal = artifact.match(/^const sourceGraph = (".*");$/m);
28
+ if (!literal) {
29
+ throw new Error('generated index carries no serialized source graph');
30
+ }
31
+ const serialized: string = JSON.parse(literal[1]);
32
+ return graphSerializer.deserialize(serialized.replace(/\\'/g, "'"));
33
+ };
34
+
35
+ describe.each(ARTIFACTS)('the qualified name SourceRecordLoader in %s', (relativePath) => {
36
+ const artifact = readArtifact(relativePath);
37
+ const graph = emittedGraph(artifact);
38
+
39
+ it('names exactly one declaration of this package: the interface declarations implement', () => {
40
+ const qualifiedNames: string[] = graph.nodes();
41
+ const declarations = qualifiedNames
42
+ .map((qualifiedName): EmittedDeclaration | undefined => graph.node(qualifiedName))
43
+ .filter((node) => node?.packageName === '@proteinjs/db' && node.name === 'SourceRecordLoader');
44
+
45
+ expect(declarations).toHaveLength(1);
46
+ expect(declarations[0]).toMatchObject({
47
+ qualifiedName: QUALIFIED_NAME,
48
+ sourceType: SourceType.interface,
49
+ filePath: 'src/source/SourceRecord.ts',
50
+ });
51
+ const parents: EmittedEdge[] = graph.outEdges(QUALIFIED_NAME) ?? [];
52
+ expect(parents.map((edge) => [edge.w, graph.edge(edge)])).toEqual([
53
+ ['@proteinjs/reflection/Loadable', 'extends interface'],
54
+ ]);
55
+ });
56
+
57
+ it('links no runtime value under the name (an interface has none)', () => {
58
+ const linkedNames = (artifact.match(/^\t'[^']+': /gm) ?? []).map((line) => line.slice(2, -3));
59
+
60
+ expect(linkedNames).toContain('@proteinjs/db/MigrationRunner');
61
+ expect(linkedNames).not.toContain(QUALIFIED_NAME);
62
+ });
63
+ });
@@ -1,14 +1,14 @@
1
- import { SourceRecordLoader } from '../src/source/SourceRecordLoader';
1
+ import { SourceRecordSyncRunner } from '../src/source/SourceRecordSyncRunner';
2
2
 
3
3
  /**
4
- * Covers the two helpers that drive SourceRecordLoader's change-detection:
4
+ * Covers the two helpers that drive SourceRecordSyncRunner's change-detection:
5
5
  * - `canonicalStringify`: deterministic, key-order-independent JSON
6
6
  * - `findMismatchPath`: per-field drift detection that uses canonical stringify
7
7
  * so object-valued columns (e.g. `JsonColumn`) are compared strictly while
8
8
  * remaining immune to storage-side key reordering (Spanner alphabetizes JSON
9
9
  * object keys on write).
10
10
  *
11
- * Both are private methods on `SourceRecordLoader`. Tests access them through
11
+ * Both are private methods on `SourceRecordSyncRunner`. Tests access them through
12
12
  * the instance with a cast — cheaper than wiring full `hasChanges` fixtures
13
13
  * (Table, RecordSerializer, Db) and keeps the public API surface of the class
14
14
  * unchanged.
@@ -19,9 +19,9 @@ type LoaderInternals = {
19
19
  findMismatchPath: (source: any, existing: any, path: string) => string | null;
20
20
  };
21
21
 
22
- const internals = () => new SourceRecordLoader() as unknown as LoaderInternals;
22
+ const internals = () => new SourceRecordSyncRunner() as unknown as LoaderInternals;
23
23
 
24
- describe('SourceRecordLoader.canonicalStringify', () => {
24
+ describe('SourceRecordSyncRunner.canonicalStringify', () => {
25
25
  it('produces the same string for objects with different key orders', () => {
26
26
  const loader = internals();
27
27
  const a = { foo: 1, bar: 2, baz: 3 };
@@ -49,7 +49,7 @@ describe('SourceRecordLoader.canonicalStringify', () => {
49
49
  });
50
50
  });
51
51
 
52
- describe('SourceRecordLoader.findMismatchPath', () => {
52
+ describe('SourceRecordSyncRunner.findMismatchPath', () => {
53
53
  describe('object comparison', () => {
54
54
  it('returns null for identical objects', () => {
55
55
  const loader = internals();
@@ -158,13 +158,13 @@ describe('SourceRecordLoader.findMismatchPath', () => {
158
158
  * rewrites a row (bumping `updated`). The ownership stamps ride the declared record, so the
159
159
  * comparison must know which of them mean "the definition changed" and which are bookkeeping.
160
160
  */
161
- describe('SourceRecordLoader.hasChanges — stamp hygiene on the migration ledger', () => {
161
+ describe('SourceRecordSyncRunner.hasChanges — stamp hygiene on the migration ledger', () => {
162
162
  type HasChangesInternals = { hasChanges: (table: any, source: any, existing: any) => Promise<boolean> };
163
163
  // eslint-disable-next-line @typescript-eslint/no-var-requires
164
164
  const { MigrationTable } = require('../src/tables/MigrationTable');
165
165
  // eslint-disable-next-line @typescript-eslint/no-var-requires
166
166
  const moment = require('moment');
167
- const loader = () => new SourceRecordLoader() as unknown as HasChangesInternals;
167
+ const loader = () => new SourceRecordSyncRunner() as unknown as HasChangesInternals;
168
168
  const table = new MigrationTable();
169
169
 
170
170
  /** What a build declares for a migration (the run function rides along, as it does at boot). */
@@ -242,3 +242,70 @@ describe('getSourceRecordLoaders — declaration identity', () => {
242
242
  });
243
243
  });
244
244
  });
245
+
246
+ /**
247
+ * The version a booting server stamps on the records its OWN package declares. The loader
248
+ * resolves each declaring package by name from the process cwd — cwd's node_modules chain — and
249
+ * the package cwd IS never sits in that chain, so the server's own records used to sync with no
250
+ * version (and between two builds sharing a database, the last to boot won). The fixture is a
251
+ * server package in its own folder with no `exports` field, booted from that folder.
252
+ */
253
+ describe("SourceRecordSyncRunner.resolveSourceVersion — the booting package's own version", () => {
254
+ type VersionInternals = { resolveSourceVersion: (source: string) => string | undefined };
255
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
256
+ const fs = require('fs');
257
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
258
+ const os = require('os');
259
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
260
+ const path = require('path');
261
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
262
+ const { Logger } = require('@proteinjs/logger');
263
+ const resolveSourceVersion = (source: string) =>
264
+ (new SourceRecordSyncRunner() as unknown as VersionInternals).resolveSourceVersion(source);
265
+ const writePackage = (directory: string, packageJson: object) => {
266
+ fs.mkdirSync(directory, { recursive: true });
267
+ fs.writeFileSync(path.join(directory, 'package.json'), JSON.stringify(packageJson));
268
+ fs.writeFileSync(path.join(directory, 'index.js'), 'module.exports = {};\n');
269
+ };
270
+
271
+ let serverDirectory: string;
272
+ let bootDirectory: string;
273
+
274
+ beforeEach(() => {
275
+ serverDirectory = fs.mkdtempSync(path.join(os.tmpdir(), 'source-version-server-'));
276
+ writePackage(serverDirectory, { name: '@fixture-scope/booting-server', version: '4.5.6', main: 'index.js' });
277
+ writePackage(path.join(serverDirectory, 'node_modules', '@fixture-scope', 'declaring-dependency'), {
278
+ name: '@fixture-scope/declaring-dependency',
279
+ version: '7.8.9',
280
+ main: 'index.js',
281
+ });
282
+ bootDirectory = process.cwd();
283
+ process.chdir(serverDirectory);
284
+ });
285
+
286
+ afterEach(() => {
287
+ process.chdir(bootDirectory);
288
+ fs.rmSync(serverDirectory, { recursive: true, force: true });
289
+ jest.restoreAllMocks();
290
+ });
291
+
292
+ it('stamps the booting package with the version in its own package.json', () => {
293
+ const warn = jest.spyOn(Logger.prototype, 'warn');
294
+
295
+ expect(resolveSourceVersion('@fixture-scope/booting-server')).toBe('4.5.6');
296
+ expect(warn).not.toHaveBeenCalled();
297
+ });
298
+
299
+ it("resolves other packages from cwd's dependencies, and warns when neither road resolves", () => {
300
+ const warn = jest.spyOn(Logger.prototype, 'warn');
301
+
302
+ expect(resolveSourceVersion('@fixture-scope/declaring-dependency')).toBe('7.8.9');
303
+ expect(warn).not.toHaveBeenCalled();
304
+
305
+ expect(resolveSourceVersion('@fixture-scope/not-installed')).toBeUndefined();
306
+ expect(warn).toHaveBeenCalledTimes(1);
307
+ expect((warn.mock.calls[0][0] as { message: string }).message).toContain(
308
+ "Could not resolve a version for source package '@fixture-scope/not-installed'"
309
+ );
310
+ });
311
+ });
@@ -0,0 +1,78 @@
1
+ // TableManager first: it loads the Table/Record/Columns module cycle from its settled entry point.
2
+ import { TableManager } from '../src/schema/TableManager';
3
+ import { Table } from '../src/Table';
4
+ import { StringColumn } from '../src/Columns';
5
+
6
+ /**
7
+ * The order `TableManager.loadTables` hands absent tables to `SchemaOperations.createTables`:
8
+ * each table after the tables its foreign keys reference (`ColumnOptions.references`), grouped
9
+ * by rank and kept in the given order within a rank. The emulator/database half of the proof
10
+ * (a real batch that fails in the enumerated order and lands in this one) lives in the reusable
11
+ * TableManager tests every driver runs.
12
+ */
13
+
14
+ type CreateOrderInternals = { orderByReferences(tables: Table<any>[]): Table<any>[] };
15
+
16
+ const tableManager = () =>
17
+ new TableManager({} as any, {} as any, {} as any, {} as any) as unknown as CreateOrderInternals;
18
+
19
+ /** A table named `name` with one foreign-key column per entry in `references`. */
20
+ const table = (name: string, ...references: string[]): Table<any> => {
21
+ const columns: { [property: string]: StringColumn } = { id: new StringColumn('id') };
22
+ references.forEach((referencedTable, index) => {
23
+ columns[`ref${index}`] = new StringColumn(`ref_${index}`, { references: { table: referencedTable } });
24
+ });
25
+ return { name, columns, indexes: [] } as unknown as Table<any>;
26
+ };
27
+
28
+ const names = (tables: Table<any>[]) => tables.map((each) => each.name);
29
+
30
+ describe('TableManager — the order absent tables are created in', () => {
31
+ it('creates a referenced table before the table enumerated ahead of it that references it', () => {
32
+ expect(names(tableManager().orderByReferences([table('child', 'parent'), table('parent')]))).toEqual([
33
+ 'parent',
34
+ 'child',
35
+ ]);
36
+ });
37
+
38
+ it('groups by rank and keeps the given order within a rank, so the output is deterministic', () => {
39
+ const ordered = tableManager().orderByReferences([
40
+ table('comment', 'post', 'account'),
41
+ table('post', 'account'),
42
+ table('reaction', 'account'),
43
+ table('account'),
44
+ table('tag'),
45
+ ]);
46
+
47
+ // rank 0: account, tag (given order) · rank 1: post, reaction (given order) · rank 2: comment
48
+ expect(names(ordered)).toEqual(['account', 'tag', 'post', 'reaction', 'comment']);
49
+ });
50
+
51
+ it('allows a table to reference itself', () => {
52
+ expect(names(tableManager().orderByReferences([table('node', 'node'), table('leaf', 'node')]))).toEqual([
53
+ 'node',
54
+ 'leaf',
55
+ ]);
56
+ });
57
+
58
+ it('ignores a reference to a table outside the set (already created, or not registered)', () => {
59
+ expect(names(tableManager().orderByReferences([table('late', 'existing'), table('early')]))).toEqual([
60
+ 'late',
61
+ 'early',
62
+ ]);
63
+ });
64
+
65
+ it('refuses a reference cycle, naming the cycle and every table it blocks', () => {
66
+ const cyclic = () =>
67
+ tableManager().orderByReferences([
68
+ table('free'),
69
+ table('downstream', 'second'),
70
+ table('first', 'third'),
71
+ table('second', 'first'),
72
+ table('third', 'second'),
73
+ ]);
74
+
75
+ expect(cyclic).toThrow('foreign keys form a cycle: second -> first -> third -> second');
76
+ expect(cyclic).toThrow('Tables it blocks: downstream, first, second, third');
77
+ });
78
+ });
@@ -13,9 +13,7 @@ import {
13
13
  withSourceRecordColumns,
14
14
  } from '@proteinjs/db';
15
15
  import type { DefaultTransactionContextFactory } from '@proteinjs/db';
16
- // Relative on purpose: the class shares its name with the SourceRecordLoader declaration
17
- // interface exported from the package index, so it is not index-exported.
18
- import { SourceRecordLoader } from '../../src/source/SourceRecordLoader';
16
+ import { SourceRecordSyncRunner } from '../../src/source/SourceRecordSyncRunner';
19
17
  import { TableWatcherRunner } from '../../src/TableWatcherRunner';
20
18
  import { DbTestEnvironment } from '../util/DbTestEnvironment';
21
19
  import {
@@ -90,7 +88,7 @@ export const sourceRecordSyncTests = (
90
88
  packageName: declaration.source,
91
89
  object: { table: declaration.table, record: declaration.record },
92
90
  }));
93
- const loader = new SourceRecordLoader();
91
+ const loader = new SourceRecordSyncRunner();
94
92
  (loader as unknown as LoaderInternals).resolveSourceVersion = (source) =>
95
93
  Object.prototype.hasOwnProperty.call(versions, source) ? versions[source] : undefined;
96
94
  return await loader.load();
@@ -860,7 +858,7 @@ export const sourceRecordSyncTests = (
860
858
  });
861
859
 
862
860
  test("the version resolver reads the declaring package's real package.json", async () => {
863
- const internals = new SourceRecordLoader() as unknown as LoaderInternals;
861
+ const internals = new SourceRecordSyncRunner() as unknown as LoaderInternals;
864
862
  // A real dependency of this build resolves to its actual version (entry resolution +
865
863
  // walk-up works for exports-mapped packages, where `<pkg>/package.json` is not requireable).
866
864
  expect(internals.resolveSourceVersion('@proteinjs/db-query')).toMatch(/^\d+\.\d+\.\d+/);
@@ -10,7 +10,9 @@ import {
10
10
  DbDriver,
11
11
  Column,
12
12
  Table,
13
+ withRecordColumns,
13
14
  } from '@proteinjs/db';
15
+ import { SourceRepository } from '@proteinjs/reflection';
14
16
  import { DbTestEnvironment } from '../util/DbTestEnvironment';
15
17
  import {
16
18
  ColumnTypesTable,
@@ -539,5 +541,98 @@ export const tableManagerTests = (
539
541
  expect(JSON.stringify(indexes['db_test_user_active_name_index'])).toBe(JSON.stringify(['active', 'name']));
540
542
  expect(JSON.stringify(indexes['db_test_user_active_email_index'])).toBeFalsy();
541
543
  });
544
+
545
+ /**
546
+ * `loadTables` creates every absent registered table in one pass, each table's foreign keys
547
+ * declared inline on its CREATE. The registry's enumeration order says nothing about those
548
+ * references, so these fixtures are enumerated with each referencing table FIRST — the order
549
+ * that fails a fresh database unless the tables are ordered by their references first.
550
+ */
551
+ describe('loadTables creates absent tables in reference order', () => {
552
+ const fixtures = createOrderFixtureTables();
553
+
554
+ beforeEach(async () => {
555
+ await dropFixtureTables(dropTable, fixtures);
556
+ });
557
+
558
+ afterEach(async () => {
559
+ await dropFixtureTables(dropTable, fixtures);
560
+ });
561
+
562
+ test('a table enumerated before the table its foreign key references is created after it', async () => {
563
+ await withEnumeratedTables([fixtures.child, fixtures.parent], () => tableManager.loadTables());
564
+
565
+ expect(await tableManager.tableExists(fixtures.parent)).toBe(true);
566
+ expect(await tableManager.tableExists(fixtures.child)).toBe(true);
567
+ const foreignKeys = await tableManager.schemaMetadata.getForeignKeys(fixtures.child);
568
+ expect(foreignKeys['parent_id']?.referencedTableName).toBe(fixtures.parent.name);
569
+ expect(foreignKeys['parent_id']?.referencedColumnName).toBe('id');
570
+ });
571
+
572
+ test('a reference cycle among absent tables is refused by name, and nothing is created', async () => {
573
+ const created = withEnumeratedTables([fixtures.cycleA, fixtures.cycleB], () => tableManager.loadTables());
574
+
575
+ await expect(created).rejects.toThrow(
576
+ `foreign keys form a cycle: ${fixtures.cycleA.name} -> ${fixtures.cycleB.name} -> ${fixtures.cycleA.name}`
577
+ );
578
+ expect(await tableManager.tableExists(fixtures.cycleA)).toBe(false);
579
+ expect(await tableManager.tableExists(fixtures.cycleB)).toBe(false);
580
+ });
581
+ });
582
+ };
583
+ };
584
+
585
+ /**
586
+ * Fixture tables for the reference-order tests. Anonymous classes on purpose: a named class
587
+ * extending `Table` in this package's test sources joins the reflection registry, and a
588
+ * registered reference cycle would be refused by every `loadTables` in the suites.
589
+ */
590
+ const createOrderFixtureTables = () => {
591
+ const referencing = (tableName: string, referencedTable: string): Table<any> =>
592
+ new (class extends Table<any> {
593
+ name = tableName;
594
+ columns = withRecordColumns<any>({
595
+ label: new StringColumn('label'),
596
+ parentId: new StringColumn('parent_id', { references: { table: referencedTable } }),
597
+ });
598
+ })();
599
+
600
+ return {
601
+ parent: new (class extends Table<any> {
602
+ name = 'db_test_create_order_parent';
603
+ columns = withRecordColumns<any>({
604
+ label: new StringColumn('label'),
605
+ });
606
+ })() as Table<any>,
607
+ child: referencing('db_test_create_order_child', 'db_test_create_order_parent'),
608
+ cycleA: referencing('db_test_create_order_cycle_a', 'db_test_create_order_cycle_b'),
609
+ cycleB: referencing('db_test_create_order_cycle_b', 'db_test_create_order_cycle_a'),
542
610
  };
543
611
  };
612
+
613
+ /** Referencing tables before the tables they reference, so a foreign key never blocks a drop. */
614
+ const dropFixtureTables = async (
615
+ dropTable: (table: Table<any>) => Promise<void>,
616
+ fixtures: ReturnType<typeof createOrderFixtureTables>
617
+ ) => {
618
+ for (const table of [fixtures.child, fixtures.parent, fixtures.cycleA, fixtures.cycleB]) {
619
+ await dropTable(table);
620
+ }
621
+ };
622
+
623
+ /**
624
+ * Run `load` with the reflection registry enumerating exactly `tables` as the registered tables,
625
+ * in that order — what a package declaring them in that order hands `TableManager.loadTables`.
626
+ */
627
+ const withEnumeratedTables = async (tables: Table<any>[], load: () => Promise<void>) => {
628
+ const repository = SourceRepository.get();
629
+ const enumerate = repository.objects.bind(repository);
630
+ const objects = jest
631
+ .spyOn(repository, 'objects')
632
+ .mockImplementation(((type: string) => (type === '@proteinjs/db/Table' ? tables : enumerate(type))) as any);
633
+ try {
634
+ await load();
635
+ } finally {
636
+ objects.mockRestore();
637
+ }
638
+ };
@@ -1 +0,0 @@
1
- {"version":3,"file":"SourceRecordLoader.d.ts","sourceRoot":"","sources":["../../../src/source/SourceRecordLoader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAkBjC,gEAAgE;AAChE,MAAM,MAAM,4BAA4B,GAAG;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,YAAY,EAAE,MAAM,CAAC;IACrB,uFAAuF;IACvF,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG,4BAA4B,CAAA;CAAE,CAAC;AAE5F,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAA+C;IAE7D,+FAA+F;IAC/F,OAAO,CAAC,cAAc,CAAyC;IAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAuCG;IACG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,uBAAuB,CAAC;IA0JpE;;;;;;;;;OASG;YACW,gBAAgB;IA2D9B;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;YACW,kCAAkC;IA0BhD;;;;;;OAMG;YACW,YAAY;IAkB1B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA+CvB;;;;;;;;;;;;;;;;;;;OAmBG;YACW,UAAU;IAwBxB;;;OAGG;YACW,eAAe;IAmB7B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,gBAAgB;IAkDxB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,kBAAkB;IAmB1B,mGAAmG;IACnG,OAAO,CAAC,aAAa;IAQrB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,oBAAoB;IAuC5B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,YAAY;IAapB;;;;OAIG;IACH,OAAO,CAAC,eAAe;CA4DxB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SourceRecordLoader.js","sourceRoot":"","sources":["../../../src/source/SourceRecordLoader.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=SourceRecordLoader.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SourceRecordLoader.test.d.ts","sourceRoot":"","sources":["../../test/SourceRecordLoader.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SourceRecordLoader.test.js","sourceRoot":"","sources":["../../test/SourceRecordLoader.test.ts"],"names":[],"mappings":"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"}