@@ -32,6 +32,8 @@ export const mapFieldsInteractive = async (
3232 logger . debug ( "Mapping CSV fields to template interactively" ) ;
3333
3434 const NONE_OPTION = "None" ;
35+ const PASS_AS_IS_OPTION = ( field : string ) =>
36+ `Pass as-is (field '${ field } ' will be provided as field '${ field } ' to the templating engine)` ;
3537
3638 logger . info ( "When prompted, select the corresponding template field for each CSV header" ) ;
3739
@@ -42,16 +44,30 @@ export const mapFieldsInteractive = async (
4244 type : "list" ,
4345 name : header ,
4446 message : `Map CSV field \`${ header } \` to template field:` ,
45- choices : Array . from ( templateFields ) . concat ( [ NONE_OPTION ] ) ,
47+ choices : Array . from ( templateFields ) . concat ( [ PASS_AS_IS_OPTION ( header ) , NONE_OPTION ] ) ,
4648 // Set default to index in templateField that matches the csvHeader
47- default : templateFields . has ( header ) ? header : "None" ,
49+ default : templateFields . has ( header ) ? header : PASS_AS_IS_OPTION ( header ) ,
4850 } ) ) ,
4951 ) ;
5052 for ( const [ csvHeader , templateFieldChosen ] of Object . entries ( await prompter ) . filter (
5153 ( [ , field ] ) => field !== NONE_OPTION ,
5254 ) ) {
53- map . set ( csvHeader , templateFieldChosen ) ;
54- mappedFields . add ( templateFieldChosen ) ;
55+ const fieldToSet =
56+ templateFieldChosen === PASS_AS_IS_OPTION ( csvHeader ) ? csvHeader : templateFieldChosen ;
57+
58+ if ( map . has ( csvHeader ) ) {
59+ // Error, duplicate mapping, can't map the same csvHeader to two different templateFields (not yet anyway)
60+ logger . error (
61+ `Duplicate mapping for csvHeader \`${ csvHeader } \` to template field \`${ fieldToSet } \`! This is currently unsupported.` ,
62+ ) ;
63+
64+ throw new Error (
65+ `Duplicate mapping for csvHeader \`${ csvHeader } \` to template field \`${ fieldToSet } \`! This is currently unsupported.` ,
66+ ) ;
67+ }
68+
69+ map . set ( csvHeader , fieldToSet ) ;
70+ mappedFields . add ( fieldToSet ) ;
5571 }
5672
5773 // Warn if not all fields were mapped
0 commit comments