@viewdo/dxp-story-cli
Version:
DXP Story Management CLI
134 lines • 4.97 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.removeNullProperties = exports.replaceInText = exports.reconcileLists = exports.requireValue = exports.flattenArray = exports.isValidDomain = exports.findFiles = exports.distinctArray = exports.isEmpty = void 0;
exports.handleAxiosError = handleAxiosError;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const kind_of_1 = __importDefault(require("kind-of"));
// Arrays ------------------------------------------
const flattenArray = (list) => list.reduce((a, b) => a.concat(Array.isArray(b) ? flattenArray(b) : b), []);
exports.flattenArray = flattenArray;
const distinctArray = (list) => [...new Set(list)];
exports.distinctArray = distinctArray;
const reconcileLists = (current, previous, protected_items) => {
let remove = previous.filter((namespace) => !current.includes(namespace) && !protected_items.includes(namespace));
let add = current.filter((namespace) => !previous.includes(namespace) && !protected_items.includes(namespace));
return { add, remove };
};
exports.reconcileLists = reconcileLists;
// Validation -----------------------------------
const isValidDomain = (v) => {
if (!v)
return false;
var re = /^(?!:\/\/)([a-zA-Z0-9-\*]+\.){0,5}[a-zA-Z0-9-][a-zA-Z0-9-]+\.[a-zA-Z]{2,64}?$/gi;
return re.test(v);
};
exports.isValidDomain = isValidDomain;
const requireValue = (name) => {
throw new Error(`A value for ${name} is required`.red);
};
exports.requireValue = requireValue;
const findFiles = (dir, file_list = []) => {
return fs_1.default
.readdirSync(dir)
.map((file) => fs_1.default.statSync(path_1.default.join(dir, file)).isDirectory()
? findFiles(path_1.default.join(dir, file), file_list)
: file_list.concat(path_1.default.join(dir, file))[0]);
};
exports.findFiles = findFiles;
const replaceInText = (vars, text) => {
let result = text.toString();
Object.getOwnPropertyNames(vars).forEach((p) => {
result = result.replace("$" + p.toUpperCase(), vars[p].toString());
});
return result;
};
exports.replaceInText = replaceInText;
const removeNullProperties = (node) => {
Object.keys(node).forEach((key) => {
if (isEmpty(node[key]))
delete node[key];
else if (typeof node[key] === "object" && key != "parameters")
removeNullProperties(node[key]);
});
};
exports.removeNullProperties = removeNullProperties;
const isEmpty = (value, omitZero = false, omitArrays = true) => {
switch ((0, kind_of_1.default)(value)) {
case "null":
case "undefined":
return true;
case "boolean":
case "function":
case "date":
case "regexp":
return false;
case "string":
case "arguments":
return value.length === 0;
case "file":
case "map":
case "set":
return value.size === 0;
case "number":
return omitZero ? value === 0 : false;
case "error":
return value.message === "";
case "array":
if (omitArrays)
return false;
for (let ele of value) {
if (!isEmpty(ele, omitZero)) {
return false;
}
}
return true;
case "object":
return false;
default: {
return true;
}
}
};
exports.isEmpty = isEmpty;
function handleAxiosError(err) {
let message = err.toString();
if (err.response) {
/*
* The request was made and the server responded with a
* status code that falls out of the range of 2xx
*/
const data = err.response.data;
if (err.response.status)
message = err.response.statusText;
if (data.title) {
message = data.title;
if (data.errors)
Object.keys(data.errors).forEach(e => {
message = `\r\n\t${message.toString()} ${e}: ${data.errors[e]}`;
});
}
else if (data.message)
message = data.message.toString();
else if (data)
message = data;
}
else if (err.request) {
/*
* The request was made but no response was received, `error.request`
* is an instance of XMLHttpRequest in the browser and an instance
* of http.ClientRequest in Node.js
*/
message = `Unable to reach ${err.config.url}`;
}
else {
// Something happened in setting up the request and triggered an Error
message = err.message || err.toString();
}
//this.console.dir(err)
return Promise.reject({ message });
}
//# sourceMappingURL=Utilities.js.map