@@ -914,30 +914,57 @@ Document.setMethod(function exportToStream(output) {
914914 *
915915 * @return {Pledge }
916916 */
917- Document . setMethod ( function importFromBuffer ( buffer ) {
917+ Document . setMethod ( function importFromBuffer ( buffer , options ) {
918918
919919 var that = this ,
920920 pledge = new Pledge ( ) ;
921921
922+ if ( ! options ) {
923+ options = { } ;
924+ }
925+
922926 zlib . gunzip ( buffer , async function unzipped ( err , data ) {
923927
924928 if ( err ) {
925929 return pledge . reject ( err ) ;
926930 }
927931
928- data = JSON . undry ( data . toString ( ) ) ;
932+ try {
933+ data = JSON . undry ( data . toString ( ) ) ;
929934
930- that . $main = data ;
935+ that . $main = data ;
931936
932- await that . save ( null , {
933- validate : false ,
934- override_created : true ,
935- set_updated : false ,
936- importing : true ,
937- create : true , // Force INSERT since we're importing
938- } ) ;
937+ let save_options = {
938+ validate : false ,
939+ override_created : true ,
940+ set_updated : false ,
941+ importing : true ,
942+ } ;
939943
940- pledge . resolve ( ) ;
944+ // If replace_existing is true, don't force create (allow update)
945+ // Otherwise, force INSERT
946+ if ( ! options . replace_existing ) {
947+ save_options . create = true ;
948+ }
949+
950+ await that . save ( null , save_options ) ;
951+
952+ pledge . resolve ( ) ;
953+ } catch ( save_err ) {
954+ // Ensure we have a proper Error object with a message
955+ let error = save_err ;
956+
957+ if ( ! error ) {
958+ error = new Error ( 'Unknown error during document import' ) ;
959+ } else if ( ! ( error instanceof Error ) ) {
960+ // If it's not an Error object, wrap it
961+ let message = error . message || error . errmsg || String ( error ) ;
962+ error = new Error ( 'Import save failed: ' + message ) ;
963+ error . originalError = save_err ;
964+ }
965+
966+ pledge . reject ( error ) ;
967+ }
941968 } ) ;
942969
943970 return pledge ;
0 commit comments