diff --git a/scripts/lib/catalog-cli.d.mts b/scripts/lib/catalog-cli.d.mts new file mode 100644 index 000000000..1362b58aa --- /dev/null +++ b/scripts/lib/catalog-cli.d.mts @@ -0,0 +1,12 @@ +export function createCliInventory(cli: unknown): { + readonly primary: readonly string[]; + readonly aliases: readonly { + readonly name: string; + readonly target: string; + }[]; +}; +export function cliCommandOptionNames( + cli: unknown, + name: string, +): readonly string[]; +export function cliCommandDescriptionIssues(cli: unknown): readonly string[]; diff --git a/scripts/lib/product-catalog.d.mts b/scripts/lib/product-catalog.d.mts index b260cd2e6..7147d4040 100644 --- a/scripts/lib/product-catalog.d.mts +++ b/scripts/lib/product-catalog.d.mts @@ -26,10 +26,6 @@ export interface ProductCatalog { readonly format: string; readonly configuration: string; }[]; - readonly schemas: readonly { - readonly id: string; - readonly version: string | number; - }[]; readonly cli: { readonly primary_count: number; readonly commands: readonly string[]; @@ -45,21 +41,6 @@ export interface ProductCatalog { } export function createProductCatalog(root: string): Promise; -export function providerCatalogDigest( - providers: ProductCatalog["providers"], -): string; -export function createCliInventory(cli: unknown): { - readonly primary: readonly string[]; - readonly aliases: readonly { - readonly name: string; - readonly target: string; - }[]; -}; -export function cliCommandOptionNames( - cli: unknown, - name: string, -): readonly string[]; -export function cliCommandDescriptionIssues(cli: unknown): readonly string[]; export function serializeProductCatalog( catalog: ProductCatalog, ): Promise; diff --git a/scripts/lib/product-catalog.mjs b/scripts/lib/product-catalog.mjs index ebdaaeb0d..dadffaf7d 100644 --- a/scripts/lib/product-catalog.mjs +++ b/scripts/lib/product-catalog.mjs @@ -1,22 +1,9 @@ import { formatGeneratedFile } from "./format-generated-file.mjs"; import { assertSameNames, digest, loadSources } from "./catalog-core.mjs"; -import { - createCliInventory, - cliCommandDescriptionIssues, - cliCommandOptionNames, -} from "./catalog-cli.mjs"; +import { createCliInventory } from "./catalog-cli.mjs"; import { providerCatalog, toolFamilyCatalog } from "./catalog-builders.mjs"; -export { - createCliInventory, - cliCommandDescriptionIssues, - cliCommandOptionNames, -}; - -/** Return the stable digest for the source-derived provider projection. */ -export const providerCatalogDigest = (providers) => digest(providers); - /** Project current runtime contracts into deterministic, machine-readable facts. */ export const createProductCatalog = async (root) => { const sources = await loadSources(root); @@ -59,7 +46,7 @@ export const createProductCatalog = async (root) => { counts: sources.catalogIdentity.CATALOG_IDENTITY.counts, digests: { // Full runtime schema digests belong to server identity, not this facts projection. - providers_sha256: providerCatalogDigest(providers), + providers_sha256: digest(providers), }, }, }; diff --git a/tests/boundary/cli/cliInputSchemaRequired.test.ts b/tests/boundary/cli/cliInputSchemaRequired.test.ts index 3bc95236f..a74a3e963 100644 --- a/tests/boundary/cli/cliInputSchemaRequired.test.ts +++ b/tests/boundary/cli/cliInputSchemaRequired.test.ts @@ -3,7 +3,7 @@ import { Cli, z } from "incur"; import { describe, expect, it } from "vitest"; import { createCli } from "../../../src/cli.js"; -import { createCliInventory } from "../../../scripts/lib/product-catalog.mjs"; +import { createCliInventory } from "../../../scripts/lib/catalog-cli.mjs"; type CliInstance = ReturnType; type CommandMap = NonNullable>; diff --git a/tests/boundary/cli/cliToolCoverage.test.ts b/tests/boundary/cli/cliToolCoverage.test.ts index 729d9bce2..b689ecfbb 100644 --- a/tests/boundary/cli/cliToolCoverage.test.ts +++ b/tests/boundary/cli/cliToolCoverage.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from "vitest"; import { createCli } from "../../../src/cli.js"; -import { createCliInventory } from "../../../scripts/lib/product-catalog.mjs"; +import { createCliInventory } from "../../../scripts/lib/catalog-cli.mjs"; import { TOOL_CONTRACTS } from "../../../src/contracts/toolContracts.js"; import { CLI_COMMAND_ALIASES, diff --git a/tests/boundary/cli/productCatalog.test.ts b/tests/boundary/cli/productCatalog.test.ts index f1fca8401..3f35fc830 100644 --- a/tests/boundary/cli/productCatalog.test.ts +++ b/tests/boundary/cli/productCatalog.test.ts @@ -27,8 +27,9 @@ import { createCliInventory, cliCommandDescriptionIssues, cliCommandOptionNames, +} from "../../../scripts/lib/catalog-cli.mjs"; +import { createProductCatalog, - providerCatalogDigest, serializeProductCatalog, } from "../../../scripts/lib/product-catalog.mjs"; @@ -77,9 +78,6 @@ describe("canonical product catalog", () => { catalog.providers.find(({ id }) => id === GHIDRA_PROVIDER_IDENTITY.id) ?.capabilities, ).toEqual([...GHIDRA_OPERATIONS].sort()); - expect(catalog.runtime_catalog.digests.providers_sha256).toBe( - providerCatalogDigest(catalog.providers), - ); expect( JSON.parse(await readFile("docs/public/product-catalog.json", "utf8")), ).toEqual(catalog); @@ -207,19 +205,6 @@ describe("canonical product catalog drift", () => { ); }); - it("changes the provider projection digest when provider facts drift", async () => { - const catalog = await createProductCatalog(root); - const firstProvider = catalog.providers[0]; - if (firstProvider === undefined) throw new TypeError("Missing provider"); - const driftedProviders = [ - { ...firstProvider, name: `${firstProvider.name} drifted` }, - ...catalog.providers.slice(1), - ]; - expect(providerCatalogDigest(driftedProviders)).not.toBe( - catalog.runtime_catalog.digests.providers_sha256, - ); - }); - it("fails check mode without rewriting a stale generated artifact", async () => { const directory = await createTestTempDirectory("rea-generated-check-"); temporaryRoots.push(directory);