(d: TemplateData, source: TransformedSource, path: string)
| 2 | import { cacheCtrl, genCommonHeader, genDataArrays, genEtagArrays, genHook, genManifest, sw } from './cppCode'; |
| 3 | |
| 4 | const genWebserverHandlerBody = (d: TemplateData, source: TransformedSource, path: string): string => { |
| 5 | const lines: string[] = []; |
| 6 | const etagCheck = sw(d.etag, { |
| 7 | always: [ |
| 8 | ` if (server->hasHeader("If-None-Match") && server->header("If-None-Match").equals(etag_${source.dataname})) {`, |
| 9 | ` server->send(304);`, |
| 10 | ` ${d.definePrefix}_onFileServed("${path}", 304);`, |
| 11 | ` return;`, |
| 12 | ` }` |
| 13 | ].join('\n'), |
| 14 | compiler: [ |
| 15 | ` #ifdef ${d.definePrefix}_ENABLE_ETAG`, |
| 16 | ` if (server->hasHeader("If-None-Match") && server->header("If-None-Match").equals(etag_${source.dataname})) {`, |
| 17 | ` server->send(304);`, |
| 18 | ` ${d.definePrefix}_onFileServed("${path}", 304);`, |
| 19 | ` return;`, |
| 20 | ` }`, |
| 21 | ` #endif` |
| 22 | ].join('\n') |
| 23 | }); |
| 24 | if (etagCheck) lines.push(etagCheck); |
| 25 | const cacheHeaders = sw(d.etag, { |
| 26 | always: [ |
| 27 | ` server->sendHeader("Cache-Control", "${cacheCtrl(source)}");`, |
| 28 | ` server->sendHeader("ETag", etag_${source.dataname});` |
| 29 | ].join('\n'), |
| 30 | compiler: [ |
| 31 | ` #ifdef ${d.definePrefix}_ENABLE_ETAG`, |
| 32 | ` server->sendHeader("Cache-Control", "${cacheCtrl(source)}");`, |
| 33 | ` server->sendHeader("ETag", etag_${source.dataname});`, |
| 34 | ` #endif` |
| 35 | ].join('\n') |
| 36 | }); |
| 37 | if (cacheHeaders) lines.push(cacheHeaders); |
| 38 | lines.push( |
| 39 | sw(d.gzip, { |
| 40 | always: [ |
| 41 | ...(source.isGzip ? [` server->sendHeader("Content-Encoding", "gzip");`] : []), |
| 42 | ` server->setContentLength(${source.lengthGzip});`, |
| 43 | ` server->send(200, "${source.mime}", "");`, |
| 44 | ` ${d.definePrefix}_sendChunked(server, datagzip_${source.dataname}, ${source.lengthGzip});` |
| 45 | ].join('\n'), |
| 46 | never: [ |
| 47 | ` server->setContentLength(${source.length});`, |
| 48 | ` server->send(200, "${source.mime}", "");`, |
| 49 | ` ${d.definePrefix}_sendChunked(server, data_${source.dataname}, ${source.length});` |
| 50 | ].join('\n'), |
| 51 | compiler: [ |
| 52 | ` #ifdef ${d.definePrefix}_ENABLE_GZIP`, |
| 53 | ...(source.isGzip ? [` server->sendHeader("Content-Encoding", "gzip");`] : []), |
| 54 | ` server->setContentLength(${source.lengthGzip});`, |
| 55 | ` server->send(200, "${source.mime}", "");`, |
| 56 | ` ${d.definePrefix}_sendChunked(server, datagzip_${source.dataname}, ${source.lengthGzip});`, |
| 57 | ` #else`, |
| 58 | ` server->setContentLength(${source.length});`, |
| 59 | ` server->send(200, "${source.mime}", "");`, |
| 60 | ` ${d.definePrefix}_sendChunked(server, data_${source.dataname}, ${source.length});`, |
| 61 | ` #endif` |
no test coverage detected