potentially serve static files with static headers
[squeep-api-dingus] / lib / common.js
index 284427a7bd769742eafda2838b66275951a25de3..ff68e9d7ac7b5ea5258ce1aab70cb99f991d037f 100644 (file)
@@ -227,6 +227,10 @@ const nullLogger = {
   debug: nop,
 };
 
+/**
+ * Populates any absent logger levels.
+ * @param {Object} logger
+ */
 const ensureLoggerLevels = (logger = {}) => {
   for (const level in nullLogger) {
     if (! (level in logger)) {
@@ -236,22 +240,43 @@ const ensureLoggerLevels = (logger = {}) => {
   return logger;
 };
 
+/**
+ * Merges folded header lines
+ * @param {String[]} lines
+ */
+const unfoldHeaderLines = (lines) => {
+  const foldedLineRE = /^(\t| +)(.*)$/;
+  if (lines) {
+    lines.reduceRight((_, line, idx) => {
+      const result = foldedLineRE.exec(line);
+      if (result && idx) {
+        const prevIdx = idx - 1;
+        const mergedLine = `${lines[prevIdx]} ${result[2]}`;
+        lines.splice(prevIdx, 2, mergedLine);
+        return mergedLine;
+      }
+    }, null);
+  }
+  return lines;
+};
+
 module.exports = {
+  ensureLoggerLevels,
   fileScope,
   generateETag,
   get,
   handlerLogData,
-  isClientCached,
   httpStatusCodeClass,
+  isClientCached,
   mergeDeep,
   mergeEnum,
   nop,
   nullLogger,
-  ensureLoggerLevels,
   pick,
   requestId,
   requestLogData,
   responseLogData,
   setOptions,
   splitFirst,
+  unfoldHeaderLines,
 };