Skip to content

Commit 030dc17

Browse files
fix(metadata-protocol): add the missing typecheck script and repair all 63 test-layer type errors, graduating the package out of the DEBT ledger (#14018)
* wip: seed-loader import extensions * wip: seed row type + residual test repairs * wip: manifest script + DEBT graduation --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 5e2c04d commit 030dc17

16 files changed

Lines changed: 45 additions & 30 deletions

packages/metadata-protocol/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"build": "tsup && node ../../scripts/check-dts-emitted.mjs",
2828
"dev": "tsc --watch",
2929
"clean": "rm -rf dist",
30+
"typecheck": "tsc --noEmit",
3031
"test": "vitest run",
3132
"test:watch": "vitest"
3233
},

packages/metadata-protocol/src/mutation-listeners.test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ function makeProtocol() {
2020
return new ObjectStackProtocolImplementation({} as any);
2121
}
2222

23-
const evt = (over: Partial<MetadataMutationEvent> = {}): MetadataMutationEvent => ({
23+
// `body` mirrors `runMutationProjector`'s own declared parameter
24+
// (`MetadataMutationEvent & { body?: unknown }`) — the projector cases below
25+
// pass one, and the bare `Partial<MetadataMutationEvent>` rejected it.
26+
const evt = (
27+
over: Partial<MetadataMutationEvent> & { body?: unknown } = {},
28+
): MetadataMutationEvent & { body?: unknown } => ({
2429
type: 'hook',
2530
name: 'rebind_probe_hook',
2631
state: 'active',

packages/metadata-protocol/src/protocol.batch-atomic.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ function makeTransactionalEngine(opts: { driverCanTransact?: boolean } = {}) {
3838
const rollbacks: unknown[] = [];
3939
const handle = { id: 'trx-1' };
4040

41-
const insert = vi.fn(async (_object: string, data: any) => {
41+
// Third parameter declared because the write path PASSES it and the
42+
// assertions below read `call[2]`: a 2-arity mock made that a tuple
43+
// with no element at index 2.
44+
const insert = vi.fn(async (_object: string, data: any, _options?: any) => {
4245
if (data?.title === POISON) throw new Error('insert exploded');
4346
return { id: `rec-${insert.mock.calls.length}`, ...data };
4447
});

packages/metadata-protocol/src/protocol.stored-conversions.test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,12 @@ function matches(r: Row, where: Record<string, unknown>): boolean {
4444
return true;
4545
}
4646

47-
function makeStubEngine(seedRows: Array<Partial<Row> & { type: string; name: string; metadata: unknown }>) {
47+
// `metadata` is `Omit`-ed out of the `Partial<Row>` half, never merely
48+
// intersected over it: `string & unknown` is `string`, so a plain
49+
// intersection refuses every body written as an object literal.
50+
function makeStubEngine(
51+
seedRows: Array<Omit<Partial<Row>, 'metadata'> & { type: string; name: string; metadata: unknown }>,
52+
) {
4853
let nextId = 0;
4954
const rows: Row[] = seedRows.map((r) => ({
5055
id: `r_${++nextId}`,

packages/metadata-protocol/src/protocol.stored-migration.test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,12 @@ function matches(r: Record<string, any>, where: Record<string, unknown>): boolea
5757
* actually observable.
5858
*/
5959
function makeStubEngine(
60-
seedRows: Array<Partial<Row> & { type: string; name: string; metadata: unknown }>,
60+
// `metadata` is `Omit`-ed out of the `Partial<Row>` half, never merely
61+
// intersected over it: on the row `metadata` is the STORED string, and
62+
// `string & unknown` is `string`, so a plain intersection refuses every
63+
// body written as an object literal — which is the seeding convenience
64+
// this harness exists for, and what it already does at runtime below.
65+
seedRows: Array<Omit<Partial<Row>, 'metadata'> & { type: string; name: string; metadata: unknown }>,
6166
) {
6267
let nextId = 0;
6368
const tables = new Map<string, Record<string, any>[]>();

packages/metadata-protocol/src/seed-loader-composite-external-id.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
22

33
import { describe, it, expect, vi } from 'vitest';
4-
import { SeedLoaderService } from './seed-loader';
4+
import { SeedLoaderService } from './seed-loader.js';
55
import type { IDataEngine, IMetadataService } from '@objectstack/spec/contracts';
66
import { assertEngineDeleteDispatch, assertEngineUpdateDispatch, assertEngineFindOnePredicate } from '@objectstack/metadata-core';
77

packages/metadata-protocol/src/seed-loader-deferred-dropped.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
22

33
import { describe, it, expect, vi } from 'vitest';
4-
import { SeedLoaderService } from './seed-loader';
4+
import { SeedLoaderService } from './seed-loader.js';
55
import type { IDataEngine, IMetadataService } from '@objectstack/spec/contracts';
66
import { assertEngineDeleteDispatch, assertEngineUpdateDispatch, assertEngineFindOnePredicate } from '@objectstack/metadata-core';
77

packages/metadata-protocol/src/seed-loader-deferred-failure.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
22

33
import { describe, it, expect, vi } from 'vitest';
4-
import { SeedLoaderService } from './seed-loader';
4+
import { SeedLoaderService } from './seed-loader.js';
55
import type { IDataEngine, IMetadataService } from '@objectstack/spec/contracts';
66
import { assertEngineDeleteDispatch, assertEngineUpdateDispatch, assertEngineFindOnePredicate } from '@objectstack/metadata-core';
77

packages/metadata-protocol/src/seed-loader-engine-schema-fallback.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.
22

33
import { describe, it, expect, vi } from 'vitest';
4-
import { SeedLoaderService } from './seed-loader';
4+
import { SeedLoaderService } from './seed-loader.js';
55
import type { IDataEngine, IMetadataService } from '@objectstack/spec/contracts';
66
import { assertEngineDeleteDispatch, assertEngineUpdateDispatch, assertEngineFindOnePredicate } from '@objectstack/metadata-core';
77

packages/metadata-protocol/src/seed-loader-multi-value-reference.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license.
22

33
import { describe, it, expect, vi } from 'vitest';
4-
import { SeedLoaderService } from './seed-loader';
4+
import { SeedLoaderService } from './seed-loader.js';
55
import type { IDataEngine, IMetadataService } from '@objectstack/spec/contracts';
66
import { assertEngineDeleteDispatch, assertEngineUpdateDispatch, assertEngineFindOnePredicate } from '@objectstack/metadata-core';
77

0 commit comments

Comments
 (0)