mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-01-25 11:28:18 +00:00
feat: 🎸 add node type mapping config for jsx plugin
This commit is contained in:
parent
e0eacbf318
commit
19a51b8d1e
@ -12,16 +12,18 @@ import { REACT_CHUNK_NAME } from './const';
|
|||||||
import { createReactNodeGenerator } from '../../../utils/nodeToJSX';
|
import { createReactNodeGenerator } from '../../../utils/nodeToJSX';
|
||||||
|
|
||||||
type PluginConfig = {
|
type PluginConfig = {
|
||||||
fileType: string;
|
fileType?: string;
|
||||||
|
nodeTypeMapping?: Record<string, string>;
|
||||||
}
|
}
|
||||||
|
|
||||||
const pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {
|
const pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {
|
||||||
const cfg: PluginConfig = {
|
const cfg = {
|
||||||
fileType: FileType.JSX,
|
fileType: FileType.JSX,
|
||||||
|
nodeTypeMapping: {},
|
||||||
...config,
|
...config,
|
||||||
};
|
};
|
||||||
|
|
||||||
const generator = createReactNodeGenerator();
|
const generator = createReactNodeGenerator({ nodeTypeMapping: cfg.nodeTypeMapping });
|
||||||
|
|
||||||
const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {
|
const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {
|
||||||
const next: ICodeStruct = {
|
const next: ICodeStruct = {
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import { createProjectBuilder } from '../generator/ProjectBuilder';
|
|||||||
import esmodule from '../plugins/common/esmodule';
|
import esmodule from '../plugins/common/esmodule';
|
||||||
import containerClass from '../plugins/component/react/containerClass';
|
import containerClass from '../plugins/component/react/containerClass';
|
||||||
import containerInitState from '../plugins/component/react/containerInitState';
|
import containerInitState from '../plugins/component/react/containerInitState';
|
||||||
import containerInjectUtils from '../plugins/component/react/containerInjectUtils';
|
// import containerInjectUtils from '../plugins/component/react/containerInjectUtils';
|
||||||
import containerLifeCycle from '../plugins/component/react/containerLifeCycle';
|
import containerLifeCycle from '../plugins/component/react/containerLifeCycle';
|
||||||
import containerMethod from '../plugins/component/react/containerMethod';
|
import containerMethod from '../plugins/component/react/containerMethod';
|
||||||
import jsx from '../plugins/component/react/jsx';
|
import jsx from '../plugins/component/react/jsx';
|
||||||
@ -29,11 +29,18 @@ export default function createIceJsProjectBuilder(): IProjectBuilder {
|
|||||||
fileType: 'jsx',
|
fileType: 'jsx',
|
||||||
}),
|
}),
|
||||||
containerClass(),
|
containerClass(),
|
||||||
containerInjectUtils(),
|
// containerInjectUtils(),
|
||||||
containerInitState(),
|
containerInitState(),
|
||||||
containerLifeCycle(),
|
containerLifeCycle(),
|
||||||
containerMethod(),
|
containerMethod(),
|
||||||
jsx(),
|
jsx({
|
||||||
|
nodeTypeMapping: {
|
||||||
|
Div: 'div',
|
||||||
|
Component: 'div',
|
||||||
|
Page: 'div',
|
||||||
|
Block: 'div',
|
||||||
|
},
|
||||||
|
}),
|
||||||
css(),
|
css(),
|
||||||
],
|
],
|
||||||
pages: [
|
pages: [
|
||||||
@ -42,11 +49,18 @@ export default function createIceJsProjectBuilder(): IProjectBuilder {
|
|||||||
fileType: 'jsx',
|
fileType: 'jsx',
|
||||||
}),
|
}),
|
||||||
containerClass(),
|
containerClass(),
|
||||||
containerInjectUtils(),
|
// containerInjectUtils(),
|
||||||
containerInitState(),
|
containerInitState(),
|
||||||
containerLifeCycle(),
|
containerLifeCycle(),
|
||||||
containerMethod(),
|
containerMethod(),
|
||||||
jsx(),
|
jsx({
|
||||||
|
nodeTypeMapping: {
|
||||||
|
Div: 'div',
|
||||||
|
Component: 'div',
|
||||||
|
Page: 'div',
|
||||||
|
Block: 'div',
|
||||||
|
},
|
||||||
|
}),
|
||||||
css(),
|
css(),
|
||||||
],
|
],
|
||||||
router: [esmodule(), icejs.plugins.router()],
|
router: [esmodule(), icejs.plugins.router()],
|
||||||
|
|||||||
@ -170,6 +170,10 @@ export interface HandlerSet<T> {
|
|||||||
|
|
||||||
export type ExtGeneratorPlugin = (nodeItem: IComponentNodeItem) => CodePiece[];
|
export type ExtGeneratorPlugin = (nodeItem: IComponentNodeItem) => CodePiece[];
|
||||||
|
|
||||||
|
export interface INodeGeneratorConfig {
|
||||||
|
nodeTypeMapping?: Record<string, string>;
|
||||||
|
}
|
||||||
|
|
||||||
// export interface InteratorScope {
|
// export interface InteratorScope {
|
||||||
// [$item: string]: string; // $item 默认取值 "item"
|
// [$item: string]: string; // $item 默认取值 "item"
|
||||||
// [$index: string]: string | number; // $index 默认取值 "index"
|
// [$index: string]: string | number; // $index 默认取值 "index"
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import {
|
|||||||
CodePiece,
|
CodePiece,
|
||||||
HandlerSet,
|
HandlerSet,
|
||||||
ExtGeneratorPlugin,
|
ExtGeneratorPlugin,
|
||||||
|
INodeGeneratorConfig,
|
||||||
} from '../types';
|
} from '../types';
|
||||||
import { generateCompositeType } from './compositeType';
|
import { generateCompositeType } from './compositeType';
|
||||||
import { generateExpression } from './jsExpression';
|
import { generateExpression } from './jsExpression';
|
||||||
@ -37,7 +38,7 @@ export function handleChildren<T>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function generateAttr(attrName: string, attrValue: any): CodePiece[] {
|
export function generateAttr(attrName: string, attrValue: any): CodePiece[] {
|
||||||
if (attrName === 'initValue' || attrName === 'labelCol') {
|
if (attrName === 'initValue') {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
const [isString, valueStr] = generateCompositeType(attrValue);
|
const [isString, valueStr] = generateCompositeType(attrValue);
|
||||||
@ -58,17 +59,17 @@ export function generateAttrs(nodeItem: IComponentNodeItem): CodePiece[] {
|
|||||||
return pieces;
|
return pieces;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function mapNodeName(src: string): string {
|
function mapNodeName(src: string, mapping: Record<string, string>): string {
|
||||||
if (src === 'Div') {
|
if (mapping[src]) {
|
||||||
return 'div';
|
return mapping[src];
|
||||||
}
|
}
|
||||||
return src;
|
return src;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function generateBasicNode(nodeItem: IComponentNodeItem): CodePiece[] {
|
export function generateBasicNode(nodeItem: IComponentNodeItem, mapping: Record<string, string>): CodePiece[] {
|
||||||
const pieces: CodePiece[] = [];
|
const pieces: CodePiece[] = [];
|
||||||
pieces.push({
|
pieces.push({
|
||||||
value: mapNodeName(nodeItem.componentName),
|
value: mapNodeName(nodeItem.componentName, mapping),
|
||||||
type: PIECE_TYPE.TAG,
|
type: PIECE_TYPE.TAG,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -157,14 +158,23 @@ export function linkPieces(pieces: CodePiece[]): string {
|
|||||||
return `${beforeParts}<${tagName}${attrsParts} />${afterParts}`;
|
return `${beforeParts}<${tagName}${attrsParts} />${afterParts}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createNodeGenerator(handlers: HandlerSet<string>, plugins: ExtGeneratorPlugin[]) {
|
export function createNodeGenerator(
|
||||||
|
handlers: HandlerSet<string>,
|
||||||
|
plugins: ExtGeneratorPlugin[],
|
||||||
|
cfg?: INodeGeneratorConfig,
|
||||||
|
) {
|
||||||
|
let nodeTypeMapping: Record<string, string> = {};
|
||||||
|
if (cfg && cfg.nodeTypeMapping) {
|
||||||
|
nodeTypeMapping = cfg.nodeTypeMapping;
|
||||||
|
}
|
||||||
|
|
||||||
const generateNode = (nodeItem: IComponentNodeItem): string => {
|
const generateNode = (nodeItem: IComponentNodeItem): string => {
|
||||||
let pieces: CodePiece[] = [];
|
let pieces: CodePiece[] = [];
|
||||||
|
|
||||||
plugins.forEach(p => {
|
plugins.forEach(p => {
|
||||||
pieces = pieces.concat(p(nodeItem));
|
pieces = pieces.concat(p(nodeItem));
|
||||||
});
|
});
|
||||||
pieces = pieces.concat(generateBasicNode(nodeItem));
|
pieces = pieces.concat(generateBasicNode(nodeItem, nodeTypeMapping));
|
||||||
pieces = pieces.concat(generateAttrs(nodeItem));
|
pieces = pieces.concat(generateAttrs(nodeItem));
|
||||||
if (nodeItem.children && (nodeItem.children as unknown[]).length > 0) {
|
if (nodeItem.children && (nodeItem.children as unknown[]).length > 0) {
|
||||||
pieces = pieces.concat(handleChildren<string>(nodeItem.children, handlers).map(l => ({
|
pieces = pieces.concat(handleChildren<string>(nodeItem.children, handlers).map(l => ({
|
||||||
@ -183,11 +193,11 @@ export function createNodeGenerator(handlers: HandlerSet<string>, plugins: ExtGe
|
|||||||
|
|
||||||
export const generateString = (input: string) => [input];
|
export const generateString = (input: string) => [input];
|
||||||
|
|
||||||
export function createReactNodeGenerator() {
|
export function createReactNodeGenerator(cfg?: INodeGeneratorConfig) {
|
||||||
return createNodeGenerator({
|
return createNodeGenerator({
|
||||||
string: generateString,
|
string: generateString,
|
||||||
expression: (input) => [generateExpression(input)],
|
expression: (input) => [generateExpression(input)],
|
||||||
}, [
|
}, [
|
||||||
generateReactCtrlLine,
|
generateReactCtrlLine,
|
||||||
]);
|
], cfg);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user