UNPKG

@archer-edu/dxp-directus-cli

Version:
170 lines 7.56 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveDirectusToken = exports.authHeader = exports.DirectusPageRepository = void 0; /* eslint-disable @typescript-eslint/no-explicit-any */ const api_1 = require("./api"); const page_markdown_1 = require("./page-markdown"); class DirectusPageRepository { constructor({ token, debug = false, request }) { this.token = token; this.debug = debug; this.request = request || ((path, options) => { var _a; return (0, api_1.directusRequest)(path, Object.assign(Object.assign({}, options), { debug: (_a = options === null || options === void 0 ? void 0 : options.debug) !== null && _a !== void 0 ? _a : this.debug, headers: Object.assign(Object.assign({}, authHeader(this.token)), ((options === null || options === void 0 ? void 0 : options.headers) || {})) })); }); } getSiteByKey(siteId) { return __awaiter(this, void 0, void 0, function* () { const response = yield this.request(`/items/site/${encodeURIComponent(siteId)}?fields=key,name,managed_pages,active`, this.options()); return response.data; }); } findPageBySiteParentAndSlug(siteId, parentPageId, slug) { var _a; return __awaiter(this, void 0, void 0, function* () { const params = new URLSearchParams(); params.set("filter[site][_eq]", siteId); params.set("filter[slug][_eq]", (0, page_markdown_1.toDirectusSlug)(slug)); params.set("fields", "id,slug,parent_page.id,parent_page.slug,title,sort,status"); params.set("limit", "2"); if (parentPageId) { params.set("filter[parent_page][_eq]", parentPageId); } else { params.set("filter[parent_page][_null]", "true"); } const response = yield this.request(`/items/site_pages?${params.toString()}`, this.options()); return (_a = response.data) === null || _a === void 0 ? void 0 : _a[0]; }); } resolveParentPageChain(siteId, parentPathSegments) { return __awaiter(this, void 0, void 0, function* () { let parentPageId = null; for (const segment of parentPathSegments) { const page = yield this.findPageBySiteParentAndSlug(siteId, parentPageId, segment); if (!(page === null || page === void 0 ? void 0 : page.id)) { throw new Error(`Could not resolve parent page '${segment}' for site ${siteId}`); } parentPageId = page.id; } return parentPageId; }); } getMaxSiblingSort(siteId, parentPageId) { var _a, _b; return __awaiter(this, void 0, void 0, function* () { const params = new URLSearchParams(); params.set("filter[site][_eq]", siteId); params.set("fields", "sort"); params.set("sort", "-sort"); params.set("limit", "1"); if (parentPageId) { params.set("filter[parent_page][_eq]", parentPageId); } else { params.set("filter[parent_page][_null]", "true"); } const response = yield this.request(`/items/site_pages?${params.toString()}`, this.options()); return ((_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.sort) || 0; }); } createPage(payload) { return __awaiter(this, void 0, void 0, function* () { const response = yield this.request("/items/site_pages?fields=*.*.*", Object.assign(Object.assign({}, this.options()), { method: "POST", headers: Object.assign(Object.assign({}, this.options().headers), { "Content-Type": "application/json" }), body: JSON.stringify(payload) })); return response.data; }); } getPageForReadBack(pageId) { return __awaiter(this, void 0, void 0, function* () { const response = yield this.request(`/items/site_pages/${encodeURIComponent(pageId)}?fields=${encodeURIComponent(READ_BACK_FIELDS)}`, this.options()); return normalizeReadBackPage(response.data); }); } listPageKeys(siteId) { return __awaiter(this, void 0, void 0, function* () { const params = new URLSearchParams(); params.set("filter[site][_eq]", siteId); params.set("fields", "id,slug,parent_page.id,parent_page.slug"); params.set("limit", "-1"); const response = yield this.request(`/items/site_pages?${params.toString()}`, this.options()); return response.data || []; }); } options() { return { debug: this.debug, headers: authHeader(this.token), }; } } exports.DirectusPageRepository = DirectusPageRepository; function authHeader(token) { return { Authorization: `Bearer ${token}` }; } exports.authHeader = authHeader; function resolveDirectusToken(optionToken) { const token = optionToken || process.env.DIRECTUS_TOKEN; if (!token) { throw new Error("A Directus token is required. Pass --token or set DIRECTUS_TOKEN."); } return token; } exports.resolveDirectusToken = resolveDirectusToken; const FILE_FIELDS = ["id", "title", "type", "filename_download", "filename_disk", "description"]; const READ_BACK_FIELDS = [ "id", "title", "description", "slug", "content", "sources", "json_ld", "status", "sort", "date_created", "front_matter", "parent_page.id", "parent_page.slug", "sections.id", "sections.type", "sections.style", "sections.section", "sections.content", "sections.align", "sections.data", "sections.source", "sections.path", "sections.classes", "sections.sort", "sections.name", ...prefixFields("sections.image", FILE_FIELDS), ...prefixFields("sections.images.directus_files_id", FILE_FIELDS), "sections.items.id", "sections.items.item", "sections.items.style", "sections.items.align", "sections.items.classes", "sections.items.content", "sections.items.data", "sections.items.sort", "sections.items.name", ...prefixFields("sections.items.image", FILE_FIELDS), ].join(","); function normalizeReadBackPage(page) { return Object.assign(Object.assign({}, page), { sections: (page.sections || []).map((section) => (Object.assign(Object.assign({}, section), { images: (section.images || []) .map((image) => image.directus_files_id) .filter(Boolean) }))) }); } function prefixFields(prefix, fields) { return fields.map(field => `${prefix}.${field}`); } //# sourceMappingURL=directus-page-repository.js.map