微调了web/initialize的返回格式,在DebugConnector中和backend一样尝试去处理未知的异常
This commit is contained in:
parent
7b66a8d6aa
commit
19b6525049
|
|
@ -19,6 +19,6 @@ export declare abstract class FrontendRuntimeContext<ED extends EntityDict & Bas
|
|||
env: Environment;
|
||||
navigator: Navigator;
|
||||
constructor(store: SyncRowStore<ED, FrontendRuntimeContext<ED>>, features: BasicFeatures<ED>);
|
||||
protected getSerializedData(allowPartial?: boolean): Promise<SerializedData>;
|
||||
protected getSerializedData(): Promise<SerializedData>;
|
||||
}
|
||||
export default FrontendRuntimeContext;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ export class FrontendRuntimeContext extends SyncContext {
|
|||
this.env = features.environment;
|
||||
this.navigator = features.navigator;
|
||||
}
|
||||
async getSerializedData(allowPartial) {
|
||||
async getSerializedData() {
|
||||
const sid = this.subscriber.getSubscriberId();
|
||||
const be = this.env.getBriefEnv();
|
||||
const ns = this.navigator.getState();
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import { BackendRuntimeContext } from './context/BackendRuntimeContext';
|
|||
* @param actionDict
|
||||
* @returns
|
||||
*/
|
||||
export declare function initialize<ED extends EntityDict & BaseEntityDict, Cxt extends BackendRuntimeContext<ED>, FrontCxt extends FrontendRuntimeContext<ED>>(storageSchema: StorageSchema<ED>, frontendContextBuilder: (store: CacheStore<ED>, allowPartial?: boolean) => FrontCxt, connector: Connector<ED, FrontCxt>, checkers: Array<Checker<ED, keyof ED, Cxt | FrontCxt>>, common: CommonConfiguration<ED>, render: RenderConfiguration<ED>): {
|
||||
export declare function initialize<ED extends EntityDict & BaseEntityDict, Cxt extends BackendRuntimeContext<ED>, FrontCxt extends FrontendRuntimeContext<ED>>(storageSchema: StorageSchema<ED>, frontendContextBuilder: (store: CacheStore<ED>) => FrontCxt, connector: Connector<ED, FrontCxt>, checkers: Array<Checker<ED, keyof ED, Cxt | FrontCxt>>, common: CommonConfiguration<ED>, render: RenderConfiguration<ED>): {
|
||||
features: {
|
||||
location: import("./features/location").Location;
|
||||
environment: import("./features/environment").Environment;
|
||||
|
|
|
|||
|
|
@ -58,7 +58,6 @@ function Error(props) {
|
|||
</ErrorPage>);
|
||||
}
|
||||
return (<ErrorPage code={ECode.error} title={locales.t('error::error.title')} desc={locales.t('error::error.content')}>
|
||||
<ErrorMessage error={error}/>
|
||||
<Button type="primary" onClick={async () => {
|
||||
await features.localStorage.clear();
|
||||
window.location.reload();
|
||||
|
|
@ -70,6 +69,7 @@ function Error(props) {
|
|||
function ErrorMessage(props) {
|
||||
const { error } = props;
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
const {} = error;
|
||||
return (<span style={{
|
||||
marginBottom: 24,
|
||||
color: 'red',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import React from 'react';
|
||||
import { Locale as AntdLocale } from 'antd/lib/locale';
|
||||
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
|
||||
import { BasicFeatures } from '../../../features';
|
||||
|
|
@ -6,4 +7,4 @@ import { IRouter } from '../router/types';
|
|||
export default function initialize<ED extends BaseEntityDict>(features: BasicFeatures<ED>, appName: string, routers: IRouter[], locales?: {
|
||||
dayJs?: string;
|
||||
antd?: AntdLocale;
|
||||
}, error?: any): void;
|
||||
}, error?: any, format?: 'react'): React.JSX.Element | undefined;
|
||||
|
|
|
|||
|
|
@ -5,45 +5,49 @@ import { createBrowserHistory } from 'history';
|
|||
import { unstable_HistoryRouter as HistoryRouter } from 'react-router-dom';
|
||||
import { ConfigProvider } from 'antd';
|
||||
import { StyleProvider, legacyLogicalPropertiesTransformer } from '@ant-design/cssinjs';
|
||||
import dayjs from 'dayjs';
|
||||
import { ResponsiveProvider } from '../responsive';
|
||||
import { FeaturesProvider } from '../features';
|
||||
import AppError from './AppError';
|
||||
import AppContainer from './AppContainer';
|
||||
import AppRouter from './AppRouter';
|
||||
import { autoFixContext } from 'react-activation';
|
||||
// import { AliveScope, autoFixContext } from 'react-activation'
|
||||
import dayjs from 'dayjs';
|
||||
import 'dayjs/locale/zh-cn';
|
||||
import zhCN from 'antd/locale/zh_CN';
|
||||
import enUS from 'antd/locale/en_US';
|
||||
autoFixContext([require('react/jsx-runtime'), 'jsx', 'jsxs', 'jsxDEV'], [require('react/jsx-dev-runtime'), 'jsx', 'jsxs', 'jsxDEV']);
|
||||
export default function initialize(features, appName, routers, locales, error) {
|
||||
const root = ReactDOM.createRoot(document.getElementById('root'));
|
||||
/* autoFixContext(
|
||||
[require('react/jsx-runtime'), 'jsx', 'jsxs', 'jsxDEV'],
|
||||
[require('react/jsx-dev-runtime'), 'jsx', 'jsxs', 'jsxDEV']
|
||||
) */
|
||||
export default function initialize(features, appName, routers, locales, error, format) {
|
||||
const history = createBrowserHistory();
|
||||
features.navigator.setHistory(history);
|
||||
if (error) {
|
||||
root.render(<HistoryRouter history={history}>
|
||||
<AppError error={error} features={features}/>
|
||||
</HistoryRouter>);
|
||||
const { language } = window.navigator;
|
||||
dayjs.locale(locales?.dayJs || ['zh-CN', 'zh_CN'].includes(language) ? 'zh-cn' : 'en-us');
|
||||
const Main = error ? (<HistoryRouter history={history}>
|
||||
<AppError error={error} features={features}/>
|
||||
</HistoryRouter>) : (<HistoryRouter history={history}>
|
||||
<ResponsiveProvider>
|
||||
<FeaturesProvider features={features}>
|
||||
<ConfigProvider locale={locales?.dayJs || ['zh-CN', 'zh_CN'].includes(language) ? zhCN : enUS} theme={{
|
||||
cssVar: {
|
||||
prefix: 'adm', // 和antd-mobile共享
|
||||
}
|
||||
}}>
|
||||
<StyleProvider hashPriority="high" transformers={[legacyLogicalPropertiesTransformer]}>
|
||||
<AppContainer>
|
||||
<AppRouter features={features} appName={appName} routers={routers}/>
|
||||
</AppContainer>
|
||||
</StyleProvider>
|
||||
</ConfigProvider>
|
||||
</FeaturesProvider>
|
||||
</ResponsiveProvider>
|
||||
</HistoryRouter>);
|
||||
if (format) {
|
||||
return Main;
|
||||
}
|
||||
else {
|
||||
const { language } = window.navigator;
|
||||
dayjs.locale(locales?.dayJs || ['zh-CN', 'zh_CN'].includes(language) ? 'zh-cn' : 'en-us');
|
||||
root.render(<HistoryRouter history={history}>
|
||||
<ResponsiveProvider>
|
||||
<FeaturesProvider features={features}>
|
||||
<ConfigProvider locale={locales?.dayJs || ['zh-CN', 'zh_CN'].includes(language) ? zhCN : enUS} theme={{
|
||||
cssVar: {
|
||||
prefix: 'adm', // 和antd-mobile共享
|
||||
}
|
||||
}}>
|
||||
<StyleProvider hashPriority="high" transformers={[legacyLogicalPropertiesTransformer]}>
|
||||
<AppContainer>
|
||||
<AppRouter features={features} appName={appName} routers={routers}/>
|
||||
</AppContainer>
|
||||
</StyleProvider>
|
||||
</ConfigProvider>
|
||||
</FeaturesProvider>
|
||||
</ResponsiveProvider>
|
||||
</HistoryRouter>);
|
||||
const root = ReactDOM.createRoot(document.getElementById('root'));
|
||||
root.render(Main);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
import assert from 'assert';
|
||||
import { OakException } from "oak-domain/lib/types";
|
||||
import { createDebugStore } from '../debugStore';
|
||||
import { cloneDeep, mergeConcatArray } from "oak-domain/lib/utils/lodash";
|
||||
import commonAspectDict, { registerPorts } from 'oak-common-aspect';
|
||||
|
|
@ -45,6 +46,15 @@ export default class DebugConnector {
|
|||
}
|
||||
catch (err) {
|
||||
await contextBackend.rollback();
|
||||
if (err instanceof OakException) {
|
||||
throw err;
|
||||
}
|
||||
if (err instanceof Error) {
|
||||
const exception = await contextBackend.tryDeduceException(err);
|
||||
if (exception) {
|
||||
throw exception;
|
||||
}
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,6 +19,6 @@ export declare abstract class FrontendRuntimeContext<ED extends EntityDict & Bas
|
|||
env: Environment;
|
||||
navigator: Navigator;
|
||||
constructor(store: SyncRowStore<ED, FrontendRuntimeContext<ED>>, features: BasicFeatures<ED>);
|
||||
protected getSerializedData(allowPartial?: boolean): Promise<SerializedData>;
|
||||
protected getSerializedData(): Promise<SerializedData>;
|
||||
}
|
||||
export default FrontendRuntimeContext;
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ class FrontendRuntimeContext extends SyncRowStore_1.SyncContext {
|
|||
this.env = features.environment;
|
||||
this.navigator = features.navigator;
|
||||
}
|
||||
async getSerializedData(allowPartial) {
|
||||
async getSerializedData() {
|
||||
const sid = this.subscriber.getSubscriberId();
|
||||
const be = this.env.getBriefEnv();
|
||||
const ns = this.navigator.getState();
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import { BackendRuntimeContext } from './context/BackendRuntimeContext';
|
|||
* @param actionDict
|
||||
* @returns
|
||||
*/
|
||||
export declare function initialize<ED extends EntityDict & BaseEntityDict, Cxt extends BackendRuntimeContext<ED>, FrontCxt extends FrontendRuntimeContext<ED>>(storageSchema: StorageSchema<ED>, frontendContextBuilder: (store: CacheStore<ED>, allowPartial?: boolean) => FrontCxt, connector: Connector<ED, FrontCxt>, checkers: Array<Checker<ED, keyof ED, Cxt | FrontCxt>>, common: CommonConfiguration<ED>, render: RenderConfiguration<ED>): {
|
||||
export declare function initialize<ED extends EntityDict & BaseEntityDict, Cxt extends BackendRuntimeContext<ED>, FrontCxt extends FrontendRuntimeContext<ED>>(storageSchema: StorageSchema<ED>, frontendContextBuilder: (store: CacheStore<ED>) => FrontCxt, connector: Connector<ED, FrontCxt>, checkers: Array<Checker<ED, keyof ED, Cxt | FrontCxt>>, common: CommonConfiguration<ED>, render: RenderConfiguration<ED>): {
|
||||
features: {
|
||||
location: import("./features/location").Location;
|
||||
environment: import("./features/environment").Environment;
|
||||
|
|
|
|||
|
|
@ -68,14 +68,15 @@ function Error(props) {
|
|||
'#oakModule': "oak-frontend-base"
|
||||
}) })] }));
|
||||
}
|
||||
return ((0, jsx_runtime_1.jsxs)(ErrorPage, { code: ErrorPage_1.ECode.error, title: locales.t('error::error.title'), desc: locales.t('error::error.content'), children: [(0, jsx_runtime_1.jsx)(ErrorMessage, { error: error }), (0, jsx_runtime_1.jsx)(antd_1.Button, { type: "primary", onClick: async () => {
|
||||
await features.localStorage.clear();
|
||||
window.location.reload();
|
||||
}, children: locales.t('clearCache') })] }));
|
||||
return ((0, jsx_runtime_1.jsx)(ErrorPage, { code: ErrorPage_1.ECode.error, title: locales.t('error::error.title'), desc: locales.t('error::error.content'), children: (0, jsx_runtime_1.jsx)(antd_1.Button, { type: "primary", onClick: async () => {
|
||||
await features.localStorage.clear();
|
||||
window.location.reload();
|
||||
}, children: locales.t('clearCache') }) }));
|
||||
}
|
||||
function ErrorMessage(props) {
|
||||
const { error } = props;
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
const {} = error;
|
||||
return ((0, jsx_runtime_1.jsx)("span", { style: {
|
||||
marginBottom: 24,
|
||||
color: 'red',
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import React from 'react';
|
||||
import { Locale as AntdLocale } from 'antd/lib/locale';
|
||||
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
|
||||
import { BasicFeatures } from '../../../features';
|
||||
|
|
@ -6,4 +7,4 @@ import { IRouter } from '../router/types';
|
|||
export default function initialize<ED extends BaseEntityDict>(features: BasicFeatures<ED>, appName: string, routers: IRouter[], locales?: {
|
||||
dayJs?: string;
|
||||
antd?: AntdLocale;
|
||||
}, error?: any): void;
|
||||
}, error?: any, format?: 'react'): React.JSX.Element | undefined;
|
||||
|
|
|
|||
|
|
@ -7,32 +7,33 @@ const history_1 = require("history");
|
|||
const react_router_dom_1 = require("react-router-dom");
|
||||
const antd_1 = require("antd");
|
||||
const cssinjs_1 = require("@ant-design/cssinjs");
|
||||
const dayjs_1 = tslib_1.__importDefault(require("dayjs"));
|
||||
const responsive_1 = require("../responsive");
|
||||
const features_1 = require("../features");
|
||||
const AppError_1 = tslib_1.__importDefault(require("./AppError"));
|
||||
const AppContainer_1 = tslib_1.__importDefault(require("./AppContainer"));
|
||||
const AppRouter_1 = tslib_1.__importDefault(require("./AppRouter"));
|
||||
const react_activation_1 = require("react-activation");
|
||||
// import { AliveScope, autoFixContext } from 'react-activation'
|
||||
require("dayjs/locale/zh-cn");
|
||||
const zh_CN_1 = tslib_1.__importDefault(require("antd/locale/zh_CN"));
|
||||
const en_US_1 = tslib_1.__importDefault(require("antd/locale/en_US"));
|
||||
(0, react_activation_1.autoFixContext)([require('react/jsx-runtime'), 'jsx', 'jsxs', 'jsxDEV'], [require('react/jsx-dev-runtime'), 'jsx', 'jsxs', 'jsxDEV']);
|
||||
function initialize(features, appName, routers, locales, error) {
|
||||
const root = client_1.default.createRoot(document.getElementById('root'));
|
||||
/* autoFixContext(
|
||||
[require('react/jsx-runtime'), 'jsx', 'jsxs', 'jsxDEV'],
|
||||
[require('react/jsx-dev-runtime'), 'jsx', 'jsxs', 'jsxDEV']
|
||||
) */
|
||||
function initialize(features, appName, routers, locales, error, format) {
|
||||
const history = (0, history_1.createBrowserHistory)();
|
||||
features.navigator.setHistory(history);
|
||||
if (error) {
|
||||
root.render((0, jsx_runtime_1.jsx)(react_router_dom_1.unstable_HistoryRouter, { history: history, children: (0, jsx_runtime_1.jsx)(AppError_1.default, { error: error, features: features }) }));
|
||||
const Main = error ? ((0, jsx_runtime_1.jsx)(react_router_dom_1.unstable_HistoryRouter, { history: history, children: (0, jsx_runtime_1.jsx)(AppError_1.default, { error: error, features: features }) })) : ((0, jsx_runtime_1.jsx)(react_router_dom_1.unstable_HistoryRouter, { history: history, children: (0, jsx_runtime_1.jsx)(responsive_1.ResponsiveProvider, { children: (0, jsx_runtime_1.jsx)(features_1.FeaturesProvider, { features: features, children: (0, jsx_runtime_1.jsx)(antd_1.ConfigProvider, { locale: locales?.dayJs || ['zh-CN', 'zh_CN'].includes(language) ? zh_CN_1.default : en_US_1.default, theme: {
|
||||
cssVar: {
|
||||
prefix: 'adm', // 和antd-mobile共享
|
||||
}
|
||||
}, children: (0, jsx_runtime_1.jsx)(cssinjs_1.StyleProvider, { hashPriority: "high", transformers: [cssinjs_1.legacyLogicalPropertiesTransformer], children: (0, jsx_runtime_1.jsx)(AppContainer_1.default, { children: (0, jsx_runtime_1.jsx)(AppRouter_1.default, { features: features, appName: appName, routers: routers }) }) }) }) }) }) }));
|
||||
if (format) {
|
||||
return Main;
|
||||
}
|
||||
else {
|
||||
const { language } = window.navigator;
|
||||
dayjs_1.default.locale(locales?.dayJs || ['zh-CN', 'zh_CN'].includes(language) ? 'zh-cn' : 'en-us');
|
||||
root.render((0, jsx_runtime_1.jsx)(react_router_dom_1.unstable_HistoryRouter, { history: history, children: (0, jsx_runtime_1.jsx)(responsive_1.ResponsiveProvider, { children: (0, jsx_runtime_1.jsx)(features_1.FeaturesProvider, { features: features, children: (0, jsx_runtime_1.jsx)(antd_1.ConfigProvider, { locale: locales?.dayJs || ['zh-CN', 'zh_CN'].includes(language) ? zh_CN_1.default : en_US_1.default, theme: {
|
||||
cssVar: {
|
||||
prefix: 'adm', // 和antd-mobile共享
|
||||
}
|
||||
}, children: (0, jsx_runtime_1.jsx)(cssinjs_1.StyleProvider, { hashPriority: "high", transformers: [cssinjs_1.legacyLogicalPropertiesTransformer], children: (0, jsx_runtime_1.jsx)(AppContainer_1.default, { children: (0, jsx_runtime_1.jsx)(AppRouter_1.default, { features: features, appName: appName, routers: routers }) }) }) }) }) }) }));
|
||||
const root = client_1.default.createRoot(document.getElementById('root'));
|
||||
root.render(Main);
|
||||
}
|
||||
}
|
||||
exports.default = initialize;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const tslib_1 = require("tslib");
|
||||
const assert_1 = tslib_1.__importDefault(require("assert"));
|
||||
const types_1 = require("oak-domain/lib/types");
|
||||
const debugStore_1 = require("../debugStore");
|
||||
const lodash_1 = require("oak-domain/lib/utils/lodash");
|
||||
const oak_common_aspect_1 = tslib_1.__importStar(require("oak-common-aspect"));
|
||||
|
|
@ -48,6 +49,15 @@ class DebugConnector {
|
|||
}
|
||||
catch (err) {
|
||||
await contextBackend.rollback();
|
||||
if (err instanceof types_1.OakException) {
|
||||
throw err;
|
||||
}
|
||||
if (err instanceof Error) {
|
||||
const exception = await contextBackend.tryDeduceException(err);
|
||||
if (exception) {
|
||||
throw exception;
|
||||
}
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,17 +14,17 @@ import { BasicFeatures } from '../../../features';
|
|||
import AppError from './AppError';
|
||||
import AppContainer from './AppContainer';
|
||||
import AppRouter from './AppRouter';
|
||||
import { AliveScope, autoFixContext } from 'react-activation'
|
||||
// import { AliveScope, autoFixContext } from 'react-activation'
|
||||
|
||||
import 'dayjs/locale/zh-cn';
|
||||
import zhCN from 'antd/locale/zh_CN';
|
||||
import enUS from 'antd/locale/en_US';
|
||||
import { IRouter } from '../router/types';
|
||||
|
||||
autoFixContext(
|
||||
/* autoFixContext(
|
||||
[require('react/jsx-runtime'), 'jsx', 'jsxs', 'jsxDEV'],
|
||||
[require('react/jsx-dev-runtime'), 'jsx', 'jsxs', 'jsxDEV']
|
||||
)
|
||||
) */
|
||||
|
||||
export default function initialize<ED extends BaseEntityDict>(
|
||||
features: BasicFeatures<ED>,
|
||||
|
|
@ -34,56 +34,59 @@ export default function initialize<ED extends BaseEntityDict>(
|
|||
dayJs?: string;
|
||||
antd?: AntdLocale;
|
||||
},
|
||||
error?: any
|
||||
) {
|
||||
const root = ReactDOM.createRoot(
|
||||
document.getElementById('root') as HTMLElement
|
||||
);
|
||||
|
||||
error?: any,
|
||||
format?: 'react'
|
||||
): React.JSX.Element | undefined {
|
||||
const history = createBrowserHistory();
|
||||
features.navigator.setHistory(history);
|
||||
const { language } = window.navigator;
|
||||
dayjs.locale(locales?.dayJs || ['zh-CN', 'zh_CN'].includes(language) ? 'zh-cn' : 'en-us');
|
||||
|
||||
if (error) {
|
||||
root.render(
|
||||
<HistoryRouter history={history as any}>
|
||||
<AppError
|
||||
error={error}
|
||||
features={features}
|
||||
/>
|
||||
</HistoryRouter>
|
||||
);
|
||||
const Main = error ? (
|
||||
<HistoryRouter history={history as any}>
|
||||
<AppError
|
||||
error={error}
|
||||
features={features}
|
||||
/>
|
||||
</HistoryRouter>
|
||||
) : (
|
||||
<HistoryRouter history={history as any}>
|
||||
<ResponsiveProvider>
|
||||
<FeaturesProvider features={features}>
|
||||
<ConfigProvider
|
||||
locale={locales?.dayJs || ['zh-CN', 'zh_CN'].includes(language) ? zhCN : enUS}
|
||||
theme={{
|
||||
cssVar: {
|
||||
prefix: 'adm', // 和antd-mobile共享
|
||||
}
|
||||
}}
|
||||
>
|
||||
<StyleProvider
|
||||
hashPriority="high"
|
||||
transformers={[legacyLogicalPropertiesTransformer]}
|
||||
>
|
||||
<AppContainer>
|
||||
<AppRouter
|
||||
features={features}
|
||||
appName={appName}
|
||||
routers={routers}
|
||||
/>
|
||||
</AppContainer>
|
||||
</StyleProvider>
|
||||
</ConfigProvider>
|
||||
</FeaturesProvider>
|
||||
</ResponsiveProvider>
|
||||
</HistoryRouter>
|
||||
);
|
||||
|
||||
if (format) {
|
||||
return Main;
|
||||
}
|
||||
else {
|
||||
const { language } = window.navigator;
|
||||
dayjs.locale(locales?.dayJs || ['zh-CN', 'zh_CN'].includes(language) ? 'zh-cn' : 'en-us');
|
||||
root.render(
|
||||
<HistoryRouter history={history as any}>
|
||||
<ResponsiveProvider>
|
||||
<FeaturesProvider features={features}>
|
||||
<ConfigProvider
|
||||
locale={locales?.dayJs || ['zh-CN', 'zh_CN'].includes(language) ? zhCN : enUS}
|
||||
theme={{
|
||||
cssVar: {
|
||||
prefix: 'adm', // 和antd-mobile共享
|
||||
}
|
||||
}}
|
||||
>
|
||||
<StyleProvider
|
||||
hashPriority="high"
|
||||
transformers={[legacyLogicalPropertiesTransformer]}
|
||||
>
|
||||
<AppContainer>
|
||||
<AppRouter
|
||||
features={features}
|
||||
appName={appName}
|
||||
routers={routers}
|
||||
/>
|
||||
</AppContainer>
|
||||
</StyleProvider>
|
||||
</ConfigProvider>
|
||||
</FeaturesProvider>
|
||||
</ResponsiveProvider>
|
||||
</HistoryRouter>
|
||||
const root = ReactDOM.createRoot(
|
||||
document.getElementById('root') as HTMLElement
|
||||
);
|
||||
|
||||
root.render(Main);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
import assert from 'assert';
|
||||
import {
|
||||
Checker, Trigger, StorageSchema, EntityDict, Watcher, Routine, Timer, Aspect
|
||||
Checker, Trigger, StorageSchema, EntityDict, Watcher, Routine, Timer, Aspect,
|
||||
OakException
|
||||
} from "oak-domain/lib/types";
|
||||
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
|
||||
|
||||
|
|
@ -76,6 +77,15 @@ export default class DebugConnector<ED extends EntityDict & BaseEntityDict, Cxt
|
|||
};
|
||||
} catch (err) {
|
||||
await contextBackend.rollback();
|
||||
if (err instanceof OakException) {
|
||||
throw err;
|
||||
}
|
||||
if (err instanceof Error) {
|
||||
const exception = await contextBackend.tryDeduceException(err);
|
||||
if (exception) {
|
||||
throw exception;
|
||||
}
|
||||
}
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue