@@ -67,6 +67,13 @@ import { tee } from './adapter/utils'
6767const allocateIf = ( value : string , condition : unknown ) =>
6868 condition ? value : ''
6969
70+ const overrideUnsafeQuote = ( value : string ) =>
71+ // '`' + value + '`'
72+ '`' + value . replace ( / ` / g, '\\`' ) . replace ( / \$ { / g, '$\\{' ) + '`'
73+
74+ const overrideUnsafeQuoteArrayValue = ( value : string ) =>
75+ value . replace ( / ` / g, '\\`' ) . replace ( / \$ { / g, '$\\{' )
76+
7077const defaultParsers = [
7178 'json' ,
7279 'text' ,
@@ -599,13 +606,17 @@ export const composeHandler = ({
599606 if ( cookieMeta . sign === true )
600607 _encodeCookie +=
601608 'for(const [key, cookie] of Object.entries(_setCookie)){' +
602- `c.set.cookie[key].value=await signCookie(cookie.value,' ${ secret } ' )` +
609+ `c.set.cookie[key].value=await signCookie(cookie.value,${ ! secret ? 'undefined' : overrideUnsafeQuote ( secret ) } )` +
603610 '}'
604- else
611+ else {
612+ if ( typeof cookieMeta . sign === 'string' )
613+ cookieMeta . sign = [ cookieMeta . sign ]
614+
605615 for ( const name of cookieMeta . sign )
606616 _encodeCookie +=
607- `if(_setCookie['${ name } ']?.value)` +
608- `c.set.cookie['${ name } '].value=await signCookie(_setCookie['${ name } '].value,'${ secret } ')\n`
617+ `if(_setCookie[${ overrideUnsafeQuote ( name ) } ]?.value)` +
618+ `c.set.cookie[${ overrideUnsafeQuote ( name ) } ].value=await signCookie(_setCookie[${ overrideUnsafeQuote ( name ) } ].value,${ ! secret ? 'undefined' : overrideUnsafeQuote ( secret ) } )\n`
619+ }
609620
610621 _encodeCookie += '}\n'
611622 }
@@ -643,12 +654,16 @@ export const composeHandler = ({
643654 const get = ( name : keyof CookieOptions , defaultValue ?: unknown ) => {
644655 // @ts -ignore
645656 const value = cookieMeta ?. [ name ] ?? defaultValue
657+
658+ if ( value === undefined ) return ''
659+
646660 if ( ! value )
647661 return typeof defaultValue === 'string'
648662 ? `${ name } :"${ defaultValue } ",`
649663 : `${ name } :${ defaultValue } ,`
650664
651- if ( typeof value === 'string' ) return `${ name } :'${ value } ',`
665+ if ( typeof value === 'string' )
666+ return `${ name } :${ overrideUnsafeQuote ( value ) } ,`
652667 if ( value instanceof Date )
653668 return `${ name } : new Date(${ value . getTime ( ) } ),`
654669
@@ -659,25 +674,25 @@ export const composeHandler = ({
659674 ? `{secrets:${
660675 cookieMeta . secrets !== undefined
661676 ? typeof cookieMeta . secrets === 'string'
662- ? `' ${ cookieMeta . secrets } '`
677+ ? overrideUnsafeQuote ( cookieMeta . secrets )
663678 : '[' +
664- cookieMeta . secrets . reduce (
665- ( a , b ) => a + `'${ b } ',` ,
666- ''
667- ) +
679+ cookieMeta . secrets
680+ . map ( overrideUnsafeQuoteArrayValue )
681+ . reduce ( ( a , b ) => a + `'${ b } ',` , '' ) +
668682 ']'
669683 : 'undefined'
670684 } ,` +
671685 `sign:${
672686 cookieMeta . sign === true
673687 ? true
674688 : cookieMeta . sign !== undefined
675- ? '[' +
676- cookieMeta . sign . reduce (
677- ( a , b ) => a + `'${ b } ',` ,
678- ''
679- ) +
680- ']'
689+ ? typeof cookieMeta . sign === 'string'
690+ ? overrideUnsafeQuote ( cookieMeta . sign )
691+ : '[' +
692+ cookieMeta . sign
693+ . map ( overrideUnsafeQuoteArrayValue )
694+ . reduce ( ( a , b ) => a + `'${ b } ',` , '' ) +
695+ ']'
681696 : 'undefined'
682697 } ,` +
683698 get ( 'domain' ) +
@@ -698,8 +713,8 @@ export const composeHandler = ({
698713 }
699714
700715 if ( hasQuery ) {
701- let arrayProperties : Record < string , 1 > = { }
702- let objectProperties : Record < string , 1 > = { }
716+ let arrayProperties : Record < string , true > = { }
717+ let objectProperties : Record < string , true > = { }
703718 let hasArrayProperty = false
704719 let hasObjectProperty = false
705720
@@ -709,12 +724,12 @@ export const composeHandler = ({
709724 if ( Kind in schema && schema . properties ) {
710725 for ( const [ key , value ] of Object . entries ( schema . properties ) ) {
711726 if ( hasElysiaMeta ( 'ArrayQuery' , value as TSchema ) ) {
712- arrayProperties [ key ] = 1
727+ arrayProperties [ key ] = true
713728 hasArrayProperty = true
714729 }
715730
716731 if ( hasElysiaMeta ( 'ObjectString' , value as TSchema ) ) {
717- objectProperties [ key ] = 1
732+ objectProperties [ key ] = true
718733 hasObjectProperty = true
719734 }
720735 }
@@ -725,12 +740,16 @@ export const composeHandler = ({
725740 'if(c.qi===-1){' +
726741 'c.query=Object.create(null)' +
727742 '}else{' +
728- `c.query=parseQueryFromURL(c.url,c.qi+1, ${
743+ `c.query=parseQueryFromURL(c.url,c.qi+1${
729744 //
730- hasArrayProperty ? JSON . stringify ( arrayProperties ) : undefined
731- } ,${
745+ hasArrayProperty
746+ ? ',' + JSON . stringify ( arrayProperties )
747+ : hasObjectProperty
748+ ? ',undefined'
749+ : ''
750+ } ${
732751 //
733- hasObjectProperty ? JSON . stringify ( objectProperties ) : undefined
752+ hasObjectProperty ? ',' + JSON . stringify ( objectProperties ) : ''
734753 } )` +
735754 '}'
736755 }
@@ -837,7 +856,7 @@ export const composeHandler = ({
837856 }
838857
839858 const mapResponseContext =
840- maybeStream || adapter . mapResponseContext
859+ maybeStream && adapter . mapResponseContext
841860 ? `,${ adapter . mapResponseContext } `
842861 : ''
843862
0 commit comments