Skip to content

Commit b9cb4f2

Browse files
author
winjo
committed
feat: add api
1 parent 01803bd commit b9cb4f2

34 files changed

Lines changed: 547 additions & 384 deletions

package.json

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,12 @@
1313
"scripts": {
1414
"preinstall": "node scripts/preinstall",
1515
"init": "npm run clean && npm run build && npm run ext",
16+
"start": "npm run dev",
1617
"ext": "node packages/alex/bin/alex ext",
18+
"sdk": "INTEGRATION=sdk npm run dev",
1719
"build": "node scripts/build",
1820
"create": "node scripts/create",
1921
"format": "prettier --write --parser typescript \"packages/**/*.ts?(x)\"",
20-
"start": "npm run dev",
2122
"dev": "yarn workspace @alipay/alex-toolkit dev",
2223
"clean": "rimraf packages/*/lib",
2324
"test": "jest --runInBand",
@@ -80,31 +81,5 @@
8081
"mode": "yarn",
8182
"lockfile": "enable"
8283
},
83-
"kaitianExtensions": [
84-
{
85-
"publisher": "cloud-ide",
86-
"name": "alipay-geek-theme",
87-
"version": "1.8.0"
88-
},
89-
{
90-
"publisher": "kaitian",
91-
"name": "vsicons-slim",
92-
"version": "1.0.5"
93-
},
94-
{
95-
"publisher": "kaitian-worker",
96-
"name": "html-language-features",
97-
"version": "1.0.0-beta-1"
98-
},
99-
{
100-
"publisher": "kaitian-worker",
101-
"name": "json-language-features",
102-
"version": "1.0.0"
103-
},
104-
{
105-
"publisher": "CodeX",
106-
"name": "json-language-features",
107-
"version": "1.0.0"
108-
}
109-
]
84+
"kaitianExtensions": []
11085
}

packages/alex/modules/index.d.ts

Lines changed: 2 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,2 @@
1-
export { ClientAddonModule } from '@ali/ide-addons/lib/browser';
2-
export { CommentsModule } from '@ali/ide-comments/lib/browser';
3-
export { DebugModule } from '@ali/ide-debug/lib/browser';
4-
export { DecorationModule } from '@ali/ide-decoration/lib/browser';
5-
export { EditorModule } from '@ali/ide-editor/lib/browser';
6-
export { ExplorerModule } from '@ali/ide-explorer/lib/browser';
7-
export { ExtensionStorageModule } from '@ali/ide-extension-storage/lib/browser';
8-
export { FileSchemeModule } from '@ali/ide-file-scheme/lib/browser';
9-
export { FileServiceClientModule } from '@ali/ide-file-service/lib/browser';
10-
export { FileTreeNextModule } from '@ali/ide-file-tree-next/lib/browser';
11-
export { KaitianExtensionModule } from '@ali/ide-kaitian-extension/lib/browser';
12-
export { KeymapsModule } from '@ali/ide-keymaps/lib/browser';
13-
export { LogModule } from '@ali/ide-logs/lib/browser';
14-
export { MainLayoutModule } from '@ali/ide-main-layout/lib/browser';
15-
export { MarkdownModule } from '@ali/ide-markdown/lib/browser';
16-
export { MarkersModule } from '@ali/ide-markers/lib/browser';
17-
export { MenuBarModule } from '@ali/ide-menu-bar/lib/browser';
18-
export { MonacoModule } from '@ali/ide-monaco/lib/browser';
19-
export { MonacoEnhanceModule } from '@ali/ide-monaco-enhance/lib/browser/module';
20-
export { OpenedEditorModule } from '@ali/ide-opened-editor/lib/browser';
21-
export { OutlineModule } from '@ali/ide-outline/lib/browser';
22-
export { OutputModule } from '@ali/ide-output/lib/browser';
23-
export { OverlayModule } from '@ali/ide-overlay/lib/browser';
24-
export { PreferencesModule } from '@ali/ide-preferences/lib/browser';
25-
export { QuickOpenModule } from '@ali/ide-quick-open/lib/browser';
26-
export { SCMModule } from '@ali/ide-scm/lib/browser';
27-
export { SearchModule } from '@ali/ide-search';
28-
export { StaticResourceModule } from '@ali/ide-static-resource/lib/browser';
29-
export { StatusBarModule } from '@ali/ide-status-bar/lib/browser';
30-
export { StorageModule } from '@ali/ide-storage/lib/browser';
31-
export { ThemeModule } from '@ali/ide-theme/lib/browser';
32-
export { ToolbarModule } from '@ali/ide-toolbar/lib/browser';
33-
export { VariableModule } from '@ali/ide-variable/lib/browser';
34-
export { WebviewModule } from '@ali/ide-webview/lib/browser';
35-
export { WorkspaceModule } from '@ali/ide-workspace/lib/browser';
36-
export { WorkspaceEditModule } from '@ali/ide-workspace-edit/lib/browser';
1+
// @ts-nocheck
2+
export * from '../lib/core/modules';

