@proteinjs/db-driver-spanner 1.22.0 → 1.22.1

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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,18 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.22.1](https://github.com/proteinjs/db/compare/@proteinjs/db-driver-spanner@1.22.0...@proteinjs/db-driver-spanner@1.22.1) (2026-08-19)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * migration run-state writes omit absent optional fields — a void run() or non-Error throw can never wedge a row at 'running' ([350dbb9](https://github.com/proteinjs/db/commit/350dbb9590c2ac697807b6e1f11cf29ef90c1cdb)), closes [#124](https://github.com/proteinjs/db/issues/124) [#57](https://github.com/proteinjs/db/issues/57)
12
+ * spanner-driver rebuilds stop self-eating — dist excluded from tsc inputs ([35b3046](https://github.com/proteinjs/db/commit/35b304613f5b419027370cf53315aea26197aeef))
13
+
14
+
15
+
16
+
17
+
6
18
  # [1.22.0](https://github.com/proteinjs/db/compare/@proteinjs/db-driver-spanner@1.21.0...@proteinjs/db-driver-spanner@1.22.0) (2026-08-18)
7
19
 
8
20
 
@@ -77,6 +77,31 @@ describe('MigrationRunner (spanner)', function () {
77
77
  return [2 /*return*/, 'migration output'];
78
78
  }); }); },
79
79
  };
80
+ // #124 wedge class: optional run-state fields are legitimately ABSENT (a void run() leaves no
81
+ // output; a non-Error throw has no message/stack), and the completion write must omit them —
82
+ // an undefined-valued field fails the WHOLE write (RecordSerializer rejects it), stranding the
83
+ // row at 'running' with the run's real outcome lost.
84
+ var voidRunCount = 0; // effect counter: proves the run itself completed
85
+ var voidOutputMigration = {
86
+ id: 'migration-runner-test-void-output',
87
+ description: 'resolves void — no output',
88
+ run: function () { return __awaiter(void 0, void 0, void 0, function () {
89
+ return __generator(this, function (_a) {
90
+ voidRunCount++;
91
+ return [2 /*return*/];
92
+ });
93
+ }); },
94
+ };
95
+ var nonErrorThrowMigration = {
96
+ id: 'migration-runner-test-string-throw',
97
+ description: 'throws a non-Error value',
98
+ run: function () { return __awaiter(void 0, void 0, void 0, function () {
99
+ return __generator(this, function (_a) {
100
+ // eslint-disable-next-line no-throw-literal
101
+ throw 'string throw with no message or stack';
102
+ });
103
+ }); },
104
+ };
80
105
  // ensureMigrationRun fixtures carry run counters: re-running any of them is VISIBLE as a
81
106
  // counter increment, so idempotence and retry are asserted on the migration's own effect,
82
107
  // not on bookkeeping interactions.
@@ -142,6 +167,8 @@ describe('MigrationRunner (spanner)', function () {
142
167
  _i = 0, _a = [
143
168
  failingMigration,
144
169
  succeedingMigration,
170
+ voidOutputMigration,
171
+ nonErrorThrowMigration,
145
172
  ensureBootMigration,
146
173
  ensureIdempotentMigration,
147
174
  ensureRetriedMigration,
@@ -214,6 +241,45 @@ describe('MigrationRunner (spanner)', function () {
214
241
  }
215
242
  });
216
243
  }); });
