@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
JavaScript
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
};