@@ -303,8 +303,9 @@ export const LANGUAGES: Record<string, LanguageDefinition> = {
303303class TemplateDocument < T > extends String {
304304 public readonly type : string ;
305305 public readonly raw : string ;
306- public readonly data ?: T ;
306+ public data ?: T ;
307307 private readonly error ?: Error ;
308+ private parser ?: ( text : string ) => unknown ;
308309 constructor (
309310 type : string ,
310311 template : { raw : readonly string [ ] | ArrayLike < string > } ,
@@ -333,21 +334,10 @@ class TemplateDocument<T> extends String {
333334 str = str . replace ( / ^ \s + / gm, "" ) ;
334335 }
335336
336- let data : T | undefined = undefined ;
337- let error = undefined ;
338- try {
339- data = parser ?.( str ) as T ;
340- } catch ( error ) {
341- if ( options ?. throw ) {
342- throw error ;
343- }
344- console . warn ( error ) ;
345- }
346337 super ( str ) ;
347338 this . type = type ;
348339 this . raw = raw ;
349- this . data = data ;
350- this . error = error ;
340+ this . parser = parser ;
351341 }
352342
353343 [ Symbol . for ( "Deno.customInspect" ) ] ( ) : string {
@@ -375,17 +365,15 @@ class TemplateDocument<T> extends String {
375365 return this ;
376366 }
377367 parse < TParsed = T > (
378- parser : ( text : string ) => unknown ,
368+ parser ? : ( text : string ) => TParsed ,
379369 ) : TemplateDocument < TParsed > {
380- if ( this . data ) {
381- return this as unknown as TemplateDocument < TParsed > ;
370+ this . parser = parser ?? this . parser ;
371+ try {
372+ this . data = this . parser ?.( this . raw ) as T ;
373+ } catch ( error ) {
374+ console . warn ( error ) ;
382375 }
383- return new TemplateDocument < TParsed > (
384- this . type ,
385- { raw : [ this . raw ] } ,
386- [ ] ,
387- parser ,
388- ) ;
376+ return this as unknown as TemplateDocument < TParsed > ;
389377 }
390378}
391379
@@ -440,9 +428,9 @@ export const sql: Ext<"sql"> = ext("sql");
440428export const graphql : Ext < "graphql" > = ext ( "graphql" ) ;
441429
442430// Shell scripting
443- export const sh : Ext < "sh" > = ext ( "sh" , undefined , { indent : false } ) ;
444- export const ps1 : Ext < "ps1" > = ext ( "ps1" , undefined , { indent : false } ) ;
445- export const bat : Ext < "bat" > = ext ( "bat" , undefined , { indent : false } ) ;
431+ export const sh : Ext < "sh" > = ext ( "sh" ) ;
432+ export const ps1 : Ext < "ps1" > = ext ( "ps1" ) ;
433+ export const bat : Ext < "bat" > = ext ( "bat" ) ;
446434
447435// Programming languages
448436export const py : Ext < "py" > = ext ( "py" ) ;
0 commit comments