{"version":3,"sources":["jsdelivr-header.js","/npm/dathost-parse-multipart-data@1.0.2/dist/multipart.js"],"names":[],"mappings":"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","file":"/npm/dathost-parse-multipart-data@1.0.2/dist/multipart.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/dathost-parse-multipart-data@1.0.2/dist/multipart.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\n/**\n * Multipart Parser (Finite State Machine)\n * usage:\n * const multipart = require('./multipart.js');\n * const body = multipart.DemoData(); \t\t\t\t\t\t\t   // raw body\n * const body = Buffer.from(event['body-json'].toString(),'base64'); // AWS case\n * const boundary = multipart.getBoundary(event.params.header['content-type']);\n * const parts = multipart.Parse(body,boundary);\n * each part is:\n * { filename: 'A.txt', type: 'text/plain', data: <Buffer 41 41 41 41 42 42 42 42> }\n *  or { name: 'key', data: <Buffer 41 41 41 41 42 42 42 42> }\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DemoData = exports.getBoundary = exports.parse = void 0;\nvar ParsingState;\n(function (ParsingState) {\n    ParsingState[ParsingState[\"INIT\"] = 0] = \"INIT\";\n    ParsingState[ParsingState[\"READING_HEADERS\"] = 1] = \"READING_HEADERS\";\n    ParsingState[ParsingState[\"READING_DATA\"] = 2] = \"READING_DATA\";\n    ParsingState[ParsingState[\"READING_PART_SEPARATOR\"] = 3] = \"READING_PART_SEPARATOR\";\n})(ParsingState || (ParsingState = {}));\nfunction parse(multipartBodyBuffer, boundary) {\n    var lastline = '';\n    var contentDispositionHeader = '';\n    var contentTypeHeader = '';\n    var state = ParsingState.INIT;\n    var buffer = [];\n    var allParts = [];\n    var currentPartHeaders = [];\n    for (var i = 0; i < multipartBodyBuffer.length; i++) {\n        var oneByte = multipartBodyBuffer[i];\n        var prevByte = i > 0 ? multipartBodyBuffer[i - 1] : null;\n        // 0x0a => \\n\n        // 0x0d => \\r\n        var newLineDetected = oneByte === 0x0a && prevByte === 0x0d;\n        var newLineChar = oneByte === 0x0a || oneByte === 0x0d;\n        if (!newLineChar)\n            lastline += String.fromCharCode(oneByte);\n        if (ParsingState.INIT === state && newLineDetected) {\n            // searching for boundary\n            if ('--' + boundary === lastline) {\n                state = ParsingState.READING_HEADERS; // found boundary. start reading headers\n            }\n            lastline = '';\n        }\n        else if (ParsingState.READING_HEADERS === state && newLineDetected) {\n            // parsing headers. Headers are separated by an empty line from the content. Stop reading headers when the line is empty\n            if (lastline.length) {\n                currentPartHeaders.push(lastline);\n            }\n            else {\n                // found empty line. search for the headers we want and set the values\n                for (var _i = 0, currentPartHeaders_1 = currentPartHeaders; _i < currentPartHeaders_1.length; _i++) {\n                    var h = currentPartHeaders_1[_i];\n                    if (h.toLowerCase().startsWith('content-disposition:')) {\n                        contentDispositionHeader = h;\n                    }\n                    else if (h.toLowerCase().startsWith('content-type:')) {\n                        contentTypeHeader = h;\n                    }\n                }\n                state = ParsingState.READING_DATA;\n                buffer = [];\n            }\n            lastline = '';\n        }\n        else if (ParsingState.READING_DATA === state) {\n            // parsing data\n            if (lastline.length > boundary.length + 4) {\n                lastline = ''; // mem save\n            }\n            if ('--' + boundary === lastline) {\n                var j = buffer.length - lastline.length;\n                var part = buffer.slice(0, j - 1);\n                allParts.push(process({ contentDispositionHeader: contentDispositionHeader, contentTypeHeader: contentTypeHeader, part: part }));\n                buffer = [];\n                currentPartHeaders = [];\n                lastline = '';\n                state = ParsingState.READING_PART_SEPARATOR;\n                contentDispositionHeader = '';\n                contentTypeHeader = '';\n            }\n            else {\n                buffer.push(oneByte);\n            }\n            if (newLineDetected) {\n                lastline = '';\n            }\n        }\n        else if (ParsingState.READING_PART_SEPARATOR === state) {\n            if (newLineDetected) {\n                state = ParsingState.READING_HEADERS;\n            }\n        }\n    }\n    return allParts;\n}\nexports.parse = parse;\n//  read the boundary from the content-type header sent by the http client\n//  this value may be similar to:\n//  'multipart/form-data; boundary=----WebKitFormBoundaryvm5A9tzU1ONaGP5B',\nfunction getBoundary(header) {\n    var items = header.split(';');\n    if (items) {\n        for (var i = 0; i < items.length; i++) {\n            var item = new String(items[i]).trim();\n            if (item.indexOf('boundary') >= 0) {\n                var k = item.split('=');\n                return new String(k[1]).trim().replace(/^[\"']|[\"']$/g, '');\n            }\n        }\n    }\n    return '';\n}\nexports.getBoundary = getBoundary;\nfunction DemoData() {\n    var body = 'trash1\\r\\n';\n    body += '------WebKitFormBoundaryvef1fLxmoUdYZWXp\\r\\n';\n    body += 'Content-Type: text/plain\\r\\n';\n    body +=\n        'Content-Disposition: form-data; name=\"uploads[]\"; filename=\"A.txt\"\\r\\n';\n    body += '\\r\\n';\n    body += '@11X';\n    body += '111Y\\r\\n';\n    body += '111Z\\rCCCC\\nCCCC\\r\\nCCCCC@\\r\\n\\r\\n';\n    body += '------WebKitFormBoundaryvef1fLxmoUdYZWXp\\r\\n';\n    body += 'Content-Type: text/plain\\r\\n';\n    body +=\n        'Content-Disposition: form-data; name=\"uploads[]\"; filename=\"B.txt\"\\r\\n';\n    body += '\\r\\n';\n    body += '@22X';\n    body += '222Y\\r\\n';\n    body += '222Z\\r222W\\n2220\\r\\n666@\\r\\n';\n    body += '------WebKitFormBoundaryvef1fLxmoUdYZWXp\\r\\n';\n    body += 'Content-Disposition: form-data; name=\"input1\"\\r\\n';\n    body += '\\r\\n';\n    body += 'value1\\r\\n';\n    body += '------WebKitFormBoundaryvef1fLxmoUdYZWXp--\\r\\n';\n    return {\n        body: Buffer.from(body),\n        boundary: '----WebKitFormBoundaryvef1fLxmoUdYZWXp'\n    };\n}\nexports.DemoData = DemoData;\nfunction process(part) {\n    var _a;\n    // will transform this object:\n    // { header: 'Content-Disposition: form-data; name=\"uploads[]\"; filename=\"A.txt\"',\n    // info: 'Content-Type: text/plain',\n    // part: 'AAAABBBB' }\n    // into this one:\n    // { filename: 'A.txt', type: 'text/plain', data: <Buffer 41 41 41 41 42 42 42 42> }\n    var obj = function (str) {\n        var k = str.split('=');\n        var a = k[0].trim();\n        var value = k[1].trim();\n        if (value.startsWith('\"')) {\n            value = JSON.parse(value);\n        }\n        var o = {};\n        Object.defineProperty(o, a, {\n            value: value,\n            writable: true,\n            enumerable: true,\n            configurable: true\n        });\n        return o;\n    };\n    var header = part.contentDispositionHeader.split(';');\n    var filenameData = header[2];\n    var input = {};\n    if (filenameData) {\n        input = obj(filenameData);\n        var contentType = (_a = part.contentTypeHeader.split(':')[1]) === null || _a === void 0 ? void 0 : _a.trim();\n        Object.defineProperty(input, 'type', {\n            value: contentType,\n            writable: true,\n            enumerable: true,\n            configurable: true\n        });\n    }\n    // always process the name field\n    Object.defineProperty(input, 'name', {\n        value: header[1].split('=')[1].replace(/\"/g, ''),\n        writable: true,\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(input, 'data', {\n        value: Buffer.from(part.part),\n        writable: true,\n        enumerable: true,\n        configurable: true\n    });\n    return input;\n}\n"]}