feat: import react-docgen to parse propTypes

This commit is contained in:
gengyang 2020-03-02 22:53:03 +08:00
parent 122a00d2f7
commit 6e661686e4
26 changed files with 2813 additions and 1406 deletions

15
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "ava my-package",
"type": "node",
"request": "launch",
"runtimeExecutable": "${workspaceFolder}/packages/material-parser/node_modules/.bin/ava",
"runtimeArgs": ["debug", "--break", "${file}"]
}
]
}

2226
packages/designer/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -23,18 +23,20 @@
"scripts": {
"build": "tsc",
"prebuild": "npm run schema",
"test": "ava --verbose --serial",
"test": "ava",
"test:snapshot": "ava --update-snapshots",
"schema": "node ./scripts/transform.js"
},
"ava": {
"compileEnhancements": false,
"snapshotDir": "test/fixtures/__snapshots__",
"extensions": [
"ts"
],
"require": [
"ts-node/register"
],
"include": [
"test/generator/Generator.ts"
]
},
"license": "MIT",
@ -47,6 +49,7 @@
"debug": "^4.1.1",
"fs-extra": "^8.1.0",
"lodash": "^4.17.15",
"react-docgen": "^5.3.0",
"semver": "^7.1.3",
"short-uuid": "^3.1.1"
}

View File

@ -155,32 +155,13 @@ class Generator implements IGenerator {
const defaultValueItem = matParsedModel.propsDefaults.find(
inner => inner.name === item.name,
);
const propItem: Partial<PropsSection['props'][0]> = {
name: item.name,
};
if (
[
'array',
'bool',
'func',
'number',
'object',
'string',
'node',
'element',
'any',
].includes(item.type)
) {
propItem.propType = item.type as PropType;
} else {
propItem.propType = {
type: item.type,
// @ts-ignore
value: item.value,
} as PropType;
}
let propItem: Partial<PropsSection['props'][0]> = item;
if (defaultValueItem) {
propItem.defaultValue = defaultValueItem.defaultValue;
propItem = {
...propItem,
defaultValue: defaultValueItem.defaultValue,
};
}
props.push(propItem as PropsSection['props'][0]);
});

View File

