dbeaver/pro#6783 refactor: plugins bundles (#3761)

Co-authored-by: mr-anton-t <42037741+mr-anton-t@users.noreply.github.com>
This commit is contained in:
Alexey Potsetsuev
2025-09-23 18:37:24 +08:00
committed by GitHub
co-authored by mr-anton-t
parent 58b8eafc7b
commit 0fe432f45c
456 changed files with 1571 additions and 2866 deletions
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -34,7 +35,7 @@
"@cloudbeaver/core-settings": "workspace:*",
"@cloudbeaver/core-storage": "workspace:*",
"@cloudbeaver/core-utils": "workspace:*",
"@dbeaver/js-helpers": "workspace:^",
"@dbeaver/js-helpers": "workspace:*",
"mobx": "^6",
"tslib": "^2"
},
@@ -42,6 +43,7 @@
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"rimraf": "^6",
"typescript": "^5"
}
}
@@ -7,7 +7,6 @@
*/
import './module.js';
export * from './manifest.js';
export * from './AdministrationItem/AdministrationItemService.js';
export * from './AdministrationItem/filterConfigurationWizard.js';
export * from './AdministrationItem/IAdministrationItem.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreAdministrationManifest: PluginManifest = {
info: {
name: 'Core Administration',
},
};
@@ -14,7 +14,7 @@ import { AdministrationScreenService } from './AdministrationScreen/Administrati
import { AdministrationLocaleService } from './AdministrationLocaleService.js';
import { AdministrationItemService } from './AdministrationItem/AdministrationItemService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-administration',
configure: serviceCollection => {
+4 -2
View File
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -35,7 +36,7 @@
"@cloudbeaver/core-ui": "workspace:*",
"@cloudbeaver/core-utils": "workspace:*",
"@cloudbeaver/core-version": "workspace:*",
"@dbeaver/ui-kit": "workspace:^",
"@dbeaver/ui-kit": "workspace:*",
"mobx": "^6",
"mobx-react-lite": "^4",
"react": "^19",
@@ -46,6 +47,7 @@
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@types/react": "^19",
"rimraf": "^6",
"typescript": "^5",
"typescript-plugin-css-modules": "^5"
}
-3
View File
@@ -15,6 +15,3 @@ export * from './AppLocaleService.js';
// components
export * from './BodyLazy.js';
// Interfaces
export * from './manifest.js';
-14
View File
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreAppManifest: PluginManifest = {
info: {
name: 'Core App',
},
};
+1 -1
View File
@@ -11,7 +11,7 @@ import { AppScreenService } from './AppScreen/AppScreenService.js';
import { AppScreenBootstrap } from './AppScreen/AppScreenBootstrap.js';
import { AppLocaleService } from './AppLocaleService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-app',
configure: serviceCollection => {
@@ -13,6 +13,7 @@
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js",
"./module": "./lib/module.js",
"./*": "./lib/*"
},
"scripts": {
@@ -34,17 +35,19 @@
"@cloudbeaver/core-settings": "workspace:*",
"@cloudbeaver/core-storage": "workspace:*",
"@cloudbeaver/core-utils": "workspace:*",
"@dbeaver/js-helpers": "workspace:^",
"@dbeaver/js-helpers": "workspace:*",
"mobx": "^6",
"tslib": "^2"
},
"devDependencies": {
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/core-root": "workspace:*",
"@cloudbeaver/core-sdk": "workspace:*",
"@cloudbeaver/core-settings": "workspace:*",
"@cloudbeaver/tests-runner": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"@dbeaver/react-tests": "workspace:^",
"@dbeaver/react-tests": "workspace:*",
"msw": "^2",
"rimraf": "^6",
"typescript": "^5",
@@ -8,7 +8,6 @@
import './module.js';
export * from './manifest.js';
export * from './ELMRole.js';
export * from './AppAuthService.js';
export * from './AUTH_PROVIDER_LOCAL_ID.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreAuthenticationManifest: PluginManifest = {
info: {
name: 'Core Authentication',
},
};
@@ -31,7 +31,7 @@ import { AuthConfigurationsResource } from './AuthConfigurationsResource.js';
import { AuthConfigurationParametersResource } from './AuthConfigurationParametersResource.js';
import { AppAuthService } from './AppAuthService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-authentication',
configure: serviceCollection => {
+4 -2
View File
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -57,13 +58,14 @@
"@cloudbeaver/tests-runner": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"@dbeaver/react-tests": "workspace:^",
"@dbeaver/react-tests": "workspace:*",
"@testing-library/jest-dom": "^6",
"@testing-library/react": "^16",
"@types/react": "^19",
"mobx": "^6",
"react": "^19",
"react-dom": "^19",
"rimraf": "^6",
"typescript": "^5",
"typescript-plugin-css-modules": "^5",
"vitest": "^3"
@@ -5,9 +5,9 @@
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type React from 'react';
import { use } from 'react';
import { App, useService } from '@cloudbeaver/core-di';
import { AppContext } from '@cloudbeaver/core-di';
import { clsx } from '@dbeaver/ui-kit';
import style from './AppRefreshButton.module.css';
@@ -17,10 +17,14 @@ interface IProps {
}
export const AppRefreshButton: React.FC<IProps> = function AppRefreshButton({ className }) {
const app = useService(App);
const app = use(AppContext);
if (!app) {
return null;
}
function refresh() {
app.restart();
app?.restart();
}
return (
@@ -19,6 +19,7 @@
display: flex;
margin: auto;
padding: 16px 24px;
gap: 8px;
flex-direction: column;
align-items: center;
}
@@ -29,4 +30,17 @@
.details {
padding: 8px 16px;
white-space: pre-wrap;
font-size: 14px;
& summary {
cursor: pointer;
margin-bottom: 8px;
}
& code {
display: block;
font-size: 12px;
overflow: auto;
height: 250px;
}
}
@@ -1,6 +1,6 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2024 DBeaver Corp and others
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
@@ -36,11 +36,19 @@ export const DisplayError = observer<Props>(function DisplayError({ root, childr
{root && <AppRefreshButton />}
{children}
{error && (
<div className={s(styles, { details: true })}>
{error.toString()}
{stack && <br />}
{stack}
</div>
<details className={s(styles, { details: true })}>
<summary>Details</summary>
<p>
{error.toString()}
{stack && (
<>
<br />
<br />
</>
)}
<code>{stack}</code>
</p>
</details>
)}
</div>
</div>
-1
View File
@@ -251,7 +251,6 @@ export * from './useUserData.js';
export * from './useListKeyboardNavigation.js';
export * from './useMergeRefs.js';
export * from './usePasswordValidation.js';
export * from './manifest.js';
export * from './importLazyComponent.js';
export * from './ClickableLoader.js';
export * from './FormControls/TagsComboboxLoader.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreBlocksManifest: PluginManifest = {
info: {
name: 'Core Blocks',
},
};
+1 -1
View File
@@ -9,7 +9,7 @@
import { Bootstrap, ModuleRegistry } from '@cloudbeaver/core-di';
import { BlocksLocaleService } from './BlocksLocaleService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-blocks',
configure: serviceCollection => {
+10 -1
View File
@@ -46,7 +46,16 @@ export function useS<T extends ComponentStyle[]>(...componentStyles: [...T]): Ex
const stylesRef = useRef<ComponentStyle[]>([]);
const [patch, forceUpdate] = useState(0);
const loadedStyles = useRef<BaseStyles[]>([]);
const themeService = useService(ThemeService);
let themeService: ThemeService | undefined;
try {
// this service not required, in some cases we don't have services initialized and need to show basic UI
// eslint-disable-next-line react-hooks/rules-of-hooks
themeService = useService(ThemeService);
} catch {
themeService = undefined;
}
const [currentThemeId, setCurrentThemeId] = useState(() => themeService?.themeId);
const lastThemeRef = useRef<string | undefined>(currentThemeId);
const filteredStyles = themeService
+3 -32
View File
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -21,41 +22,10 @@
"validate-dependencies": "core-cli-validate-dependencies"
},
"dependencies": {
"@cloudbeaver/core-administration": "workspace:*",
"@cloudbeaver/core-app": "workspace:*",
"@cloudbeaver/core-authentication": "workspace:*",
"@cloudbeaver/core-blocks": "workspace:*",
"@cloudbeaver/core-browser": "workspace:*",
"@cloudbeaver/core-browser-cookies": "workspace:*",
"@cloudbeaver/core-browser-settings": "workspace:*",
"@cloudbeaver/core-client-activity": "workspace:*",
"@cloudbeaver/core-connections": "workspace:*",
"@cloudbeaver/core-di": "workspace:*",
"@cloudbeaver/core-dialogs": "workspace:*",
"@cloudbeaver/core-events": "workspace:*",
"@cloudbeaver/core-executor": "workspace:*",
"@cloudbeaver/core-links": "workspace:*",
"@cloudbeaver/core-localization": "workspace:*",
"@cloudbeaver/core-navigation-tree": "workspace:*",
"@cloudbeaver/core-product": "workspace:*",
"@cloudbeaver/core-projects": "workspace:*",
"@cloudbeaver/core-resource": "workspace:*",
"@cloudbeaver/core-resource-manager": "workspace:*",
"@cloudbeaver/core-root": "workspace:*",
"@cloudbeaver/core-routing": "workspace:*",
"@cloudbeaver/core-sdk": "workspace:*",
"@cloudbeaver/core-server-localization": "workspace:*",
"@cloudbeaver/core-session-localization": "workspace:*",
"@cloudbeaver/core-settings": "workspace:*",
"@cloudbeaver/core-settings-localization": "workspace:*",
"@cloudbeaver/core-settings-user": "workspace:*",
"@cloudbeaver/core-storage": "workspace:*",
"@cloudbeaver/core-task-manager": "workspace:*",
"@cloudbeaver/core-theming": "workspace:*",
"@cloudbeaver/core-ui": "workspace:*",
"@cloudbeaver/core-version": "workspace:*",
"@cloudbeaver/core-version-update": "workspace:*",
"@cloudbeaver/core-view": "workspace:*",
"mobx": "^6",
"react": "^19",
"react-dom": "^19",
@@ -66,6 +36,7 @@
"@cloudbeaver/tsconfig": "workspace:*",
"@types/react": "^19",
"@types/react-dom": "^19",
"rimraf": "^6",
"typescript": "^5",
"typescript-plugin-css-modules": "^5"
}
@@ -7,15 +7,13 @@
*/
import { configure } from 'mobx';
import { App, type PluginManifest } from '@cloudbeaver/core-di';
import { App, type IModule } from '@cloudbeaver/core-di';
import { executionExceptionContext, SyncExecutor } from '@cloudbeaver/core-executor';
import { coreManifests } from './manifest.js';
export async function bootstrap(plugins: PluginManifest[]): Promise<App> {
export async function bootstrap(modules: IModule[]): Promise<App> {
configure({ enforceActions: 'never' });
const app = new App([...coreManifests, ...plugins]);
const app = new App(modules);
(window as any).internalRestartApp = () => app.restart();
let exception: Error | null = null;
@@ -26,7 +24,7 @@ export async function bootstrap(plugins: PluginManifest[]): Promise<App> {
}
const { renderLayout } = await import('./renderLayout.js');
const render = renderLayout();
const render = renderLayout(app);
const unmountExecutor = new SyncExecutor();
unmountExecutor.addHandler(() => render.unmount());
@@ -6,8 +6,4 @@
* you may not use this file except in compliance with the License.
*/
import { coreManifests } from './manifest.js';
export * from './bootstrap.js';
export default coreManifests;
@@ -1,83 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import { coreAdministrationManifest } from '@cloudbeaver/core-administration';
import { coreAppManifest } from '@cloudbeaver/core-app';
import { coreAuthenticationManifest } from '@cloudbeaver/core-authentication';
import { coreBlocksManifest } from '@cloudbeaver/core-blocks';
import { coreBrowserManifest } from '@cloudbeaver/core-browser';
import { coreBrowserCookiesManifest } from '@cloudbeaver/core-browser-cookies';
import { coreBrowserSettingsManifest } from '@cloudbeaver/core-browser-settings';
import { coreClientActivityManifest } from '@cloudbeaver/core-client-activity';
import { coreConnectionsManifest } from '@cloudbeaver/core-connections';
import { coreDIManifest, type PluginManifest } from '@cloudbeaver/core-di';
import { coreDialogsManifest } from '@cloudbeaver/core-dialogs';
import { coreEventsManifest } from '@cloudbeaver/core-events';
import { coreLinksManifest } from '@cloudbeaver/core-links';
import { coreLocalizationManifest } from '@cloudbeaver/core-localization';
import { coreNavigationTree } from '@cloudbeaver/core-navigation-tree';
import { coreProductManifest } from '@cloudbeaver/core-product';
import { coreProjectsManifest } from '@cloudbeaver/core-projects';
import { coreResourceManifest } from '@cloudbeaver/core-resource';
import { resourceManagerManifest } from '@cloudbeaver/core-resource-manager';
import { coreRootManifest } from '@cloudbeaver/core-root';
import { coreRoutingManifest } from '@cloudbeaver/core-routing';
import { coreSDKManifest } from '@cloudbeaver/core-sdk';
import { coreServerLocalization } from '@cloudbeaver/core-server-localization';
import { coreSessionLocalization } from '@cloudbeaver/core-session-localization';
import { coreSettingsManifest } from '@cloudbeaver/core-settings';
import { coreSettingsLocalizationManifest } from '@cloudbeaver/core-settings-localization';
import { coreSettingsUserManifest } from '@cloudbeaver/core-settings-user';
import { coreStorageManifest } from '@cloudbeaver/core-storage';
import { coreTaskManagerManifest } from '@cloudbeaver/core-task-manager';
import { coreThemingManifest } from '@cloudbeaver/core-theming';
import { coreUIManifest } from '@cloudbeaver/core-ui';
import { coreVersionManifest } from '@cloudbeaver/core-version';
import { coreVersionUpdateManifest } from '@cloudbeaver/core-version-update';
import { coreViewManifest } from '@cloudbeaver/core-view';
export const coreManifests: PluginManifest[] = [
{
info: {
name: 'DBeaver core',
},
},
coreDIManifest,
coreRoutingManifest, // important, should be first because the router starts in load phase first after all plugins register phase
coreBrowserManifest,
coreThemingManifest,
coreLocalizationManifest,
coreSettingsLocalizationManifest,
coreSessionLocalization,
coreServerLocalization,
coreBlocksManifest,
coreSettingsManifest,
coreStorageManifest,
coreEventsManifest,
coreResourceManifest,
coreSDKManifest,
coreRootManifest,
coreLinksManifest,
coreBrowserSettingsManifest,
coreBrowserCookiesManifest,
coreProductManifest,
coreProjectsManifest,
coreAuthenticationManifest,
coreUIManifest,
coreViewManifest,
coreVersionManifest,
coreVersionUpdateManifest,
coreConnectionsManifest,
coreAdministrationManifest,
coreDialogsManifest,
resourceManagerManifest,
coreAppManifest,
coreClientActivityManifest,
coreNavigationTree,
coreSettingsUserManifest,
coreTaskManagerManifest,
];
@@ -10,7 +10,7 @@ import { createRoot, type Root } from 'react-dom/client';
import { BodyLazy } from '@cloudbeaver/core-app';
import { DisplayError, ErrorBoundary, Loader, s } from '@cloudbeaver/core-blocks';
import { HideAppLoadingScreen, IServiceProvider, ServiceProvider } from '@cloudbeaver/core-di';
import { App, AppContext, HideAppLoadingScreen, IServiceProvider, ServiceProvider } from '@cloudbeaver/core-di';
import styles from './renderLayout.module.css';
@@ -21,7 +21,7 @@ interface IRender {
unmount(): void;
}
export function renderLayout(): IRender {
export function renderLayout(app: App): IRender {
let root: Root | undefined;
return {
@@ -47,16 +47,18 @@ export function renderLayout(): IRender {
},
renderApp(serviceProvider: IServiceProvider | null) {
this.initRoot().render(
<ErrorBoundary fallback={<HideAppLoadingScreen />} simple>
<ServiceProvider provider={serviceProvider!}>
<ErrorBoundary fallback={<HideAppLoadingScreen />} root>
<Suspense fallback={<Loader className={s(styles, { loader: true })} />}>
<BodyLazy />
<HideAppLoadingScreen />
</Suspense>
</ErrorBoundary>
</ServiceProvider>
</ErrorBoundary>,
<AppContext value={app}>
<ErrorBoundary fallback={<HideAppLoadingScreen />} simple>
<ServiceProvider provider={serviceProvider!}>
<ErrorBoundary fallback={<HideAppLoadingScreen />} root>
<Suspense fallback={<Loader className={s(styles, { loader: true })} />}>
<BodyLazy />
<HideAppLoadingScreen />
</Suspense>
</ErrorBoundary>
</ServiceProvider>
</ErrorBoundary>
</AppContext>,
);
},
renderError(serviceProvider: IServiceProvider | null, exception?: any) {
@@ -64,12 +66,14 @@ export function renderLayout(): IRender {
console.error(exception);
}
this.initRoot().render(
<ErrorBoundary fallback={<HideAppLoadingScreen />} simple>
<ServiceProvider provider={serviceProvider!}>
<DisplayError error={exception} root />
<HideAppLoadingScreen />
</ServiceProvider>
</ErrorBoundary>,
<AppContext value={app}>
<ErrorBoundary fallback={<HideAppLoadingScreen />} simple>
<ServiceProvider provider={serviceProvider!}>
<DisplayError error={exception} root />
<HideAppLoadingScreen />
</ServiceProvider>
</ErrorBoundary>
</AppContext>,
);
},
};
@@ -7,113 +7,20 @@
"composite": true
},
"references": [
{
"path": "../core-administration"
},
{
"path": "../core-app"
},
{
"path": "../core-authentication"
},
{
"path": "../core-blocks"
},
{
"path": "../core-browser"
},
{
"path": "../core-browser-cookies"
},
{
"path": "../core-browser-settings"
},
{
"path": "../core-cli"
},
{
"path": "../core-client-activity"
},
{
"path": "../core-connections"
},
{
"path": "../core-di"
},
{
"path": "../core-dialogs"
},
{
"path": "../core-events"
},
{
"path": "../core-executor"
},
{
"path": "../core-links"
},
{
"path": "../core-localization"
},
{
"path": "../core-navigation-tree"
},
{
"path": "../core-product"
},
{
"path": "../core-projects"
},
{
"path": "../core-resource"
},
{
"path": "../core-resource-manager"
},
{
"path": "../core-root"
},
{
"path": "../core-routing"
},
{
"path": "../core-sdk"
},
{
"path": "../core-server-localization"
},
{
"path": "../core-session-localization"
},
{
"path": "../core-settings"
},
{
"path": "../core-settings-localization"
},
{
"path": "../core-settings-user"
},
{
"path": "../core-storage"
},
{
"path": "../core-task-manager"
},
{
"path": "../core-theming"
},
{
"path": "../core-ui"
},
{
"path": "../core-version"
},
{
"path": "../core-version-update"
},
{
"path": "../core-view"
}
],
"include": [
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -30,6 +31,7 @@
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"rimraf": "^6",
"typescript": "^5"
}
}
@@ -8,4 +8,3 @@
import './module.js';
export * from './CookiesService.js';
export * from './manifest.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreBrowserCookiesManifest: PluginManifest = {
info: {
name: 'Core Browser Cookies',
},
};
@@ -9,7 +9,7 @@
import { ModuleRegistry } from '@cloudbeaver/core-di';
import { CookiesService } from './CookiesService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-browser-cookies',
configure: serviceCollection => {
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -32,7 +33,8 @@
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"@dbeaver/react-tests": "workspace:^",
"@dbeaver/react-tests": "workspace:*",
"rimraf": "^6",
"typescript": "^5",
"vitest": "^3"
}
@@ -8,4 +8,3 @@
import './module.js';
export * from './BrowserSettingsService.js';
export * from './manifest.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreBrowserSettingsManifest: PluginManifest = {
info: {
name: 'Core Browser Settings',
},
};
@@ -10,7 +10,7 @@ import { Bootstrap, Dependency, ModuleRegistry, proxy } from '@cloudbeaver/core-
import { LocaleService } from './LocaleService.js';
import { BrowserSettingsService } from './BrowserSettingsService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-browser-settings',
configure: serviceCollection => {
@@ -14,6 +14,7 @@
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js",
"./module": "./lib/module.js",
"./*": "./lib/*.js"
},
"scripts": {
@@ -42,6 +43,7 @@
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"rimraf": "^6",
"typescript": "^5",
"vite": "^7"
}
@@ -10,6 +10,5 @@ import './module.js';
export * from './IndexedDB/IndexedDBService.js';
export * from './IndexedDB/IndexedDB.js';
export * from './LocalStorageSaveService.js';
export * from './manifest.js';
export * from './promptForFiles.js';
export * from './ServiceWorkerService.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreBrowserManifest: PluginManifest = {
info: {
name: 'Core Browser',
},
};
+1 -1
View File
@@ -12,7 +12,7 @@ import { ServiceWorkerBootstrap } from './ServiceWorkerBootstrap.js';
import { LocalStorageSaveService } from './LocalStorageSaveService.js';
import { IndexedDBService } from './IndexedDB/IndexedDBService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-browser',
configure: serviceCollection => {
@@ -1,8 +1,4 @@
---
to: <%= name %>/src/index.ts
---
import './module.js';
import { <%= h.changeCase.camel(name) %>Manifest } from './manifest.js';
export default <%= h.changeCase.camel(name) %>Manifest;
export { <%= h.changeCase.camel(name) %>Manifest };
import './module.js';
@@ -1,10 +0,0 @@
---
to: <%= name %>/src/manifest.ts
---
import type { PluginManifest } from '@cloudbeaver/core-di';
export const <%= h.changeCase.camel(name) %>Manifest: PluginManifest = {
info: {
name: '<%= h.changeCase.sentence(name) %>',
},
};
@@ -4,7 +4,7 @@ to: <%= name %>/src/module.ts
import { Bootstrap, ModuleRegistry } from '@cloudbeaver/core-di';
import { <%= h.changeCase.pascal(name) %>Bootstrap } from './<%= h.changeCase.pascal(name) %>Bootstrap.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/<%= name %>',
configure: serviceCollection => {
@@ -15,7 +15,8 @@ to: <%= name %>/package.json
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
+1 -2
View File
@@ -40,18 +40,17 @@
},
"dependencies": {
"glob": "^11",
"js-yaml": "^4",
"tslib": "^2"
},
"devDependencies": {
"@cloudbeaver/tsconfig": "workspace:*",
"@swc/core": "^1",
"@types/js-yaml": "^4",
"@types/node": "^22",
"enquirer": "^2",
"execa": "^9",
"glob": "^11",
"hygen": "^6",
"js-yaml": "^4",
"typescript": "^5"
}
}
@@ -1,8 +1,8 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2024 DBeaver Corp and others
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
export const IGNORED_DEPENDENCIES = ['tslib'];
export const IGNORED_DEPENDENCIES = ['tslib', 'child_process', 'fs', 'path', 'readline'];
@@ -6,8 +6,9 @@
* you may not use this file except in compliance with the License.
*/
export const KNOWN_PEER_DEPS_MAP: Record<string, string[]> = {
'react-leaflet': ['leaflet'],
'mobx-react-lite': ['mobx', 'react-dom'],
'@testing-library/react': ['@testing-library/dom', 'react-dom'],
'@testing-library/react': ['@testing-library/jest-dom', 'react-dom'],
'@typescript-eslint/eslint-plugin': ['typescript'],
'react-minisearch': ['minisearch'],
};
@@ -40,6 +40,18 @@ export function validateDependencies(currentPackageRoot: string) {
packageLogger.log('info', true, `Analyzing ${currentPackage['name']}`);
const isUseRimraf = Object.values(currentPackage.scripts || {}).some(script => script.includes('rimraf'));
if (isUseRimraf) {
devDependencies.add('rimraf');
}
const isUseDbeaverCli = Object.values(currentPackage.scripts || {}).some(script => script.includes('dbeaver-test'));
if (isUseDbeaverCli) {
devDependencies.add('@dbeaver/cli');
}
const isUseCoreCli = Object.values(currentPackage.scripts || {}).some(script => script.includes('core-cli'));
if (isUseCoreCli && currentPackage.name !== '@cloudbeaver/core-cli') {
@@ -75,6 +87,9 @@ export function validateDependencies(currentPackageRoot: string) {
if (isCSSModuleFileRegex) {
devDependencies.add('typescript-plugin-css-modules');
}
if (isTestFile) {
devDependencies.add('@dbeaver/react-tests');
}
if (isTSXFileRegex) {
if (isTestFile) {
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -31,7 +32,8 @@
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"@dbeaver/react-tests": "workspace:^",
"@dbeaver/react-tests": "workspace:*",
"rimraf": "^6",
"typescript": "^5",
"vitest": "^3"
}
@@ -8,4 +8,3 @@
import './module.js';
export * from './ClientActivityService.js';
export * from './manifest.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreClientActivityManifest: PluginManifest = {
info: {
name: 'Core Client Activity',
},
};
@@ -9,7 +9,7 @@
import { ModuleRegistry } from '@cloudbeaver/core-di';
import { ClientActivityService } from './ClientActivityService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-client-activity',
configure: serviceCollection => {
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -37,7 +38,7 @@
"@cloudbeaver/core-sdk": "workspace:*",
"@cloudbeaver/core-settings": "workspace:*",
"@cloudbeaver/core-utils": "workspace:*",
"@dbeaver/js-helpers": "workspace:^",
"@dbeaver/js-helpers": "workspace:*",
"mobx": "^6",
"react": "^19",
"tslib": "^2"
@@ -46,6 +47,7 @@
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@types/react": "^19",
"rimraf": "^6",
"typescript": "^5"
}
}
@@ -64,5 +64,3 @@ export * from './useDBDriver.js';
export * from './USER_NAME_PROPERTY_ID.js';
export * from './parseConnectionKey.js';
export * from './DBDriverExpertSettingsResource.js';
export { manifest as coreConnectionsManifest } from './manifest.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const manifest: PluginManifest = {
info: {
name: 'Core Connections',
},
};
@@ -34,7 +34,7 @@ import { ConnectionExecutionContextResource } from './ConnectionExecutionContext
import { ConnectionDialectResource } from './ConnectionDialectResource.js';
import { DBDriverExpertSettingsResource } from './DBDriverExpertSettingsResource.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-connections',
configure: serviceCollection => {
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -31,6 +32,7 @@
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@types/react": "^19",
"rimraf": "^6",
"typescript": "^5"
}
}
@@ -15,4 +15,3 @@ export * from './DataContext/IDataContextProvider.js';
export * from './DataContext/useDataContext.js';
export * from './DataContext/DataContextGetter.js';
export * from './DataContext/useDataContextLink.js';
export { coreDataContextManifest } from './manifest.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreDataContextManifest: PluginManifest = {
info: {
name: 'Core Data Context',
},
};
+6 -4
View File
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -23,9 +24,8 @@
},
"dependencies": {
"@cloudbeaver/core-executor": "workspace:*",
"@wroud/di": "^0",
"@wroud/di": "^0.18.3",
"@wroud/di-react": "^0",
"mobx": "^6",
"react": "^19",
"tslib": "^2"
},
@@ -33,8 +33,10 @@
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"@dbeaver/react-tests": "workspace:^",
"@dbeaver/react-tests": "workspace:*",
"@types/react": "^19",
"@wroud/di": "^0.18.3",
"rimraf": "^6",
"typescript": "^5",
"vitest": "^3"
}
+21 -8
View File
@@ -11,8 +11,7 @@ import { Executor, type IExecutor } from '@cloudbeaver/core-executor';
import { Bootstrap } from './Bootstrap.js';
import { Dependency } from './Dependency.js';
import { IServiceProvider } from './IServiceProvider.js';
import type { PluginManifest } from './PluginManifest.js';
import { ModuleRegistry, ServiceContainerBuilder } from '@wroud/di';
import { ModuleRegistry, ServiceContainerBuilder, type IModule } from '@wroud/di';
import { IPreloadService } from './IPreloadService.js';
export interface IStartData {
@@ -22,13 +21,13 @@ export interface IStartData {
export class App {
readonly onStart: IExecutor<IStartData>;
private readonly plugins: PluginManifest[];
private readonly modules: IModule[];
private builder: ServiceContainerBuilder | null;
private serviceProvider: IServiceProvider | null;
constructor(plugins: PluginManifest[] = []) {
this.plugins = plugins;
constructor(plugins: IModule[] = []) {
this.modules = plugins;
this.onStart = new Executor<IStartData>(undefined, () => true);
this.serviceProvider = null;
this.builder = null;
@@ -58,8 +57,8 @@ export class App {
this.builder = null;
}
addPlugin(manifest: PluginManifest): void {
this.plugins.push(manifest);
addModule(module: IModule): void {
this.modules.push(module);
}
getServiceProvider(): IServiceProvider | null {
@@ -71,9 +70,23 @@ export class App {
if (!this.builder) {
this.builder = new ServiceContainerBuilder();
this.builder.addSingleton(App, this);
let modulesToLoad = [...this.modules];
const requiredModules = new Set(ModuleRegistry);
for (const module of ModuleRegistry) {
if (this.modules.length === 0) {
modulesToLoad = [...requiredModules];
}
for (const module of modulesToLoad) {
await module.configure(this.builder);
requiredModules.delete(module);
}
if (requiredModules.size > 0) {
console.warn(
'Some required modules were not added to the application: ',
[...requiredModules].map(m => m.name).sort((a, b) => a.localeCompare(b)),
);
}
await this.builder.validate();
@@ -8,12 +8,12 @@
import { expect, test } from 'vitest';
import { App } from '../../App.js';
import { manifest } from './manifest.js';
import { TestBootstrap } from './TestBootstrap.js';
import { TestService } from './TestService.js';
import testModule from './module.js';
test.skip('App Initialization', async () => {
const app = new App([manifest]);
const app = new App([testModule]);
await (app as any).registerServices();
const serviceProvider = app.getServiceProvider()!;
@@ -6,18 +6,11 @@
* you may not use this file except in compliance with the License.
*/
import { ModuleRegistry, proxy } from '@wroud/di';
import type { PluginManifest } from '../../PluginManifest.js';
import { TestService } from './TestService.js';
import { TestBootstrap } from './TestBootstrap.js';
import { Bootstrap } from '../../Bootstrap.js';
export const manifest: PluginManifest = {
info: {
name: 'Sample Manifest',
},
};
ModuleRegistry.add({
export default ModuleRegistry.add({
name: 'test-manifest',
configure(serviceCollection) {
serviceCollection.addSingleton(TestService).addSingleton(Bootstrap, proxy(TestBootstrap)).addSingleton(TestBootstrap);
+1 -2
View File
@@ -16,9 +16,8 @@ export * from './Dependency.js';
export * from './dependencyInjectorContext.js';
export * from './DIService.js';
export * from './injectable.js';
export * from './PluginManifest.js';
export * from './useApp.js';
export * from './useService.js';
export * from './IServiceProvider.js';
export * from './AppLoadingScreen/HideAppLoadingScreenLazy.js';
export * from './AppLoadingScreen/displayUpdateStatus.js';
export { manifest as coreDIManifest } from './manifest.js';
+1 -1
View File
@@ -5,4 +5,4 @@
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
export { injectable, ModuleRegistry, optional, proxy } from '@wroud/di';
export { injectable, ModuleRegistry, type IModule, optional, proxy } from '@wroud/di';
-14
View File
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from './PluginManifest.js';
export const manifest: PluginManifest = {
info: {
name: 'Core DI',
},
};
@@ -6,9 +6,7 @@
* you may not use this file except in compliance with the License.
*/
export interface PluginManifest {
info: {
name: string;
defaultSettings?: Record<string, any>;
};
}
import { createContext } from 'react';
import type { App } from './App.js';
export const AppContext = createContext<App | null>(null);
+3 -1
View File
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -29,6 +30,7 @@
"devDependencies": {
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"rimraf": "^6",
"typescript": "^5"
}
}
@@ -8,4 +8,3 @@
import './module.js';
export * from './CommonDialog/CommonDialogService.js';
export * from './manifest.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreDialogsManifest: PluginManifest = {
info: {
name: 'Core Dialogs',
},
};
+1 -1
View File
@@ -9,7 +9,7 @@
import { ModuleRegistry } from '@cloudbeaver/core-di';
import { CommonDialogService } from './CommonDialog/CommonDialogService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-dialogs',
configure: serviceCollection => {
+4 -2
View File
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -35,7 +36,8 @@
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"@dbeaver/react-tests": "workspace:^",
"@dbeaver/react-tests": "workspace:*",
"rimraf": "^6",
"typescript": "^5",
"vitest": "^3"
}
-1
View File
@@ -14,4 +14,3 @@ export * from './INotification.js';
export * from './UIError.js';
export * from './ExceptionsCatcherService.js';
export * from './EventsSettingsService.js';
export * from './manifest.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreEventsManifest: PluginManifest = {
info: {
name: 'Core Events',
},
};
+1 -1
View File
@@ -12,7 +12,7 @@ import { LocaleService } from './LocaleService.js';
import { ExceptionsCatcherService } from './ExceptionsCatcherService.js';
import { EventsSettingsService } from './EventsSettingsService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-events',
configure: serviceCollection => {
+3 -1
View File
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -29,6 +30,7 @@
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"rimraf": "^6",
"typescript": "^5"
}
}
+3 -1
View File
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -26,6 +27,7 @@
"devDependencies": {
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"rimraf": "^6",
"typescript": "^5"
}
}
+3 -2
View File
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -22,13 +23,13 @@
"validate-dependencies": "core-cli-validate-dependencies"
},
"dependencies": {
"@cloudbeaver/core-di": "workspace:*",
"tslib": "^2"
},
"devDependencies": {
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"rimraf": "^6",
"typescript": "^5"
}
}
-1
View File
@@ -8,4 +8,3 @@
export * from './WebsiteLinks.js';
export * from './GithubLinks.js';
export * from './manifest.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreLinksManifest: PluginManifest = {
info: {
name: 'Core Links',
},
};
-3
View File
@@ -12,9 +12,6 @@
},
{
"path": "../core-cli"
},
{
"path": "../core-di"
}
],
"include": [
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -31,7 +32,8 @@
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"@dbeaver/react-tests": "workspace:^",
"@dbeaver/react-tests": "workspace:*",
"rimraf": "^6",
"typescript": "^5",
"vitest": "^3"
}
@@ -7,7 +7,6 @@
*/
import './module.js';
export * from './manifest.js';
export * from './LocalizationService.js';
export * from './Locale.js';
export * from './TLocalizationToken.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreLocalizationManifest: PluginManifest = {
info: {
name: 'Core Localization',
},
};
@@ -9,7 +9,7 @@
import { Bootstrap, ModuleRegistry, proxy } from '@cloudbeaver/core-di';
import { LocalizationService } from './LocalizationService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-localization',
configure: serviceCollection => {
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -35,16 +36,16 @@
"@cloudbeaver/core-settings": "workspace:*",
"@cloudbeaver/core-ui": "workspace:*",
"@cloudbeaver/core-utils": "workspace:*",
"@dbeaver/js-helpers": "workspace:^",
"@dbeaver/js-helpers": "workspace:*",
"mobx": "^6",
"tslib": "^2"
},
"devDependencies": {
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tests-runner": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@dbeaver/cli": "workspace:*",
"@dbeaver/react-tests": "workspace:^",
"@dbeaver/react-tests": "workspace:*",
"rimraf": "^6",
"typescript": "^5",
"vitest": "^3"
}
@@ -7,7 +7,6 @@
*/
import './module.js';
export * from './manifest.js';
export * from './NAVIGATION_TREE_SETTINGS_GROUP.js';
export * from './NavTreeSettingsService.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreNavigationTree: PluginManifest = {
info: {
name: 'Core Navigation Tree',
},
};
@@ -15,7 +15,7 @@ import { DBObjectResource } from './NodesManager/DBObjectResource.js';
import { NavTreeSettingsService } from './NavTreeSettingsService.js';
import { LocaleService } from './LocaleService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-navigation-tree',
configure: serviceCollection => {
@@ -57,9 +57,6 @@
},
{
"path": "../core-utils"
},
{
"path": "../tests-runner"
}
],
"include": [
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -35,6 +36,7 @@
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"@types/react": "^19",
"rimraf": "^6",
"typescript": "^5",
"typescript-plugin-css-modules": "^5"
}
+3 -1
View File
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -29,6 +30,7 @@
"devDependencies": {
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"rimraf": "^6",
"typescript": "^5"
}
}
@@ -8,4 +8,3 @@
import './module.js';
export * from './ProductSettingsService.js';
export * from './manifest.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const coreProductManifest: PluginManifest = {
info: {
name: 'Core Product',
},
};
+1 -1
View File
@@ -9,7 +9,7 @@
import { ModuleRegistry } from '@cloudbeaver/core-di';
import { ProductSettingsService } from './ProductSettingsService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-product',
configure: serviceCollection => {
+3 -1
View File
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -37,6 +38,7 @@
"devDependencies": {
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"rimraf": "^6",
"typescript": "^5"
}
}
@@ -17,4 +17,3 @@ export * from './ProjectInfoResource.js';
export * from './ProjectsService.js';
export * from './NAV_NODE_TYPE_PROJECT.js';
export * from './NavTree/getProjectNodeId.js';
export { manifest as coreProjectsManifest } from './manifest.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const manifest: PluginManifest = {
info: {
name: 'Core Projects',
},
};
+1 -1
View File
@@ -12,7 +12,7 @@ import { ProjectInfoResource } from './ProjectInfoResource.js';
import { ProjectInfoEventHandler } from './ProjectInfoEventHandler.js';
import { LocaleService } from './LocaleService.js';
ModuleRegistry.add({
export default ModuleRegistry.add({
name: '@cloudbeaver/core-projects',
configure: serviceCollection => {
@@ -12,7 +12,8 @@
"description": "",
"license": "Apache-2.0",
"exports": {
".": "./lib/index.js"
".": "./lib/index.js",
"./module": "./lib/module.js"
},
"scripts": {
"build": "tsc -b",
@@ -37,6 +38,7 @@
"devDependencies": {
"@cloudbeaver/core-cli": "workspace:*",
"@cloudbeaver/tsconfig": "workspace:*",
"rimraf": "^6",
"typescript": "^5"
}
}
@@ -20,4 +20,3 @@ export * from './NAV_NODE_TYPE_RM_RESOURCE.js';
export * from './RESOURCES_NODE_PATH.js';
export * from './isRMProjectNode.js';
export * from './isRMResourceNode.js';
export { resourceManagerManifest } from './manifest.js';
@@ -1,14 +0,0 @@
/*
* CloudBeaver - Cloud Database Manager
* Copyright (C) 2020-2025 DBeaver Corp and others
*
* Licensed under the Apache License, Version 2.0.
* you may not use this file except in compliance with the License.
*/
import type { PluginManifest } from '@cloudbeaver/core-di';
export const resourceManagerManifest: PluginManifest = {
info: {
name: 'Resource Manager Core',
},
};

Some files were not shown because too many files have changed in this diff Show More