diff --git a/packages/filter-predicates/src/predicates/schema.test.ts b/packages/filter-predicates/src/predicates/schema.test.ts index 47f77bbce8..08c92c20e8 100644 --- a/packages/filter-predicates/src/predicates/schema.test.ts +++ b/packages/filter-predicates/src/predicates/schema.test.ts @@ -176,6 +176,7 @@ describe('parseFilterPredicate', () => { { $any: [{ x: { $exists: true } }] }, { $not: { x: { $exists: true } } }, { $not: { $all: [{ x: { $exists: true } }] } }, + { kind: { $hasPrefix: 'Com' } }, ]; it.each(predicates)( @@ -204,6 +205,7 @@ describe('parseFilterPredicate', () => { { $not: { x: { $unknown: true } } }, { $not: { $all: [{ x: { $unknown: true } }] } }, { $unknown: 'foo' }, + { kind: { $hasPrefix: 1 } }, { 'metadata.tags': ['foo', 'bar'] }, ]; diff --git a/packages/filter-predicates/src/predicates/schema.ts b/packages/filter-predicates/src/predicates/schema.ts index 9684660219..81652786c6 100644 --- a/packages/filter-predicates/src/predicates/schema.ts +++ b/packages/filter-predicates/src/predicates/schema.ts @@ -63,6 +63,7 @@ export function createZodV3FilterPredicateSchema( z.object({ $exists: z.boolean() }), z.object({ $in: z.array(primitiveSchema) }), z.object({ $contains: predicateSchema }), + z.object({ $hasPrefix: z.string() }), ]) as zodV3.ZodType; return predicateSchema; diff --git a/plugins/catalog-react/src/alpha/blueprints/EntityCardBlueprint.test.tsx b/plugins/catalog-react/src/alpha/blueprints/EntityCardBlueprint.test.tsx index ef823e7edf..0ae880a462 100644 --- a/plugins/catalog-react/src/alpha/blueprints/EntityCardBlueprint.test.tsx +++ b/plugins/catalog-react/src/alpha/blueprints/EntityCardBlueprint.test.tsx @@ -108,6 +108,18 @@ describe('EntityCardBlueprint', () => { ], "type": "object", }, + { + "additionalProperties": false, + "properties": { + "$hasPrefix": { + "type": "string", + }, + }, + "required": [ + "$hasPrefix", + ], + "type": "object", + }, ], }, "propertyNames": { diff --git a/plugins/catalog-react/src/alpha/blueprints/EntityContentBlueprint.test.tsx b/plugins/catalog-react/src/alpha/blueprints/EntityContentBlueprint.test.tsx index cd1053db0b..661f501b3f 100644 --- a/plugins/catalog-react/src/alpha/blueprints/EntityContentBlueprint.test.tsx +++ b/plugins/catalog-react/src/alpha/blueprints/EntityContentBlueprint.test.tsx @@ -110,6 +110,18 @@ describe('EntityContentBlueprint', () => { ], "type": "object", }, + { + "additionalProperties": false, + "properties": { + "$hasPrefix": { + "type": "string", + }, + }, + "required": [ + "$hasPrefix", + ], + "type": "object", + }, ], }, "propertyNames": { diff --git a/plugins/catalog-react/src/alpha/blueprints/EntityContextMenuItemBlueprint.test.tsx b/plugins/catalog-react/src/alpha/blueprints/EntityContextMenuItemBlueprint.test.tsx index d92fcc1863..6201f32f2d 100644 --- a/plugins/catalog-react/src/alpha/blueprints/EntityContextMenuItemBlueprint.test.tsx +++ b/plugins/catalog-react/src/alpha/blueprints/EntityContextMenuItemBlueprint.test.tsx @@ -48,7 +48,7 @@ describe('EntityContextMenuItemBlueprint', () => { }, ]; - it.each(data)('should return an extension with sane defaults', params => { + it.each(data)('should return an extension with sane defaults, %#', params => { const extension = EntityContextMenuItemBlueprint.make({ name: 'test', params, @@ -121,6 +121,18 @@ describe('EntityContextMenuItemBlueprint', () => { ], "type": "object", }, + { + "additionalProperties": false, + "properties": { + "$hasPrefix": { + "type": "string", + }, + }, + "required": [ + "$hasPrefix", + ], + "type": "object", + }, ], }, "propertyNames": { @@ -246,7 +258,7 @@ describe('EntityContextMenuItemBlueprint', () => { it.each([ { filter: { kind: 'Api' } }, { filter: (e: Entity) => e.kind.toLowerCase() === 'api' }, - ])('should return a filter function', async ({ filter }) => { + ])('should return a filter function, %#', async ({ filter }) => { const extension = EntityContextMenuItemBlueprint.make({ name: 'test', params: {