@@ -21,6 +21,7 @@ import { runWizard } from '../connect/wizard/run_wizard'
2121import { callParser , handleMessages } from '../connect/parser_executables'
2222import { fromError } from 'zod-validation-error'
2323import { ParseRequestPayload , ParseResponsePayload } from '../connect/parser_executable_types'
24+ import { parse } from 'yaml'
2425import z from 'zod'
2526import { withUpdateCheck } from '../common/updates'
2627import { exitWithFeedbackMessage } from '../connect/helpers'
@@ -187,15 +188,38 @@ function transformDocFromParser(
187188 }
188189}
189190
190- export function parseRawFile ( filePath : string , label : string | undefined ) : CodeConnectJSON {
191- const fileContent = fs . readFileSync ( filePath , 'utf-8' )
191+ const getRawFileData = ( fileContent : string ) => {
192192 const [ firstLine , ...templateLines ] = fileContent . split ( '\n' )
193- const figmaNodeUrl = firstLine . replace ( / \/ \/ \s * u r l = / , '' ) . trim ( )
194- const template = templateLines . join ( '\n' )
193+ const delimeterStart = '/*---'
194+ const delimeterEnd = '---*/'
195+ if ( firstLine !== delimeterStart ) {
196+ return {
197+ template : templateLines . join ( '\n' ) ,
198+ figmaNode : firstLine . replace ( / \/ \/ \s * u r l = / , '' ) . trim ( ) ,
199+ }
200+ }
201+ const nextDelimeterIndex = templateLines . findIndex ( ( line ) => line === delimeterEnd )
202+ if ( nextDelimeterIndex === - 1 ) {
203+ return {
204+ template : '' ,
205+ figmaNode : '' ,
206+ } // invalid data
207+ }
208+ const data = templateLines . slice ( 0 , nextDelimeterIndex ) . join ( '\n' )
209+ const { url : figmaNode , component, variant, links } = parse ( data ) ;
210+ return {
211+ component,
212+ variant,
213+ links,
214+ figmaNode,
215+ template : templateLines . slice ( nextDelimeterIndex + 1 ) . join ( '\n' ) ,
216+ } ;
217+ } ;
195218
219+ export function parseRawFile ( filePath : string , label : string | undefined ) : CodeConnectJSON {
220+ const fileContent = fs . readFileSync ( filePath , 'utf-8' )
196221 return {
197- figmaNode : figmaNodeUrl ,
198- template,
222+ ...getRawFileData ( fileContent ) ,
199223 // nestable by default unless user specifies otherwise
200224 templateData : { nestable : true } ,
201225 language : 'raw' ,
0 commit comments