Skip to content

Commit

Permalink
feat(core): univer support override dependencies (#2050)
Browse files Browse the repository at this point in the history
* feat(core): univer support override dependencies

* fix: fix pushed dependency

* chore: upgrade redi version
  • Loading branch information
wzhudev committed Apr 23, 2024
1 parent ce029a8 commit cfad0da
Show file tree
Hide file tree
Showing 32 changed files with 196 additions and 127 deletions.
2 changes: 1 addition & 1 deletion common/shared/vite/auto-externalize-dependency-plugin.js
Expand Up @@ -11,7 +11,7 @@ exports.autoExternalizeDependency = function autoExternalizeDependency() {
'@wendellhu/redi': {
global: '@wendellhu/redi',
name: '@wendellhu/redi',
version: '0.13.0',
version: '^0.13.1',
},
'@wendellhu/redi/react-bindings': {
global: '@wendellhu/redi/react-bindings',
Expand Down
2 changes: 1 addition & 1 deletion common/storybook/package.json
Expand Up @@ -30,7 +30,7 @@
"@univerjs/core": "workspace:*",
"@univerjs/design": "workspace:*",
"@univerjs/ui": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"css-loader": "^6.10.0",
"less-loader": "^12.2.0",
"storybook": "8.0.9",
Expand Down
2 changes: 1 addition & 1 deletion examples/package.json
Expand Up @@ -37,7 +37,7 @@
"@univerjs/slides-ui": "workspace:*",
"@univerjs/ui": "workspace:*",
"@univerjs/uniscript": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"clsx": "^2.1.1",
"monaco-editor": "0.47.0",
"react": "^18.2.0",
Expand Down
4 changes: 2 additions & 2 deletions packages/core/package.json
Expand Up @@ -64,7 +64,7 @@
"build": "tsc && vite build"
},
"peerDependencies": {
"@wendellhu/redi": "0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": ">=7.0.0"
},
"dependencies": {
Expand All @@ -76,7 +76,7 @@
"devDependencies": {
"@types/numeral": "^2.0.5",
"@univerjs/shared": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": "^7.8.1",
"typescript": "^5.4.5",
"vite": "^5.2.10",
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/index.ts
Expand Up @@ -117,6 +117,7 @@ export type { IComposeInterceptors, IInterceptor, InterceptorHandler } from './c
export { composeInterceptors, createInterceptorKey, InterceptorManager } from './common/interceptor';
export { normalizeTextRuns } from './docs/data-model/apply-utils/common';
export type { PluginCtor } from './services/plugin/plugin';
export { type DependencyOverride, mergeOverrideWithDependencies } from './services/plugin/plugin-override';
export { Range } from './sheets/range';
export { Styles } from './sheets/styles';
export {
Expand Down
51 changes: 51 additions & 0 deletions packages/core/src/services/plugin/plugin-override.ts
@@ -0,0 +1,51 @@
/**
* Copyright 2023-present DreamNum Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/* eslint-disable ts/no-explicit-any */

import type { Dependency, DependencyItem, IdentifierDecorator } from '@wendellhu/redi';

/**
* Overrides the dependencies definited in the plugin. Only dependencies that are identified by `IdentifierDecorator` can be overridden.
* If you override a dependency with `null`, the original dependency will be removed.
*/
export type DependencyOverride = [identifier: IdentifierDecorator<any>, DependencyItem<any> | null][];

export function mergeOverrideWithDependencies(dependencies: Dependency[], override?: DependencyOverride): Dependency[] {
if (!override) {
return dependencies;
}

const result: Dependency[] = [];
for (const dependency of dependencies) {
if (dependency.length === 1) {
result.push(dependency);
continue;
}

const overrideItem = override.find(([identifier]) => identifier === dependency[0]);
if (overrideItem) {
if (overrideItem[1] === null) {
continue;
}
result.push([dependency[0], overrideItem[1]]);
} else {
result.push(dependency);
}
}

return result;
}
16 changes: 2 additions & 14 deletions packages/core/src/types/interfaces/i-univer-data.ts
Expand Up @@ -15,6 +15,7 @@
*/

import type { LogLevel } from '../../services/log/log.service';
import type { DependencyOverride } from '../../services/plugin/plugin-override';
import type { IStyleSheet } from '../../services/theme/theme.service';
import type { ILocales } from '../../shared/locale';
import type { LocaleType } from '../enum';
Expand All @@ -25,19 +26,6 @@ export interface IUniverData {
locales: ILocales;
logLevel: LogLevel;
id: string;
}

/**
* Toolbar Observer generic interface, convenient for plug-ins to define their own types
*/
export interface UIObserver<T = string> {
/**
* fontSize, fontFamily,color...
*/
name: string;

/**
* fontSize:number, fontFamily:string ...
*/
value?: T;
override?: DependencyOverride;
}
12 changes: 8 additions & 4 deletions packages/core/src/univer.ts
Expand Up @@ -47,6 +47,8 @@ import type { UnitModel, UnitType } from './common/unit';
import { UniverInstanceType } from './common/unit';
import { PluginService } from './services/plugin/plugin.service';
import type { Plugin, PluginCtor } from './services/plugin/plugin';
import type { DependencyOverride } from './services/plugin/plugin-override';
import { mergeOverrideWithDependencies } from './services/plugin/plugin-override';

export class Univer {
private _startedTypes = new Set<UnitType>();
Expand All @@ -66,7 +68,7 @@ export class Univer {
* @param parentInjector An optional parent injector of the Univer injector. For more information, see https://redi.wendell.fun/docs/hierarchy.
*/
constructor(config: Partial<IUniverData> = {}, parentInjector?: Injector) {
const injector = this._injector = createUniverInjector(parentInjector);
const injector = this._injector = createUniverInjector(parentInjector, config?.override);

const { theme, locale, locales, logLevel } = config;

Expand Down Expand Up @@ -159,15 +161,17 @@ export class Univer {
}
}

function createUniverInjector(parentInjector?: Injector) {
const dependencies: Dependency[] = ([
function createUniverInjector(parentInjector?: Injector, override?: DependencyOverride) {
const dependencies: Dependency[] = mergeOverrideWithDependencies([
[ErrorService],
[LocaleService],
[ThemeService],
[LifecycleService],
[LifecycleInitializerService],
[UniverPermissionService],
[PluginService],

// abstract services
[IUniverInstanceService, { useClass: UniverInstanceService }],
[IPermissionService, { useClass: PermissionService }],
[ILogService, { useClass: DesktopLogService, lazy: true }],
Expand All @@ -178,7 +182,7 @@ function createUniverInjector(parentInjector?: Injector) {
[IFloatingObjectManagerService, { useClass: FloatingObjectManagerService, lazy: true }],
[IResourceManagerService, { useClass: ResourceManagerService, lazy: true }],
[IResourceLoaderService, { useClass: ResourceLoaderService, lazy: true }],
]);
], override);

return parentInjector ? parentInjector.createChild(dependencies) : new Injector(dependencies);
}
4 changes: 2 additions & 2 deletions packages/data-validation/package.json
Expand Up @@ -64,7 +64,7 @@
"peerDependencies": {
"@univerjs/core": "workspace:*",
"@univerjs/sheets": "workspace:*",
"@wendellhu/redi": "0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": ">=7.0.0"
},
"dependencies": {
Expand All @@ -76,7 +76,7 @@
"@univerjs/protocol": "^0.1.14",
"@univerjs/shared": "workspace:*",
"@univerjs/sheets": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": "^7.8.1",
"typescript": "^5.4.5",
"vite": "^5.2.10",
Expand Down
4 changes: 2 additions & 2 deletions packages/docs-ui/package.json
Expand Up @@ -71,7 +71,7 @@
"@univerjs/docs": "workspace:*",
"@univerjs/engine-render": "workspace:*",
"@univerjs/ui": "workspace:*",
"@wendellhu/redi": "0.13.0",
"@wendellhu/redi": "^0.13.1",
"react": "^16.9.0 || ^17.0.0 || ^18.0.0",
"rxjs": ">=7.0.0"
},
Expand All @@ -83,7 +83,7 @@
"@univerjs/engine-render": "workspace:*",
"@univerjs/shared": "workspace:*",
"@univerjs/ui": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"less": "^4.2.0",
"react": "^18.2.0",
"rxjs": "^7.8.1",
Expand Down
4 changes: 2 additions & 2 deletions packages/docs/package.json
Expand Up @@ -65,14 +65,14 @@
"peerDependencies": {
"@univerjs/core": "workspace:*",
"@univerjs/engine-render": "workspace:*",
"@wendellhu/redi": "0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": ">=7.0.0"
},
"devDependencies": {
"@univerjs/core": "workspace:*",
"@univerjs/engine-render": "workspace:*",
"@univerjs/shared": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": "^7.8.1",
"typescript": "^5.4.5",
"vite": "^5.2.10",
Expand Down
4 changes: 2 additions & 2 deletions packages/engine-formula/package.json
Expand Up @@ -64,7 +64,7 @@
},
"peerDependencies": {
"@univerjs/core": "workspace:*",
"@wendellhu/redi": "0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": ">=7.0.0"
},
"dependencies": {
Expand All @@ -75,7 +75,7 @@
"@types/big.js": "^6.2.2",
"@univerjs/core": "workspace:*",
"@univerjs/shared": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": "^7.8.1",
"typescript": "^5.4.5",
"vite": "^5.2.10",
Expand Down
4 changes: 2 additions & 2 deletions packages/engine-render/package.json
Expand Up @@ -64,7 +64,7 @@
},
"peerDependencies": {
"@univerjs/core": "workspace:*",
"@wendellhu/redi": "0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": ">=7.0.0"
},
"dependencies": {
Expand All @@ -75,7 +75,7 @@
"@types/opentype.js": "^1.3.8",
"@univerjs/core": "workspace:*",
"@univerjs/shared": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": "^7.8.1",
"typescript": "^5.4.5",
"vite": "^5.2.10",
Expand Down
4 changes: 2 additions & 2 deletions packages/facade/package.json
Expand Up @@ -71,7 +71,7 @@
"@univerjs/sheets-formula": "workspace:*",
"@univerjs/sheets-numfmt": "workspace:*",
"@univerjs/sheets-ui": "workspace:*",
"@wendellhu/redi": "0.13.0"
"@wendellhu/redi": "^0.13.1"
},
"devDependencies": {
"@univerjs/core": "workspace:*",
Expand All @@ -86,7 +86,7 @@
"@univerjs/sheets-numfmt": "workspace:*",
"@univerjs/sheets-ui": "workspace:*",
"@univerjs/ui": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"jsdom": "^24.0.0",
"rxjs": "^7.8.1",
"typescript": "^5.4.5",
Expand Down
4 changes: 2 additions & 2 deletions packages/find-replace/package.json
Expand Up @@ -70,7 +70,7 @@
"@univerjs/design": "workspace:*",
"@univerjs/engine-render": "workspace:*",
"@univerjs/ui": "workspace:*",
"@wendellhu/redi": "0.13.0",
"@wendellhu/redi": "^0.13.1",
"react": "^16.9.0 || ^17.0.0 || ^18.0.0",
"rxjs": ">=7.0.0"
},
Expand All @@ -85,7 +85,7 @@
"@univerjs/engine-render": "workspace:*",
"@univerjs/shared": "workspace:*",
"@univerjs/ui": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"less": "^4.2.0",
"react": "^18.2.0",
"rxjs": "^7.8.1",
Expand Down
4 changes: 2 additions & 2 deletions packages/image/package.json
Expand Up @@ -63,7 +63,7 @@
"peerDependencies": {
"@univerjs/core": "workspace:*",
"@univerjs/engine-render": "workspace:*",
"@wendellhu/redi": "0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": ">=7.0.0"
},
"dependencies": {
Expand All @@ -76,7 +76,7 @@
"@univerjs/shared": "workspace:*",
"@univerjs/sheets": "workspace:*",
"@univerjs/ui": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"less": "^4.2.0",
"react": "^18.2.0",
"rxjs": "^7.8.1",
Expand Down
4 changes: 2 additions & 2 deletions packages/network/package.json
Expand Up @@ -63,13 +63,13 @@
},
"peerDependencies": {
"@univerjs/core": "workspace:*",
"@wendellhu/redi": "0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": ">=7.0.0"
},
"devDependencies": {
"@univerjs/core": "workspace:*",
"@univerjs/shared": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": "^7.8.1",
"typescript": "^5.4.5",
"vite": "^5.2.10",
Expand Down
4 changes: 2 additions & 2 deletions packages/rpc/package.json
Expand Up @@ -60,13 +60,13 @@
},
"peerDependencies": {
"@univerjs/core": "workspace:*",
"@wendellhu/redi": "0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": ">=7.0.0"
},
"devDependencies": {
"@univerjs/core": "workspace:*",
"@univerjs/shared": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": "^7.8.1",
"typescript": "^5.4.5",
"vite": "^5.2.10",
Expand Down
4 changes: 2 additions & 2 deletions packages/sheets-conditional-formatting-ui/package.json
Expand Up @@ -74,7 +74,7 @@
"@univerjs/sheets-conditional-formatting": "workspace:*",
"@univerjs/sheets-ui": "workspace:*",
"@univerjs/ui": "workspace:*",
"@wendellhu/redi": "0.13.0",
"@wendellhu/redi": "^0.13.1",
"clsx": ">=2.0.0",
"react": "^16.9.0 || ^17.0.0 || ^18.0.0",
"react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0",
Expand All @@ -101,7 +101,7 @@
"@univerjs/sheets": "workspace:*",
"@univerjs/sheets-ui": "workspace:*",
"@univerjs/ui": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"clsx": "^2.1.1",
"less": "^4.2.0",
"react": "^18.2.0",
Expand Down
4 changes: 2 additions & 2 deletions packages/sheets-conditional-formatting/package.json
Expand Up @@ -68,7 +68,7 @@
"@univerjs/engine-formula": "workspace:*",
"@univerjs/engine-render": "workspace:*",
"@univerjs/sheets": "workspace:*",
"@wendellhu/redi": "0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": ">=7.0.0"
},
"dependencies": {
Expand All @@ -82,7 +82,7 @@
"@univerjs/icons-svg": "^0.1.44",
"@univerjs/shared": "workspace:*",
"@univerjs/sheets": "workspace:*",
"@wendellhu/redi": "^0.13.0",
"@wendellhu/redi": "^0.13.1",
"rxjs": "^7.8.1",
"sharp": "^0.33.3",
"typescript": "^5.4.5",
Expand Down

0 comments on commit cfad0da

Please sign in to comment.