Register Internal and Custom backend API's (#1011)
* allow backend register * handle multiple backends, including internal
This commit is contained in:
committed by
Shawn Erquhart
parent
22d8475e36
commit
7053ccd8ec
@ -14,6 +14,15 @@ import { sanitizeSlug } from "Lib/urlHelper";
|
|||||||
import TestRepoBackend from "./test-repo/implementation";
|
import TestRepoBackend from "./test-repo/implementation";
|
||||||
import GitHubBackend from "./github/implementation";
|
import GitHubBackend from "./github/implementation";
|
||||||
import GitGatewayBackend from "./git-gateway/implementation";
|
import GitGatewayBackend from "./git-gateway/implementation";
|
||||||
|
import { registerBackend, getBackend } from 'Lib/registry';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register internal backends
|
||||||
|
*/
|
||||||
|
registerBackend('git-gateway', GitGatewayBackend);
|
||||||
|
registerBackend('github', GitHubBackend);
|
||||||
|
registerBackend('test-repo', TestRepoBackend);
|
||||||
|
|
||||||
|
|
||||||
class LocalStorageAuthStore {
|
class LocalStorageAuthStore {
|
||||||
storageKey = "netlify-cms-user";
|
storageKey = "netlify-cms-user";
|
||||||
@ -339,15 +348,10 @@ export function resolveBackend(config) {
|
|||||||
|
|
||||||
const authStore = new LocalStorageAuthStore();
|
const authStore = new LocalStorageAuthStore();
|
||||||
|
|
||||||
switch (name) {
|
if (!getBackend(name)) {
|
||||||
case "test-repo":
|
throw new Error(`Backend not found: ${ name }`);
|
||||||
return new Backend(new TestRepoBackend(config), name, authStore);
|
} else {
|
||||||
case "github":
|
return new Backend(getBackend(name).init(config), name, authStore);
|
||||||
return new Backend(new GitHubBackend(config), name, authStore);
|
|
||||||
case "git-gateway":
|
|
||||||
return new Backend(new GitGatewayBackend(config), name, authStore);
|
|
||||||
default:
|
|
||||||
throw new Error(`Backend not found: ${ name }`);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,6 +5,7 @@ import { newEditorPlugin } from 'EditorWidgets/Markdown/MarkdownControl/plugins'
|
|||||||
* Global Registry Object
|
* Global Registry Object
|
||||||
*/
|
*/
|
||||||
const registry = {
|
const registry = {
|
||||||
|
backends: { },
|
||||||
templates: {},
|
templates: {},
|
||||||
previewStyles: [],
|
previewStyles: [],
|
||||||
widgets: {},
|
widgets: {},
|
||||||
@ -24,6 +25,8 @@ export default {
|
|||||||
getEditorComponents,
|
getEditorComponents,
|
||||||
registerWidgetValueSerializer,
|
registerWidgetValueSerializer,
|
||||||
getWidgetValueSerializer,
|
getWidgetValueSerializer,
|
||||||
|
registerBackend,
|
||||||
|
getBackend,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -87,3 +90,23 @@ export function registerWidgetValueSerializer(widgetName, serializer) {
|
|||||||
export function getWidgetValueSerializer(widgetName) {
|
export function getWidgetValueSerializer(widgetName) {
|
||||||
return registry.widgetValueSerializers[widgetName];
|
return registry.widgetValueSerializers[widgetName];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Backend API
|
||||||
|
*/
|
||||||
|
export function registerBackend(name, BackendClass) {
|
||||||
|
if (!name || !BackendClass) {
|
||||||
|
console.error("Backend parameters invalid. example: CMS.registerBackend('myBackend', BackendClass)");
|
||||||
|
} else if (registry.backends[name]) {
|
||||||
|
console.error(`Backend [${ name }] already registered. Please choose a different name.`);
|
||||||
|
} else {
|
||||||
|
registry.backends[name] = {
|
||||||
|
init: config => new BackendClass(config),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getBackend(name) {
|
||||||
|
return registry.backends[name];
|
||||||
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user