@@ -38,14 +38,20 @@ function getNestedFields(f?: CmsField): CmsField[] {
38
38
* For markdown fields, encode each paragraph separately
39
39
*/
40
40
function encodeString ( value : string , { fields, path } : EncodeContext ) : string {
41
- const stega = vercelStegaEncode ( { decap : path } ) ;
42
- const isMarkdown = fields [ 0 ] ?. widget === 'markdown' ;
43
-
44
- if ( isMarkdown && value . includes ( '\n\n' ) ) {
41
+ const [ field ] = fields ;
42
+ if ( ! field ) return value ;
43
+ const { widget } = field ;
44
+ if ( widget === 'string' || widget === 'text' ) {
45
+ if ( 'visualEditing' in field && field . visualEditing === false ) return value ;
46
+ const stega = vercelStegaEncode ( { decap : path } ) ;
47
+ return value + stega ;
48
+ }
49
+ if ( widget === 'markdown' ) {
50
+ const stega = vercelStegaEncode ( { decap : path } ) ;
45
51
const blocks = value . split ( / ( \n \n + ) / ) ;
46
52
return blocks . map ( block => ( block . trim ( ) ? block + stega : block ) ) . join ( '' ) ;
47
53
}
48
- return value + stega ;
54
+ return value ;
49
55
}
50
56
51
57
/**
@@ -102,16 +108,21 @@ function encodeMap(
102
108
return newMap ;
103
109
}
104
110
111
+ /**
112
+ * Cache for encoded values to prevent re-encoding unchanged values
113
+ * across keystrokes. The cache is keyed by path.
114
+ */
115
+ const encodingCache = new Map ( ) ;
116
+
105
117
/**
106
118
* Main entry point for encoding steganographic data into entry values
107
119
* Uses a visitor pattern with caching to handle recursive structures
108
120
*/
109
121
export function encodeEntry ( value : unknown , fields : List < ImmutableMap < string , unknown > > ) {
110
122
const plainFields = fields . toJS ( ) as CmsField [ ] ;
111
- const cache = new Map ( ) ;
112
123
113
124
function visit ( value : unknown , fields : CmsField [ ] , path = '' ) {
114
- const cached = cache . get ( path ) ;
125
+ const cached = encodingCache . get ( path ) ;
115
126
if ( cached === value ) return value ;
116
127
117
128
const ctx : EncodeContext = { fields, path, visit } ;
@@ -126,7 +137,7 @@ export function encodeEntry(value: unknown, fields: List<ImmutableMap<string, un
126
137
result = value ;
127
138
}
128
139
129
- cache . set ( path , result ) ;
140
+ encodingCache . set ( path , result ) ;
130
141
return result ;
131
142
}
132
143
0 commit comments