feat: assets.components support reference field (#1355)

* feat: 资产包协议兼容低代码组件物料
This commit is contained in:
wangwei 2022-12-13 10:31:44 +08:00 committed by GitHub
parent de3443a9dc
commit f9dcbaf618
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 118 additions and 12 deletions

View File

@ -18,6 +18,7 @@ import { globalLocale } from './intl';
import Preference from './utils/preference';
import { obx } from './utils';
import { AssetsJson, AssetLoader } from '@alilc/lowcode-utils';
import { assetsTransform } from './utils/assets-transform';
EventEmitter.defaultMaxListeners = 100;
@ -124,7 +125,8 @@ export class Editor extends (EventEmitter as any) implements IEditor {
);
}
}
this.context.set('assets', assets);
const innerAssets = assetsTransform(assets);
this.context.set('assets', innerAssets);
this.notifyGot('assets');
}
@ -145,7 +147,7 @@ export class Editor extends (EventEmitter as any) implements IEditor {
const x = this.context.get(keyOrType);
if (x !== undefined) {
fn(x);
return () => {};
return () => { };
} else {
this.setWait(keyOrType, fn);
return () => {
@ -169,7 +171,7 @@ export class Editor extends (EventEmitter as any) implements IEditor {
const { hooks = [], lifeCycles } = this.config;
this.emit('editor.beforeInit');
const init = (lifeCycles && lifeCycles.init) || ((): void => {});
const init = (lifeCycles && lifeCycles.init) || ((): void => { });
try {
await init(this);
@ -231,11 +233,11 @@ export class Editor extends (EventEmitter as any) implements IEditor {
/* eslint-disable */
private waits = new Map<
KeyType,
Array<{
once?: boolean;
resolve: (data: any) => void;
}>
KeyType,
Array<{
once?: boolean;
resolve: (data: any) => void;
}>
>();
/* eslint-enable */

View File

@ -0,0 +1,26 @@
import { AssetsJson, ComponentDescription } from '@alilc/lowcode-types';
export function assetsTransform(assets: AssetsJson) {
const { components, packages } = assets;
const packageMaps = (packages || []).reduce((acc, cur) => {
const key = (cur.id || cur.package) as string;
acc[key] = cur;
return acc;
}, {} as any);
components.forEach((componentDesc) => {
let { devMode, schema, reference } = componentDesc as ComponentDescription;
if ((devMode as string) === 'lowcode') {
devMode = 'lowCode';
} else if (devMode === 'proCode') {
devMode = 'proCode';
}
if (devMode) {
(componentDesc as ComponentDescription).devMode = devMode;
}
if (devMode === 'lowCode' && !schema && reference) {
(componentDesc as ComponentDescription).schema = packageMaps[reference.id as string].schema;
}
});
return assets;
}

View File

@ -1,5 +1,7 @@
import { Snippet, ComponentMetadata } from './metadata';
import { I18nData } from './i18n';
import { Reference } from './npm';
import { EitherOr } from './utils';
export interface AssetItem {
type: AssetType;
@ -103,11 +105,15 @@ export interface ComponentSort {
* external
*
*/
export interface Package {
export type Package = EitherOr<{
/**
*
* npm
*/
package: string;
/**
*
*/
id: string;
/**
*
*/
@ -142,7 +148,7 @@ export interface Package {
* window[exportName] Object
*/
exportName?: string;
}
}, 'package', 'id'>;
/**
*
@ -208,6 +214,10 @@ export interface ComponentDescription extends ComponentMetadata {
* @todo @jinchan
*/
keywords: string[];
/**
* npm
*/
reference?: Reference;
}
/**

View File

@ -1,4 +1,4 @@
import { EitherOr } from './utils';
/**
* npm
*/
@ -33,6 +33,40 @@ export interface NpmInfo {
main?: string;
}
/**
* Npm
*/
export type Reference = EitherOr<{
/**
* id
*/
id: string;
/**
*
*/
package: string;
/**
*
*/
exportName: string;
/**
* exportName
*/
subName: string;
/**
*
*/
main?: string;
/**
*
*/
destructuring?: boolean;
/**
*
*/
version: string;
}, 'package', 'id'>;
export interface LowCodeComponentType {
/**
*

View File

@ -15,3 +15,37 @@ export type ExternalUtils = {
export type UtilItem = InternalUtils | ExternalUtils;
export type UtilsMap = UtilItem[];
type FilterOptional<T> = Pick<
T,
Exclude<
{
[K in keyof T]: T extends Record<K, T[K]> ? K : never;
}[keyof T],
undefined
>
>;
type FilterNotOptional<T> = Pick<
T,
Exclude<
{
[K in keyof T]: T extends Record<K, T[K]> ? never : K;
}[keyof T],
undefined
>
>;
type PartialEither<T, K extends keyof any> = { [P in Exclude<keyof FilterOptional<T>, K>]-?: T[P] } &
{ [P in Exclude<keyof FilterNotOptional<T>, K>]?: T[P] } &
{ [P in Extract<keyof T, K>]?: undefined };
type Object = {
[name: string]: any;
};
export type EitherOr<O extends Object, L extends string, R extends string> =
(
PartialEither<Pick<O, L | R>, L> |
PartialEither<Pick<O, L | R>, R>
) & Omit<O, L | R>;