Skip to content

Commit 2b6314b

Browse files
committed
fix: code review improvements
1 parent e3af744 commit 2b6314b

File tree

2 files changed

+28
-27
lines changed

2 files changed

+28
-27
lines changed

src/tools/utils.ts

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { ValidateFunction } from 'ajv';
22
import type Ajv from 'ajv';
33

4-
import { ACTOR_ENUM_MAX_LENGTH, ACTOR_MAX_DESCRIPTION_LENGTH } from '../const.js';
4+
import { ACTOR_ENUM_MAX_LENGTH, ACTOR_MAX_DESCRIPTION_LENGTH, ADVANCED_INPUT_KEY } from '../const.js';
55
import type { ActorInputSchemaProperties, IActorInputSchema, ISchemaProperties } from '../types.js';
66
import {
77
addGlobsProperties,
@@ -312,46 +312,47 @@ export function transformActorInputSchemaProperties(
312312
// Deep clone input to avoid mutating the original object
313313
const inputClone: IActorInputSchema = structuredClone(input);
314314

315+
const transform = (transformInput: IActorInputSchema) => {
316+
let transformedProperties = markInputPropertiesAsRequired(transformInput);
317+
transformedProperties = buildApifySpecificProperties(transformedProperties);
318+
transformedProperties = filterSchemaProperties(transformedProperties);
319+
transformedProperties = inferArrayItemsTypeIfMissing(transformedProperties);
320+
transformedProperties = shortenProperties(transformedProperties);
321+
transformedProperties = addEnumsToDescriptionsWithExamples(transformedProperties);
322+
transformedProperties = encodeDotPropertyNames(transformedProperties);
323+
return transformedProperties;
324+
};
325+
315326
if (options?.separateAdvancedInputs) {
316327
inputClone.properties = separateAdvancedInputsInSchema(inputClone.properties);
317-
if (inputClone.properties.advancedInput) {
318-
// Recursively transform the advanced input properties
319-
inputClone.properties.advancedInput.properties = transformActorInputSchemaProperties(
320-
inputClone.properties.advancedInput as IActorInputSchema,
321-
{ separateAdvancedInputs: false },
322-
);
328+
if (inputClone.properties[ADVANCED_INPUT_KEY]) {
329+
inputClone.properties[ADVANCED_INPUT_KEY].properties = transform(inputClone.properties[ADVANCED_INPUT_KEY] as IActorInputSchema);
323330
}
324331
}
325332

326-
let transformedProperties = markInputPropertiesAsRequired(inputClone);
327-
transformedProperties = buildApifySpecificProperties(transformedProperties);
328-
transformedProperties = filterSchemaProperties(transformedProperties);
329-
transformedProperties = inferArrayItemsTypeIfMissing(transformedProperties);
330-
transformedProperties = shortenProperties(transformedProperties);
331-
transformedProperties = addEnumsToDescriptionsWithExamples(transformedProperties);
332-
transformedProperties = encodeDotPropertyNames(transformedProperties);
333-
return transformedProperties;
333+
return transform(inputClone);
334334
}
335335

336336
export function transformActorInputForGetDetails(
337337
input: Readonly<IActorInputSchema>,
338338
options?: { separateAdvancedInputs?: boolean },
339-
) {
339+
): IActorInputSchema {
340340
// Deep clone input to avoid mutating the original object
341341
const inputClone = structuredClone(input) as IActorInputSchema;
342342

343+
const transform = (transformInput: IActorInputSchema) => {
344+
let transformedProperties = filterSchemaProperties(transformInput.properties);
345+
transformedProperties = shortenProperties(transformedProperties);
346+
return transformedProperties;
347+
};
348+
343349
if (options?.separateAdvancedInputs) {
344350
inputClone.properties = separateAdvancedInputsInSchema(inputClone.properties);
345-
if (inputClone.properties.advancedInput) {
346-
// Recursively transform the advanced input properties
347-
inputClone.properties.advancedInput = transformActorInputForGetDetails(
348-
inputClone.properties.advancedInput as IActorInputSchema,
349-
{ separateAdvancedInputs: false },
350-
) as ISchemaProperties;
351+
if (inputClone.properties[ADVANCED_INPUT_KEY]) {
352+
inputClone.properties[ADVANCED_INPUT_KEY].properties = transform(inputClone.properties[ADVANCED_INPUT_KEY] as IActorInputSchema);
351353
}
352354
}
353355

354-
inputClone.properties = filterSchemaProperties(inputClone.properties);
355-
inputClone.properties = shortenProperties(inputClone.properties);
356+
inputClone.properties = transform(inputClone);
356357
return inputClone;
357358
}

tests/integration/suite.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ export function createIntegrationTestsSuite(
504504
await client.callTool({ name: HelperTools.ACTOR_ADD, arguments: { actor: 'compass/crawler-google-places' } });
505505
// Get input type for actor 'compass-slash-crawler-google-places'
506506
const tools = await client.listTools();
507-
const googlePlacesTool = tools.tools.find((tool) => tool.name === 'compass-slash-crawler-google-places');
507+
const googlePlacesTool = tools.tools.find((tool) => tool.name === actorNameToToolName('compass/crawler-google-places'));
508508
const properties = googlePlacesTool!.inputSchema.properties as Record<string, unknown>;
509509
expect(Object.keys(properties)).toMatchInlineSnapshot(`
510510
[
@@ -515,7 +515,7 @@ export function createIntegrationTestsSuite(
515515
"advancedInput",
516516
]
517517
`);
518-
expect(Object.keys((properties[ADVANCED_INPUT_KEY] as { properties: Record<string, unknown> }).properties).length).toBeGreaterThan(0);
518+
expect(Object.keys((properties[ADVANCED_INPUT_KEY] as { properties: Record<string, unknown> }).properties).length).toBe(0);
519519

520520
await client.close();
521521
});
@@ -524,7 +524,7 @@ export function createIntegrationTestsSuite(
524524
const client = await createClientFn({ enableAddingActors: true, fullActorSchema: true });
525525
await client.callTool({ name: HelperTools.ACTOR_ADD, arguments: { actor: 'compass/crawler-google-places' } });
526526
const tools = await client.listTools();
527-
const googlePlacesTool = tools.tools.find((tool) => tool.name === 'compass-slash-crawler-google-places');
527+
const googlePlacesTool = tools.tools.find((tool) => tool.name === actorNameToToolName('compass/crawler-google-places'));
528528
const properties = googlePlacesTool!.inputSchema.properties as Record<string, unknown>;
529529
expect(Object.keys(properties)).not.toContain(ADVANCED_INPUT_KEY);
530530
await client.close();

0 commit comments

Comments
 (0)