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