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

View File

@ -155,32 +155,13 @@ class Generator implements IGenerator {
const defaultValueItem = matParsedModel.propsDefaults.find( const defaultValueItem = matParsedModel.propsDefaults.find(
inner => inner.name === item.name, inner => inner.name === item.name,
); );
const propItem: Partial<PropsSection['props'][0]> = { let propItem: Partial<PropsSection['props'][0]> = item;
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;
}
if (defaultValueItem) { if (defaultValueItem) {
propItem.defaultValue = defaultValueItem.defaultValue; propItem = {
...propItem,
defaultValue: defaultValueItem.defaultValue,
};
} }
props.push(propItem as PropsSection['props'][0]); props.push(propItem as PropsSection['props'][0]);
}); });

View File

@ -1,13 +1,55 @@
import { CodeGenerator } from '@babel/generator'; 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 traverse from '@babel/traverse';
import * as t from '@babel/types'; import * as t from '@babel/types';
const { utils: ReactDocUtils } = require('react-docgen');
import { debug } from '../otter-core'; import { debug } from '../otter-core';
import { IMaterialParsedModel, IMaterialScanModel, SourceType } from '../types'; import {
IMaterialParsedModel,
IMaterialScanModel,
IPropType,
IPropTypes,
SourceType,
} from '../types';
import BaseParser from './BaseParser'; import BaseParser from './BaseParser';
const log = debug.extend('mat'); 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 * react
* *
@ -31,10 +73,10 @@ class ReactParser extends BaseParser {
source: string; source: string;
}> }>
> { > {
const ast = await parse(fileContent, { const ast = parser.parse(fileContent);
sourceType: sourceType === SourceType.MODULE ? 'module' : 'script',
plugins: ['jsx'], // @ts-ignore
}); ast.__src = fileContent;
const specifiers: any = []; const specifiers: any = [];
@ -77,6 +119,139 @@ class ReactParser extends BaseParser {
return specifiers; 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( public async parseES5(
model: IMaterialScanModel, model: IMaterialScanModel,
): Promise<IMaterialParsedModel> { ): Promise<IMaterialParsedModel> {
@ -95,10 +270,10 @@ class ReactParser extends BaseParser {
item => item.filePath === model.mainEntry, item => item.filePath === model.mainEntry,
); );
// log('mainEntryItem', mainEntryItem); // log('mainEntryItem', mainEntryItem);
const ast = await parse(mainEntryItem.file, { const ast = parser.parse(mainEntryItem.file);
sourceType: 'script',
plugins: ['jsx'], // @ts-ignore
}); ast.__src = mainEntryItem.file;
// 获取 defaultExportName // 获取 defaultExportName
traverse(ast, { traverse(ast, {
@ -430,11 +605,10 @@ class ReactParser extends BaseParser {
filePath: string; filePath: string;
fileContent: string; fileContent: string;
}): Promise<IMaterialParsedModel> { }): Promise<IMaterialParsedModel> {
const ast = await parse(params.fileContent, { const ast = parser.parse(params.fileContent);
sourceType:
params.model.sourceType === SourceType.MODULE ? 'module' : 'script', // @ts-ignore
plugins: ['jsx'], ast.__src = params.fileContent;
});
const defaultExportName = await this.parseDefaultExportNameES6(ast); const defaultExportName = await this.parseDefaultExportNameES6(ast);
const componentNames = await this.parseComponentNamesES6(ast); const componentNames = await this.parseComponentNamesES6(ast);
@ -444,7 +618,7 @@ class ReactParser extends BaseParser {
params.model.sourceType, params.model.sourceType,
); );
const subModules = await this.parseSubModulesES6(ast); const subModules = await this.parseSubModulesES6(ast);
const propsTypes = await this.parsePropsTypesES6(ast, defaultExportName); const propsTypes = ReactParser.parsePropsTypesES6(ast, defaultExportName);
const propsDefaults = await this.parseDefaultPropsES6( const propsDefaults = await this.parseDefaultPropsES6(
ast, ast,
defaultExportName, defaultExportName,
@ -717,161 +891,6 @@ class ReactParser extends BaseParser {
return results; 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 * AST defaultProps
* *
@ -897,64 +916,64 @@ class ReactParser extends BaseParser {
}> }>
> { > {
const results: any[] = []; const results: any[] = [];
traverse(ast, { // traverse(ast, {
enter(path) { // enter(path) {
if ( // if (
t.isExpressionStatement(path.node) && // t.isExpressionStatement(path.node) &&
t.isCallExpression(path.node.expression) // t.isCallExpression(path.node.expression)
) { // ) {
const args = path.node.expression.arguments; // const args = path.node.expression.arguments;
if ( // if (
t.isIdentifier(args[0]) && // t.isIdentifier(args[0]) &&
// args[0].name === defaultExportName && // // args[0].name === defaultExportName &&
t.isLiteral(args[1]) && // t.isLiteral(args[1]) &&
(args[1] as any).value === 'defaultProps' && // (args[1] as any).value === 'defaultProps' &&
t.isObjectExpression(args[2]) // t.isObjectExpression(args[2])
) { // ) {
const properties = (args[2] as t.ObjectExpression).properties; // const properties = (args[2] as t.ObjectExpression).properties;
properties.forEach((prop: any) => { // properties.forEach((prop: any) => {
if (t.isProperty(prop)) { // if (t.isProperty(prop)) {
if (t.isObjectExpression(prop.value)) { // if (t.isObjectExpression(prop.value)) {
const defaultValue = new CodeGenerator( // const defaultValue = new CodeGenerator(
t.objectExpression(prop.value.properties), // t.objectExpression(prop.value.properties),
).generate().code; // ).generate().code;
results.push({ // results.push({
name: prop.key.name, // name: prop.key.name,
defaultValue, // defaultValue,
}); // });
} // }
} // }
}); // });
} // }
} // }
if ( // if (
t.isExpressionStatement(path.node) && // t.isExpressionStatement(path.node) &&
t.isAssignmentExpression(path.node.expression) && // t.isAssignmentExpression(path.node.expression) &&
t.isMemberExpression(path.node.expression.left) && // t.isMemberExpression(path.node.expression.left) &&
t.isObjectExpression(path.node.expression.right) && // t.isObjectExpression(path.node.expression.right) &&
t.isIdentifier(path.node.expression.left.object) && // t.isIdentifier(path.node.expression.left.object) &&
t.isIdentifier(path.node.expression.left.property) && // t.isIdentifier(path.node.expression.left.property) &&
path.node.expression.left.object.name === defaultExportName && // path.node.expression.left.object.name === defaultExportName &&
['defaultProps'].includes(path.node.expression.left.property.name) // ['defaultProps'].includes(path.node.expression.left.property.name)
) { // ) {
// 处理 defaultProps // // 处理 defaultProps
path.node.expression.right.properties.forEach(prop => { // path.node.expression.right.properties.forEach(prop => {
if (t.isProperty(prop)) { // if (t.isProperty(prop)) {
if (t.isObjectExpression(prop.value)) { // if (t.isObjectExpression(prop.value)) {
const defaultValue = new CodeGenerator( // const defaultValue = new CodeGenerator(
t.objectExpression(prop.value.properties), // t.objectExpression(prop.value.properties),
).generate().code; // ).generate().code;
results.push({ // results.push({
name: prop.key.name, // name: prop.key.name,
defaultValue, // defaultValue,
}); // });
} // }
} // }
}); // });
} // }
}, // },
}); // });
return results; 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; filePath: string;
defaultExportName: string; defaultExportName: string;
componentNames: Array<{ componentNames: Array<{
@ -30,16 +39,9 @@ interface IMaterialParsedModel {
// value 是否对应匿名函数 // value 是否对应匿名函数
isValueAnonymousFunc: boolean; isValueAnonymousFunc: boolean;
}>; }>;
propsTypes: Array<{ propsTypes: IPropTypes;
name: string;
type: string;
typeRaw?: any;
required: boolean;
}>;
propsDefaults: Array<{ propsDefaults: Array<{
name: string; name: string;
defaultValue: any; defaultValue: any;
}>; }>;
} }
export default IMaterialParsedModel;

View File

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

View File

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

View File

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

View File

@ -2,639 +2,7 @@
The actual snapshot is saved in `Generator.ts.snap`. The actual snapshot is saved in `Generator.ts.snap`.
Generated by [AVA](https://ava.li). Generated by [AVA](https://avajs.dev).
## 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: '',
},
},
]
## generate single exported components ## generate single exported components
@ -682,10 +50,7 @@ Generated by [AVA](https://ava.li).
}, },
{ {
name: 'optionalSymbol', name: 'optionalSymbol',
propType: { propType: 'symbol',
type: 'symbol',
value: undefined,
},
}, },
{ {
name: 'optionalNode', name: 'optionalNode',
@ -697,203 +62,80 @@ Generated by [AVA](https://ava.li).
}, },
{ {
name: 'optionalElementType', name: 'optionalElementType',
propType: { propType: 'elementType',
type: 'elementType',
value: undefined,
},
}, },
{ {
isRequired: undefined,
name: 'optionalMessage', name: 'optionalMessage',
propType: { propType: 'instanceOf',
type: 'instanceOf',
value: undefined,
},
}, },
{ {
0: '\'News\'',
1: '\'Photos\'',
name: 'optionalEnum', name: 'optionalEnum',
propType: {
type: 'oneOf',
value: undefined,
},
}, },
{ {
isRequired: undefined,
name: 'optionalUnion', name: 'optionalUnion',
propType: { propType: 'union',
type: 'oneOfType',
value: undefined,
},
}, },
{ {
isRequired: undefined,
name: 'optionalArrayOf', name: 'optionalArrayOf',
propType: { propType: 'arrayOf',
type: 'arrayOf',
value: undefined,
},
}, },
{ {
isRequired: undefined,
name: 'optionalObjectOf', name: 'optionalObjectOf',
propType: { propType: 'objectOf',
type: 'objectOf',
value: undefined,
},
}, },
{ {
name: 'optionalObjectWithShape', name: 'optionalObjectWithShape',
propType: { propType: 'shape',
type: 'shape', value: [
value: undefined, {
}, isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
}, },
{ {
name: 'optionalObjectWithShape2', name: 'optionalObjectWithShape2',
propType: { propType: 'shape',
type: 'shape', value: [
value: undefined, {
}, isRequired: false,
name: 'optionalProperty',
propType: 'string',
},
{
isRequired: true,
name: 'requiredProperty',
propType: 'number',
},
],
}, },
{ {
name: 'optionalObjectWithStrictShape', name: 'optionalObjectWithStrictShape',
propType: { propType: 'exact',
type: 'exact', value: [
value: undefined, {
}, isRequired: false,
}, name: 'optionalProperty',
{ propType: 'string',
name: 'requiredFunc', },
propType: 'func', {
}, isRequired: true,
{ name: 'requiredProperty',
name: 'requiredAny', propType: 'number',
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,
},
}, },
{ {
name: 'requiredFunc', name: 'requiredFunc',

View File

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

View File

@ -2,7 +2,7 @@
The actual snapshot is saved in `Scanner.ts.snap`. 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 ## scan multiple exported component

View File

@ -2,7 +2,7 @@
The actual snapshot is saved in `index.ts.snap`. 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 ## 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); t.snapshot(actual);
}); });
test.serial('generate single exported components', async t => { test.only('generate single exported components', async t => {
const options: IMaterializeOptions = { const options: IMaterializeOptions = {
cwd: singleExportedComptPath, cwd: singleExportedComptPath,
entry: singleExportedComptPath, entry: singleExportedComptPath,