Skip to content

Commit 1e8c349

Browse files
committed
feat: auto-register backend based on config
1 parent 24808f7 commit 1e8c349

File tree

1 file changed

+65
-67
lines changed

1 file changed

+65
-67
lines changed
Lines changed: 65 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,74 @@
11
export type * from 'decap-cms-core';
2-
import { DecapCmsCore as CMS } from 'decap-cms-core';
2+
import { DecapCmsCore as cms } from 'decap-cms-core';
3+
4+
import type { CMS, CmsBackendType, InitOptions } from 'decap-cms-core';
35
export { CMS };
46

57
// Backend registration functions
6-
export async function registerGitGatewayBackend() {
7-
const m = await import('decap-cms-backend-git-gateway');
8-
console.log('Loaded decap-cms-backend-git-gateway', m);
9-
CMS.registerBackend('git-gateway', m.GitGatewayBackend);
10-
}
11-
12-
export async function registerAzureBackend() {
13-
const m = await import('decap-cms-backend-azure');
14-
console.log('Loaded decap-cms-backend-azure', m);
15-
CMS.registerBackend('azure', m.AzureBackend);
16-
}
17-
18-
export async function registerAwsCognitoGithubProxyBackend() {
19-
const m = await import('decap-cms-backend-aws-cognito-github-proxy');
20-
console.log('Loaded decap-cms-backend-aws-cognito-github-proxy', m);
21-
CMS.registerBackend('aws-cognito-github-proxy', m.AwsCognitoGitHubProxyBackend);
22-
}
23-
24-
export async function registerGitHubBackend() {
25-
const m = await import('decap-cms-backend-github');
26-
console.log('Loaded decap-cms-backend-github', m);
27-
CMS.registerBackend('github', m.GitHubBackend);
28-
}
29-
30-
export async function registerGitLabBackend() {
31-
const m = await import('decap-cms-backend-gitlab');
32-
console.log('Loaded decap-cms-backend-gitlab', m);
33-
CMS.registerBackend('gitlab', m.GitLabBackend);
34-
}
35-
36-
export async function registerGiteaBackend() {
37-
const m = await import('decap-cms-backend-gitea');
38-
console.log('Loaded decap-cms-backend-gitea', m);
39-
CMS.registerBackend('gitea', m.GiteaBackend);
40-
}
41-
42-
export async function registerBitbucketBackend() {
43-
const m = await import('decap-cms-backend-bitbucket');
44-
console.log('Loaded decap-cms-backend-bitbucket', m);
45-
CMS.registerBackend('bitbucket', m.BitbucketBackend);
46-
}
47-
48-
export async function registerTestBackend() {
49-
const m = await import('decap-cms-backend-test');
50-
console.log('Loaded decap-cms-backend-test', m);
51-
CMS.registerBackend('test-repo', m.TestBackend);
52-
}
53-
54-
export async function registerProxyBackend() {
55-
const m = await import('decap-cms-backend-proxy');
56-
console.log('Loaded decap-cms-backend-proxy', m);
57-
CMS.registerBackend('proxy', m.ProxyBackend);
8+
export async function registerBackend(type: CmsBackendType) {
9+
switch (type) {
10+
case 'aws-cognito-github-proxy':
11+
cms.registerBackend(
12+
type,
13+
(await import('decap-cms-backend-aws-cognito-github-proxy')).AwsCognitoGitHubProxyBackend,
14+
);
15+
break;
16+
case 'azure':
17+
cms.registerBackend(type, (await import('decap-cms-backend-azure')).AzureBackend);
18+
break;
19+
case 'bitbucket':
20+
cms.registerBackend(type, (await import('decap-cms-backend-bitbucket')).BitbucketBackend);
21+
break;
22+
case 'git-gateway':
23+
cms.registerBackend(type, (await import('decap-cms-backend-git-gateway')).GitGatewayBackend);
24+
break;
25+
case 'github':
26+
cms.registerBackend(type, (await import('decap-cms-backend-github')).GitHubBackend);
27+
break;
28+
case 'gitlab':
29+
cms.registerBackend(type, (await import('decap-cms-backend-gitlab')).GitLabBackend);
30+
break;
31+
case 'gitea':
32+
cms.registerBackend(type, (await import('decap-cms-backend-gitea')).GiteaBackend);
33+
break;
34+
case 'test-repo':
35+
cms.registerBackend(type, (await import('decap-cms-backend-test')).TestBackend);
36+
break;
37+
case 'proxy':
38+
cms.registerBackend(type, (await import('decap-cms-backend-proxy')).ProxyBackend);
39+
break;
40+
default:
41+
throw new Error(`Backend type '${type}' not supported`);
42+
}
5843
}
5944

6045
// Widget registration functions
6146
export async function registerCoreWidgets() {
6247
const { widgets } = await import('./core-widgets');
63-
CMS.registerWidget(widgets);
48+
cms.registerWidget(widgets);
6449
}
6550

6651
export async function registerMapWidget() {
6752
const m = await import('decap-cms-widget-map');
68-
CMS.registerWidget(m.default.Widget() as any);
53+
cms.registerWidget(m.default.Widget() as any);
6954
}
7055

7156
export async function registerCodeWidget() {
7257
const m = await import('decap-cms-widget-code');
73-
CMS.registerWidget(m.default.Widget() as any);
58+
cms.registerWidget(m.default.Widget() as any);
7459
}
7560

7661
// Editor component registration functions
7762
export async function registerImageComponent() {
7863
const m = await import('decap-cms-editor-component-image');
79-
CMS.registerEditorComponent(m.default);
64+
cms.registerEditorComponent(m.default);
8065
}
8166

8267
// Locale registration functions
8368
export async function registerLocale(locale: string) {
8469
const m = await import('decap-cms-locales');
8570
if (locale in m) {
86-
CMS.registerLocale(locale, m[locale as keyof typeof m]);
71+
cms.registerLocale(locale, m[locale as keyof typeof m]);
8772
} else {
8873
throw new Error(`Locale ${locale} not found`);
8974
}
@@ -129,19 +114,32 @@ export const availableLocales = [
129114
// Convenience function to register everything
130115
export async function registerAll() {
131116
await Promise.all([
132-
registerGitGatewayBackend(),
133-
registerAzureBackend(),
134-
registerAwsCognitoGithubProxyBackend(),
135-
registerGitHubBackend(),
136-
registerGitLabBackend(),
137-
registerGiteaBackend(),
138-
registerBitbucketBackend(),
139-
registerTestBackend(),
140-
registerProxyBackend(),
117+
registerBackend('git-gateway'),
118+
registerBackend('azure'),
119+
registerBackend('aws-cognito-github-proxy'),
120+
registerBackend('github'),
121+
registerBackend('gitlab'),
122+
registerBackend('gitea'),
123+
registerBackend('bitbucket'),
124+
registerBackend('test-repo'),
125+
registerBackend('proxy'),
141126
registerCoreWidgets(),
142127
registerMapWidget(),
143128
registerCodeWidget(),
144129
registerImageComponent(),
145130
registerLocale('en'), // Register English by default
146131
]);
147132
}
133+
134+
type Options = InitOptions & { setup?: (cms: CMS) => Promise<void> };
135+
136+
export async function init(options: Options) {
137+
const { config, setup } = options;
138+
await Promise.all([
139+
setup,
140+
registerCoreWidgets(),
141+
registerLocale(config.locale || 'en'),
142+
registerBackend(config.local_backend ? 'proxy' : config.backend.name),
143+
]);
144+
cms.init(options);
145+
}

0 commit comments

Comments
 (0)