@archer-edu/dxp-directus-cli
Version:
161 lines • 7.09 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.assertDirectory = exports.fixImages = exports.fixImage = exports.renderSource = exports.fixRelativePath = exports.formatDate = exports.cleanObject = exports.deleteFiles = exports.cleanFrontMatter = exports.convertTabsToSpaces = exports.cleanDir = exports.writeFile = exports.replace = exports.stripNewLines = exports.getFullPath = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const api_1 = require("./api");
function getFullPath(filePath) {
return path_1.default.resolve(process.cwd(), filePath);
}
exports.getFullPath = getFullPath;
function stripNewLines(text) {
return text ? text.split('\n').join(' ') : text;
}
exports.stripNewLines = stripNewLines;
function replace(text, search, replace = '') {
return text ? text.split(search).join(replace) : text;
}
exports.replace = replace;
function writeFile(filePath, content) {
const pathFull = getFullPath(filePath);
const parentFolderPath = path_1.default.dirname(filePath);
if (!fs_1.default.existsSync(parentFolderPath)) {
fs_1.default.mkdirSync(parentFolderPath, { recursive: true });
}
if (fs_1.default.existsSync(pathFull)) {
const existingContent = fs_1.default.readFileSync(pathFull, 'utf-8');
if (existingContent.trim() == content.trim())
return pathFull;
fs_1.default.unlinkSync(pathFull);
}
fs_1.default.writeFileSync(pathFull, content, 'utf-8');
return pathFull;
}
exports.writeFile = writeFile;
function cleanDir(directoryPath) {
const pathFull = getFullPath(directoryPath);
if (fs_1.default.existsSync(directoryPath))
fs_1.default.rmSync(pathFull, { recursive: true, force: true });
fs_1.default.mkdirSync(pathFull);
}
exports.cleanDir = cleanDir;
function convertTabsToSpaces(text) {
return text.replace(/\t/g, ' ');
}
exports.convertTabsToSpaces = convertTabsToSpaces;
function cleanFrontMatter(text) {
return convertTabsToSpaces(text.replace(/---/, ''));
}
exports.cleanFrontMatter = cleanFrontMatter;
function deleteFiles(directoryPath, predicate) {
const pathFull = getFullPath(directoryPath);
const deleted = fs_1.default.readdirSync(pathFull)
.flatMap(file => {
try {
const filePath = path_1.default.join(pathFull, file);
if (fs_1.default.statSync(filePath).isDirectory()) {
// If it's a directory, recursively call the function
return deleteFiles(path_1.default.join(directoryPath, file), predicate);
}
else if (predicate(filePath)) {
fs_1.default.unlinkSync(filePath);
return [filePath];
}
}
catch (e) {
console.log(e);
}
});
return deleted;
}
exports.deleteFiles = deleteFiles;
function cleanObject(obj) {
// remove any null or undefined values, recursively
Object.keys(obj).forEach(key => {
if (key === 'id')
return;
if (obj[key] == undefined || obj[key] == null)
delete obj[key];
else if (typeof obj[key] === 'object')
cleanObject(obj[key]);
else if (Array.isArray(obj[key]))
obj[key].forEach(cleanObject);
});
return obj;
}
exports.cleanObject = cleanObject;
function formatDate(date) {
const day = date.getDate().toString().padStart(2, '0');
const month = (date.getMonth() + 1).toString().padStart(2, '0'); // getMonth() is zero-based
const year = date.getFullYear();
return `${year}-${month}-${day}`;
}
exports.formatDate = formatDate;
function fixRelativePath(path) {
// remove the leading dots and slashes
return path.replace(/^\.+\//, '');
}
exports.fixRelativePath = fixRelativePath;
function replaceImageHost(content, id, fileName, localPath) {
if (!id)
return content;
if (!localPath)
return replace(content, `https://directus.archerdxp.io/assets/${id}`, `https://static.archerdxp.io/cms/${fileName}`);
const fixedSrc = path_1.default.join(localPath, fileName);
return replace(content, `https://directus.archerdxp.io/assets/${id}`, `/${fixedSrc}`);
}
// Searches for `https://directus.archerdxp.io/assets/` within the content, then strips out and returns only the file id
function getMatches(content) {
return Array.from(content.match(/https:\/\/directus\.archerdxp\.io\/assets\/[\w-]+/g) || []).map(i => i.substring("https://directus.archerdxp.io/assets/".length));
}
function renderSource({ text, url }) {
return `\n<a href='${url}' target='_blank' rel='nofollow noreferrer noopener'>${text}</a>`;
}
exports.renderSource = renderSource;
function fixImage(id, downloadToPath) {
return __awaiter(this, void 0, void 0, function* () {
const { filename_disk: filename } = yield (0, api_1.getFileDetails)(id);
const cdnUrl = new URL(`cms/${filename}`, 'https://static.archerdxp.io').toString();
if (downloadToPath != undefined) {
// download image to path if it doesn't exist
const path = `/${downloadToPath}/${filename}`;
yield (0, api_1.downloadImage)(cdnUrl, path);
return path;
}
return cdnUrl;
});
}
exports.fixImage = fixImage;
function fixImages(content, downloadToPath) {
return __awaiter(this, void 0, void 0, function* () {
const files = (yield Promise.all(getMatches(content).map(api_1.getFileDetails)));
if (downloadToPath != undefined) {
yield Promise.all(files.map(({ url, filename_disk: filename }) => (0, api_1.downloadImage)(url, `/${downloadToPath}/${filename}`)));
files.forEach(({ id, filename_disk: filename }) => content = replaceImageHost(content, id, filename, downloadToPath));
}
else {
files.forEach(({ id, filename_disk: filename }) => content = replaceImageHost(content, id, filename));
}
return content;
});
}
exports.fixImages = fixImages;
function assertDirectory(path) {
if (!fs_1.default.existsSync(path)) {
fs_1.default.mkdirSync(path, { recursive: true });
}
}
exports.assertDirectory = assertDirectory;
//# sourceMappingURL=utils.js.map