Spaces:
Paused
Paused
| ; | |
| Object.defineProperty(exports, "__esModule", { value: true }); | |
| exports.positiveIntermediate = exports.positiveCompletion = exports.isMultiline = exports.isSingleLine = exports.parseControlResponse = void 0; | |
| const LF = "\n"; | |
| /** | |
| * Parse an FTP control response as a collection of messages. A message is a complete | |
| * single- or multiline response. A response can also contain multiple multiline responses | |
| * that will each be represented by a message. A response can also be incomplete | |
| * and be completed on the next incoming data chunk for which case this function also | |
| * describes a `rest`. This function converts all CRLF to LF. | |
| */ | |
| function parseControlResponse(text) { | |
| const lines = text.split(/\r?\n/).filter(isNotBlank); | |
| const messages = []; | |
| let startAt = 0; | |
| let tokenRegex; | |
| for (let i = 0; i < lines.length; i++) { | |
| const line = lines[i]; | |
| // No group has been opened. | |
| if (!tokenRegex) { | |
| if (isMultiline(line)) { | |
| // Open a group by setting an expected token. | |
| const token = line.substr(0, 3); | |
| tokenRegex = new RegExp(`^${token}(?:$| )`); | |
| startAt = i; | |
| } | |
| else if (isSingleLine(line)) { | |
| // Single lines can be grouped immediately. | |
| messages.push(line); | |
| } | |
| } | |
| // Group has been opened, expect closing token. | |
| else if (tokenRegex.test(line)) { | |
| tokenRegex = undefined; | |
| messages.push(lines.slice(startAt, i + 1).join(LF)); | |
| } | |
| } | |
| // The last group might not have been closed, report it as a rest. | |
| const rest = tokenRegex ? lines.slice(startAt).join(LF) + LF : ""; | |
| return { messages, rest }; | |
| } | |
| exports.parseControlResponse = parseControlResponse; | |
| function isSingleLine(line) { | |
| return /^\d\d\d(?:$| )/.test(line); | |
| } | |
| exports.isSingleLine = isSingleLine; | |
| function isMultiline(line) { | |
| return /^\d\d\d-/.test(line); | |
| } | |
| exports.isMultiline = isMultiline; | |
| /** | |
| * Return true if an FTP return code describes a positive completion. | |
| */ | |
| function positiveCompletion(code) { | |
| return code >= 200 && code < 300; | |
| } | |
| exports.positiveCompletion = positiveCompletion; | |
| /** | |
| * Return true if an FTP return code describes a positive intermediate response. | |
| */ | |
| function positiveIntermediate(code) { | |
| return code >= 300 && code < 400; | |
| } | |
| exports.positiveIntermediate = positiveIntermediate; | |
| function isNotBlank(str) { | |
| return str.trim() !== ""; | |
| } | |