@archer-edu/dxp-directus-cli
Version:
170 lines • 7.56 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());
});
};
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