packages/alex/modules/index.js

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1 @@
1-
export { ClientAddonModule } from '@ali/ide-addons/lib/browser';
2-
export { CommentsModule } from '@ali/ide-comments/lib/browser';
3-
export { DebugModule } from '@ali/ide-debug/lib/browser';
4-
export { DecorationModule } from '@ali/ide-decoration/lib/browser';
5-
export { EditorModule } from '@ali/ide-editor/lib/browser';
6-
export { ExplorerModule } from '@ali/ide-explorer/lib/browser';
7-
export { ExtensionStorageModule } from '@ali/ide-extension-storage/lib/browser';
8-
export { FileSchemeModule } from '@ali/ide-file-scheme/lib/browser';
9-
export { FileServiceClientModule } from '@ali/ide-file-service/lib/browser';
10-
export { FileTreeNextModule } from '@ali/ide-file-tree-next/lib/browser';
11-
export { KaitianExtensionModule } from '@ali/ide-kaitian-extension/lib/browser';
12-
export { KeymapsModule } from '@ali/ide-keymaps/lib/browser';
13-
export { LogModule } from '@ali/ide-logs/lib/browser';
14-
export { MainLayoutModule } from '@ali/ide-main-layout/lib/browser';
15-
export { MarkdownModule } from '@ali/ide-markdown/lib/browser';
16-
export { MarkersModule } from '@ali/ide-markers/lib/browser';
17-
export { MenuBarModule } from '@ali/ide-menu-bar/lib/browser';
18-
export { MonacoModule } from '@ali/ide-monaco/lib/browser';
19-
export { MonacoEnhanceModule } from '@ali/ide-monaco-enhance/lib/browser/module';
20-
export { OpenedEditorModule } from '@ali/ide-opened-editor/lib/browser';
21-
export { OutlineModule } from '@ali/ide-outline/lib/browser';
22-
export { OutputModule } from '@ali/ide-output/lib/browser';
23-
export { OverlayModule } from '@ali/ide-overlay/lib/browser';
24-
export { PreferencesModule } from '@ali/ide-preferences/lib/browser';
25-
export { QuickOpenModule } from '@ali/ide-quick-open/lib/browser';
26-
export { SCMModule } from '@ali/ide-scm/lib/browser';
27-
export { SearchModule } from '@ali/ide-search';
28-
export { StaticResourceModule } from '@ali/ide-static-resource/lib/browser';
29-
export { StatusBarModule } from '@ali/ide-status-bar/lib/browser';
30-
export { StorageModule } from '@ali/ide-storage/lib/browser';
31-
export { ThemeModule } from '@ali/ide-theme/lib/browser';
32-
export { ToolbarModule } from '@ali/ide-toolbar/lib/browser';
33-
export { VariableModule } from '@ali/ide-variable/lib/browser';
34-
export { WebviewModule } from '@ali/ide-webview/lib/browser';
35-
export { WorkspaceModule } from '@ali/ide-workspace/lib/browser';
36-
export { WorkspaceEditModule } from '@ali/ide-workspace-edit/lib/browser';
1+
export * from '../lib/core/modules';

packages/alex/src/api/createApp.ts

