@@ -47,6 +47,10 @@ export type PaginatedItems = {
4747 data : Item [ ]
4848}
4949
50+ function ensureArray ( arg : string | string [ ] = [ ] ) : string [ ] {
51+ return Array . isArray ( arg ) ? arg : [ arg ]
52+ }
53+
5054function embed ( db : Low < Data > , name : string , item : Item , related : string ) : Item {
5155 if ( inflection . singularize ( related ) === related ) {
5256 const relatedData = db . data [ inflection . pluralize ( related ) ] as Item [ ]
@@ -148,13 +152,13 @@ export class Service {
148152 findById (
149153 name : string ,
150154 id : string ,
151- query : { _embed ?: string [ ] } ,
155+ query : { _embed ?: string [ ] | string } ,
152156 ) : Item | undefined {
153157 const value = this . #get( name )
154158
155159 if ( Array . isArray ( value ) ) {
156160 let item = value . find ( ( item ) => item [ 'id' ] === id )
157- query . _embed ? .forEach ( ( related ) => {
161+ ensureArray ( query . _embed ) . forEach ( ( related ) => {
158162 if ( item !== undefined ) item = embed ( this . #db, name , item , related )
159163 } )
160164 return item
@@ -184,9 +188,10 @@ export class Service {
184188 }
185189
186190 // Include
187- query . _embed ? .forEach ( ( related ) => {
188- if ( items !== undefined && Array . isArray ( items ) )
191+ ensureArray ( query . _embed ) . forEach ( ( related ) => {
192+ if ( items !== undefined && Array . isArray ( items ) ) {
189193 items = items . map ( ( item ) => embed ( this . #db, name , item , related ) )
194+ }
190195 } )
191196
192197 // Return list if no query params
@@ -209,11 +214,18 @@ export class Service {
209214 continue
210215 }
211216 if (
212- [ '_sort' , '_start' , '_end' , '_limit' , '_page' , '_per_page' ] . includes (
213- key ,
214- )
215- )
217+ [
218+ '_embed' ,
219+ '_sort' ,
220+ '_start' ,
221+ '_end' ,
222+ '_limit' ,
223+ '_page' ,
224+ '_per_page' ,
225+ ] . includes ( key )
226+ ) {
216227 continue
228+ }
217229 conds [ key ] = [ Condition . default , value ]
218230 }
219231
0 commit comments