* Reads the resolved sync options off the raw `sourceConfig`, normalizing * enum-like fields to their valid set and clamping the numeric cap. Centralized * so `listDocuments`, `getDocument`, and `validateConfig` agree on defaults.
(sourceConfig: Record<string, unknown>)
| 107 | * so `listDocuments`, `getDocument`, and `validateConfig` agree on defaults. |
| 108 | */ |
| 109 | function resolveOptions(sourceConfig: Record<string, unknown>): { |
| 110 | requestStatus: JsmRequestStatus |
| 111 | requestOwnership: JsmRequestOwnership |
| 112 | requestTypeId: string |
| 113 | searchTerm: string |
| 114 | commentScope: JsmCommentScope |
| 115 | maxRequests: number |
| 116 | } { |
| 117 | const requestStatus = VALID_REQUEST_STATUS.includes( |
| 118 | sourceConfig.requestStatus as JsmRequestStatus |
| 119 | ) |
| 120 | ? (sourceConfig.requestStatus as JsmRequestStatus) |
| 121 | : 'ALL_REQUESTS' |
| 122 | |
| 123 | const requestOwnership = VALID_REQUEST_OWNERSHIP.includes( |
| 124 | sourceConfig.requestOwnership as JsmRequestOwnership |
| 125 | ) |
| 126 | ? (sourceConfig.requestOwnership as JsmRequestOwnership) |
| 127 | : 'ALL_REQUESTS' |
| 128 | |
| 129 | const commentScope = VALID_COMMENT_SCOPE.includes(sourceConfig.comments as JsmCommentScope) |
| 130 | ? (sourceConfig.comments as JsmCommentScope) |
| 131 | : 'public' |
| 132 | |
| 133 | const requestTypeId = |
| 134 | typeof sourceConfig.requestTypeId === 'string' ? sourceConfig.requestTypeId.trim() : '' |
| 135 | const searchTerm = |
| 136 | typeof sourceConfig.searchTerm === 'string' ? sourceConfig.searchTerm.trim() : '' |
| 137 | |
| 138 | const parsedMax = sourceConfig.maxRequests ? Number(sourceConfig.maxRequests) : 0 |
| 139 | const maxRequests = Number.isFinite(parsedMax) && parsedMax > 0 ? Math.floor(parsedMax) : 0 |
| 140 | |
| 141 | return { requestStatus, requestOwnership, requestTypeId, searchTerm, commentScope, maxRequests } |
| 142 | } |
| 143 | |
| 144 | /** |
| 145 | * Extracts a plain-text value for a given request field id (e.g. `summary`, |