Skip to content

Commit 7053ccd

Browse files
talveserquhart
authored andcommitted
Register Internal and Custom backend API's (#1011)
* allow backend register * handle multiple backends, including internal
1 parent 22d8475 commit 7053ccd

File tree

2 files changed

+36
-9
lines changed

2 files changed

+36
-9
lines changed

src/backends/backend.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@ import { sanitizeSlug } from "Lib/urlHelper";
1414
import TestRepoBackend from "./test-repo/implementation";
1515
import GitHubBackend from "./github/implementation";
1616
import GitGatewayBackend from "./git-gateway/implementation";
17+
import { registerBackend, getBackend } from 'Lib/registry';
18+
19+
/**
20+
* Register internal backends
21+
*/
22+
registerBackend('git-gateway', GitGatewayBackend);
23+
registerBackend('github', GitHubBackend);
24+
registerBackend('test-repo', TestRepoBackend);
25+
1726

1827
class LocalStorageAuthStore {
1928
storageKey = "netlify-cms-user";
@@ -339,15 +348,10 @@ export function resolveBackend(config) {
339348

340349
const authStore = new LocalStorageAuthStore();
341350

342-
switch (name) {
343-
case "test-repo":
344-
return new Backend(new TestRepoBackend(config), name, authStore);
345-
case "github":
346-
return new Backend(new GitHubBackend(config), name, authStore);
347-
case "git-gateway":
348-
return new Backend(new GitGatewayBackend(config), name, authStore);
349-
default:
350-
throw new Error(`Backend not found: ${ name }`);
351+
if (!getBackend(name)) {
352+
throw new Error(`Backend not found: ${ name }`);
353+
} else {
354+
return new Backend(getBackend(name).init(config), name, authStore);
351355
}
352356
}
353357

src/lib/registry.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { newEditorPlugin } from 'EditorWidgets/Markdown/MarkdownControl/plugins'
55
* Global Registry Object
66
*/
77
const registry = {
8+
backends: { },
89
templates: {},
910
previewStyles: [],
1011
widgets: {},
@@ -24,6 +25,8 @@ export default {
2425
getEditorComponents,
2526
registerWidgetValueSerializer,
2627
getWidgetValueSerializer,
28+
registerBackend,
29+
getBackend,
2730
};
2831

2932

@@ -87,3 +90,23 @@ export function registerWidgetValueSerializer(widgetName, serializer) {
8790
export function getWidgetValueSerializer(widgetName) {
8891
return registry.widgetValueSerializers[widgetName];
8992
};
93+
94+
/**
95+
* Backend API
96+
*/
97+
export function registerBackend(name, BackendClass) {
98+
if (!name || !BackendClass) {
99+
console.error("Backend parameters invalid. example: CMS.registerBackend('myBackend', BackendClass)");
100+
} else if (registry.backends[name]) {
101+
console.error(`Backend [${ name }] already registered. Please choose a different name.`);
102+
} else {
103+
registry.backends[name] = {
104+
init: config => new BackendClass(config),
105+
};
106+
}
107+
}
108+
109+
export function getBackend(name) {
110+
return registry.backends[name];
111+
}
112+

0 commit comments

Comments
 (0)