UNPKG

@archer-edu/dxp-directus-cli

Version:
161 lines 7.09 kB
"use strict"; 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