@shipengine/connect
Version:
The official developer tooling for building ShipEngine connect apps
69 lines • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseKeyValuePairs = exports.parseIndependentKeyValuePairs = exports.tryParseTuple = void 0;
const stripQuotes = (str) => {
if (!str) {
return undefined;
}
const singleQuoteWrapped = str.startsWith("'") && str.endsWith("'");
const doubleQuoteWrapped = str.startsWith('"') && str.endsWith('"');
if (singleQuoteWrapped || doubleQuoteWrapped) {
return str.slice(1, str.length - 1);
}
return str;
};
function tryParseTuple(arg) {
const assignmentIndex = arg.indexOf('=');
if (assignmentIndex < 1) {
return null;
}
const key = arg.slice(0, assignmentIndex);
const value = stripQuotes(arg.slice(assignmentIndex + 1, arg.length)) || '';
if (key.length > 0 && value.length > 0) {
return {
key,
value,
};
}
return null;
}
exports.tryParseTuple = tryParseTuple;
function parseIndependentKeyValuePairs(args) {
if (!args || args.length === 0) {
return null;
}
const sanitizedArgs = args.map((arg) => arg.trim().replace(/"/g, ''));
if (sanitizedArgs.length % 2 !== 0) {
throw new Error('Invalid number of arguments, each key must have a corresponding value');
}
const keyValuePairs = [];
while (sanitizedArgs.length > 0) {
keyValuePairs.push({
key: sanitizedArgs.shift(),
value: sanitizedArgs.shift(),
});
}
return keyValuePairs;
}
exports.parseIndependentKeyValuePairs = parseIndependentKeyValuePairs;
function parseKeyValuePairs(args) {
if (!args || args.length === 0) {
return [];
}
const keyValuePairs = [];
const independentArguments = args.filter((arg) => {
const kvp = tryParseTuple(arg);
if (kvp) {
keyValuePairs.push(kvp);
return false;
}
return true;
});
const otherPairs = parseIndependentKeyValuePairs(independentArguments);
if (otherPairs) {
keyValuePairs.push(...otherPairs);
}
return keyValuePairs;
}
exports.parseKeyValuePairs = parseKeyValuePairs;
//# sourceMappingURL=parse-key-value-pairs.js.map