UNPKG

@oberoncms/core

Version:

OberonCMS is a cloud deployable CMS written in typescript based on the Puck visual editor

84 lines (83 loc) 2.07 kB
import { stubbedAdapter } from "./stubbed-adapter.js"; import { getInitialData } from "./get-initial-data.js"; const baseAccumulator = { handlers: {}, versions: [], adapter: { ...stubbedAdapter, hasPermission: ({ user, action, permission }) => { const permissions = { unauthenticated: { pages: "read" }, user: { site: "read", pages: "write", images: "write" }, admin: { all: "write" } }; const role = user?.role || "unauthenticated"; if (role === "admin") { return true; } return !!(permissions[role] && permissions[role][action] && (permissions[role][action] === permission || permissions[role][action] === "write" || permissions[role].all === permission || permissions[role].all === "write")); } } }; function initPlugins(plugins = []) { const oberon = plugins.reduce( (accumulator, plugin) => { const { name, version, disabled, adapter, handlers = {} } = plugin(accumulator.adapter); if (disabled) { return { ...accumulator, versions: [ ...accumulator.versions, { name, disabled, version: version || "" } ] }; } return { versions: [ ...accumulator.versions, { name, disabled, version: version || "" } ], handlers: { ...accumulator.handlers, ...handlers }, adapter: { ...accumulator.adapter, ...adapter } }; }, baseAccumulator ); return { ...oberon, adapter: { ...oberon.adapter, prebuild: async () => { await oberon.adapter.prebuild(); const allPages = await oberon.adapter.getAllPages(); if (!allPages.length) { console.log("Initialising welcome page"); await oberon.adapter.updatePageData(getInitialData()); } } } }; } export { initPlugins };