Skip to content

Commit 1ded58e

Browse files
committed
feat: support modular registration
1 parent 512e7d6 commit 1ded58e

File tree

3 files changed

+185
-0
lines changed

3 files changed

+185
-0
lines changed

packages/decap-cms-app/package.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@
1313
"dist/",
1414
"index.d.ts"
1515
],
16+
"exports": {
17+
".": {
18+
"import": "./dist/esm/index.js",
19+
"require": "./dist/decap-cms-app.js"
20+
},
21+
"./init": {
22+
"import": "./dist/esm/init.js"
23+
}
24+
},
1625
"scripts": {
1726
"develop": "npm run build:esm -- --watch",
1827
"webpack": "node --max_old_space_size=4096 ../../node_modules/webpack/bin/webpack.js",
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import StringWidget from 'decap-cms-widget-string';
2+
import NumberWidget from 'decap-cms-widget-number';
3+
import TextWidget from 'decap-cms-widget-text';
4+
import ImageWidget from 'decap-cms-widget-image';
5+
import FileWidget from 'decap-cms-widget-file';
6+
import SelectWidget from 'decap-cms-widget-select';
7+
import MarkdownWidget from 'decap-cms-widget-markdown';
8+
import ListWidget from 'decap-cms-widget-list';
9+
import ObjectWidget from 'decap-cms-widget-object';
10+
import RelationWidget from 'decap-cms-widget-relation';
11+
import BooleanWidget from 'decap-cms-widget-boolean';
12+
import DateTimeWidget from 'decap-cms-widget-datetime';
13+
import ColorStringWidget from 'decap-cms-widget-colorstring';
14+
15+
export const widgets = [
16+
StringWidget.Widget(),
17+
NumberWidget.Widget(),
18+
TextWidget.Widget(),
19+
ImageWidget.Widget(),
20+
FileWidget.Widget(),
21+
SelectWidget.Widget(),
22+
MarkdownWidget.Widget(),
23+
ListWidget.Widget(),
24+
ObjectWidget.Widget(),
25+
RelationWidget.Widget(),
26+
BooleanWidget.Widget(),
27+
DateTimeWidget.Widget(),
28+
ColorStringWidget.Widget(),
29+
];
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
export type * from 'decap-cms-core';
2+
import { DecapCmsCore as CMS } from 'decap-cms-core';
3+
export { CMS };
4+
5+
// 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);
58+
}
59+
60+
// Widget registration functions
61+
export async function registerCoreWidgets() {
62+
const { widgets } = await import('./core-widgets');
63+
CMS.registerWidget(widgets);
64+
}
65+
66+
export async function registerMapWidget() {
67+
const m = await import('decap-cms-widget-map');
68+
CMS.registerWidget(m.default.Widget() as any);
69+
}
70+
71+
export async function registerCodeWidget() {
72+
const m = await import('decap-cms-widget-code');
73+
CMS.registerWidget(m.default.Widget() as any);
74+
}
75+
76+
// Editor component registration functions
77+
export async function registerImageComponent() {
78+
const m = await import('decap-cms-editor-component-image');
79+
CMS.registerEditorComponent(m.default);
80+
}
81+
82+
// Locale registration functions
83+
export async function registerLocale(locale: string) {
84+
const m = await import('decap-cms-locales');
85+
if (locale in m) {
86+
CMS.registerLocale(locale, m[locale as keyof typeof m]);
87+
} else {
88+
throw new Error(`Locale ${locale} not found`);
89+
}
90+
}
91+
92+
// List of available locales
93+
export const availableLocales = [
94+
'bg', // Bulgarian
95+
'ca', // Catalan
96+
'cs', // Czech
97+
'da', // Danish
98+
'de', // German
99+
'en', // English
100+
'es', // Spanish
101+
'fa', // Persian
102+
'fr', // French
103+
'gr', // Greek
104+
'he', // Hebrew
105+
'hr', // Croatian
106+
'hu', // Hungarian
107+
'it', // Italian
108+
'ja', // Japanese
109+
'ko', // Korean
110+
'lt', // Lithuanian
111+
'nb_no', // Norwegian Bokmål
112+
'nl', // Dutch
113+
'nn_no', // Norwegian Nynorsk
114+
'pl', // Polish
115+
'pt', // Portuguese
116+
'ro', // Romanian
117+
'ru', // Russian
118+
'sl', // Slovenian
119+
'sv', // Swedish
120+
'th', // Thai
121+
'tr', // Turkish
122+
'ua', // Ukrainian
123+
'uk', // Ukrainian
124+
'vi', // Vietnamese
125+
'zh_Hans', // Simplified Chinese
126+
'zh_Hant', // Traditional Chinese
127+
] as const;
128+
129+
// Convenience function to register everything
130+
export async function registerAll() {
131+
await Promise.all([
132+
registerGitGatewayBackend(),
133+
registerAzureBackend(),
134+
registerAwsCognitoGithubProxyBackend(),
135+
registerGitHubBackend(),
136+
registerGitLabBackend(),
137+
registerGiteaBackend(),
138+
registerBitbucketBackend(),
139+
registerTestBackend(),
140+
registerProxyBackend(),
141+
registerCoreWidgets(),
142+
registerMapWidget(),
143+
registerCodeWidget(),
144+
registerImageComponent(),
145+
registerLocale('en'), // Register English by default
146+
]);
147+
}

0 commit comments

Comments
 (0)