@@ -8,29 +8,52 @@ import {
8
8
import { ListAPIResponse } from '@shm/shared/api-types'
9
9
import { BIG_INT } from '@shm/shared/constants'
10
10
11
+ const processDocuments = ( docs : any [ ] ) => {
12
+ const invalidDocuments : ListAPIResponse [ 'invalidDocuments' ] = [ ]
13
+ const documents : ListAPIResponse [ 'documents' ] = [ ]
14
+
15
+ docs . forEach ( ( doc ) => {
16
+ const id = hmId (
17
+ 'd' ,
18
+ doc . account ,
19
+ doc . path ? { path : entityQueryPathToHmIdPath ( doc . path ) } : undefined ,
20
+ )
21
+ const rawMetadata = doc . metadata ?. toJson ( )
22
+ const metadataParsed = HMDocumentMetadataSchema . safeParse ( rawMetadata )
23
+
24
+ if ( ! metadataParsed . success ) {
25
+ invalidDocuments . push ( {
26
+ id,
27
+ error : metadataParsed . error ,
28
+ metadata : rawMetadata ,
29
+ } )
30
+ } else {
31
+ documents . push ( {
32
+ id,
33
+ metadata : metadataParsed . data ,
34
+ } )
35
+ }
36
+ } )
37
+
38
+ return { invalidDocuments, documents}
39
+ }
40
+
11
41
export const loader = apiGetter ( async ( req ) => {
12
42
const pathParts = req . pathParts
13
43
const [ _api , _list , uid ] = pathParts
44
+
14
45
if ( uid ) {
15
46
const docs = await queryClient . documents . listDocuments ( {
16
47
account : uid ,
17
48
pageSize : BIG_INT ,
18
49
} )
19
- return {
20
- documents : docs . documents . map ( ( doc ) => ( {
21
- id : hmId ( 'd' , doc . account , { path : entityQueryPathToHmIdPath ( doc . path ) } ) ,
22
- metadata : HMDocumentMetadataSchema . parse ( doc . metadata ?. toJson ( ) ) ,
23
- } ) ) ,
24
- } satisfies ListAPIResponse
50
+ const { invalidDocuments, documents} = processDocuments ( docs . documents )
51
+ return { invalidDocuments, documents} satisfies ListAPIResponse
25
52
} else {
26
53
const rootDocs = await queryClient . documents . listRootDocuments ( {
27
54
pageSize : BIG_INT ,
28
55
} )
29
- return {
30
- documents : rootDocs . documents . map ( ( doc ) => ( {
31
- id : hmId ( 'd' , doc . account ) ,
32
- metadata : HMDocumentMetadataSchema . parse ( doc . metadata ?. toJson ( ) ) ,
33
- } ) ) ,
34
- } satisfies ListAPIResponse
56
+ const { invalidDocuments, documents} = processDocuments ( rootDocs . documents )
57
+ return { invalidDocuments, documents} satisfies ListAPIResponse
35
58
}
36
59
} )
0 commit comments