From 7f6fbe8939b779bbca591bf2437e89484af765cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=A5=E5=B8=8C?= Date: Sun, 13 Sep 2020 23:19:11 +0800 Subject: [PATCH] fix: fix test result --- packages/code-generator/package.json | 3 +- .../code-generator/src/parser/SchemaParser.ts | 9 +++- .../src/plugins/common/esmodule.ts | 21 ++++------ .../src/plugins/component/rax/jsx.ts | 12 ++++-- .../component/react/reactCommonDeps.ts | 1 - .../framework/rax/plugins/packageJSON.ts | 2 +- .../code-generator/src/types/intermediate.ts | 5 +-- .../code-generator/src/utils/nodeToJSX.ts | 41 +++++++++++++------ packages/types/src/schema.ts | 1 + scripts/setup.sh | 2 +- 10 files changed, 58 insertions(+), 39 deletions(-) diff --git a/packages/code-generator/package.json b/packages/code-generator/package.json index d8b05838a..6fab8bc5c 100644 --- a/packages/code-generator/package.json +++ b/packages/code-generator/package.json @@ -12,7 +12,8 @@ ], "scripts": { "start": "ava --watch", - "build": "rimraf lib && build-scripts build --skip-demo", + "build": "npm run build:tsc", + "build:bs": "rimraf lib && rimraf es && build-scripts build --skip-demo", "build:tsc": "rimraf lib && tsc", "demo": "node ./demo/demo.js", "test": "ava", diff --git a/packages/code-generator/src/parser/SchemaParser.ts b/packages/code-generator/src/parser/SchemaParser.ts index 284577d3b..f63db51a6 100644 --- a/packages/code-generator/src/parser/SchemaParser.ts +++ b/packages/code-generator/src/parser/SchemaParser.ts @@ -208,7 +208,13 @@ class SchemaParser implements ISchemaParser { const p = (con.deps || []) .map((dep) => (dep.dependencyType === DependencyType.External ? dep : null)) .filter((dep) => dep !== null); - npms.push(...((p as unknown) as INpmPackage[])); + const npmInfos: INpmPackage[] = p + .filter((i) => Boolean(i)) + .map((i) => ({ + package: (i as IExternalDependency).package, + version: (i as IExternalDependency).version, + })); + npms.push(...npmInfos); }); npms = uniqueArray(npms, (i) => i.package); @@ -227,6 +233,7 @@ class SchemaParser implements ISchemaParser { css: schema.css, constants: schema.constants, config: schema.config || {}, + meta: schema.meta || {}, i18n: schema.i18n, containersDeps, utilsDeps, diff --git a/packages/code-generator/src/plugins/common/esmodule.ts b/packages/code-generator/src/plugins/common/esmodule.ts index 49b26439a..f196f1a69 100644 --- a/packages/code-generator/src/plugins/common/esmodule.ts +++ b/packages/code-generator/src/plugins/common/esmodule.ts @@ -28,22 +28,17 @@ function groupDepsByPack(deps: IDependency[]): Record { }; // TODO: main 这个信息到底怎么用,是不是外部包不需要使用? - // deps.forEach(dep => { - // if (dep.dependencyType === DependencyType.Internal) { - // addDep( - // `${(dep as IInternalDependency).moduleName}${`/${dep.main}` || ''}`, - // dep, - // ); - // } else { - // addDep(`${(dep as IExternalDependency).package}${`/${dep.main}` || ''}`, dep); - // } - // }); - + const depMainBlackList = ['lib', 'lib/index', 'es', 'es/index', 'main']; deps.forEach((dep) => { if (dep.dependencyType === DependencyType.Internal) { - addDep(`${(dep as IInternalDependency).moduleName}`, dep); + addDep(`${(dep as IInternalDependency).moduleName}${dep.main ? `/${dep.main}` : ''}`, dep); } else { - addDep(`${(dep as IExternalDependency).package}`, dep); + let depMain = ''; + // TODO: 部分类型的 main 暂时认为没用 + if (dep.main && depMainBlackList.indexOf(dep.main) < 0) { + depMain = dep.main; + } + addDep(`${(dep as IExternalDependency).package}${depMain ? `/${depMain}` : ''}`, dep); } }); diff --git a/packages/code-generator/src/plugins/component/rax/jsx.ts b/packages/code-generator/src/plugins/component/rax/jsx.ts index fc0cb838c..7c352292d 100644 --- a/packages/code-generator/src/plugins/component/rax/jsx.ts +++ b/packages/code-generator/src/plugins/component/rax/jsx.ts @@ -304,7 +304,8 @@ function generateEventHandlerAttrForRax( return [ { type: PIECE_TYPE.ATTR, - value: `${attrName}={${valueExpr}}`, + name: attrName, + value: valueExpr, }, ]; } @@ -316,7 +317,8 @@ function generateEventHandlerAttrForRax( return [ { type: PIECE_TYPE.ATTR, - value: `${attrName}={${valueExpr}}`, + name: attrName, + value: valueExpr, }, ]; } @@ -336,11 +338,13 @@ function generateEventHandlerAttrForRax( return [ ...referencedLocalVariables.map((localVar) => ({ type: PIECE_TYPE.ATTR, - value: `data-${changeCase.snake(localVar)}={${localVar}}`, + name: `data-${changeCase.snake(localVar)}`, + value: localVar, })), { type: PIECE_TYPE.ATTR, - value: `${attrName}={${wrappedAttrValueExpr}}`, + name: attrName, + value: wrappedAttrValueExpr, }, ]; } diff --git a/packages/code-generator/src/plugins/component/react/reactCommonDeps.ts b/packages/code-generator/src/plugins/component/react/reactCommonDeps.ts index 2e75a5b7e..d1fcfeed3 100644 --- a/packages/code-generator/src/plugins/component/react/reactCommonDeps.ts +++ b/packages/code-generator/src/plugins/component/react/reactCommonDeps.ts @@ -6,7 +6,6 @@ import { ChunkType, FileType, ICodeStruct, - IContainerInfo, } from '../../../types'; const pluginFactory: BuilderComponentPluginFactory = () => { diff --git a/packages/code-generator/src/plugins/project/framework/rax/plugins/packageJSON.ts b/packages/code-generator/src/plugins/project/framework/rax/plugins/packageJSON.ts index b834a2855..6ea209f39 100644 --- a/packages/code-generator/src/plugins/project/framework/rax/plugins/packageJSON.ts +++ b/packages/code-generator/src/plugins/project/framework/rax/plugins/packageJSON.ts @@ -85,7 +85,7 @@ function getNpmDependencies(project: IProjectInfo): NpmInfo[] { const npmDeps: NpmInfo[] = []; const npmNameToPkgMap = new Map(); - const allDeps = [...(project.containersDeps || []), ...(project.utilsDeps || [])]; + const allDeps = project.packages; allDeps.forEach((dep) => { if (!isNpmInfo(dep)) { diff --git a/packages/code-generator/src/types/intermediate.ts b/packages/code-generator/src/types/intermediate.ts index 816d7ce05..145a86994 100644 --- a/packages/code-generator/src/types/intermediate.ts +++ b/packages/code-generator/src/types/intermediate.ts @@ -38,10 +38,7 @@ export interface IProjectInfo { constants?: JSONObject; i18n?: I18nMap; packages: INpmPackage[]; - meta?: { - name?: string; - title?: string; - }; + meta?: { name?: string; title?: string } | Record; config?: Record; } diff --git a/packages/code-generator/src/utils/nodeToJSX.ts b/packages/code-generator/src/utils/nodeToJSX.ts index a93ec64d2..173dad20e 100644 --- a/packages/code-generator/src/utils/nodeToJSX.ts +++ b/packages/code-generator/src/utils/nodeToJSX.ts @@ -43,6 +43,14 @@ function mergeNodeGeneratorConfig(cfg1: NodeGeneratorConfig, cfg2: NodeGenerator return resCfg; } +export function isPureString(v: string) { + return v[0] === "'" && v[v.length - 1] === "'"; +} + +export function getPureStringContent(v: string) { + return v.substring(1, v.length - 1); +} + function generateAttrValue( attrData: { attrName: string; attrValue: CompositeValue }, scope: IScope, @@ -84,8 +92,9 @@ function generateAttr( // FIXME: 在经过 generateCompositeType 处理过之后,其实已经无法通过传入值的类型判断传出值是否为纯字面值字符串了(可能包裹了加工函数之类的) // 因此这个处理最好的方式是对传出值做语法分析,判断以哪种模版产出 Attr 值 let newValue: string; - if (p.value && p.value[0] === "'" && p.value[p.value.length - 1] === "'") { - newValue = `"${p.value.substring(1, p.value.length - 1)}"`; + if (p.value && isPureString(p.value)) { + const content = getPureStringContent(p.value); + newValue = `"${content}"`; } else { newValue = `{${p.value}}`; } @@ -139,8 +148,17 @@ function generateBasicNode(nodeItem: NodeSchema, scope: IScope, config?: NodeGen function generateSimpleNode(nodeItem: NodeSchema, scope: IScope, config?: NodeGeneratorConfig): CodePiece[] { const basicParts = generateBasicNode(nodeItem, scope, config) || []; const attrParts = generateAttrs(nodeItem, scope, config) || []; + const childrenParts: CodePiece[] = []; + if (nodeItem.children && config?.self) { + const childrenStr = config.self(nodeItem.children, scope); - return [...basicParts, ...attrParts]; + childrenParts.push({ + type: PIECE_TYPE.CHILDREN, + value: childrenStr, + }); + } + + return [...basicParts, ...attrParts, ...childrenParts]; } function linkPieces(pieces: CodePiece[]): string { @@ -194,15 +212,6 @@ function generateNodeSchema(nodeItem: NodeSchema, scope: IScope, config?: NodeGe pieces.push(...generateSimpleNode(nodeItem, scope, config)); } - if (nodeItem.children && config?.self) { - const childrenStr = config.self(nodeItem.children, scope); - - pieces.push({ - type: PIECE_TYPE.CHILDREN, - value: childrenStr, - }); - } - return linkPieces(pieces); } @@ -331,10 +340,16 @@ export function createNodeGenerator(cfg: NodeGeneratorConfig = {}): NodeGenerato }); } - return generateCompositeType(nodeItem, scope, { + const valueStr = generateCompositeType(nodeItem, scope, { handlers: cfg.handlers, nodeGenerator: generateNode, }); + + if (isPureString(valueStr)) { + return getPureStringContent(valueStr); + } + + return `{${valueStr}}`; }; return generateNode; diff --git a/packages/types/src/schema.ts b/packages/types/src/schema.ts index d65bd5643..d14b536b6 100644 --- a/packages/types/src/schema.ts +++ b/packages/types/src/schema.ts @@ -99,6 +99,7 @@ export interface ProjectSchema { css?: string; dataSource?: DataSource; config?: Record; + meta?: Record; } export function isNodeSchema(data: any): data is NodeSchema { diff --git a/scripts/setup.sh b/scripts/setup.sh index 7aced60d2..ee864f795 100755 --- a/scripts/setup.sh +++ b/scripts/setup.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -tnpm i -g lerna @ali/tyarn +tnpm i -g lerna @ali/tyarn tsc rm -rf node_modules package-lock.json yarn.lock lerna clean -y