Lines changed: 0 additions & 33 deletions
This file was deleted.
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
import '../core/normalize.less';
2+
import React from 'react';
3+
import { ClientApp, IAppOpts, RuntimeConfig, makeWorkspaceDir } from '@alipay/alex-core';
4+
import '@ali/ide-i18n/lib/browser';
5+
import { SlotRenderer, SlotLocation } from '@ali/ide-core-browser';
6+
import { BoxPanel, SplitPanel } from '@ali/ide-core-browser/lib/components';
7+
import {
8+
ClientModule,
9+
ServerModuleCollection,
10+
ClientCommonModule,
11+
FileServiceClientModule,
12+
MainLayoutModule,
13+
OverlayModule,
14+
LogModule,
15+
MonacoModule,
16+
ExplorerModule,
17+
EditorModule,
18+
QuickOpenModule,
19+
KeymapsModule,
20+
FileTreeNextModule,
21+
ThemeModule,
22+
WorkspaceModule,
23+
ExtensionStorageModule,
24+
StorageModule,
25+
PreferencesModule,
26+
OpenedEditorModule,
27+
DecorationModule,
28+
StaticResourceModule,
29+
WorkspaceEditModule,
30+
WebviewModule,
31+
FileSchemeModule,
32+
KaitianExtensionModule,
33+
OutlineModule,
34+
CommentsModule,
35+
StatusBarModule,
36+
MenuBarModule,
37+
} from '../core/modules';
38+
import { IconSlim, GeekTheme } from '../core/extensions';
39+
40+
export { SlotLocation, SlotRenderer, BoxPanel, SplitPanel };
41+
42+
export interface IAppConfig {
43+
/**
44+
* 应用相关配置
45+
*/
46+
appConfig?: IAppOpts | ((defaultOpts: IAppOpts) => IAppOpts);
47+
/**
48+
* 运行相关配置
49+
*/
50+
runtimeConfig?: RuntimeConfig;
51+
}
52+
53+
export const DEFAULT_APP_CONFIG: IAppOpts = {
54+
modules: [
55+
ClientCommonModule,
56+
FileServiceClientModule,
57+
MainLayoutModule,
58+
OverlayModule,
59+
LogModule,
60+
MonacoModule,
61+
ExplorerModule,
62+
EditorModule,
63+
QuickOpenModule,
64+
KeymapsModule,
65+
FileTreeNextModule,
66+
ThemeModule,
67+
WorkspaceModule,
68+
ExtensionStorageModule,
69+
StorageModule,
70+
PreferencesModule,
71+
OpenedEditorModule,
72+
DecorationModule,
73+
StaticResourceModule,
74+
WorkspaceEditModule,
75+
WebviewModule,
76+
FileSchemeModule,
77+
KaitianExtensionModule,
78+
OutlineModule,
79+
CommentsModule,
80+
StatusBarModule,
81+
MenuBarModule,
82+
ClientModule,
83+
...ServerModuleCollection,
84+
],
85+
useCdnIcon: true,
86+
noExtHost: true,
87+
extWorkerHost: __WORKER_HOST__,
88+
webviewEndpoint: __WEBVIEW_ENDPOINT__,
89+
defaultPreferences: {
90+
'general.theme': 'alipay-geek-dark',
91+
'general.icon': 'vsicons-slim',
92+
'application.confirmExit': 'never',
93+
'editor.quickSuggestionsDelay': 10,
94+
'editor.quickSuggestionsMaxCount': 50,
95+
'editor.scrollBeyondLastLine': false,
96+
'general.language': 'zh-CN',
97+
'settings.userBeforeWorkspace': true,
98+
},
99+
extensionMetadata: [IconSlim, GeekTheme],
100+
layoutComponent: () => (
101+
<BoxPanel direction="top-to-bottom">
102+
<SplitPanel overflow="hidden" id="main-horizontal" flex={1}>
103+
<SlotRenderer slot="left" defaultSize={310} minResize={204} minSize={49} />
104+
<SplitPanel id="main-vertical" minResize={300} flexGrow={1} direction="top-to-bottom">
105+
<SlotRenderer flex={2} flexGrow={1} minResize={200} slot="main" />
106+
</SplitPanel>
107+
</SplitPanel>
108+
</BoxPanel>
109+
),
110+
layoutConfig: {
111+
[SlotLocation.action]: {
112+
modules: [''],
113+
},
114+
[SlotLocation.left]: {
115+
modules: ['@ali/ide-explorer'],
116+
},
117+
[SlotLocation.main]: {
118+
modules: ['@ali/ide-editor'],
119+
},
120+
[SlotLocation.extra]: {
121+
modules: ['breadcrumb-menu'],
122+
},
123+
},
124+
};
125+
126+
export function createApp({ appConfig, runtimeConfig }: IAppConfig) {
127+
const opts =
128+
(typeof appConfig === 'function' ? appConfig(DEFAULT_APP_CONFIG) : appConfig) ??
129+
DEFAULT_APP_CONFIG;
130+
131+
if (!opts.workspaceDir) {
132+
throw new Error('请配置 workspaceDir,需确保 workspaceDir 唯一,推荐 group/repository 的形式');
133+
}
134+
opts.workspaceDir = makeWorkspaceDir(opts.workspaceDir);
135+
136+
const app = new ClientApp(opts);
137+
138+
// 基于场景的运行时数据
139+
app.injector.addProviders({
140+
token: RuntimeConfig,
141+
useValue: runtimeConfig,
142+
});
143+
144+
(window as any)[RuntimeConfig] = runtimeConfig;
145+
146+
return app;
147+
}

packages/alex/src/api/createWorkspace.tsx

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import React from 'react';
2+
import ReactDOM from 'react-dom';
3+
import { RenderedEvent, IEventBus } from '@ali/ide-core-browser';
4+
import { Deferred } from '@ali/ide-core-common';
5+
import { ClientApp } from '@alipay/alex-core';
6+
import { createApp, IAppConfig } from './createApp';
7+
import { Root } from '../core/Root';
8+
9+
export interface IRenderConfig extends IAppConfig {
10+
onLoad?(app: ClientApp): void;
11+
Landing?: React.ComponentType;
12+
}
13+
14+
export const renderApp = (domElement: HTMLElement, opts: IRenderConfig) => {
15+
ReactDOM.render(<Root status="loading" />, domElement);
16+
17+
const ready = new Deferred();
18+
const app = createApp(opts);
19+
20+
app
21+
.start((appElement) => {
22+
return new Promise((resolve) => {
23+
ReactDOM.render(<Root status="success">{appElement}</Root>, domElement, resolve);
24+
});
25+
})
26+
.then(() => {
27+
ready.resolve();
28+
})
29+
.catch((err: Error) => {
30+
ReactDOM.render(<Root status="error" errorMessage={err?.message || ''} />, domElement);
31+
ready.reject();
32+
});
33+
};

0 commit comments

Comments
 (0)