Tons of Solutions Engineering work done today for the rest of the CS team! Headway, Howard Hanna, Engels, Brighton, etc. Also completed Datasnippers auth flow and worked on Anthology's script. Cloned Anthology's courses (900..) and will clone Full Story on Monday.
This commit is contained in:
67
Scripts/node_modules/basic-ftp/dist/parseControlResponse.js
generated
vendored
Normal file
67
Scripts/node_modules/basic-ftp/dist/parseControlResponse.js
generated
vendored
Normal file
@ -0,0 +1,67 @@
|
||||
"use strict";
|
||||
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() !== "";
|
||||
}
|
||||
Reference in New Issue
Block a user