@ -1,13 +1,55 @@
import { CodeGenerator } from '@babel/generator';
import { parse } from '@babel/parser';
// import { parse } from '@babel/parser';
const buildParser = require('react-docgen/dist/babelParser').default;
import traverse from '@babel/traverse';
import * as t from '@babel/types';
const { utils: ReactDocUtils } = require('react-docgen');
import { debug } from '../otter-core';
import { IMaterialParsedModel, IMaterialScanModel, SourceType } from '../types';
import {
IMaterialParsedModel,
IMaterialScanModel,
IPropType,
IPropTypes,
SourceType,
} from '../types';
import BaseParser from './BaseParser';
const log = debug.extend('mat');
const parser = buildParser();
function transformType(item: any): any {
switch (typeof item) {
case 'string':
return {
propType: item,
};
case 'object':
if (Array.isArray(item)) {
return item.map(transformType);
} else if (Object.keys(item).length === 1 && item.name) {
return {
propType: item.name,
};
} else if (item.name === 'shape' || item.name === 'exact') {
return {
propType: item.name,
value: Object.keys(item.value).map(name => {
return {
name,
...transformType(item.value[name]),
};
}),
};
} else if (item.name === 'enum') {
return item.value.map((x: any) => x.value);
} else {
return {
propType: item.name,
isRequired: item.required,
};
}
}
}
/**
* react
*
@ -31,10 +73,10 @@ class ReactParser extends BaseParser {
source: string;
}>
> {
const ast = await parse(fileContent, {
sourceType: sourceType === SourceType.MODULE ? 'module' : 'script',
plugins: ['jsx'],
});
const ast = parser.parse(fileContent);
// @ts-ignore
ast.__src = fileContent;
const specifiers: any = [];
@ -77,6 +119,139 @@ class ReactParser extends BaseParser {
return specifiers;
}
public static parseProperties(objectPath: any): IPropTypes {
const results: IPropTypes = objectPath.get('properties').map((p: any) => ({
name: p.get('key').node.name,
...transformType(ReactDocUtils.getPropType(p.get('value'))),
}));
// console.log(JSON.stringify(results, null, 2));
// objectPath.node.properties.forEach((prop: any) => {
// if (t.isProperty(prop)) {
// if (t.isMemberExpression(prop.value)) {
// if (t.isIdentifier(prop.value.object)) {
// // 支持 optionalArray: PropTypes.array 写法
// results.push({
// name: prop.key.name,
// type: prop.value.property.name,
// required: false,
// });
// }
// if (t.isMemberExpression(prop.value.object)) {
// // 支持 optionalArray: PropTypes.array.isRequired 写法
// results.push({
// name: prop.key.name,
// type: prop.value.object.property.name,
// required: prop.value.object.property.name === 'isRequired',
// });
// }
// if (
// t.isCallExpression(prop.value.object) &&
// t.isMemberExpression(prop.value.object.callee)
// ) {
// // 支持 optionalArray: PropTypes.shape().isRequired 写法
// results.push({
// name: prop.key.name,
// type: prop.value.object.callee.property.name,
// value: ReactParser.parseProperties(
// prop.value.object.arguments[0],
// ),
// required: prop.value.property.name === 'isRequired',
// });
// }
// }
// if (
// t.isCallExpression(prop.value) &&
// t.isMemberExpression(prop.value.callee)
// ) {
// // 支持 optionalArray: PropTypes.shape() 写法
// results.push({
// name: prop.key.name,
// type: prop.value.callee.property.name,
// value: ReactParser.parsePropsTypesES6(prop.value.arguments[0], ''),
// required: false,
// });
// }
// }
// });
return results;
// public return [];
}
/**
* AST propsTypes
*
* - static propTypes = { sth: PropTypes.any.isRequired }
* - Demo.propTypes = {}
*
* @private
* @param {*} ast
* @param {string} defaultExportName
* @returns {<Array<{
* name: string,
* type: string,
* value?: any,
* required: boolean,
* }>}
* @memberof ReactParser
*/
public static parsePropsTypesES6(
ast: any,
defaultExportName: string,
): IPropTypes {
const results: any[] = [];
traverse(ast, {
enter(path) {
// 支持 static propTypes = { sth: PropTypes.any.isRequired }; 写法
if (
t.isExpressionStatement(path.node) &&
t.isCallExpression(path.node.expression)
) {
const args = path.node.expression.arguments;
if (
t.isIdentifier(args[0]) &&
// args[0].name === defaultExportName &&
t.isLiteral(args[1]) &&
(args[1] as any).value === 'propTypes' &&
t.isObjectExpression(args[2])
) {
// const properties = (args[2] as t.ObjectExpression).properties;
results.push(
...ReactParser.parseProperties(
path
// @ts-ignore
.get('expression')
// @ts-ignore
.get('arguments')[2],
),
);
}
}
// 支持 Demo.propTypes = {}; 写法
if (
t.isExpressionStatement(path.node) &&
t.isAssignmentExpression(path.node.expression) &&
t.isMemberExpression(path.node.expression.left) &&
t.isObjectExpression(path.node.expression.right) &&
t.isIdentifier(path.node.expression.left.object) &&
t.isIdentifier(path.node.expression.left.property) &&
path.node.expression.left.object.name === defaultExportName &&
['propTypes'].includes(path.node.expression.left.property.name)
) {
debugger;
// 处理 propTypes
results.push(
// @ts-ignore
...ReactParser.parseProperties(path.get('expression').get('right')),
);
}
},
noScope: defaultExportName ? false : true,
});
return results;
}
public async parseES5(
model: IMaterialScanModel,
): Promise<IMaterialParsedModel> {
@ -95,10 +270,10 @@ class ReactParser extends BaseParser {
item => item.filePath === model.mainEntry,
);
// log('mainEntryItem', mainEntryItem);
const ast = await parse(mainEntryItem.file, {
sourceType: 'script',
plugins: ['jsx'],
});
const ast = parser.parse(mainEntryItem.file);
// @ts-ignore
ast.__src = mainEntryItem.file;
// 获取 defaultExportName
traverse(ast, {
@ -430,11 +605,10 @@ class ReactParser extends BaseParser {
filePath: string;
fileContent: string;
}): Promise<IMaterialParsedModel> {
const ast = await parse(params.fileContent, {
sourceType:
params.model.sourceType === SourceType.MODULE ? 'module' : 'script',
plugins: ['jsx'],
});
const ast = parser.parse(params.fileContent);
// @ts-ignore
ast.__src = params.fileContent;
const defaultExportName = await this.parseDefaultExportNameES6(ast);
const componentNames = await this.parseComponentNamesES6(ast);
@ -444,7 +618,7 @@ class ReactParser extends BaseParser {
params.model.sourceType,
);
const subModules = await this.parseSubModulesES6(ast);
const propsTypes = await this.parsePropsTypesES6(ast, defaultExportName);
const propsTypes = ReactParser.parsePropsTypesES6(ast, defaultExportName);
const propsDefaults = await this.parseDefaultPropsES6(
ast,
defaultExportName,
@ -717,161 +891,6 @@ class ReactParser extends BaseParser {
return results;
}
/**
* AST propsTypes
*
* - static propTypes = { sth: PropTypes.any.isRequired }
* - Demo.propTypes = {}
*
* @private
* @param {*} ast
* @param {string} defaultExportName
* @returns {Promise<Array<{
* name: string,
* type: string,
* typeRaw?: any,
* required: boolean,
* }>>}
* @memberof ReactParser
*/
private async parsePropsTypesES6(
ast: any,
defaultExportName: string,
): Promise<
Array<{
name: string;
type: string;
typeRaw?: any;
required: boolean;
}>
> {
const results: any[] = [];
traverse(ast, {
enter(path) {
// 支持 static propTypes = { sth: PropTypes.any.isRequired }; 写法
if (
t.isExpressionStatement(path.node) &&
t.isCallExpression(path.node.expression)
) {
const args = path.node.expression.arguments;
if (
t.isIdentifier(args[0]) &&
// args[0].name === defaultExportName &&
t.isLiteral(args[1]) &&
(args[1] as any).value === 'propTypes' &&
t.isObjectExpression(args[2])
) {
const properties = (args[2] as t.ObjectExpression).properties;
properties.forEach((prop: any) => {
if (t.isProperty(prop)) {
if (t.isMemberExpression(prop.value)) {
if (t.isIdentifier(prop.value.object)) {
// 支持 optionalArray: PropTypes.array 写法
results.push({
name: prop.key.name,
type: prop.value.property.name,
required: false,
});
}
if (t.isMemberExpression(prop.value.object)) {
// 支持 optionalArray: PropTypes.array.isRequired 写法
results.push({
name: prop.key.name,
type: prop.value.object.property.name,
required:
prop.value.object.property.name === 'isRequired',
});
}
if (
t.isCallExpression(prop.value.object) &&
t.isMemberExpression(prop.value.object.callee)
) {
// 支持 optionalArray: PropTypes.shape().isRequired 写法
results.push({
name: prop.key.name,
type: prop.value.object.callee.property.name,
required: prop.value.property.name === 'isRequired',
});
}
}
if (
t.isCallExpression(prop.value) &&
t.isMemberExpression(prop.value.callee)
) {
// 支持 optionalArray: PropTypes.shape() 写法
results.push({
name: prop.key.name,
type: prop.value.callee.property.name,
required: false,
});
}
}
});
}
}
// 支持 Demo.propTypes = {}; 写法
if (
t.isExpressionStatement(path.node) &&
t.isAssignmentExpression(path.node.expression) &&
t.isMemberExpression(path.node.expression.left) &&
t.isObjectExpression(path.node.expression.right) &&
t.isIdentifier(path.node.expression.left.object) &&
t.isIdentifier(path.node.expression.left.property) &&
path.node.expression.left.object.name === defaultExportName &&
['propTypes'].includes(path.node.expression.left.property.name)
) {
// 处理 propTypes
path.node.expression.right.properties.forEach(prop => {
if (t.isProperty(prop)) {
if (t.isMemberExpression(prop.value)) {
if (t.isIdentifier(prop.value.object)) {
// 支持 optionalArray: PropTypes.array 写法
results.push({
name: prop.key.name,
type: prop.value.property.name,
required: false,
});
}
if (t.isMemberExpression(prop.value.object)) {
// 支持 optionalArray: PropTypes.array.isRequired 写法
results.push({
name: prop.key.name,
type: prop.value.object.property.name,
required: prop.value.object.property.name === 'isRequired',
});
}
if (
t.isCallExpression(prop.value.object) &&
t.isMemberExpression(prop.value.object.callee)
) {
// 支持 optionalArray: PropTypes.shape().isRequired 写法
results.push({
name: prop.key.name,
type: prop.value.object.callee.property.name,
required: prop.value.property.name === 'isRequired',
});
}
}
if (
t.isCallExpression(prop.value) &&
t.isMemberExpression(prop.value.callee)
) {
// 支持 optionalArray: PropTypes.shape() 写法
results.push({
name: prop.key.name,
type: prop.value.callee.property.name,
required: false,
});
}
}
});
}
},
});
return results;
}
/**
* AST defaultProps
*
@ -897,64 +916,64 @@ class ReactParser extends BaseParser {
}>
> {
const results: any[] = [];
traverse(ast, {
enter(path) {
if (
t.isExpressionStatement(path.node) &&
t.isCallExpression(path.node.expression)
) {
const args = path.node.expression.arguments;
if (
t.isIdentifier(args[0]) &&
// args[0].name === defaultExportName &&
t.isLiteral(args[1]) &&
(args[1] as any).value === 'defaultProps' &&
t.isObjectExpression(args[2])
) {
const properties = (args[2] as t.ObjectExpression).properties;
properties.forEach((prop: any) => {
if (t.isProperty(prop)) {
if (t.isObjectExpression(prop.value)) {
const defaultValue = new CodeGenerator(
t.objectExpression(prop.value.properties),
).generate().code;
results.push({
name: prop.key.name,
defaultValue,
});
}
}
});
}
}
// traverse(ast, {
// enter(path) {
// if (
// t.isExpressionStatement(path.node) &&
// t.isCallExpression(path.node.expression)
// ) {
// const args = path.node.expression.arguments;
// if (
// t.isIdentifier(args[0]) &&
// // args[0].name === defaultExportName &&
// t.isLiteral(args[1]) &&
// (args[1] as any).value === 'defaultProps' &&
// t.isObjectExpression(args[2])
// ) {
// const properties = (args[2] as t.ObjectExpression).properties;
// properties.forEach((prop: any) => {
// if (t.isProperty(prop)) {
// if (t.isObjectExpression(prop.value)) {
// const defaultValue = new CodeGenerator(
// t.objectExpression(prop.value.properties),
// ).generate().code;
// results.push({
// name: prop.key.name,
// defaultValue,
// });
// }
// }
// });
// }
// }
if (
t.isExpressionStatement(path.node) &&
t.isAssignmentExpression(path.node.expression) &&
t.isMemberExpression(path.node.expression.left) &&
t.isObjectExpression(path.node.expression.right) &&
t.isIdentifier(path.node.expression.left.object) &&
t.isIdentifier(path.node.expression.left.property) &&
path.node.expression.left.object.name === defaultExportName &&
['defaultProps'].includes(path.node.expression.left.property.name)
) {
// 处理 defaultProps
path.node.expression.right.properties.forEach(prop => {
if (t.isProperty(prop)) {
if (t.isObjectExpression(prop.value)) {
const defaultValue = new CodeGenerator(
t.objectExpression(prop.value.properties),
).generate().code;
results.push({
name: prop.key.name,
defaultValue,
});
}
}
});
}
},
});
// if (
// t.isExpressionStatement(path.node) &&
// t.isAssignmentExpression(path.node.expression) &&
// t.isMemberExpression(path.node.expression.left) &&
// t.isObjectExpression(path.node.expression.right) &&
// t.isIdentifier(path.node.expression.left.object) &&
// t.isIdentifier(path.node.expression.left.property) &&
// path.node.expression.left.object.name === defaultExportName &&
// ['defaultProps'].includes(path.node.expression.left.property.name)
// ) {
// // 处理 defaultProps
// path.node.expression.right.properties.forEach(prop => {
// if (t.isProperty(prop)) {
// if (t.isObjectExpression(prop.value)) {
// const defaultValue = new CodeGenerator(
// t.objectExpression(prop.value.properties),
// ).generate().code;
// results.push({
// name: prop.key.name,
// defaultValue,
// });
// }
// }
// });
// }
// },
// });
return results;
}
}

View File

@ -1,7 +1,16 @@
/**
*
*/
interface IMaterialParsedModel {
export interface IPropType {
name: string;
type: string;
value?: IPropTypes;
required: boolean;
}
export type IPropTypes = IPropType[];
export interface IMaterialParsedModel {
filePath: string;
defaultExportName: string;
componentNames: Array<{
@ -30,16 +39,9 @@ interface IMaterialParsedModel {
// value 是否对应匿名函数
isValueAnonymousFunc: boolean;
}>;
propsTypes: Array<{
name: string;
type: string;
typeRaw?: any;
required: boolean;
}>;
propsTypes: IPropTypes;
propsDefaults: Array<{
name: string;
defaultValue: any;
}>;
}
export default IMaterialParsedModel;

View File

@ -6,7 +6,7 @@ import ICompiler from './ICompiler';
import IExtensionConfigManifest from './IExtensionConfigManifest';
import IGenerator from './IGenerator';
import IMaterializeOptions from './IMaterializeOptions';
import IMaterialParsedModel from './IMaterialParsedModel';
export * from './IMaterialParsedModel';
import IMaterialScanModel from './IMaterialScanModel';
import IParser from './IParser';
import IScanner from './IScanner';
@ -20,7 +20,6 @@ export {
IExtensionConfigManifest,
IMaterializeOptions,
IMaterialScanModel,
IMaterialParsedModel,
SourceType,
ChannelType,
EcologyType,

View File

@ -2,7 +2,7 @@
The actual snapshot is saved in `Materialize.ts.snap`.
Generated by [AVA](https://ava.li).
Generated by [AVA](https://avajs.dev).
## materialize multiple exported component by local
@ -25,11 +25,9 @@ Generated by [AVA](https://ava.li).
},
props: [
{
isRequired: undefined,
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
{
name: 'styleBoxModel',
@ -48,7 +46,6 @@ Generated by [AVA](https://ava.li).
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
@ -85,11 +82,9 @@ Generated by [AVA](https://ava.li).
propType: 'string',
},
{
isRequired: undefined,
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
{
name: 'styleBoxModel',
@ -104,7 +99,6 @@ Generated by [AVA](https://ava.li).
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
@ -133,7 +127,6 @@ Generated by [AVA](https://ava.li).
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
@ -158,11 +151,9 @@ Generated by [AVA](https://ava.li).
},
props: [
{
isRequired: undefined,
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
{
name: 'styleBoxModel',
@ -181,7 +172,6 @@ Generated by [AVA](https://ava.li).
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
@ -206,11 +196,9 @@ Generated by [AVA](https://ava.li).
},
props: [
{
isRequired: undefined,
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
{
name: 'styleBoxModel',
@ -221,7 +209,6 @@ Generated by [AVA](https://ava.li).
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
@ -246,11 +233,9 @@ Generated by [AVA](https://ava.li).
},
props: [
{
isRequired: undefined,
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
{
name: 'type',
@ -273,7 +258,6 @@ Generated by [AVA](https://ava.li).
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
@ -298,20 +282,13 @@ Generated by [AVA](https://ava.li).
},
props: [
{
defaultValue: `{␊
padding: 0,␊
backgroundColor: '#f0f2f5',␊
minHeight: '100%'␊
}`,
name: 'style',
propType: 'object',
},
{
isRequired: undefined,
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
],
screenshot: '',
@ -366,10 +343,7 @@ Generated by [AVA](https://ava.li).
},
{
name: 'optionalSymbol',
propType: {
type: 'symbol',
value: undefined,
},
propType: 'symbol',
},
{
name: 'optionalNode',
@ -381,66 +355,80 @@ Generated by [AVA](https://ava.li).
},
{
name: 'optionalElementType',
propType: {
type: 'elementType',
value: undefined,
},
propType: 'elementType',
},
{
isRequired: undefined,
name: 'optionalMessage',
propType: {
type: 'instanceOf',
value: undefined,
},
propType: 'instanceOf',
},
{
0: '\'News\'',
1: '\'Photos\'',
name: 'optionalEnum',
propType: {
type: 'oneOf',
value: undefined,
},
},
{
isRequired: undefined,
name: 'optionalUnion',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
{
isRequired: undefined,
name: 'optionalArrayOf',
propType: {
type: 'arrayOf',
value: undefined,
},
propType: 'arrayOf',
},
{
isRequired: undefined,
name: 'optionalObjectOf',
propType: {
type: 'objectOf',
value: undefined,
},
propType: 'objectOf',
},
{
name: 'optionalObjectWithShape',
propType: {
type: 'shape',
value: undefined,
},
propType: 'shape',
value: [
{
isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
},
{
name: 'optionalObjectWithShape2',
propType: {
type: 'shape',
value: undefined,
},
propType: 'shape',
value: [
{
isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
},
{
name: 'optionalObjectWithStrictShape',
propType: {
type: 'exact',
value: undefined,
},
propType: 'exact',
value: [
{
isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
},
{
name: 'requiredFunc',

View File

@ -2,7 +2,7 @@
The actual snapshot is saved in `LocalAccesser.ts.snap`.
Generated by [AVA](https://ava.li).
Generated by [AVA](https://avajs.dev).
## access multiple exported component by local
@ -25,11 +25,9 @@ Generated by [AVA](https://ava.li).
},
props: [
{
isRequired: undefined,
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
{
name: 'styleBoxModel',
@ -48,7 +46,6 @@ Generated by [AVA](https://ava.li).
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
@ -85,11 +82,9 @@ Generated by [AVA](https://ava.li).
propType: 'string',
},
{
isRequired: undefined,
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
{
name: 'styleBoxModel',
@ -104,7 +99,6 @@ Generated by [AVA](https://ava.li).
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
@ -133,7 +127,6 @@ Generated by [AVA](https://ava.li).
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
@ -158,11 +151,9 @@ Generated by [AVA](https://ava.li).
},
props: [
{
isRequired: undefined,
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
{
name: 'styleBoxModel',
@ -181,7 +172,6 @@ Generated by [AVA](https://ava.li).
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
@ -206,11 +196,9 @@ Generated by [AVA](https://ava.li).
},
props: [
{
isRequired: undefined,
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
{
name: 'styleBoxModel',
@ -221,7 +209,6 @@ Generated by [AVA](https://ava.li).
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
@ -246,11 +233,9 @@ Generated by [AVA](https://ava.li).
},
props: [
{
isRequired: undefined,
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
{
name: 'type',
@ -273,7 +258,6 @@ Generated by [AVA](https://ava.li).
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
@ -298,20 +282,13 @@ Generated by [AVA](https://ava.li).
},
props: [
{
defaultValue: `{␊
padding: 0,␊
backgroundColor: '#f0f2f5',␊
minHeight: '100%'␊
}`,
name: 'style',
propType: 'object',
},
{
isRequired: undefined,
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
],
screenshot: '',
@ -366,10 +343,7 @@ Generated by [AVA](https://ava.li).
},
{
name: 'optionalSymbol',
propType: {
type: 'symbol',
value: undefined,
},
propType: 'symbol',
},
{
name: 'optionalNode',
@ -381,66 +355,80 @@ Generated by [AVA](https://ava.li).
},
{
name: 'optionalElementType',
propType: {
type: 'elementType',
value: undefined,
},
propType: 'elementType',
},
{
isRequired: undefined,
name: 'optionalMessage',
propType: {
type: 'instanceOf',
value: undefined,
},
propType: 'instanceOf',
},
{
0: '\'News\'',
1: '\'Photos\'',
name: 'optionalEnum',
propType: {
type: 'oneOf',
value: undefined,
},
},
{
isRequired: undefined,
name: 'optionalUnion',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
{
isRequired: undefined,
name: 'optionalArrayOf',
propType: {
type: 'arrayOf',
value: undefined,
},
propType: 'arrayOf',
},
{
isRequired: undefined,
name: 'optionalObjectOf',
propType: {
type: 'objectOf',
value: undefined,
},
propType: 'objectOf',
},
{
name: 'optionalObjectWithShape',
propType: {
type: 'shape',
value: undefined,
},
propType: 'shape',
value: [
{
isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
},
{
name: 'optionalObjectWithShape2',
propType: {
type: 'shape',
value: undefined,
},
propType: 'shape',
value: [
{
isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
},
{
name: 'optionalObjectWithStrictShape',
propType: {
type: 'exact',
value: undefined,
},
propType: 'exact',
value: [
{
isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
},
{
name: 'requiredFunc',

View File

@ -2,639 +2,7 @@
The actual snapshot is saved in `Generator.ts.snap`.
Generated by [AVA](https://ava.li).
## generate multiple exported components
> Snapshot 1
[
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/basic/AIMakeBlank/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'AIMakeBlank',
docUrl: '',
npm: {
destructuring: false,
exportName: 'AIMakeBlank',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
},
{
name: 'styleBoxModel',
propType: 'object',
},
{
name: 'styleLayout',
propType: 'object',
},
{
name: 'styleBackground',
propType: 'object',
},
{
name: 'styleFlexLayout',
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
{
name: 'id',
propType: 'string',
},
],
screenshot: '',
title: '',
},
},
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/basic/AIMakeIcon/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'AIMakeIcon',
docUrl: '',
npm: {
destructuring: false,
exportName: 'AIMakeIcon',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
name: 'className',
propType: 'string',
},
{
name: 'iconClassName',
propType: 'string',
},
{
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
},
{
name: 'styleBoxModel',
propType: 'object',
},
{
name: 'styleText',
propType: 'object',
},
{
name: 'styleBackground',
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
],
screenshot: '',
title: '',
},
},
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/basic/AIMakeImage/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'AIMakeImage',
docUrl: '',
npm: {
destructuring: false,
exportName: 'AIMakeImage',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
name: 'styleBoxModel',
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
],
screenshot: '',
title: '',
},
},
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/basic/AIMakeLink/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'AIMakeLink',
docUrl: '',
npm: {
destructuring: false,
exportName: 'AIMakeLink',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
},
{
name: 'styleBoxModel',
propType: 'object',
},
{
name: 'styleText',
propType: 'object',
},
{
name: 'styleLayout',
propType: 'object',
},
{
name: 'styleBackground',
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
],
screenshot: '',
title: '',
},
},
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/basic/AIMakePlaceholder/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'AIMakePlaceholder',
docUrl: '',
npm: {
destructuring: false,
exportName: 'AIMakePlaceholder',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
},
{
name: 'styleBoxModel',
propType: 'object',
},
{
name: 'styleLayout',
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
],
screenshot: '',
title: '',
},
},
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/basic/AIMakeText/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'AIMakeText',
docUrl: '',
npm: {
destructuring: false,
exportName: 'AIMakeText',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
},
{
name: 'type',
propType: 'string',
},
{
name: 'styleBoxModel',
propType: 'object',
},
{
name: 'styleText',
propType: 'object',
},
{
name: 'styleLayout',
propType: 'object',
},
{
name: 'styleBackground',
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
],
screenshot: '',
title: '',
},
},
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/basic/Root/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'Root',
docUrl: '',
npm: {
destructuring: false,
exportName: 'Root',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
defaultValue: `{␊
padding: 0,␊
backgroundColor: '#f0f2f5',␊
minHeight: '100%'␊
}`,
name: 'style',
propType: 'object',
},
{
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
},
],
screenshot: '',
title: '',
},
},
]
## generate multiple exported components with extensions
> Snapshot 1
[
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/src/basic/AIMakeBlank/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'AIMakeBlank',
docUrl: '',
npm: {
destructuring: false,
exportName: 'AIMakeBlank',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
},
{
name: 'styleBoxModel',
propType: 'object',
},
{
name: 'styleLayout',
propType: 'object',
},
{
name: 'styleBackground',
propType: 'object',
},
{
name: 'styleFlexLayout',
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
{
name: 'id',
propType: 'string',
},
],
screenshot: '',
title: '',
},
},
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/src/basic/AIMakeIcon/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'AIMakeIcon',
docUrl: '',
npm: {
destructuring: false,
exportName: 'AIMakeIcon',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
name: 'className',
propType: 'string',
},
{
name: 'iconClassName',
propType: 'string',
},
{
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
},
{
name: 'styleBoxModel',
propType: 'object',
},
{
name: 'styleText',
propType: 'object',
},
{
name: 'styleBackground',
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
],
screenshot: '',
title: '',
},
},
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/src/basic/AIMakeImage/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'AIMakeImage',
docUrl: '',
npm: {
destructuring: false,
exportName: 'AIMakeImage',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
name: 'styleBoxModel',
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
],
screenshot: '',
title: '',
},
},
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/src/basic/AIMakeLink/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'AIMakeLink',
docUrl: '',
npm: {
destructuring: false,
exportName: 'AIMakeLink',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
},
{
name: 'styleBoxModel',
propType: 'object',
},
{
name: 'styleText',
propType: 'object',
},
{
name: 'styleLayout',
propType: 'object',
},
{
name: 'styleBackground',
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
],
screenshot: '',
title: '',
},
},
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/src/basic/AIMakePlaceholder/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'AIMakePlaceholder',
docUrl: '',
npm: {
destructuring: false,
exportName: 'AIMakePlaceholder',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
},
{
name: 'styleBoxModel',
propType: 'object',
},
{
name: 'styleLayout',
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
],
screenshot: '',
title: '',
},
},
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/src/basic/AIMakeText/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'AIMakeText',
docUrl: '',
npm: {
destructuring: false,
exportName: 'AIMakeText',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
},
{
name: 'type',
propType: 'string',
},
{
name: 'styleBoxModel',
propType: 'object',
},
{
name: 'styleText',
propType: 'object',
},
{
name: 'styleLayout',
propType: 'object',
},
{
name: 'styleBackground',
propType: 'object',
},
{
defaultValue: '{}',
name: 'style',
propType: 'object',
},
],
screenshot: '',
title: '',
},
},
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/src/basic/Root/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'Root',
docUrl: '',
npm: {
destructuring: false,
exportName: 'Root',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js',
package: 'multiple-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
defaultValue: `{␊
padding: 0,␊
backgroundColor: '#f0f2f5',␊
minHeight: '100%'␊
}`,
name: 'style',
propType: 'object',
},
{
name: 'children',
propType: {
type: 'oneOfType',
value: undefined,
},
},
],
screenshot: '',
title: '',
},
},
]
Generated by [AVA](https://avajs.dev).
## generate single exported components
@ -682,10 +50,7 @@ Generated by [AVA](https://ava.li).
},
{
name: 'optionalSymbol',
propType: {
type: 'symbol',
value: undefined,
},
propType: 'symbol',
},
{
name: 'optionalNode',
@ -697,203 +62,80 @@ Generated by [AVA](https://ava.li).
},
{
name: 'optionalElementType',
propType: {
type: 'elementType',
value: undefined,
},
propType: 'elementType',
},
{
isRequired: undefined,
name: 'optionalMessage',
propType: {
type: 'instanceOf',
value: undefined,
},
propType: 'instanceOf',
},
{
0: '\'News\'',
1: '\'Photos\'',
name: 'optionalEnum',
propType: {
type: 'oneOf',
value: undefined,
},
},
{
isRequired: undefined,
name: 'optionalUnion',
propType: {
type: 'oneOfType',
value: undefined,
},
propType: 'union',
},
{
isRequired: undefined,
name: 'optionalArrayOf',
propType: {
type: 'arrayOf',
value: undefined,
},
propType: 'arrayOf',
},
{
isRequired: undefined,
name: 'optionalObjectOf',
propType: {
type: 'objectOf',
value: undefined,
},
propType: 'objectOf',
},
{
name: 'optionalObjectWithShape',
propType: {
type: 'shape',
value: undefined,
},
propType: 'shape',
value: [
{
isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
},
{
name: 'optionalObjectWithShape2',
propType: {
type: 'shape',
value: undefined,
},
propType: 'shape',
value: [
{
isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
},
{
name: 'optionalObjectWithStrictShape',
propType: {
type: 'exact',
value: undefined,
},
},
{
name: 'requiredFunc',
propType: 'func',
},
{
name: 'requiredAny',
propType: 'any',
},
],
screenshot: '',
title: '',
},
},
]
## generate single exported components with extensions
> Snapshot 1
[
{
manifestFilePath: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/single-exported-component/src/manifest.json',
manifestJS: undefined,
manifestObj: {
componentName: 'Demo',
docUrl: '',
npm: {
destructuring: false,
exportName: 'Demo',
main: '/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/single-exported-component/es/index.js',
package: 'single-exported-component',
subName: '',
version: '1.0.0',
},
props: [
{
name: 'optionalArray',
propType: 'array',
},
{
name: 'optionalBool',
propType: 'bool',
},
{
name: 'optionalFunc',
propType: 'func',
},
{
name: 'optionalNumber',
propType: 'number',
},
{
name: 'optionalObject',
propType: 'object',
},
{
name: 'optionalString',
propType: 'string',
},
{
name: 'optionalSymbol',
propType: {
type: 'symbol',
value: undefined,
},
},
{
name: 'optionalNode',
propType: 'node',
},
{
name: 'optionalElement',
propType: 'element',
},
{
name: 'optionalElementType',
propType: {
type: 'elementType',
value: undefined,
},
},
{
name: 'optionalMessage',
propType: {
type: 'instanceOf',
value: undefined,
},
},
{
name: 'optionalEnum',
propType: {
type: 'oneOf',
value: undefined,
},
},
{
name: 'optionalUnion',
propType: {
type: 'oneOfType',
value: undefined,
},
},
{
name: 'optionalArrayOf',
propType: {
type: 'arrayOf',
value: undefined,
},
},
{
name: 'optionalObjectOf',
propType: {
type: 'objectOf',
value: undefined,
},
},
{
name: 'optionalObjectWithShape',
propType: {
type: 'shape',
value: undefined,
},
},
{
name: 'optionalObjectWithShape2',
propType: {
type: 'shape',
value: undefined,
},
},
{
name: 'optionalObjectWithStrictShape',
propType: {
type: 'exact',
value: undefined,
},
propType: 'exact',
value: [
{
isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
},
{
name: 'requiredFunc',

View File

@ -2,7 +2,7 @@
The actual snapshot is saved in `ReactParser.ts.snap`.
Generated by [AVA](https://ava.li).
Generated by [AVA](https://avajs.dev).
## parse es6 multiple exported component by local
@ -173,59 +173,39 @@ Generated by [AVA](https://ava.li).
source: '../utils/HOCFlexLayoutProps',
},
],
propsDefaults: [
{
defaultValue: '{}',
name: 'style',
},
],
propsDefaults: [],
propsTypes: [
{
isRequired: undefined,
name: 'children',
required: false,
type: 'oneOfType',
propType: 'union',
},
{
name: 'styleBoxModel',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'styleLayout',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'styleBackground',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'styleFlexLayout',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'style',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'id',
required: false,
type: 'string',
},
],
subModules: [
{
isValueAnonymousFunc: false,
objectName: [
'merged',
],
propertyName: 'id',
value: 'id',
propType: 'string',
},
],
subModules: [],
},
{
componentNames: [
@ -304,47 +284,36 @@ Generated by [AVA](https://ava.li).
source: './IconFont',
},
],
propsDefaults: [
{
defaultValue: '{}',
name: 'style',
},
],
propsDefaults: [],
propsTypes: [
{
name: 'className',
required: false,
type: 'string',
propType: 'string',
},
{
name: 'iconClassName',
required: false,
type: 'string',
propType: 'string',
},
{
isRequired: undefined,
name: 'children',
required: false,
type: 'oneOfType',
propType: 'union',
},
{
name: 'styleBoxModel',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'styleText',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'styleBackground',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'style',
required: false,
type: 'object',
propType: 'object',
},
],
subModules: [
@ -430,22 +399,15 @@ Generated by [AVA](https://ava.li).
source: '../utils/HOCBoxModelProps',
},
],
propsDefaults: [
{
defaultValue: '{}',
name: 'style',
},
],
propsDefaults: [],
propsTypes: [
{
name: 'styleBoxModel',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'style',
required: false,
type: 'object',
propType: 'object',
},
],
subModules: [],
@ -537,42 +499,32 @@ Generated by [AVA](https://ava.li).
source: '../utils/HOCBackgroundProps',
},
],
propsDefaults: [
{
defaultValue: '{}',
name: 'style',
},
],
propsDefaults: [],
propsTypes: [
{
isRequired: undefined,
name: 'children',
required: false,
type: 'oneOfType',
propType: 'union',
},
{
name: 'styleBoxModel',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'styleText',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'styleLayout',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'styleBackground',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'style',
required: false,
type: 'object',
propType: 'object',
},
],
subModules: [],
@ -644,32 +596,24 @@ Generated by [AVA](https://ava.li).
source: '../utils/HOCLayoutProps',
},
],
propsDefaults: [
{
defaultValue: '{}',
name: 'style',
},
],
propsDefaults: [],
propsTypes: [
{
isRequired: undefined,
name: 'children',
required: false,
type: 'oneOfType',
propType: 'union',
},
{
name: 'styleBoxModel',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'styleLayout',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'style',
required: false,
type: 'object',
propType: 'object',
},
],
subModules: [],
@ -756,47 +700,36 @@ Generated by [AVA](https://ava.li).
source: '../utils/HOCBackgroundProps',
},
],
propsDefaults: [
{
defaultValue: '{}',
name: 'style',
},
],
propsDefaults: [],
propsTypes: [
{
isRequired: undefined,
name: 'children',
required: false,
type: 'oneOfType',
propType: 'union',
},
{
name: 'type',
required: false,
type: 'string',
propType: 'string',
},
{
name: 'styleBoxModel',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'styleText',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'styleLayout',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'styleBackground',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'style',
required: false,
type: 'object',
propType: 'object',
},
],
subModules: [],
@ -853,26 +786,16 @@ Generated by [AVA](https://ava.li).
source: 'prop-types',
},
],
propsDefaults: [
{
defaultValue: `{␊
padding: 0,␊
backgroundColor: '#f0f2f5',␊
minHeight: '100%'␊
}`,
name: 'style',
},
],
propsDefaults: [],
propsTypes: [
{
name: 'style',
required: false,
type: 'object',
propType: 'object',
},
{
isRequired: undefined,
name: 'children',
required: false,
type: 'oneOfType',
propType: 'union',
},
],
subModules: [],
@ -935,103 +858,124 @@ Generated by [AVA](https://ava.li).
propsTypes: [
{
name: 'optionalArray',
required: false,
type: 'array',
propType: 'array',
},
{
name: 'optionalBool',
required: false,
type: 'bool',
propType: 'bool',
},
{
name: 'optionalFunc',
required: false,
type: 'func',
propType: 'func',
},
{
name: 'optionalNumber',
required: false,
type: 'number',
propType: 'number',
},
{
name: 'optionalObject',
required: false,
type: 'object',
propType: 'object',
},
{
name: 'optionalString',
required: false,
type: 'string',
propType: 'string',
},
{
name: 'optionalSymbol',
required: false,
type: 'symbol',
propType: 'symbol',
},
{
name: 'optionalNode',
required: false,
type: 'node',
propType: 'node',
},
{
name: 'optionalElement',
required: false,
type: 'element',
propType: 'element',
},
{
name: 'optionalElementType',
required: false,
type: 'elementType',
propType: 'elementType',
},
{
isRequired: undefined,
name: 'optionalMessage',
required: false,
type: 'instanceOf',
propType: 'instanceOf',
},
{
0: '\'News\'',
1: '\'Photos\'',
name: 'optionalEnum',
required: false,
type: 'oneOf',
},
{
isRequired: undefined,
name: 'optionalUnion',
required: false,
type: 'oneOfType',
propType: 'union',
},
{
isRequired: undefined,
name: 'optionalArrayOf',
required: false,
type: 'arrayOf',
propType: 'arrayOf',
},
{
isRequired: undefined,
name: 'optionalObjectOf',
required: false,
type: 'objectOf',
propType: 'objectOf',
},
{
name: 'optionalObjectWithShape',
required: false,
type: 'shape',
propType: 'shape',
value: [
{
isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
},
{
name: 'optionalObjectWithShape2',
required: true,
type: 'shape',
propType: 'shape',
value: [
{
isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
},
{
name: 'optionalObjectWithStrictShape',
required: false,
type: 'exact',
propType: 'exact',
value: [
{
isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
},
{
name: 'requiredFunc',
required: false,
type: 'func',
propType: 'func',
},
{
name: 'requiredAny',
required: false,
type: 'any',
propType: 'any',
},
],
subModules: [],

View File

@ -2,7 +2,7 @@
The actual snapshot is saved in `Scanner.ts.snap`.
Generated by [AVA](https://ava.li).
Generated by [AVA](https://avajs.dev).
## scan multiple exported component

View File

@ -2,7 +2,7 @@
The actual snapshot is saved in `index.ts.snap`.
Generated by [AVA](https://ava.li).
Generated by [AVA](https://avajs.dev).
## should be right in dir basic-error

View File

@ -1 +1 @@
{"componentName":"AIMakeBlank","title":"","docUrl":"","screenshot":"","npm":{"package":"multiple-exported-component","version":"1.0.0","exportName":"AIMakeBlank","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"children","propType":{"type":"oneOfType"}},{"name":"styleBoxModel","propType":"object"},{"name":"styleLayout","propType":"object"},{"name":"styleBackground","propType":"object"},{"name":"styleFlexLayout","propType":"object"},{"name":"style","propType":"object","defaultValue":"{}"},{"name":"id","propType":"string"}]}
{"componentName":"AIMakeBlank","title":"","docUrl":"","screenshot":"","npm":{"package":"@ali/lowcode-engine-material-parser","version":"0.1.0","exportName":"AIMakeBlank","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"children","propType":"union"},{"name":"styleBoxModel","propType":"object"},{"name":"styleLayout","propType":"object"},{"name":"styleBackground","propType":"object"},{"name":"styleFlexLayout","propType":"object"},{"name":"style","propType":"object"},{"name":"id","propType":"string"}]}

View File

@ -1 +1 @@
{"componentName":"AIMakeIcon","title":"","docUrl":"","screenshot":"","npm":{"package":"multiple-exported-component","version":"1.0.0","exportName":"AIMakeIcon","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"className","propType":"string"},{"name":"iconClassName","propType":"string"},{"name":"children","propType":{"type":"oneOfType"}},{"name":"styleBoxModel","propType":"object"},{"name":"styleText","propType":"object"},{"name":"styleBackground","propType":"object"},{"name":"style","propType":"object","defaultValue":"{}"}]}
{"componentName":"AIMakeIcon","title":"","docUrl":"","screenshot":"","npm":{"package":"@ali/lowcode-engine-material-parser","version":"0.1.0","exportName":"AIMakeIcon","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"className","propType":"string"},{"name":"iconClassName","propType":"string"},{"name":"children","propType":"union"},{"name":"styleBoxModel","propType":"object"},{"name":"styleText","propType":"object"},{"name":"styleBackground","propType":"object"},{"name":"style","propType":"object"}]}

View File

@ -1 +1 @@
{"componentName":"AIMakeImage","title":"","docUrl":"","screenshot":"","npm":{"package":"multiple-exported-component","version":"1.0.0","exportName":"AIMakeImage","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"styleBoxModel","propType":"object"},{"name":"style","propType":"object","defaultValue":"{}"}]}
{"componentName":"AIMakeImage","title":"","docUrl":"","screenshot":"","npm":{"package":"@ali/lowcode-engine-material-parser","version":"0.1.0","exportName":"AIMakeImage","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"styleBoxModel","propType":"object"},{"name":"style","propType":"object"}]}

View File

@ -1 +1 @@
{"componentName":"AIMakeLink","title":"","docUrl":"","screenshot":"","npm":{"package":"multiple-exported-component","version":"1.0.0","exportName":"AIMakeLink","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"children","propType":{"type":"oneOfType"}},{"name":"styleBoxModel","propType":"object"},{"name":"styleText","propType":"object"},{"name":"styleLayout","propType":"object"},{"name":"styleBackground","propType":"object"},{"name":"style","propType":"object","defaultValue":"{}"}]}
{"componentName":"AIMakeLink","title":"","docUrl":"","screenshot":"","npm":{"package":"@ali/lowcode-engine-material-parser","version":"0.1.0","exportName":"AIMakeLink","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"children","propType":"union"},{"name":"styleBoxModel","propType":"object"},{"name":"styleText","propType":"object"},{"name":"styleLayout","propType":"object"},{"name":"styleBackground","propType":"object"},{"name":"style","propType":"object"}]}

View File

@ -1 +1 @@
{"componentName":"AIMakePlaceholder","title":"","docUrl":"","screenshot":"","npm":{"package":"multiple-exported-component","version":"1.0.0","exportName":"AIMakePlaceholder","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"children","propType":{"type":"oneOfType"}},{"name":"styleBoxModel","propType":"object"},{"name":"styleLayout","propType":"object"},{"name":"style","propType":"object","defaultValue":"{}"}]}
{"componentName":"AIMakePlaceholder","title":"","docUrl":"","screenshot":"","npm":{"package":"@ali/lowcode-engine-material-parser","version":"0.1.0","exportName":"AIMakePlaceholder","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"children","propType":"union"},{"name":"styleBoxModel","propType":"object"},{"name":"styleLayout","propType":"object"},{"name":"style","propType":"object"}]}

View File

@ -1 +1 @@
{"componentName":"AIMakeText","title":"","docUrl":"","screenshot":"","npm":{"package":"multiple-exported-component","version":"1.0.0","exportName":"AIMakeText","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"children","propType":{"type":"oneOfType"}},{"name":"type","propType":"string"},{"name":"styleBoxModel","propType":"object"},{"name":"styleText","propType":"object"},{"name":"styleLayout","propType":"object"},{"name":"styleBackground","propType":"object"},{"name":"style","propType":"object","defaultValue":"{}"}]}
{"componentName":"AIMakeText","title":"","docUrl":"","screenshot":"","npm":{"package":"@ali/lowcode-engine-material-parser","version":"0.1.0","exportName":"AIMakeText","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"children","propType":"union"},{"name":"type","propType":"string"},{"name":"styleBoxModel","propType":"object"},{"name":"styleText","propType":"object"},{"name":"styleLayout","propType":"object"},{"name":"styleBackground","propType":"object"},{"name":"style","propType":"object"}]}

View File

@ -1 +1 @@
{"componentName":"Root","title":"","docUrl":"","screenshot":"","npm":{"package":"multiple-exported-component","version":"1.0.0","exportName":"Root","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"style","propType":"object","defaultValue":"{\n padding: 0,\n backgroundColor: '#f0f2f5',\n minHeight: '100%'\n}"},{"name":"children","propType":{"type":"oneOfType"}}]}
{"componentName":"Root","title":"","docUrl":"","screenshot":"","npm":{"package":"@ali/lowcode-engine-material-parser","version":"0.1.0","exportName":"Root","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/multiple-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"style","propType":"object"},{"name":"children","propType":"union"}]}

View File

@ -1 +1 @@
{"componentName":"Demo","title":"","docUrl":"","screenshot":"","npm":{"package":"single-exported-component","version":"1.0.0","exportName":"Demo","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/single-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"optionalArray","propType":"array"},{"name":"optionalBool","propType":"bool"},{"name":"optionalFunc","propType":"func"},{"name":"optionalNumber","propType":"number"},{"name":"optionalObject","propType":"object"},{"name":"optionalString","propType":"string"},{"name":"optionalSymbol","propType":{"type":"symbol"}},{"name":"optionalNode","propType":"node"},{"name":"optionalElement","propType":"element"},{"name":"optionalElementType","propType":{"type":"elementType"}},{"name":"optionalMessage","propType":{"type":"instanceOf"}},{"name":"optionalEnum","propType":{"type":"oneOf"}},{"name":"optionalUnion","propType":{"type":"oneOfType"}},{"name":"optionalArrayOf","propType":{"type":"arrayOf"}},{"name":"optionalObjectOf","propType":{"type":"objectOf"}},{"name":"optionalObjectWithShape","propType":{"type":"shape"}},{"name":"optionalObjectWithShape2","propType":{"type":"shape"}},{"name":"optionalObjectWithStrictShape","propType":{"type":"exact"}},{"name":"requiredFunc","propType":"func"},{"name":"requiredAny","propType":"any"}]}
{"componentName":"Demo","title":"","docUrl":"","screenshot":"","npm":{"package":"single-exported-component","version":"1.0.0","exportName":"Demo","main":"/Users/gengyang/code/frontend/low-code/ali-lowcode-engine/packages/material-parser/test/fixtures/single-exported-component/es/index.js","destructuring":false,"subName":""},"props":[{"name":"optionalArray","propType":"array"},{"name":"optionalBool","propType":"bool"},{"name":"optionalFunc","propType":"func"},{"name":"optionalNumber","propType":"number"},{"name":"optionalObject","propType":"object"},{"name":"optionalString","propType":"string"},{"name":"optionalSymbol","propType":"symbol"},{"name":"optionalNode","propType":"node"},{"name":"optionalElement","propType":"element"},{"name":"optionalElementType","propType":"elementType"},{"name":"optionalMessage","propType":"instanceOf"},{"0":"'News'","1":"'Photos'","name":"optionalEnum"},{"name":"optionalUnion","propType":"union"},{"name":"optionalArrayOf","propType":"arrayOf"},{"name":"optionalObjectOf","propType":"objectOf"},{"name":"optionalObjectWithShape","propType":"shape","value":[{"name":"optionalProperty","propType":"string","isRequired":false},{"name":"requiredProperty","propType":"number","isRequired":true}]},{"name":"optionalObjectWithShape2","propType":"shape","value":[{"name":"optionalProperty","propType":"string","isRequired":false},{"name":"requiredProperty","propType":"number","isRequired":true}]},{"name":"optionalObjectWithStrictShape","propType":"exact","value":[{"name":"optionalProperty","propType":"string","isRequired":false},{"name":"requiredProperty","propType":"number","isRequired":true}]},{"name":"requiredFunc","propType":"func"},{"name":"requiredAny","propType":"any"}]}

View File

@ -43,7 +43,7 @@ test.serial('generate multiple exported components', async t => {
t.snapshot(actual);
});
test.serial('generate single exported components', async t => {
test.only('generate single exported components', async t => {
const options: IMaterializeOptions = {
cwd: singleExportedComptPath,
entry: singleExportedComptPath,