@@ -15,6 +15,7 @@ import type {
1515 NestedValue ,
1616 NestedValueWithUndefined ,
1717 PossiblyNestedValue ,
18+ PossiblyNestedValueWithUndefined ,
1819} from "./types" ;
1920import {
2021 flatten ,
@@ -139,20 +140,20 @@ export const NestedApi = ({ database }: { database: InternalDatabase }) => {
139140
140141 type InsertFunction = {
141142 ( object : NestedValueWithUndefined ) : Promise < string > ;
142- ( key : NestedKey , object : NestedValueWithUndefined ) : Promise < string > ;
143+ ( key : NestedKey , object : PossiblyNestedValueWithUndefined ) : Promise < string > ;
143144 } ;
144145
145146 const insert : InsertFunction = async (
146147 keyOrObject ,
147- object ?: NestedValueWithUndefined | undefined ,
148+ object ?: Exclude < PossiblyNestedValueWithUndefined , undefined > ,
148149 ) : Promise < string > => {
149150 if ( isNestedKey ( keyOrObject ) ) {
150151 const joinedRootKey =
151152 typeof keyOrObject === "string" ? keyOrObject : joinKey ( keyOrObject ) ;
152153 return await addOperation ( {
153154 op : "INSERT" ,
154155 key : joinedRootKey ,
155- value : removeUndefineds ( object ! ) ,
156+ value : isNestedValue ( object ) ? removeUndefineds ( object ) : object ! ,
156157 } ) ;
157158 } else {
158159 return await addOperation ( {
@@ -201,14 +202,18 @@ export const NestedApi = ({ database }: { database: InternalDatabase }) => {
201202 const { op, key, value } = entry . payload ;
202203
203204 if ( op === "INSERT" ) {
204- if ( typeof value !== "object" || ! isNestedValue ( value ) ) continue ;
205- const flattenedEntries = flatten ( value ) . map ( ( entry ) => ( {
206- key : key === null ? entry . key : `${ key } /${ entry . key } ` ,
207- value : entry . value ,
208- } ) ) ;
209205 const hash = entry . hash ;
210- for ( const flat of flattenedEntries ) {
211- yield * processEntry ( { key : flat . key , value : flat . value , hash } ) ;
206+ if ( isNestedValue ( value ) ) {
207+ const flattenedEntries = flatten ( value ) . map ( ( entry ) => ( {
208+ key : key === null ? entry . key : `${ key } /${ entry . key } ` ,
209+ value : entry . value ,
210+ } ) ) ;
211+ for ( const flat of flattenedEntries ) {
212+ yield * processEntry ( { key : flat . key , value : flat . value , hash } ) ;
213+ }
214+ } else {
215+ if ( ! key ) continue ;
216+ yield * processEntry ( { key, value, hash } ) ;
212217 }
213218 }
214219
0 commit comments