244
+ test('a void migration (no output) records success — absent fields are omitted from the completion write', function () { return __awaiter(void 0, void 0, void 0, function () {
245
+ var runner, row;
246
+ return __generator(this, function (_a) {
247
+ switch (_a.label) {
248
+ case 0:
249
+ runner = new db_1.MigrationRunner();
250
+ return [4 /*yield*/, expect(runner.runMigration(voidOutputMigration.id)).resolves.toBeUndefined()];
251
+ case 1:
252
+ _a.sent();
253
+ expect(voidRunCount).toBe(1);
254
+ return [4 /*yield*/, (0, db_1.getDb)().get(migrationTable, { id: voidOutputMigration.id })];
255
+ case 2:
256
+ row = _a.sent();
257
+ expect(row.status).toBe('success');
258
+ expect(row.output == null).toBe(true);
259
+ expect(row.duration).toBeTruthy();
260
+ return [2 /*return*/];
261
+ }
262
+ });
263
+ }); });
264
+ test('a non-Error throw records failure — absent failureMessage/failureStack never poison the write', function () { return __awaiter(void 0, void 0, void 0, function () {
265
+ var runner, row;
266
+ return __generator(this, function (_a) {
267
+ switch (_a.label) {
268
+ case 0:
269
+ runner = new db_1.MigrationRunner();
270
+ return [4 /*yield*/, expect(runner.runMigration(nonErrorThrowMigration.id)).resolves.toBeUndefined()];
271
+ case 1:
272
+ _a.sent();
273
+ return [4 /*yield*/, (0, db_1.getDb)().get(migrationTable, { id: nonErrorThrowMigration.id })];
274
+ case 2:
275
+ row = _a.sent();
276
+ expect(row.status).toBe('failure');
277
+ expect(row.failureMessage == null).toBe(true);
278
+ expect(row.duration).toBeTruthy();
279
+ return [2 /*return*/];
280
+ }
281
+ });
282
+ }); });
217
283
  describe('ensureMigrationRun (boot path)', function () {
218
284
  // Boot context: NO user session exists — UserAuth is fail-closed, so any getDb() bookkeeping
219
285
  // would deny. These tests run with the suite's test identity CLEARED to pin that
@@ -1 +1 @@
1
- {"version":3,"file":"MigrationRunner.test.js","sourceRoot":"","sources":["../../test/MigrationRunner.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MigrationRunner.test.js","sourceRoot":"","sources":["../../test/MigrationRunner.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proteinjs/db-driver-spanner",
3
- "version": "1.22.0",
3
+ "version": "1.22.1",
4
4
  "main": "./dist/generated/index.js",
5
5
  "types": "./dist/generated/index.d.ts",
6
6
  "exports": {
@@ -42,10 +42,10 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@google-cloud/spanner": "7.5.0",
45
- "@proteinjs/db": "^1.34.0",
45
+ "@proteinjs/db": "^1.34.1",
46
46
  "@proteinjs/db-query": "^1.7.0",
47
- "@proteinjs/db-spanner-common": "^1.3.13",
48
- "@proteinjs/db-transaction-context": "^0.5.13",
47
+ "@proteinjs/db-spanner-common": "^1.3.14",
48
+ "@proteinjs/db-transaction-context": "^0.5.14",
49
49
  "@proteinjs/logger": "^1.0.21",
50
50
  "@proteinjs/reflection": "^1.1.12",
51
51
  "@proteinjs/util": "^1.6.1"
@@ -63,5 +63,5 @@
63
63
  "ts-jest": "29.1.1",
64
64
  "typescript": "5.2.2"
65
65
  },
66
- "gitHead": "7a301275151aee8040fd52e15e3fe950a6863783"
66
+ "gitHead": "a5a56218a5757e47576cbe79858c9aacc6026816"
67
67
  }
@@ -49,6 +49,28 @@ describe('MigrationRunner (spanner)', () => {
49
49
  run: async () => 'migration output',
50
50
  } as unknown as Migration;
51
51
 
52
+ // #124 wedge class: optional run-state fields are legitimately ABSENT (a void run() leaves no
53
+ // output; a non-Error throw has no message/stack), and the completion write must omit them —
54
+ // an undefined-valued field fails the WHOLE write (RecordSerializer rejects it), stranding the
55
+ // row at 'running' with the run's real outcome lost.
56
+ let voidRunCount = 0; // effect counter: proves the run itself completed
57
+ const voidOutputMigration = {
58
+ id: 'migration-runner-test-void-output',
59
+ description: 'resolves void — no output',
60
+ run: async () => {
61
+ voidRunCount++;
62
+ },
63
+ } as unknown as Migration;
64
+
65
+ const nonErrorThrowMigration = {
66
+ id: 'migration-runner-test-string-throw',
67
+ description: 'throws a non-Error value',
68
+ run: async () => {
69
+ // eslint-disable-next-line no-throw-literal
70
+ throw 'string throw with no message or stack';
71
+ },
72
+ } as unknown as Migration;
73
+
52
74
  // ensureMigrationRun fixtures carry run counters: re-running any of them is VISIBLE as a
53
75
  // counter increment, so idempotence and retry are asserted on the migration's own effect,
54
76
  // not on bookkeeping interactions.
@@ -101,6 +123,8 @@ describe('MigrationRunner (spanner)', () => {
101
123
  for (const migration of [
102
124
  failingMigration,
103
125
  succeedingMigration,
126
+ voidOutputMigration,
127
+ nonErrorThrowMigration,
104
128
  ensureBootMigration,
105
129
  ensureIdempotentMigration,
106
130
  ensureRetriedMigration,
@@ -137,6 +161,27 @@ describe('MigrationRunner (spanner)', () => {
137
161
  expect(row.duration).toBeTruthy();
138
162
  });
139
163
 
164
+ test('a void migration (no output) records success — absent fields are omitted from the completion write', async () => {
165
+ const runner = new MigrationRunner();
166
+ await expect(runner.runMigration(voidOutputMigration.id)).resolves.toBeUndefined();
167
+
168
+ expect(voidRunCount).toBe(1);
169
+ const row = await getDb().get(migrationTable, { id: voidOutputMigration.id });
170
+ expect(row.status).toBe('success');
171
+ expect(row.output == null).toBe(true);
172
+ expect(row.duration).toBeTruthy();
173
+ });
174
+
175
+ test('a non-Error throw records failure — absent failureMessage/failureStack never poison the write', async () => {
176
+ const runner = new MigrationRunner();
177
+ await expect(runner.runMigration(nonErrorThrowMigration.id)).resolves.toBeUndefined();
178
+
179
+ const row = await getDb().get(migrationTable, { id: nonErrorThrowMigration.id });
180
+ expect(row.status).toBe('failure');
181
+ expect(row.failureMessage == null).toBe(true);
182
+ expect(row.duration).toBeTruthy();
183
+ });
184
+
140
185
  describe('ensureMigrationRun (boot path)', () => {
141
186
  // Boot context: NO user session exists — UserAuth is fail-closed, so any getDb() bookkeeping
142
187
  // would deny. These tests run with the suite's test identity CLEARED to pin that
package/tsconfig.json CHANGED
@@ -23,5 +23,5 @@
23
23
  "@proteinjs/db-driver-spanner/test": ["test/index.ts"]
24
24
  }
25
25
  },
26
- "exclude": ["node_modules", "test.js", "test.d.ts"]
26
+ "exclude": ["node_modules", "dist", "test.js", "test.d.ts"]
27
27
  }