Skip to content

Commit 845a4f7

Browse files
tylerpinaclaude
andcommitted
feat: type ExO query filter parameters for Template and Experience [DX-935]
Replace catch-all `[key: string]: unknown` in `TemplateQueryOptions` and `ExperienceQueryOptions` with 40 named fields mirroring the upstream `TemplateListFiltersSchema` / `ExperienceListFilterSchema` from `experiences-management-api-contract`: - SysFiltersSchema (31 fields): sys.id, createdBy/updatedBy/publishedBy, date range filters, version, archivedAt[exists] - TagFiltersSchema (3): metadata.tags.sys.id[in/all/nin] - TaxonomyConceptsFiltersSchema (4): metadata.concepts.sys.id[in/all/nin], metadata.concepts.descendants[in] - TextFiltersSchema (2): name, name[match] Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 62685cb commit 845a4f7

3 files changed

Lines changed: 58 additions & 6 deletions

File tree

lib/common-types.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -388,6 +388,58 @@ export interface ExoMetadataProps {
388388
name?: string
389389
}
390390

391+
/**
392+
* Shared query filter fields for ExO list endpoints (ComponentType, Experience, Fragment, Template).
393+
* Mirrors the four shared filter schemas in experiences-management-api-contract:
394+
* SysFiltersSchema + TagFiltersSchema + TaxonomyConceptsFiltersSchema + TextFiltersSchema
395+
*/
396+
export interface ExoQueryFilters {
397+
// SysFiltersSchema
398+
'sys.id'?: string
399+
'sys.id[in]'?: string
400+
'sys.id[nin]'?: string
401+
'sys.createdBy.sys.id'?: string
402+
'sys.createdBy.sys.id[in]'?: string
403+
'sys.createdBy.sys.id[nin]'?: string
404+
'sys.updatedBy.sys.id'?: string
405+
'sys.updatedBy.sys.id[in]'?: string
406+
'sys.updatedBy.sys.id[nin]'?: string
407+
'sys.publishedBy.sys.id'?: string
408+
'sys.publishedBy.sys.id[in]'?: string
409+
'sys.publishedBy.sys.id[nin]'?: string
410+
'sys.createdAt[gt]'?: string
411+
'sys.createdAt[gte]'?: string
412+
'sys.createdAt[lt]'?: string
413+
'sys.createdAt[lte]'?: string
414+
'sys.updatedAt[gt]'?: string
415+
'sys.updatedAt[gte]'?: string
416+
'sys.updatedAt[lt]'?: string
417+
'sys.updatedAt[lte]'?: string
418+
'sys.publishedAt[gt]'?: string
419+
'sys.publishedAt[gte]'?: string
420+
'sys.publishedAt[lt]'?: string
421+
'sys.publishedAt[lte]'?: string
422+
'sys.firstPublishedAt[gt]'?: string
423+
'sys.firstPublishedAt[gte]'?: string
424+
'sys.firstPublishedAt[lt]'?: string
425+
'sys.firstPublishedAt[lte]'?: string
426+
'sys.version'?: number
427+
'sys.publishedVersion'?: number
428+
'sys.archivedAt[exists]'?: boolean
429+
// TagFiltersSchema
430+
'metadata.tags.sys.id[in]'?: string
431+
'metadata.tags.sys.id[all]'?: string
432+
'metadata.tags.sys.id[nin]'?: string
433+
// TaxonomyConceptsFiltersSchema
434+
'metadata.concepts.sys.id[in]'?: string
435+
'metadata.concepts.sys.id[all]'?: string
436+
'metadata.concepts.sys.id[nin]'?: string
437+
'metadata.concepts.descendants[in]'?: string
438+
// TextFiltersSchema
439+
'name[match]'?: string
440+
name?: string
441+
}
442+
391443
export interface SysLink {
392444
sys: MetaLinkProps
393445
}

lib/entities/experience.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type {
22
CursorPaginatedCollectionProp,
33
CursorPaginationParams,
44
ExoMetadataProps,
5+
ExoQueryFilters,
56
Link,
67
} from '../common-types'
78
import type {
@@ -62,10 +63,9 @@ export type ExperienceProps = ExperienceCommonProps & {
6263
sys: ExperienceSys
6364
}
6465

65-
// Query options for getMany - cursor-based pagination with mutual exclusivity
66-
export type ExperienceQueryOptions = CursorPaginationParams & {
66+
// Query options for getMany - cursor-based pagination with typed filter fields
67+
export type ExperienceQueryOptions = CursorPaginationParams & ExoQueryFilters & {
6768
order?: string
68-
[key: string]: unknown
6969
}
7070

7171
// Locale-based publish payload — add or remove specific locales.

lib/entities/template.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import type {
33
CursorPaginatedCollectionProp,
44
CursorPaginationParams,
55
ExoMetadataProps,
6+
ExoQueryFilters,
67
Link,
78
} from '../common-types'
89
import type {
@@ -62,10 +63,9 @@ export type UpdateTemplateProps = Omit<TemplateProps, 'sys'> & {
6263
}
6364
}
6465

65-
// Query options for getMany - cursor-based pagination with filter support
66-
export type TemplateQueryOptions = CursorPaginationParams & {
66+
// Query options for getMany - cursor-based pagination with typed filter fields
67+
export type TemplateQueryOptions = CursorPaginationParams & ExoQueryFilters & {
6768
order?: string
68-
[key: string]: unknown
6969
}
7070

7171
export type TemplateCollection = CursorPaginatedCollectionProp<TemplateProps>

0 commit comments

Comments
 (0)