@dckj-npm/lowcode-code-generator 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/cli/index.ts", "../src/cli/run.ts", "../src/utils/errors.ts", "../src/parser/SchemaParser.ts", "../src/types/error.ts", "../src/const/index.ts", "../src/const/file.ts", "../src/const/generator.ts", "../src/utils/schema.ts", "../src/utils/common.ts", "../src/analyzer/componentAnalyzer.ts", "../src/utils/validate.ts", "../src/utils/resultHelper.ts", "../src/generator/ChunkBuilder.ts", "../src/generator/CodeBuilder.ts", "../src/generator/ModuleBuilder.ts", "../src/generator/ProjectBuilder.ts", "../src/publisher/disk/index.ts", "../src/publisher/disk/utils.ts", "../src/publisher/zip/utils.ts", "../src/publisher/zip/index.ts", "../src/plugins/common/esmodule.ts", "../src/plugins/common/styleImport.ts", "../src/plugins/component/react/containerClass.ts", "../src/plugins/component/react/const.ts", "../src/utils/compositeType.ts", "../src/utils/jsExpression.ts", "../src/utils/expressionParser.ts", "../src/utils/OrderedSet.ts", "../src/utils/jsSlot.ts", "../src/utils/jsxHelpers.ts", "../src/utils/aopHelper.ts", "../src/utils/Scope.ts", "../src/utils/ScopeBindings.ts", "../src/plugins/component/react/containerInitState.ts", "../src/plugins/component/react/containerInjectContext.ts", "../src/utils/pathHelper.ts", "../src/plugins/component/react/containerInjectUtils.ts", "../src/plugins/component/react/containerInjectDataSourceEngine.ts", "../src/plugins/component/react/containerInjectConstants.ts", "../src/plugins/component/react/containerInjectI18n.ts", "../src/plugins/component/react/containerLifeCycle.ts", "../src/plugins/component/react/containerMethod.ts", "../src/utils/nodeToJSX.ts", "../src/utils/encodeJsxAttrString.ts", "../src/core/jsx/handlers/transformThis2Context.ts", "../src/core/jsx/util/isLiteralAtomicExpr.ts", "../src/core/jsx/util/isSimpleStraightLiteral.ts", "../src/core/jsx/handlers/transformJsExpression.ts", "../src/plugins/component/react/jsx.ts", "../src/plugins/component/react/reactCommonDeps.ts", "../src/plugins/component/style/css.ts", "../src/plugins/project/constants.ts", "../src/plugins/project/i18n.ts", "../src/plugins/project/utils.ts", "../src/utils/templateHelper.ts", "../src/plugins/project/framework/icejs/template/files/abc.json.ts", "../src/plugins/project/framework/icejs/template/files/build.json.ts", "../src/plugins/project/framework/icejs/template/files/editorconfig.ts", "../src/plugins/project/framework/icejs/template/files/eslintignore.ts", "../src/plugins/project/framework/icejs/template/files/eslintrc.js.ts", "../src/plugins/project/framework/icejs/template/files/gitignore.ts", "../src/plugins/project/framework/icejs/template/files/jsconfig.json.ts", "../src/plugins/project/framework/icejs/template/files/prettierignore.ts", "../src/plugins/project/framework/icejs/template/files/prettierrc.js.ts", "../src/plugins/project/framework/icejs/template/files/README.md.ts", "../src/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/components/Footer/index.jsx.ts", "../src/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/components/Footer/index.style.ts", "../src/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/components/Logo/index.jsx.ts", "../src/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/components/Logo/index.style.ts", "../src/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/components/PageNav/index.jsx.ts", "../src/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/index.jsx.ts", "../src/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/menuConfig.js.ts", "../src/plugins/project/framework/icejs/template/files/stylelintignore.ts", "../src/plugins/project/framework/icejs/template/files/stylelintrc.js.ts", "../src/plugins/project/framework/icejs/template/files/tsconfig.json.ts", "../src/plugins/project/framework/icejs/template/static-files.ts", "../src/plugins/project/framework/icejs/template/index.ts", "../src/plugins/project/framework/icejs/plugins/entry.ts", "../src/plugins/project/framework/icejs/plugins/entryHtml.ts", "../src/plugins/project/framework/icejs/plugins/globalStyle.ts", "../src/utils/dataSource.ts", "../src/plugins/project/framework/icejs/plugins/packageJSON.ts", "../src/plugins/project/framework/icejs/plugins/router.ts", "../src/plugins/project/framework/icejs/index.ts", "../src/postprocessor/prettier/index.ts", "../src/solutions/icejs.ts", "../src/plugins/project/framework/icejs3/template/files/gitignore.ts", "../src/plugins/project/framework/icejs3/template/files/README.md.ts", "../src/plugins/project/framework/icejs3/template/files/browserslistrc.ts", "../src/plugins/project/framework/icejs3/template/files/typings.ts", "../src/plugins/project/framework/icejs3/template/files/document.ts", "../src/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/components/Footer/index.jsx.ts", "../src/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/components/Footer/index.style.ts", "../src/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/components/Logo/index.jsx.ts", "../src/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/components/Logo/index.style.ts", "../src/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/components/PageNav/index.jsx.ts", "../src/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/index.jsx.ts", "../src/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/menuConfig.js.ts", "../src/plugins/project/framework/icejs3/template/static-files.ts", "../src/plugins/project/framework/icejs3/template/index.ts", "../src/plugins/project/framework/icejs3/plugins/globalStyle.ts", "../src/plugins/project/framework/icejs3/plugins/packageJSON.ts", "../src/plugins/project/framework/icejs3/plugins/layout.ts", "../src/plugins/project/framework/icejs3/plugins/appConfig.ts", "../src/utils/format.ts", "../src/utils/theme.ts", "../src/plugins/project/framework/icejs3/plugins/buildConfig.ts", "../src/plugins/project/framework/icejs3/index.ts", "../src/solutions/icejs3.ts", "../src/plugins/component/rax/containerClass.ts", "../src/plugins/component/rax/const.ts", "../src/plugins/component/rax/containerLifeCycle.ts", "../src/utils/debug.ts", "../src/plugins/component/rax/containerMethods.ts", "../src/plugins/component/rax/containerInitState.ts", "../src/plugins/component/rax/containerInjectContext.ts", "../src/plugins/component/rax/containerInjectDataSourceEngine.ts", "../src/plugins/component/rax/containerInjectUtils.ts", "../src/plugins/component/rax/jsx.ts", "../src/plugins/component/rax/commonDeps.ts", "../src/plugins/project/framework/rax/template/files/.eslintignore.ts", "../src/plugins/project/framework/rax/template/files/.eslintrc.js.ts", "../src/plugins/project/framework/rax/template/files/.gitignore.ts", "../src/plugins/project/framework/rax/template/files/.prettierignore.ts", "../src/plugins/project/framework/rax/template/files/.prettierrc.js.ts", "../src/plugins/project/framework/rax/template/files/.stylelintignore.ts", "../src/plugins/project/framework/rax/template/files/.stylelintrc.js.ts", "../src/plugins/project/framework/rax/template/files/jsconfig.json.ts", "../src/plugins/project/framework/rax/template/files/README.md.ts", "../src/plugins/project/framework/rax/template/files/tsconfig.json.ts", "../src/plugins/project/framework/rax/template/static-files.ts", "../src/plugins/project/framework/rax/template/index.ts", "../src/plugins/project/framework/rax/plugins/entry.ts", "../src/plugins/project/framework/rax/plugins/appConfig.ts", "../src/plugins/project/framework/rax/plugins/buildConfig.ts", "../src/plugins/project/framework/rax/plugins/entryDocument.ts", "../src/plugins/project/framework/rax/plugins/globalStyle.ts", "../src/utils/version.ts", "../src/plugins/project/framework/rax/plugins/packageJSON.ts", "../src/plugins/project/framework/rax/index.ts", "../src/solutions/rax-app.ts", "../src/plugins/component/vue/containerVue.ts", "../src/utils/nodeToTemplate.ts", "../src/core/vue/util/isLiteralAtomicExpr.ts", "../src/core/vue/util/isSimpleStraightLiteral.ts", "../src/core/vue/handlers/transformThis2Context.ts", "../src/core/vue/handlers/transformJsExpression.ts", "../src/plugins/component/vue/template.ts", "../src/plugins/component/vue/vueCommonDeps.ts", "../src/utils/apiHandler.ts", "../src/plugins/component/vue/apiImport.ts", "../src/plugins/component/vue/esmodule.ts", "../src/plugins/component/vue/containerInitVariable.ts", "../src/plugins/component/vue/containerLifeCycle.ts", "../src/utils/changeCase.ts", "../src/utils/requestHandle.ts", "../src/plugins/component/vue/containerInjectDataSourceEngine.ts", "../src/plugins/component/vue/containerMethod.ts", "../src/plugins/project/framework/vuejs3/template/files/env.ts", "../src/plugins/project/framework/vuejs3/template/files/eslintignore.ts", "../src/plugins/project/framework/vuejs3/template/files/eslintrc.yml.ts", "../src/plugins/project/framework/vuejs3/template/files/gitignore.ts", "../src/plugins/project/framework/vuejs3/template/files/npmrc.ts", "../src/plugins/project/framework/vuejs3/template/files/prettierignore.ts", "../src/plugins/project/framework/vuejs3/template/files/prettierrc.yml.ts", "../src/plugins/project/framework/vuejs3/template/files/index.html.ts", "../src/plugins/project/framework/vuejs3/template/files/postcss.config.cjs.ts", "../src/plugins/project/framework/vuejs3/template/files/tsconfig.json.ts", "../src/plugins/project/framework/vuejs3/template/files/tsconfig.node.json.ts", "../src/plugins/project/framework/vuejs3/template/files/vite.config.ts.ts", "../src/plugins/project/framework/vuejs3/template/files/css/global.scss.ts", "../src/plugins/project/framework/vuejs3/template/files/css/mixin.scss.ts", "../src/plugins/project/framework/vuejs3/template/files/css/theme.css.ts", "../src/plugins/project/framework/vuejs3/template/files/src/App.vue.ts", "../src/plugins/project/framework/vuejs3/template/files/src/main.ts", "../src/plugins/project/framework/vuejs3/template/files/src/vite-env.ts", "../src/plugins/project/framework/vuejs3/template/files/src/views/index/welcome.vue.ts", "../src/plugins/project/framework/vuejs3/template/files/src/views/index/tabs.ts", "../src/plugins/project/framework/vuejs3/template/static-files.ts", "../src/plugins/project/framework/vuejs3/template/index.ts", "../src/plugins/project/framework/vuejs3/plugins/packageJSON.ts", "../src/plugins/project/framework/vuejs3/plugins/router.ts", "../src/plugins/project/framework/vuejs3/index.ts", "../src/solutions/vuejs3.ts", "../src/plugins/common/requireUtils.ts", "../src/utils/index.ts", "../src/index.ts", "../src/cli/init-solution.ts", "../src/cli/solutions/example-solution.ts"],
4
+ "sourcesContent": ["export * from './run';\r\nexport * from './init-solution';\r\n", "/* eslint-disable no-console */\r\nimport chalk from 'chalk';\r\nimport * as fs from 'fs-extra';\r\nimport JSON5 from 'json5';\r\nimport { jsonc } from 'jsonc';\r\nimport { spawnSync } from 'child_process';\r\nimport * as path from 'path';\r\n\r\nimport { getErrorMessage } from '../utils/errors';\r\nimport CodeGenerator from '..';\r\nimport type { IProjectBuilder } from '..';\r\nimport type { IPublicTypeProjectSchema } from '@alilc/lowcode-types';\r\n\r\n/**\r\n * \u6267\u884C\u51FA\u7801 CLI \u547D\u4EE4\r\n * @param args \u5165\u53C2\u6570\u7EC4\r\n * @param options \u9009\u9879\r\n * @returns {Promise<number>} \u9519\u8BEF\u7801\r\n */\r\nexport async function run(\r\n args: string[],\r\n options: {\r\n solution: string;\r\n input?: string;\r\n output?: string;\r\n quiet?: boolean;\r\n verbose?: boolean;\r\n solutionOptions?: string;\r\n },\r\n): Promise<number> {\r\n try {\r\n const schemaFile = options.input || args[0];\r\n if (!schemaFile) {\r\n throw new Error(\r\n 'a schema file must be specified by `--input <schema.json>` or by the first positional argument',\r\n );\r\n }\r\n\r\n if ((options.input && args.length > 0) || args.length > 1) {\r\n throw new Error(\r\n 'only one schema file can be specified, either by `--input <schema.json>` or by the first positional argument',\r\n );\r\n }\r\n\r\n let solutionOptions = {};\r\n\r\n if (options.solutionOptions) {\r\n try {\r\n solutionOptions = JSON.parse(options.solutionOptions);\r\n } catch (err: any) {\r\n throw new Error(\r\n `solution options parse error, error message is \"${err.message}\"`,\r\n );\r\n }\r\n }\r\n\r\n\r\n // \u8BFB\u53D6 Schema\r\n const schema = await loadSchemaFile(schemaFile);\r\n\r\n // \u521B\u5EFA\u4E00\u4E2A\u9879\u76EE\u6784\u5EFA\u5668\r\n const createProjectBuilder = await getProjectBuilderFactory(options.solution, {\r\n quiet: options.quiet,\r\n });\r\n const builder = createProjectBuilder(solutionOptions);\r\n\r\n // \u751F\u6210\u4EE3\u7801\r\n const generatedSourceCodes = await builder.generateProject(schema);\r\n\r\n // \u8F93\u51FA\u5230\u78C1\u76D8\r\n const publisher = CodeGenerator.publishers.disk();\r\n\r\n await publisher.publish({\r\n project: generatedSourceCodes,\r\n outputPath: options.output || 'generated',\r\n projectSlug: 'example',\r\n createProjectFolder: false,\r\n });\r\n return 0;\r\n } catch (e) {\r\n console.log(chalk.red(getErrorMessage(e) || `Unexpected error: ${e}`));\r\n if (typeof e === 'object' && (e as { stack: string } | null)?.stack && options.verbose) {\r\n console.log(chalk.gray((e as { stack: string }).stack));\r\n }\r\n return 1;\r\n }\r\n}\r\n\r\nasync function getProjectBuilderFactory(\r\n solution: string,\r\n { quiet }: { quiet?: boolean },\r\n): Promise<(options: {[prop: string]: any}) => IProjectBuilder> {\r\n if (solution in CodeGenerator.solutions) {\r\n return CodeGenerator.solutions[solution as 'icejs' | 'rax'];\r\n }\r\n\r\n const solutionPackageName = isLocalSolution(solution)\r\n ? solution\r\n : `${solution.startsWith('@') ? solution : `@alilc/lowcode-solution-${solution}`}`;\r\n\r\n if (!isLocalSolution(solution)) {\r\n if (!quiet) {\r\n console.log(`\"${solution}\" is not internal, installing it as ${solutionPackageName}...`);\r\n }\r\n\r\n spawnSync('npm', ['i', solutionPackageName], {\r\n stdio: quiet ? 'ignore' : 'inherit',\r\n });\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const solutionExports = require(!isLocalSolution(solution)\r\n ? solutionPackageName\r\n : `${path.isAbsolute(solution) ? solution : path.join(process.cwd(), solution)}`);\r\n\r\n const projectBuilderFactory =\r\n solutionExports.createProjectBuilder ||\r\n solutionExports.createAppBuilder ||\r\n solutionExports.default;\r\n\r\n if (typeof projectBuilderFactory !== 'function') {\r\n throw new Error(\r\n `\"${solutionPackageName}\" should export project builder factory via named export 'createProjectBuilder' or via default export`,\r\n );\r\n }\r\n\r\n return projectBuilderFactory;\r\n}\r\n\r\nfunction isLocalSolution(solution: string) {\r\n return solution.startsWith('.') || solution.startsWith('/') || solution.startsWith('~');\r\n}\r\n\r\nasync function loadSchemaFile(schemaFile: string): Promise<IPublicTypeProjectSchema> {\r\n if (!schemaFile) {\r\n throw new Error('invalid schema file name');\r\n }\r\n\r\n const schemaFileContent = await fs.readFile(schemaFile, 'utf8');\r\n\r\n if (/\\.json5/.test(schemaFile)) {\r\n return JSON5.parse(schemaFileContent);\r\n }\r\n\r\n // \u9ED8\u8BA4\u7528 JSONC \u7684\u683C\u5F0F\u89E3\u6790\uFF08\u517C\u5BB9 JSON\uFF09\r\n return jsonc.parse(schemaFileContent);\r\n}\r\n", "/**\r\n * \u83B7\u53D6\u9519\u8BEF\u4FE1\u606F\r\n */\r\nexport function getErrorMessage(error: unknown): string | null {\r\n if (!error) {\r\n return null;\r\n }\r\n\r\n if (error instanceof Error) {\r\n return error.message;\r\n }\r\n\r\n if (typeof error === 'string') {\r\n return error;\r\n }\r\n\r\n if (typeof error === 'object' && error !== null) {\r\n return (\r\n getErrorMessage((error as { message: string }).message) ||\r\n getErrorMessage((error as { errorMessage: string }).errorMessage) ||\r\n getErrorMessage((error as { detail: string }).detail)\r\n );\r\n }\r\n\r\n return null;\r\n}\r\n", "/**\r\n * \u89E3\u6790\u5668\u662F\u5BF9\u8F93\u5165\u7684\u56FA\u5B9A\u683C\u5F0F\u6570\u636E\u505A\u62C6\u89E3\uFF0C\u4F7F\u5176\u7B26\u5408\u5F15\u64CE\u540E\u7EED\u6B65\u9AA4\u9884\u671F\uFF0C\u5B8C\u6210\u7EDF\u4E00\u5904\u7406\u903B\u8F91\u7684\u6B65\u9AA4\u3002\r\n * \u672C\u89E3\u6790\u5668\u9762\u5411\u7684\u662F\u6807\u51C6 schema \u534F\u8BAE\u3002\r\n */\r\nimport changeCase from 'change-case';\r\nimport {\r\n IPublicTypeUtilItem,\r\n IPublicTypeNodeDataType,\r\n IPublicTypeNodeSchema,\r\n IPublicTypeContainerSchema,\r\n IPublicTypeProjectSchema,\r\n IPublicTypePropsMap,\r\n IPublicTypeNodeData,\r\n IPublicTypeNpmInfo,\r\n} from '@alilc/lowcode-types';\r\nimport {\r\n IPageMeta,\r\n CodeGeneratorError,\r\n CompatibilityError,\r\n DependencyType,\r\n IContainerInfo,\r\n IDependency,\r\n IExternalDependency,\r\n IInternalDependency,\r\n InternalDependencyType,\r\n IParseResult,\r\n ISchemaParser,\r\n INpmPackage,\r\n IRouterInfo,\r\n} from '../types';\r\n\r\nimport { SUPPORT_SCHEMA_VERSION_LIST } from '../const';\r\n\r\nimport { getErrorMessage } from '../utils/errors';\r\nimport { handleSubNodes, isValidContainerType, ContainerType } from '../utils/schema';\r\nimport { uniqueArray } from '../utils/common';\r\nimport { componentAnalyzer } from '../analyzer/componentAnalyzer';\r\nimport { ensureValidClassName } from '../utils/validate';\r\nimport type { ProjectRemark } from '../types/intermediate';\r\n\r\nconst defaultContainer: IContainerInfo = {\r\n containerType: 'Component',\r\n componentName: 'Component',\r\n moduleName: 'Index',\r\n fileName: 'Index',\r\n css: '',\r\n props: {},\r\n};\r\n\r\nfunction getRootComponentName(typeName: string, maps: Record<string, IExternalDependency>): string {\r\n if (maps[typeName]) {\r\n const rec = maps[typeName];\r\n if (rec.destructuring) {\r\n return rec.componentName || typeName;\r\n }\r\n\r\n const peerName = Object.keys(maps).find((depName: string) => {\r\n const depInfo = maps[depName];\r\n return (\r\n depName !== typeName &&\r\n !depInfo.destructuring &&\r\n depInfo.package === rec.package &&\r\n depInfo.version === rec.version &&\r\n depInfo.main === rec.main &&\r\n depInfo.exportName === rec.exportName &&\r\n depInfo.subName === rec.subName\r\n );\r\n });\r\n\r\n return peerName || typeName;\r\n }\r\n return typeName;\r\n}\r\n\r\nfunction processChildren(schema: IPublicTypeNodeSchema): void {\r\n if (schema.props) {\r\n if (Array.isArray(schema.props)) {\r\n // FIXME: is array type props description\r\n } else {\r\n const nodeProps = schema.props as IPublicTypePropsMap;\r\n if (nodeProps.children) {\r\n if (!schema.children) {\r\n // eslint-disable-next-line no-param-reassign\r\n schema.children = nodeProps.children as IPublicTypeNodeDataType;\r\n } else {\r\n let _children: IPublicTypeNodeData[] = [];\r\n\r\n if (Array.isArray(schema.children)) {\r\n _children = _children.concat(schema.children);\r\n } else {\r\n _children.push(schema.children);\r\n }\r\n\r\n if (Array.isArray(nodeProps.children)) {\r\n _children = _children.concat(nodeProps.children as IPublicTypeNodeData[]);\r\n } else {\r\n _children.push(nodeProps.children as IPublicTypeNodeData);\r\n }\r\n\r\n // eslint-disable-next-line no-param-reassign\r\n schema.children = _children;\r\n }\r\n delete nodeProps.children;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction getInternalDep(internalDeps: Record<string, IInternalDependency>, depName: string) {\r\n const dep = internalDeps[depName];\r\n return (dep && dep.type !== InternalDependencyType.PAGE) ? dep : null;\r\n}\r\n\r\nexport class SchemaParser implements ISchemaParser {\r\n validate(schema: IPublicTypeProjectSchema): boolean {\r\n if (SUPPORT_SCHEMA_VERSION_LIST.indexOf(schema.version) < 0) {\r\n throw new CompatibilityError(`Not support schema with version [${schema.version}]`);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n parse(schemaSrc: IPublicTypeProjectSchema | string): IParseResult {\r\n // TODO: collect utils depends in JSExpression\r\n const compDeps: Record<string, IExternalDependency> = {};\r\n const internalDeps: Record<string, IInternalDependency> = {};\r\n let utilsDeps: IExternalDependency[] = [];\r\n\r\n const schema = this.decodeSchema(schemaSrc);\r\n\r\n // \u89E3\u6790\u4E09\u65B9\u7EC4\u4EF6\u4F9D\u8D56\r\n schema.componentsMap.forEach((info: any) => {\r\n if (info.componentName) {\r\n compDeps[info.componentName] = {\r\n ...info,\r\n dependencyType: DependencyType.External,\r\n componentName: info.componentName,\r\n exportName: info.exportName ?? info.componentName,\r\n version: info.version || '*',\r\n destructuring: info.destructuring ?? false,\r\n };\r\n }\r\n });\r\n\r\n let containers: IContainerInfo[];\r\n // Test if this is a lowcode component without container\r\n if (schema.componentsTree.length > 0) {\r\n const firstRoot: IPublicTypeContainerSchema = schema.componentsTree[0] as IPublicTypeContainerSchema;\r\n\r\n if (!firstRoot.fileName && !isValidContainerType(firstRoot)) {\r\n // \u6574\u4E2A schema \u63CF\u8FF0\u4E00\u4E2A\u5BB9\u5668\uFF0C\u4E14\u65E0\u6839\u8282\u70B9\u5B9A\u4E49\r\n const container: IContainerInfo = {\r\n ...firstRoot,\r\n ...defaultContainer,\r\n props: firstRoot.props || defaultContainer.props,\r\n css: firstRoot.css || defaultContainer.css,\r\n moduleName: (firstRoot as IContainerInfo).moduleName || defaultContainer.moduleName,\r\n children: schema.componentsTree as IPublicTypeNodeSchema[],\r\n };\r\n containers = [container];\r\n } else {\r\n // \u666E\u901A\u5E26 1 \u5230\u591A\u4E2A\u5BB9\u5668\u7684 schema\r\n containers = schema.componentsTree.map((n) => {\r\n const subRoot = n as IPublicTypeContainerSchema;\r\n const container: IContainerInfo = {\r\n ...subRoot,\r\n componentName: getRootComponentName(subRoot.componentName, compDeps),\r\n containerType: subRoot.componentName,\r\n moduleName: ensureValidClassName(subRoot.componentName === ContainerType.Component ?\r\n subRoot.fileName : changeCase.pascalCase(subRoot.fileName)),\r\n };\r\n return container;\r\n });\r\n }\r\n } else {\r\n throw new CodeGeneratorError(\"Can't find anything to generate.\");\r\n }\r\n\r\n // \u5206\u6790\u5F15\u7528\u80FD\u529B\u7684\u4F9D\u8D56\r\n containers = containers.map((con) => ({\r\n ...con,\r\n analyzeResult: componentAnalyzer(con as IPublicTypeContainerSchema),\r\n }));\r\n\r\n // \u5EFA\u7ACB\u6240\u6709\u5BB9\u5668\u7684\u5185\u90E8\u4F9D\u8D56\u7D22\u5F15\r\n containers.forEach((container) => {\r\n let type;\r\n switch (container.containerType) {\r\n case 'Page':\r\n type = InternalDependencyType.PAGE;\r\n break;\r\n case 'Block':\r\n type = InternalDependencyType.BLOCK;\r\n break;\r\n default:\r\n type = InternalDependencyType.COMPONENT;\r\n break;\r\n }\r\n\r\n const dep: IInternalDependency = {\r\n type,\r\n moduleName: container.moduleName,\r\n destructuring: false,\r\n exportName: container.moduleName,\r\n dependencyType: DependencyType.Internal,\r\n };\r\n\r\n internalDeps[dep.moduleName] = dep;\r\n });\r\n\r\n const containersDeps = ([] as IDependency[]).concat(...containers.map((c) => c.deps || []));\r\n // TODO: \u4E0D\u5E94\u8BE5\u5728\u51FA\u7801\u90E8\u5206\u89E3\u51B3\uFF1F\r\n // \u5904\u7406 children \u5199\u5728\u4E86 props \u91CC\u7684\u60C5\u51B5\r\n containers.forEach((container) => {\r\n if (container.children) {\r\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\r\n handleSubNodes<void>(\r\n container.children,\r\n {\r\n node: (i: IPublicTypeNodeSchema) => processChildren(i),\r\n },\r\n {\r\n rerun: true,\r\n },\r\n );\r\n }\r\n });\r\n\r\n containers.forEach((container) => {\r\n const depNames = this.getComponentNames(container);\r\n // eslint-disable-next-line no-param-reassign\r\n container.deps = uniqueArray<string>(depNames, (i: string) => i)\r\n .map((depName) => getInternalDep(internalDeps, depName) || compDeps[depName])\r\n .filter(Boolean);\r\n // container.deps = Object.keys(compDeps).map((depName) => compDeps[depName]);\r\n });\r\n\r\n // \u5206\u6790\u8DEF\u7531\u914D\u7F6E\r\n const routes: IRouterInfo['routes'] = containers\r\n .filter((container) => container.containerType === 'Page')\r\n .map((page) => {\r\n const { meta } = page;\r\n if (meta) {\r\n return {\r\n path: (meta as IPageMeta).router || `/${page.fileName}`, // \u5982\u679C\u65E0\u6CD5\u627E\u5230\u9875\u9762\u8DEF\u7531\u4FE1\u606F\uFF0C\u5219\u7528 fileName \u505A\u515C\u5E95\r\n fileName: page.fileName,\r\n componentName: page.moduleName,\r\n };\r\n }\r\n\r\n return {\r\n path: '',\r\n fileName: page.fileName,\r\n componentName: page.moduleName,\r\n };\r\n });\r\n\r\n const routerDeps = routes\r\n .map((r) => internalDeps[r.componentName] || compDeps[r.componentName])\r\n .filter((dep) => !!dep);\r\n\r\n // \u5206\u6790 Utils \u4F9D\u8D56\r\n let utils: IPublicTypeUtilItem[];\r\n if (schema.utils) {\r\n utils = schema.utils;\r\n utilsDeps = schema.utils\r\n .filter(\r\n (u): u is { name: string; type: 'npm' | 'tnpm'; content: IPublicTypeNpmInfo } => u.type !== 'function',\r\n )\r\n .map(\r\n (u): IExternalDependency => ({\r\n ...u.content,\r\n componentName: u.name,\r\n version: u.content.version || '*',\r\n destructuring: u.content.destructuring ?? false,\r\n exportName: u.content.exportName ?? u.name,\r\n }),\r\n );\r\n } else {\r\n utils = [];\r\n }\r\n\r\n // \u5206\u6790\u9879\u76EE npm \u4F9D\u8D56\r\n let npms: INpmPackage[] = [];\r\n containers.forEach((con) => {\r\n const p = (con.deps || [])\r\n .map((dep) => {\r\n return dep.dependencyType === DependencyType.External ? dep : null;\r\n })\r\n .filter((dep) => dep !== null);\r\n const npmInfos: INpmPackage[] = p.filter(Boolean).map((i) => ({\r\n package: (i as IExternalDependency).package,\r\n version: (i as IExternalDependency).version,\r\n }));\r\n npms.push(...npmInfos);\r\n });\r\n\r\n npms.push(\r\n ...utilsDeps.map((utilsDep) => ({\r\n package: utilsDep.package,\r\n version: utilsDep.version,\r\n })),\r\n );\r\n\r\n npms = uniqueArray<INpmPackage>(npms, (i) => i.package).filter(Boolean);\r\n\r\n return {\r\n containers,\r\n globalUtils: {\r\n utils,\r\n deps: utilsDeps,\r\n },\r\n globalI18n: schema.i18n,\r\n globalRouter: {\r\n routes,\r\n deps: routerDeps,\r\n },\r\n project: {\r\n css: schema.css,\r\n constants: schema.constants,\r\n config: schema.config || {},\r\n meta: schema.meta || {},\r\n i18n: schema.i18n,\r\n containersDeps,\r\n utilsDeps,\r\n packages: npms || [],\r\n dataSourcesTypes: this.collectDataSourcesTypes(schema),\r\n projectRemark: this.getProjectRemark(containers),\r\n },\r\n };\r\n }\r\n\r\n getProjectRemark(containers: IContainerInfo[]): ProjectRemark {\r\n return {\r\n isSingleComponent: containers.length === 1 && containers[0].containerType === 'Component',\r\n };\r\n }\r\n\r\n getComponentNames(children: IPublicTypeNodeDataType): string[] {\r\n return handleSubNodes<string>(\r\n children,\r\n {\r\n node: (i: IPublicTypeNodeSchema) => i.componentName,\r\n },\r\n {\r\n rerun: true,\r\n },\r\n );\r\n }\r\n\r\n decodeSchema(schemaSrc: string | IPublicTypeProjectSchema): IPublicTypeProjectSchema {\r\n let schema: IPublicTypeProjectSchema;\r\n if (typeof schemaSrc === 'string') {\r\n try {\r\n schema = JSON.parse(schemaSrc);\r\n } catch (error) {\r\n throw new CodeGeneratorError(\r\n `Parse schema failed: ${getErrorMessage(error) || 'unknown reason'}`,\r\n );\r\n }\r\n } else {\r\n schema = schemaSrc;\r\n }\r\n return schema;\r\n }\r\n\r\n private collectDataSourcesTypes(schema: IPublicTypeProjectSchema): string[] {\r\n const dataSourcesTypes = new Set<string>();\r\n\r\n // \u6570\u636E\u6E90\u7684\u9ED8\u8BA4\u7C7B\u578B\u4E3A fetch\r\n const defaultDataSourceType = 'fetch';\r\n\r\n // \u6536\u96C6\u5E94\u7528\u7EA7\u522B\u7684\u6570\u636E\u6E90\r\n schema.dataSource?.list?.forEach((ds) => {\r\n dataSourcesTypes.add(ds.type || defaultDataSourceType);\r\n });\r\n\r\n // \u6536\u96C6\u5BB9\u5668\u7EA7\u522B\u7684\u6570\u636E\u6E90\uFF08\u9875\u9762/\u7EC4\u4EF6/\u533A\u5757\uFF09\r\n schema.componentsTree.forEach((rootNode) => {\r\n rootNode.dataSource?.list?.forEach((ds) => {\r\n dataSourcesTypes.add(ds.type || defaultDataSourceType);\r\n });\r\n });\r\n\r\n return Array.from(dataSourcesTypes.values());\r\n }\r\n}\r\n\r\nexport default SchemaParser;\r\n", "/* eslint-disable @typescript-eslint/no-useless-constructor */\r\nexport class CodeGeneratorError extends Error {\r\n readonly detail?: unknown;\r\n\r\n constructor(message: string, detail?: unknown) {\r\n super(message);\r\n this.name = this.constructor.name;\r\n this.detail = detail;\r\n Object.setPrototypeOf(this, new.target.prototype);\r\n }\r\n}\r\n\r\nexport class ComponentValidationError extends CodeGeneratorError {}\r\n\r\nexport class CompatibilityError extends CodeGeneratorError {}\r\n\r\nexport class PublisherError extends CodeGeneratorError {}\r\n", "export const NATIVE_ELE_PKG = 'native';\r\n\r\nexport const CONTAINER_TYPE = {\r\n COMPONENT: 'Component',\r\n BLOCK: 'Block',\r\n PAGE: 'Page',\r\n};\r\n\r\nexport const SUPPORT_SCHEMA_VERSION_LIST = ['0.0.1', '1.0.0'];\r\n\r\n// built-in slot names which have been handled in ProjectBuilder\r\nexport const BUILTIN_SLOT_NAMES = [\r\n 'pages',\r\n 'components',\r\n 'router',\r\n 'entry',\r\n 'appConfig',\r\n 'buildConfig',\r\n 'constants',\r\n 'utils',\r\n 'i18n',\r\n 'globalStyle',\r\n 'htmlEntry',\r\n 'packageJSON',\r\n 'demo',\r\n];\r\n\r\nexport const isBuiltinSlotName = function (name: string) {\r\n return BUILTIN_SLOT_NAMES.includes(name);\r\n};\r\n\r\nexport * from './file';\r\nexport * from './generator';\r\n", "import { FileType } from '../types/core';\r\n\r\nexport const FILE_TYPE_FAMILY = [[FileType.TSX, FileType.TS, FileType.JSX, FileType.JS]];\r\n", "export const COMMON_CHUNK_NAME = {\r\n ExternalDepsImport: 'CommonExternalDependencyImport',\r\n InternalDepsImport: 'CommonInternalDependencyImport',\r\n ImportAliasDefine: 'CommonImportAliasDefine',\r\n FileVarDefine: 'CommonFileScopeVarDefine',\r\n FileUtilDefine: 'CommonFileScopeMethodDefine',\r\n FileMainContent: 'CommonFileMainContent',\r\n FileExport: 'CommonFileExport',\r\n StyleDepsImport: 'CommonStyleDepsImport',\r\n StyleCssContent: 'CommonStyleCssContent',\r\n HtmlContent: 'CommonHtmlContent',\r\n CustomContent: 'CommonCustomContent',\r\n};\r\n\r\nexport const CLASS_DEFINE_CHUNK_NAME = {\r\n Start: 'CommonClassDefineStart',\r\n ConstructorStart: 'CommonClassDefineConstructorStart',\r\n ConstructorContent: 'CommonClassDefineConstructorContent',\r\n ConstructorEnd: 'CommonClassDefineConstructorEnd',\r\n StaticVar: 'CommonClassDefineStaticVar',\r\n StaticMethod: 'CommonClassDefineStaticMethod',\r\n InsVar: 'CommonClassDefineInsVar',\r\n InsVarMethod: 'CommonClassDefineInsVarMethod',\r\n InsMethod: 'CommonClassDefineInsMethod',\r\n InsPrivateMethod: 'CommonClassDefineInsPrivateMethod',\r\n End: 'CommonClassDefineEnd',\r\n};\r\n\r\n// vue\u6A21\u677F\u7ED3\u6784\r\nexport const TEMPLATE_DEFINE_CHUNK_NAME = {\r\n TemplateStart: 'CommonTemplateDefineStart', // template\u5F00\u59CB\r\n TemplateDom: 'CommonTemplateDefineDom', // \u9875\u9762\u7ED3\u6784\r\n TemplateEnd: 'CommonTemplateDefineEnd', // template\u7ED3\u675F\r\n ScriptStart: 'CommonScriptDefineStart', // script\u5F00\u59CB\r\n ExternalDepsImport: 'CommonExternalDependencyImport', // \u5916\u90E8\u4F9D\u8D56\u5BFC\u5165\r\n InternalDepsImport: 'CommonInternalDependencyImport', // \u5185\u90E8\u4F9D\u8D56\u5BFC\u5165\r\n ConstVar: 'CommonScriptDefineConstVar', // const\u53D8\u91CF\u5B9A\u4E49\r\n LetVar: 'CommonScriptDefineLetVar', // let\u53D8\u91CF\u5B9A\u4E49\r\n OnMountedStart: 'CommonScriptDefineOnMountedStart', // mounted\u751F\u547D\u5468\u671F\u5F00\u59CB\r\n OnMountedContent: 'CommonScriptDefineOnMountedContent', // mounted\u751F\u547D\u5468\u671F\u5185\u5BB9\r\n OnMountedEnd: 'CommonScriptDefineOnMountedEnd', // mounted\u751F\u547D\u5468\u671F\u7ED3\u675F\r\n UnMountedStart: 'CommonScriptDefineUnMountedStart', // unmounted\u751F\u547D\u5468\u671F\u5F00\u59CB\r\n UnMountedContent: 'CommonScriptDefineUnMountedContent', // unmounted\u751F\u547D\u5468\u671F\u5185\u5BB9\r\n UnMountedEnd: 'CommonScriptDefineUnMountedEnd', // unmounted\u751F\u547D\u5468\u671F\u7ED3\u675F\r\n Method: 'CommonScriptDefineMethod', // \u65B9\u6CD5\u5B9A\u4E49\r\n ScriptEnd: 'CommonScriptDefineEnd', // script\u7ED3\u675F\r\n CssStyleStart: 'CommonCssStyleDefineStart', // css\u6837\u5F0F\u5F00\u59CB\r\n CssStyleImport: 'CommonCssStyleDefineImport', // \u6837\u5F0F\u5BFC\u5165\r\n CssStyleEnd: 'CommonCssStyleDefineEnd', // css\u6837\u5F0F\u7ED3\u675F\r\n};\r\n\r\nexport const DEFAULT_LINK_AFTER = {\r\n [COMMON_CHUNK_NAME.ExternalDepsImport]: [],\r\n [COMMON_CHUNK_NAME.InternalDepsImport]: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n [COMMON_CHUNK_NAME.ImportAliasDefine]: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport,\r\n ],\r\n [COMMON_CHUNK_NAME.FileVarDefine]: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n ],\r\n [COMMON_CHUNK_NAME.FileUtilDefine]: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n ],\r\n [CLASS_DEFINE_CHUNK_NAME.Start]: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n ],\r\n [CLASS_DEFINE_CHUNK_NAME.ConstructorStart]: [\r\n CLASS_DEFINE_CHUNK_NAME.Start,\r\n CLASS_DEFINE_CHUNK_NAME.StaticVar,\r\n CLASS_DEFINE_CHUNK_NAME.StaticMethod,\r\n CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n CLASS_DEFINE_CHUNK_NAME.InsVarMethod,\r\n ],\r\n [CLASS_DEFINE_CHUNK_NAME.ConstructorContent]: [CLASS_DEFINE_CHUNK_NAME.ConstructorStart],\r\n [CLASS_DEFINE_CHUNK_NAME.ConstructorEnd]: [\r\n CLASS_DEFINE_CHUNK_NAME.ConstructorStart,\r\n CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\r\n ],\r\n [CLASS_DEFINE_CHUNK_NAME.StaticVar]: [CLASS_DEFINE_CHUNK_NAME.Start],\r\n [CLASS_DEFINE_CHUNK_NAME.StaticMethod]: [\r\n CLASS_DEFINE_CHUNK_NAME.Start, CLASS_DEFINE_CHUNK_NAME.StaticVar,\r\n ],\r\n [CLASS_DEFINE_CHUNK_NAME.InsVar]: [\r\n CLASS_DEFINE_CHUNK_NAME.Start,\r\n CLASS_DEFINE_CHUNK_NAME.StaticVar,\r\n CLASS_DEFINE_CHUNK_NAME.StaticMethod,\r\n ],\r\n [CLASS_DEFINE_CHUNK_NAME.InsVarMethod]: [\r\n CLASS_DEFINE_CHUNK_NAME.Start,\r\n CLASS_DEFINE_CHUNK_NAME.StaticVar,\r\n CLASS_DEFINE_CHUNK_NAME.StaticMethod,\r\n CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n ],\r\n [CLASS_DEFINE_CHUNK_NAME.InsMethod]: [\r\n CLASS_DEFINE_CHUNK_NAME.Start,\r\n CLASS_DEFINE_CHUNK_NAME.StaticVar,\r\n CLASS_DEFINE_CHUNK_NAME.StaticMethod,\r\n CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n CLASS_DEFINE_CHUNK_NAME.InsVarMethod,\r\n CLASS_DEFINE_CHUNK_NAME.ConstructorEnd,\r\n ],\r\n [CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod]: [\r\n CLASS_DEFINE_CHUNK_NAME.Start,\r\n CLASS_DEFINE_CHUNK_NAME.StaticVar,\r\n CLASS_DEFINE_CHUNK_NAME.StaticMethod,\r\n CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n CLASS_DEFINE_CHUNK_NAME.InsVarMethod,\r\n CLASS_DEFINE_CHUNK_NAME.InsMethod,\r\n CLASS_DEFINE_CHUNK_NAME.ConstructorEnd,\r\n ],\r\n [CLASS_DEFINE_CHUNK_NAME.End]: [\r\n CLASS_DEFINE_CHUNK_NAME.Start,\r\n CLASS_DEFINE_CHUNK_NAME.StaticVar,\r\n CLASS_DEFINE_CHUNK_NAME.StaticMethod,\r\n CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n CLASS_DEFINE_CHUNK_NAME.InsVarMethod,\r\n CLASS_DEFINE_CHUNK_NAME.InsMethod,\r\n CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\r\n CLASS_DEFINE_CHUNK_NAME.ConstructorEnd,\r\n ],\r\n [COMMON_CHUNK_NAME.FileMainContent]: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n CLASS_DEFINE_CHUNK_NAME.End,\r\n ],\r\n [COMMON_CHUNK_NAME.FileExport]: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n CLASS_DEFINE_CHUNK_NAME.End,\r\n COMMON_CHUNK_NAME.FileMainContent,\r\n ],\r\n [COMMON_CHUNK_NAME.StyleDepsImport]: [],\r\n [COMMON_CHUNK_NAME.StyleCssContent]: [COMMON_CHUNK_NAME.StyleDepsImport],\r\n [COMMON_CHUNK_NAME.HtmlContent]: [],\r\n};\r\n\r\n// VUE\u4EE3\u7801\u5757\u63D2\u5165\u987A\u5E8F\r\nexport const VUE_DEFAULT_LINK_AFTER = {\r\n [TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart]: [],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.TemplateDom]: [TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.TemplateEnd]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart, TEMPLATE_DEFINE_CHUNK_NAME.TemplateDom\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.TemplateEnd,\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart,\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart,\r\n TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.ConstVar]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport,\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.LetVar]: [TEMPLATE_DEFINE_CHUNK_NAME.ConstVar],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.ConstVar,\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent]: [TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.OnMountedEnd]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart, TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent,\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.UnMountedStart]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.OnMountedEnd,\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.UnMountedContent]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.UnMountedStart,\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.UnMountedStart,\r\n TEMPLATE_DEFINE_CHUNK_NAME.UnMountedContent,\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.Method]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd,\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart, TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd, TEMPLATE_DEFINE_CHUNK_NAME.Method,\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.CssStyleStart]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd,\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.CssStyleImport]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.CssStyleStart,\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.CssStyleEnd]: [TEMPLATE_DEFINE_CHUNK_NAME.CssStyleStart, TEMPLATE_DEFINE_CHUNK_NAME.CssStyleImport]\r\n};\r\n\r\nexport const COMMON_SUB_MODULE_NAME = 'index';\r\n", "import * as _ from 'lodash';\r\nimport {\r\n IPublicTypeJSExpression,\r\n IPublicTypeNodeData,\r\n IPublicTypeNodeSchema,\r\n isJSExpression,\r\n isJSSlot,\r\n isDOMText,\r\n IPublicTypeContainerSchema,\r\n IPublicTypeNpmInfo,\r\n IPublicTypeCompositeValue,\r\n isNodeSchema,\r\n isJSFunction,\r\n} from '@alilc/lowcode-types';\r\nimport { CodeGeneratorError } from '../types/error';\r\nimport { isJSExpressionFn } from './common';\r\n\r\nexport function isContainerSchema(x: any): x is IPublicTypeContainerSchema {\r\n return (\r\n typeof x === 'object' &&\r\n x &&\r\n typeof x.componentName === 'string' &&\r\n typeof x.fileName === 'string'\r\n );\r\n}\r\n\r\nexport function isNpmInfo(x: any): x is IPublicTypeNpmInfo {\r\n return typeof x === 'object' && x && typeof x.package === 'string';\r\n}\r\n\r\nconst noop = () => undefined;\r\n\r\nconst handleChildrenDefaultOptions = {\r\n rerun: false,\r\n};\r\n\r\nconst DEFAULT_MAX_DEPTH = 100000;\r\n\r\n/**\r\n * \u904D\u5386\u5E76\u5904\u7406\u6240\u6709\u7684\u5B50\u8282\u70B9\r\n * @param children\r\n * @param handlers\r\n * @param options\r\n * @returns\r\n */\r\nexport function handleSubNodes<T>(\r\n children: IPublicTypeNodeSchema['children'],\r\n handlers: {\r\n string?: (i: string) => T;\r\n expression?: (i: IPublicTypeJSExpression) => T;\r\n node?: (i: IPublicTypeNodeSchema) => T;\r\n },\r\n options?: {\r\n rerun?: boolean;\r\n maxDepth?: number; // \u9632\u6B62\u51FA\u73B0\u6B7B\u5FAA\u73AF\u65E0\u7A77\u9012\u5F52\r\n },\r\n): T[] {\r\n const opt = {\r\n ...handleChildrenDefaultOptions,\r\n ...(options || {}),\r\n };\r\n const maxDepth = opt.maxDepth ?? DEFAULT_MAX_DEPTH;\r\n if (maxDepth <= 0) {\r\n throw new Error('handleSubNodes maxDepth reached');\r\n }\r\n\r\n if (Array.isArray(children)) {\r\n const list: IPublicTypeNodeData[] = children as IPublicTypeNodeData[];\r\n return list\r\n .map((child) => handleSubNodes(child, handlers, { ...opt, maxDepth: maxDepth - 1 }))\r\n .reduce((p, c) => p.concat(c), []);\r\n }\r\n\r\n let result: T | undefined;\r\n const childrenRes: T[] = [];\r\n if (children === null || children === undefined) {\r\n return [];\r\n } else if (isDOMText(children)) {\r\n const handler = handlers.string || noop;\r\n result = handler(children);\r\n } else if (isJSExpression(children)) {\r\n const handler = handlers.expression || noop;\r\n result = handler(children);\r\n } else if (isJSSlot(children)) {\r\n return handleSubNodes(children.value, handlers, { ...opt, maxDepth: maxDepth - 1 });\r\n } else if (isNodeSchema(children)) {\r\n const handler = handlers.node || noop;\r\n const child = children as IPublicTypeNodeSchema;\r\n result = handler(child);\r\n\r\n if (child.children) {\r\n const childRes = handleSubNodes(child.children, handlers, opt);\r\n childrenRes.push(...childRes);\r\n }\r\n\r\n if (child.props) {\r\n if (Array.isArray(child.props)) {\r\n child.props.forEach(({ value }) => {\r\n const childRes = handleCompositeValueInProps(value);\r\n childrenRes.push(...childRes);\r\n });\r\n } else {\r\n Object.values(child.props).forEach((value) => {\r\n const childRes = handleCompositeValueInProps(value as IPublicTypeCompositeValue);\r\n childrenRes.push(...childRes);\r\n });\r\n }\r\n }\r\n } else {\r\n throw new CodeGeneratorError('handleSubNodes got invalid NodeData', children);\r\n }\r\n\r\n if (result !== undefined) {\r\n childrenRes.unshift(result);\r\n }\r\n\r\n return childrenRes;\r\n\r\n function handleCompositeValueInProps(value: IPublicTypeCompositeValue): T[] {\r\n if (isJSSlot(value)) {\r\n return handleSubNodes(value.value, handlers, { ...opt, maxDepth: maxDepth - 1 });\r\n }\r\n\r\n // CompositeArray\r\n if (Array.isArray(value)) {\r\n return _.flatMap(value, (v) => handleCompositeValueInProps(v));\r\n }\r\n\r\n // IPublicTypeCompositeObject\r\n if (\r\n !isJSExpression(value) &&\r\n !isJSExpressionFn(value) &&\r\n !isJSFunction(value) &&\r\n typeof value === 'object' &&\r\n value !== null\r\n ) {\r\n return _.flatMap(Object.values(value), (v) => handleCompositeValueInProps(v));\r\n }\r\n\r\n return [];\r\n }\r\n}\r\n\r\nexport function isValidContainerType(schema: IPublicTypeNodeSchema) {\r\n return [\r\n 'Page',\r\n 'Component',\r\n 'Block',\r\n ].includes(schema.componentName);\r\n}\r\n\r\nexport const enum ContainerType {\r\n Page = 'Page',\r\n Component = 'Component',\r\n Block = 'Block',\r\n}", "import type { IPublicTypeJSExpression, IPublicTypeJSFunction } from '@alilc/lowcode-types';\r\nimport changeCase from 'change-case';\r\nimport short from 'short-uuid';\r\nimport { DependencyType, IDependency, IExternalDependency, IInternalDependency } from '../types';\r\n\r\n// Doc: https://www.npmjs.com/package/change-case\r\n\r\nexport function camel2dash(input: string): string {\r\n return changeCase.paramCase(input);\r\n}\r\n\r\n/**\r\n * \u8F6C\u4E3A\u9A7C\u5CF0\r\n */\r\nexport function camelize(str: string): string {\r\n return changeCase.camelCase(str);\r\n}\r\n\r\nexport function generateID(): string {\r\n return short.generate();\r\n}\r\n\r\nexport function upperCaseFirst(inputValue: string): string {\r\n return changeCase.upperCaseFirst(inputValue);\r\n}\r\n\r\nexport function uniqueArray<T>(arr: T[], by: (i: T) => string) {\r\n const map: Record<string, T> = {};\r\n arr.forEach((item) => {\r\n map[by(item)] = item;\r\n });\r\n // FIXME: Babel \u7F16\u8BD1\u5B58\u5728\u95EE\u9898\uFF0C\u6682\u65F6\u66FF\u6362\u5B9E\u73B0\r\n // const uniqueKeys = [...new Set<string>(Object.keys(map))];\r\n const uniqueKeys = Array.from(new Set<string>(Object.keys(map)));\r\n const uniqueItems = uniqueKeys.map((key) => map[key]);\r\n return uniqueItems;\r\n}\r\n\r\nexport function getStaticExprValue<T>(expr: string): T {\r\n // TODO: \u9700\u8981\u5B89\u5168\u6027\u68C0\u67E5\r\n // eslint-disable-next-line no-new-func\r\n return Function(`\"use strict\";return (${expr})`)();\r\n}\r\n\r\nexport function isJSExpressionFn(data: any): data is IPublicTypeJSFunction {\r\n return data?.type === 'JSExpression' && data?.extType === 'function';\r\n}\r\n\r\nexport function isInternalDependency(\r\n dependency: IDependency,\r\n): dependency is IInternalDependency {\r\n return dependency.dependencyType === DependencyType.Internal;\r\n}\r\n\r\nexport function isExternalDependency(\r\n dependency: IDependency,\r\n): dependency is IExternalDependency {\r\n return dependency.dependencyType === DependencyType.External;\r\n}", "import type { IPublicTypeNodeSchema, IPublicTypeCompositeObject } from '@alilc/lowcode-types';\r\nimport type { TComponentAnalyzer } from '../types';\r\n\r\nimport { handleSubNodes } from '../utils/schema';\r\n\r\nexport const componentAnalyzer: TComponentAnalyzer = (container) => {\r\n let hasRefAttr = false;\r\n const nodeValidator = (n: IPublicTypeNodeSchema) => {\r\n if (n.props) {\r\n const props = n.props as IPublicTypeCompositeObject;\r\n if (props.ref) {\r\n hasRefAttr = true;\r\n }\r\n }\r\n };\r\n\r\n nodeValidator(container);\r\n\r\n if (!hasRefAttr && container.children) {\r\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\r\n handleSubNodes<void>(\r\n container.children,\r\n {\r\n node: nodeValidator,\r\n },\r\n {\r\n rerun: true,\r\n },\r\n );\r\n }\r\n\r\n return {\r\n isUsingRef: hasRefAttr,\r\n };\r\n};\r\n", "export const isValidIdentifier = (name: string) => {\r\n return /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/.test(name);\r\n};\r\n\r\nexport const isValidComponentName = (name: string) => {\r\n return /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF.]*$/.test(name);\r\n};\r\n\r\nexport const ensureValidClassName = (name: string) => {\r\n if (!isValidIdentifier(name)) {\r\n return `$${name.replace(/[^_$a-zA-Z0-9]/g, '')}`;\r\n }\r\n return name;\r\n};\r\n", "import { ResultFile, ResultDir } from '@alilc/lowcode-types';\r\nimport nm from 'nanomatch';\r\n\r\nimport { CodeGeneratorError } from '../types/error';\r\nimport { FlattenFile } from '../types/file';\r\n\r\nexport function createResultFile(name: string, ext = 'jsx', content = ''): ResultFile {\r\n return {\r\n name,\r\n ext,\r\n content,\r\n };\r\n}\r\n\r\nexport function createResultDir(name: string): ResultDir {\r\n return {\r\n name,\r\n dirs: [],\r\n files: [],\r\n };\r\n}\r\n\r\nexport function addDirectory(target: ResultDir, dir: ResultDir): void {\r\n if (target.dirs.findIndex((d) => d.name === dir.name) < 0) {\r\n target.dirs.push(dir);\r\n } else {\r\n throw new CodeGeneratorError(\r\n `Adding same directory to one directory: ${dir.name} -> ${target.name}`,\r\n );\r\n }\r\n}\r\n\r\nexport function addFile(target: ResultDir, file: ResultFile): void {\r\n if (target.files.findIndex((f) => f.name === file.name && f.ext === file.ext) < 0) {\r\n target.files.push(file);\r\n } else {\r\n throw new CodeGeneratorError(\r\n `Adding same file to one directory: ${file.name} -> ${target.name}`,\r\n );\r\n }\r\n}\r\n\r\nexport function flattenResult(dir: ResultDir, cwd = ''): FlattenFile[] {\r\n if (!dir.files.length && !dir.dirs.length) {\r\n return [];\r\n }\r\n\r\n return [\r\n ...dir.files.map(\r\n (file): FlattenFile => ({\r\n pathName: joinPath(cwd, `${file.name}${file.ext ? `.${file.ext}` : ''}`),\r\n content: file.content,\r\n }),\r\n ),\r\n ].concat(...dir.dirs.map((subDir) => flattenResult(subDir, joinPath(cwd, subDir.name))));\r\n}\r\n\r\nexport type GlobOptions = {\r\n /** \u662F\u5426\u67E5\u627E \".xxx\" \u6587\u4EF6, \u9ED8\u8BA4: \u5426 */\r\n dot?: boolean;\r\n};\r\n\r\n/**\r\n * \u67E5\u627E\u6587\u4EF6\r\n * @param result \u51FA\u7801\u7ED3\u679C\r\n * @param fileGlobExpr \u6587\u4EF6\u540D\u5339\u914D\u8868\u8FBE\u5F0F\r\n * @param resultDirPath \u51FA\u7801\u7ED3\u679C\u7684\u8DEF\u5F84\uFF08\u9ED8\u8BA4\u662F '.'\uFF09\r\n * @returns \u5339\u914D\u7684\u7B2C\u4E00\u4E2A\u6587\u4EF6\u6216 null \uFF08\u627E\u4E0D\u5230\uFF09\r\n */\r\nexport function findFile(\r\n result: ResultDir,\r\n fileGlobExpr: string,\r\n options: GlobOptions = {},\r\n resultDirPath = getResultNameOrDefault(result, ''),\r\n): ResultFile | null {\r\n const maxDepth = !/\\/|\\*\\*/.test(fileGlobExpr) ? 1 : undefined; // \u5982\u679C glob \u8868\u8FBE\u5F0F\u91CC\u9762\u538B\u6839\u4E0D\u4F1A\u5339\u914D\u5B50\u76EE\u5F55\uFF0C\u5219\u6DF1\u5EA6\u9650\u5236\u4E3A 1\r\n const files = scanFiles(result, resultDirPath, maxDepth);\r\n\r\n for (let [filePath, file] of files) {\r\n if (nm.isMatch(filePath, fileGlobExpr, options)) {\r\n return file;\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * \u4F7F\u7528 glob \u8BED\u6CD5\u67E5\u627E\u591A\u4E2A\u6587\u4EF6\r\n * @param result \u51FA\u7801\u7ED3\u679C\r\n * @param fileGlobExpr \u6587\u4EF6\u540D\u5339\u914D\u8868\u8FBE\u5F0F\r\n * @param resultDirPath \u51FA\u7801\u7ED3\u679C\u7684\u8DEF\u5F84\uFF08\u9ED8\u8BA4\u662F '.'\uFF09\r\n * @returns \u627E\u5230\u7684\u6587\u4EF6\u5217\u8868\u7684\u8FED\u4EE3\u5668 [ [\u6587\u4EF6\u8DEF\u5F84, \u6587\u4EF6\u4FE1\u606F], ... ]\r\n */\r\nexport function* globFiles(\r\n result: ResultDir,\r\n fileGlobExpr: string,\r\n options: GlobOptions = {},\r\n resultDirPath = getResultNameOrDefault(result, ''),\r\n): IterableIterator<[string, ResultFile]> {\r\n const files = scanFiles(result, resultDirPath);\r\n\r\n for (let [filePath, file] of files) {\r\n if (nm.isMatch(filePath, fileGlobExpr, options)) {\r\n yield [filePath, file];\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * \u904D\u5386\u6240\u6709\u7684\u6587\u4EF6\r\n */\r\nexport function* scanFiles(\r\n result: ResultDir,\r\n resultDirPath = getResultNameOrDefault(result, ''),\r\n maxDepth = 10000,\r\n): IterableIterator<[string, ResultFile]> {\r\n for (let file of result.files) {\r\n const fileName = getFileNameWithExt(file);\r\n yield [joinPath(resultDirPath, fileName), file];\r\n }\r\n\r\n for (let subDir of result.dirs) {\r\n yield* scanFiles(subDir, joinPath(resultDirPath, subDir.name), maxDepth - 1);\r\n }\r\n}\r\n\r\nexport function getFileNameWithExt(file: ResultFile) {\r\n return `${file.name}${file.ext ? `.${file.ext}` : ''}`;\r\n}\r\n\r\nfunction getResultNameOrDefault(result: ResultDir, defaultDir = '/') {\r\n return result.name && result.name !== '.' ? result.name : defaultDir;\r\n}\r\n\r\nfunction joinPath(...pathParts: string[]): string {\r\n return pathParts\r\n .filter((x) => x !== '' && x !== '.')\r\n .join('/')\r\n .replace(/\\\\+/g, '/')\r\n .replace(/\\/+/g, '/');\r\n}\r\n\r\nexport function* scanDirs(\r\n result: ResultDir,\r\n resultDirPath = getResultNameOrDefault(result, ''),\r\n maxDepth = 10000,\r\n): IterableIterator<[string, ResultDir]> {\r\n yield [resultDirPath, result];\r\n\r\n for (let subDir of result.dirs) {\r\n yield* scanDirs(subDir, joinPath(resultDirPath, subDir.name), maxDepth - 1);\r\n }\r\n}\r\n\r\nexport function* globDirs(\r\n result: ResultDir,\r\n dirGlobExpr: string,\r\n options: GlobOptions = {},\r\n resultDirPath = getResultNameOrDefault(result, ''),\r\n): IterableIterator<[string, ResultDir]> {\r\n const dirs = scanDirs(result, resultDirPath);\r\n\r\n for (let [dirPath, dir] of dirs) {\r\n if (nm.isMatch(dirPath, dirGlobExpr, options)) {\r\n yield [dirPath, dir];\r\n }\r\n }\r\n}\r\n\r\nexport function findDir(\r\n result: ResultDir,\r\n dirGlobExpr: string,\r\n options: GlobOptions = {},\r\n resultDirPath = getResultNameOrDefault(result, ''),\r\n): ResultDir | null {\r\n const dirs = scanDirs(result, resultDirPath);\r\n\r\n for (let [dirPath, dir] of dirs) {\r\n if (nm.isMatch(dirPath, dirGlobExpr, options)) {\r\n return dir;\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\n/**\r\n * \u4ECE\u7ED3\u679C\u4E2D\u79FB\u9664\u4E00\u4E9B\u6587\u4EF6\r\n * @param result \u51FA\u7801\u7ED3\u679C\u76EE\u5F55\r\n * @param filePathGlobExpr \u8981\u79FB\u9664\u7684\u6587\u4EF6\u8DEF\u5F84\uFF08glob \u8868\u8FBE\u5F0F\uFF09\r\n * @param globOptions glob \u53C2\u6570\r\n * @returns \u79FB\u9664\u4E86\u591A\u5C11\u6587\u4EF6\r\n */\r\nexport function removeFilesFromResult(\r\n result: ResultDir,\r\n filePathGlobExpr: string,\r\n globOptions: GlobOptions = {},\r\n): number {\r\n let removedCount = 0;\r\n const [dirPath, fileName] = splitPath(filePathGlobExpr);\r\n\r\n const dirs = dirPath ? globDirs(result, dirPath) : [['', result] as const];\r\n for (let [, dir] of dirs) {\r\n const files = globFiles(dir, fileName, globOptions, '.');\r\n for (let [, file] of files) {\r\n dir.files.splice(dir.files.indexOf(file), 1);\r\n removedCount += 1;\r\n }\r\n }\r\n\r\n return removedCount;\r\n}\r\n\r\n/**\r\n * \u4ECE\u7ED3\u679C\u4E2D\u79FB\u9664\u4E00\u4E9B\u76EE\u5F55\r\n * @param result \u51FA\u7801\u7ED3\u679C\u76EE\u5F55\r\n * @param dirPathGlobExpr \u8981\u79FB\u9664\u7684\u76EE\u5F55\u8DEF\u5F84\uFF08glob \u8868\u8FBE\u5F0F\uFF09\r\n * @param globOptions glob \u53C2\u6570\r\n * @returns \u79FB\u9664\u4E86\u591A\u5C11\u6587\u4EF6\r\n */\r\nexport function removeDirsFromResult(\r\n result: ResultDir,\r\n dirPathGlobExpr: string,\r\n globOptions: GlobOptions = {},\r\n): number {\r\n let removedCount = 0;\r\n const [dirPath, fileName] = splitPath(dirPathGlobExpr);\r\n\r\n const dirs = dirPath ? globDirs(result, dirPath) : [['', result] as const];\r\n for (let [, dir] of dirs) {\r\n const foundDirs = globDirs(dir, fileName, globOptions, '.');\r\n for (let [, foundDir] of foundDirs) {\r\n dir.dirs.splice(dir.dirs.indexOf(foundDir), 1);\r\n removedCount += 1;\r\n }\r\n }\r\n\r\n return removedCount;\r\n}\r\n\r\n/**\r\n * \u5C06\u6587\u4EF6\u8DEF\u5F84\u62C6\u5206\u4E3A\u76EE\u5F55\u8DEF\u5F84\u548C\u6587\u4EF6\u540D\r\n * @param filePath\r\n * @returns [fileDirPath, fileName]\r\n */\r\nfunction splitPath(filePath: string) {\r\n const parts = filePath.split('/');\r\n const fileName = parts.pop() || '';\r\n return [joinPath(...parts), fileName];\r\n}\r\n", "import { BuilderComponentPlugin, IChunkBuilder, ICodeChunk, ICodeStruct, FileType } from '../types';\r\n\r\nimport { COMMON_SUB_MODULE_NAME } from '../const/generator';\r\nimport { FILE_TYPE_FAMILY } from '../const/file';\r\n\r\ninterface ChunkGroupInfo {\r\n chunk: ICodeChunk;\r\n familyIdx?: number;\r\n}\r\n\r\nfunction whichFamily(type: FileType): [number, FileType[]] | undefined {\r\n const idx = FILE_TYPE_FAMILY.findIndex((family) => family.indexOf(type) >= 0);\r\n if (idx < 0) {\r\n return undefined;\r\n }\r\n return [idx, FILE_TYPE_FAMILY[idx]];\r\n}\r\n\r\nexport const groupChunks = (chunks: ICodeChunk[]): ICodeChunk[][] => {\r\n const tmp: Record<string, Record<number, number>> = {};\r\n const col = chunks.reduce((chunksSet: Record<string, ChunkGroupInfo[]>, chunk) => {\r\n const fileKey = chunk.subModule || COMMON_SUB_MODULE_NAME;\r\n if (!chunksSet[fileKey]) {\r\n // eslint-disable-next-line no-param-reassign\r\n chunksSet[fileKey] = [];\r\n }\r\n const res = whichFamily(chunk.fileType as FileType);\r\n const info: ChunkGroupInfo = {\r\n chunk,\r\n };\r\n if (res) {\r\n const [familyIdx, family] = res;\r\n const rank = family.indexOf(chunk.fileType as FileType);\r\n if (tmp[fileKey]) {\r\n if (tmp[fileKey][familyIdx] !== undefined) {\r\n if (tmp[fileKey][familyIdx] > rank) {\r\n tmp[fileKey][familyIdx] = rank;\r\n }\r\n } else {\r\n tmp[fileKey][familyIdx] = rank;\r\n }\r\n } else {\r\n tmp[fileKey] = {};\r\n tmp[fileKey][familyIdx] = rank;\r\n }\r\n info.familyIdx = familyIdx;\r\n }\r\n\r\n chunksSet[fileKey].push(info);\r\n return chunksSet;\r\n }, {});\r\n\r\n const result: ICodeChunk[][] = [];\r\n Object.keys(col).forEach((key) => {\r\n const byType: Record<string, ICodeChunk[]> = {};\r\n col[key].forEach((info) => {\r\n let t: string = info.chunk.fileType;\r\n if (info.familyIdx !== undefined) {\r\n t = FILE_TYPE_FAMILY[info.familyIdx][tmp[key][info.familyIdx]];\r\n // eslint-disable-next-line no-param-reassign\r\n info.chunk.fileType = t;\r\n }\r\n if (!byType[t]) {\r\n byType[t] = [];\r\n }\r\n byType[t].push(info.chunk);\r\n });\r\n result.push(...Object.keys(byType).map((t) => byType[t]));\r\n });\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * \u4EE3\u7801\u7247\u6BB5\u6784\u5EFA\u5668\r\n *\r\n * @export\r\n * @class ChunkBuilder\r\n * @template T\r\n */\r\nexport class ChunkBuilder implements IChunkBuilder {\r\n private plugins: BuilderComponentPlugin[];\r\n\r\n constructor(plugins: BuilderComponentPlugin[] = []) {\r\n this.plugins = plugins;\r\n }\r\n\r\n async run(\r\n ir: unknown,\r\n initialStructure: ICodeStruct = {\r\n ir,\r\n chunks: [],\r\n depNames: [],\r\n contextData: {},\r\n },\r\n ) {\r\n const structure = initialStructure;\r\n\r\n const finalStructure: ICodeStruct = await this.plugins.reduce(\r\n async (previousPluginOperation: Promise<ICodeStruct>, plugin) => {\r\n const modifiedStructure = await previousPluginOperation;\r\n return plugin(modifiedStructure);\r\n },\r\n Promise.resolve(structure),\r\n );\r\n\r\n const chunks = groupChunks(finalStructure.chunks);\r\n\r\n return {\r\n chunks,\r\n };\r\n }\r\n\r\n getPlugins() {\r\n return this.plugins;\r\n }\r\n\r\n addPlugin(plugin: BuilderComponentPlugin) {\r\n this.plugins.push(plugin);\r\n }\r\n}\r\n\r\nexport default ChunkBuilder;\r\n", "import {\r\n ChunkContent,\r\n ChunkType,\r\n CodeGeneratorError,\r\n CodeGeneratorFunction,\r\n ICodeBuilder,\r\n ICodeChunk,\r\n} from '../types';\r\n\r\nexport class CodeBuilder implements ICodeBuilder {\r\n private chunkDefinitions: ICodeChunk[] = [];\r\n\r\n private generators: { [key: string]: CodeGeneratorFunction<ChunkContent> } = {\r\n [ChunkType.STRING]: (str: string) => str, // no-op for string chunks\r\n [ChunkType.JSON]: (json: Record<string, unknown>) => JSON.stringify(json), // stringify json to string\r\n };\r\n\r\n constructor(chunkDefinitions: ICodeChunk[] = []) {\r\n this.chunkDefinitions = chunkDefinitions;\r\n }\r\n\r\n /**\r\n * Links all chunks together based on their requirements. Returns an array\r\n * of ordered chunk names which need to be compiled and glued together.\r\n */\r\n link(chunkDefinitions: ICodeChunk[] = []): string {\r\n const chunks = chunkDefinitions || this.chunkDefinitions;\r\n if (chunks.length <= 0) {\r\n return '';\r\n }\r\n\r\n const unprocessedChunks = chunks.map((chunk) => {\r\n return {\r\n name: chunk.name,\r\n type: chunk.type,\r\n content: chunk.content,\r\n linkAfter: this.cleanupInvalidChunks(chunk.linkAfter, chunks),\r\n };\r\n });\r\n\r\n const resultingString: string[] = [];\r\n\r\n while (unprocessedChunks.length > 0) {\r\n let indexToRemove = 0;\r\n for (let index = 0; index < unprocessedChunks.length; index++) {\r\n if (unprocessedChunks[index].linkAfter.length <= 0) {\r\n indexToRemove = index;\r\n break;\r\n }\r\n }\r\n\r\n if (unprocessedChunks[indexToRemove].linkAfter.length > 0) {\r\n throw new CodeGeneratorError(\r\n 'Operation aborted. Reason: cyclic dependency between chunks.',\r\n );\r\n }\r\n\r\n const { type, content, name } = unprocessedChunks[indexToRemove];\r\n const compiledContent = this.generateByType(type, content);\r\n if (compiledContent) {\r\n resultingString.push(`${compiledContent}\\n`);\r\n }\r\n\r\n unprocessedChunks.splice(indexToRemove, 1);\r\n if (!unprocessedChunks.some((ch) => ch.name === name)) {\r\n unprocessedChunks.forEach(\r\n // remove the processed chunk from all the linkAfter arrays from the remaining chunks\r\n (ch) => {\r\n // eslint-disable-next-line no-param-reassign\r\n ch.linkAfter = ch.linkAfter.filter((after) => after !== name);\r\n },\r\n );\r\n }\r\n }\r\n\r\n return resultingString.join('\\n');\r\n }\r\n\r\n generateByType(type: string, content: unknown): string {\r\n if (!content) {\r\n return '';\r\n }\r\n if (Array.isArray(content)) {\r\n return content.map((contentItem) => this.generateByType(type, contentItem)).join('\\n');\r\n }\r\n\r\n if (!this.generators[type]) {\r\n throw new Error(\r\n `Attempted to generate unknown type ${type}. Please register a generator for this type in builder/index.ts`,\r\n );\r\n }\r\n\r\n return this.generators[type](content);\r\n }\r\n\r\n // remove invalid chunks (which did not end up being created) from the linkAfter fields\r\n // one use-case is when you want to remove the import plugin\r\n private cleanupInvalidChunks(linkAfter: string[], chunks: ICodeChunk[]) {\r\n return linkAfter.filter((chunkName) => chunks.some((chunk) => chunk.name === chunkName));\r\n }\r\n}\r\n\r\nexport default CodeBuilder;\r\n", "import { IPublicTypeProjectSchema, ResultFile, ResultDir } from '@alilc/lowcode-types';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n CodeGeneratorError,\r\n ICodeChunk,\r\n ICompiledModule,\r\n IContextData,\r\n IModuleBuilder,\r\n IParseResult,\r\n ISchemaParser,\r\n PostProcessor,\r\n} from '../types';\r\n\r\nimport { COMMON_SUB_MODULE_NAME } from '../const/generator';\r\n\r\nimport { SchemaParser } from '../parser/SchemaParser';\r\nimport { ChunkBuilder } from './ChunkBuilder';\r\nimport { CodeBuilder } from './CodeBuilder';\r\nimport { createResultFile, createResultDir, addFile } from '../utils/resultHelper';\r\n\r\nexport function createModuleBuilder(\r\n options: {\r\n plugins: BuilderComponentPlugin[];\r\n postProcessors: PostProcessor[];\r\n mainFileName?: string;\r\n contextData?: IContextData;\r\n } = {\r\n plugins: [],\r\n postProcessors: [],\r\n },\r\n): IModuleBuilder {\r\n const chunkGenerator = new ChunkBuilder(options.plugins);\r\n const linker = new CodeBuilder();\r\n\r\n const generateModule = async (input: unknown): Promise<ICompiledModule> => {\r\n const moduleMainName = options.mainFileName || COMMON_SUB_MODULE_NAME;\r\n if (chunkGenerator.getPlugins().length <= 0) {\r\n throw new CodeGeneratorError(\r\n 'No plugins found. Component generation cannot work without any plugins!',\r\n );\r\n }\r\n\r\n let files: ResultFile[] = [];\r\n\r\n const { chunks } = await chunkGenerator.run(input, {\r\n ir: input,\r\n chunks: [],\r\n depNames: [],\r\n contextData: options.contextData || {},\r\n });\r\n\r\n chunks.forEach((fileChunkList) => {\r\n const content = linker.link(fileChunkList);\r\n const file = createResultFile(\r\n fileChunkList[0].subModule || moduleMainName,\r\n fileChunkList[0].fileType,\r\n content,\r\n );\r\n files.push(file);\r\n });\r\n\r\n if (options.postProcessors.length > 0) {\r\n files = files.map((file) => {\r\n let { content, ext: type, name } = file;\r\n options.postProcessors.forEach((processer) => {\r\n content = processer(content, type, name);\r\n });\r\n\r\n return createResultFile(file.name, type, content);\r\n });\r\n }\r\n\r\n return {\r\n files,\r\n };\r\n };\r\n\r\n const generateModuleCode = async (schema: IPublicTypeProjectSchema | string): Promise<ResultDir> => {\r\n // Init\r\n const schemaParser: ISchemaParser = new SchemaParser();\r\n const parseResult: IParseResult = schemaParser.parse(schema);\r\n\r\n const containerInfo = parseResult.containers[0];\r\n const { files } = await generateModule(containerInfo);\r\n\r\n const dir = createResultDir(containerInfo.moduleName);\r\n files.forEach((file) => addFile(dir, file));\r\n\r\n return dir;\r\n };\r\n\r\n const linkCodeChunks = (chunks: Record<string, ICodeChunk[]>, fileName: string) => {\r\n const files: ResultFile[] = [];\r\n\r\n Object.keys(chunks).forEach((fileKey) => {\r\n const fileChunkList = chunks[fileKey];\r\n const content = linker.link(fileChunkList);\r\n const file = createResultFile(\r\n fileChunkList[0].subModule || fileName,\r\n fileChunkList[0].fileType,\r\n content,\r\n );\r\n files.push(file);\r\n });\r\n\r\n return files;\r\n };\r\n\r\n return {\r\n generateModule,\r\n generateModuleCode,\r\n linkCodeChunks,\r\n addPlugin: chunkGenerator.addPlugin.bind(chunkGenerator),\r\n };\r\n}\r\n", "import { ResultDir, ResultFile, IPublicTypeProjectSchema } from '@alilc/lowcode-types';\r\n\r\nimport {\r\n IModuleBuilder,\r\n IParseResult,\r\n IProjectBuilder,\r\n IProjectPlugins,\r\n IProjectTemplate,\r\n ISchemaParser,\r\n PostProcessor,\r\n} from '../types';\r\n\r\nimport { SchemaParser } from '../parser/SchemaParser';\r\nimport { createResultDir, addDirectory, addFile } from '../utils/resultHelper';\r\n\r\nimport { createModuleBuilder } from './ModuleBuilder';\r\nimport { ProjectPreProcessor, ProjectPostProcessor, IContextData } from '../types/core';\r\nimport { CodeGeneratorError } from '../types/error';\r\nimport { isBuiltinSlotName } from '../const';\r\n\r\ninterface IModuleInfo {\r\n moduleName?: string;\r\n path: string[];\r\n files: ResultFile[];\r\n}\r\n\r\nexport interface ProjectBuilderInitOptions {\r\n\r\n /** \u9879\u76EE\u6A21\u677F */\r\n template: IProjectTemplate;\r\n\r\n /** \u9879\u76EE\u63D2\u4EF6 */\r\n plugins: IProjectPlugins;\r\n\r\n /** \u6A21\u5757\u540E\u7F6E\u5904\u7406\u5668 */\r\n postProcessors: PostProcessor[];\r\n\r\n /** Schema \u89E3\u6790\u5668 */\r\n schemaParser?: ISchemaParser;\r\n\r\n /** \u9879\u76EE\u7EA7\u522B\u7684\u524D\u7F6E\u5904\u7406\u5668 */\r\n projectPreProcessors?: ProjectPreProcessor[];\r\n\r\n /** \u9879\u76EE\u7EA7\u522B\u7684\u540E\u7F6E\u5904\u7406\u5668 */\r\n projectPostProcessors?: ProjectPostProcessor[];\r\n\r\n /** \u662F\u5426\u5904\u4E8E\u4E25\u683C\u6A21\u5F0F */\r\n inStrictMode?: boolean;\r\n\r\n /** \u4E00\u4E9B\u989D\u5916\u7684\u4E0A\u4E0B\u6587\u6570\u636E */\r\n extraContextData?: Record<string, unknown>;\r\n\r\n /**\r\n * Hook which is used to customize original options, we can reorder/add/remove plugins/processors\r\n * of the existing solution.\r\n */\r\n customizeBuilderOptions?(originalOptions: ProjectBuilderInitOptions): ProjectBuilderInitOptions;\r\n}\r\n\r\nexport class ProjectBuilder implements IProjectBuilder {\r\n /** \u9879\u76EE\u6A21\u677F */\r\n private template: IProjectTemplate;\r\n\r\n /** \u9879\u76EE\u63D2\u4EF6 */\r\n private plugins: IProjectPlugins;\r\n\r\n /** \u6A21\u5757\u540E\u7F6E\u5904\u7406\u5668 */\r\n private postProcessors: PostProcessor[];\r\n\r\n /** Schema \u89E3\u6790\u5668 */\r\n private schemaParser: ISchemaParser;\r\n\r\n /** \u9879\u76EE\u7EA7\u522B\u7684\u524D\u7F6E\u5904\u7406\u5668 */\r\n private projectPreProcessors: ProjectPreProcessor[];\r\n\r\n /** \u9879\u76EE\u7EA7\u522B\u7684\u540E\u7F6E\u5904\u7406\u5668 */\r\n private projectPostProcessors: ProjectPostProcessor[];\r\n\r\n /** \u662F\u5426\u5904\u4E8E\u4E25\u683C\u6A21\u5F0F */\r\n readonly inStrictMode: boolean;\r\n\r\n /** \u4E00\u4E9B\u989D\u5916\u7684\u4E0A\u4E0B\u6587\u6570\u636E */\r\n readonly extraContextData: IContextData;\r\n\r\n constructor(builderOptions: ProjectBuilderInitOptions) {\r\n let customBuilderOptions = builderOptions;\r\n if (typeof builderOptions.customizeBuilderOptions === 'function') {\r\n customBuilderOptions = builderOptions.customizeBuilderOptions(builderOptions);\r\n }\r\n const {\r\n template,\r\n plugins,\r\n postProcessors,\r\n schemaParser = new SchemaParser(),\r\n projectPreProcessors = [],\r\n projectPostProcessors = [],\r\n inStrictMode = false,\r\n extraContextData = {},\r\n } = customBuilderOptions;\r\n this.template = template;\r\n this.plugins = plugins;\r\n this.postProcessors = postProcessors;\r\n this.schemaParser = schemaParser;\r\n this.projectPreProcessors = projectPreProcessors;\r\n this.projectPostProcessors = projectPostProcessors;\r\n this.inStrictMode = inStrictMode;\r\n this.extraContextData = extraContextData;\r\n }\r\n\r\n async generateProject(originalSchema: IPublicTypeProjectSchema | string): Promise<ResultDir> {\r\n // Init\r\n const { schemaParser } = this;\r\n\r\n let schema: IPublicTypeProjectSchema =\r\n typeof originalSchema === 'string' ? JSON.parse(originalSchema) : originalSchema;\r\n\r\n // Parse / Format\r\n // Preprocess\r\n for (const preProcessor of this.projectPreProcessors) {\r\n // eslint-disable-next-line no-await-in-loop\r\n schema = await preProcessor(schema);\r\n }\r\n\r\n // Validate\r\n if (!schemaParser.validate(schema)) {\r\n throw new CodeGeneratorError('Schema is invalid');\r\n }\r\n\r\n // Collect Deps\r\n // Parse JSExpression\r\n const parseResult: IParseResult = schemaParser.parse(schema);\r\n\r\n const projectRoot = await this.template.generateTemplate(parseResult);\r\n\r\n let buildResult: IModuleInfo[] = [];\r\n\r\n const builders = this.createModuleBuilders({\r\n extraContextData: {\r\n projectRemark: parseResult?.project?.projectRemark,\r\n template: this.template,\r\n },\r\n });\r\n // Generator Code module\r\n // components\r\n // pages\r\n const containerBuildResult: IModuleInfo[] = await Promise.all<IModuleInfo>(\r\n parseResult.containers.map(async (containerInfo) => {\r\n let builder: IModuleBuilder;\r\n let path: string[];\r\n if (containerInfo.containerType === 'Page') {\r\n builder = builders.pages;\r\n path = this.template.slots.pages.path;\r\n } else {\r\n builder = builders.components;\r\n path = this.template.slots.components.path;\r\n }\r\n\r\n const { files } = await builder.generateModule(containerInfo);\r\n\r\n return {\r\n moduleName: containerInfo.moduleName,\r\n path,\r\n files,\r\n };\r\n }),\r\n );\r\n buildResult = buildResult.concat(containerBuildResult);\r\n\r\n // router\r\n if (parseResult.globalRouter && builders.router) {\r\n const { files } = await builders.router.generateModule(parseResult.globalRouter);\r\n\r\n buildResult.push({\r\n path: this.template.slots.router.path,\r\n files,\r\n });\r\n }\r\n\r\n // entry\r\n if (parseResult.project && builders.entry) {\r\n const { files } = await builders.entry.generateModule(parseResult.project);\r\n\r\n buildResult.push({\r\n path: this.template.slots.entry.path,\r\n files,\r\n });\r\n }\r\n\r\n // appConfig\r\n if (builders.appConfig) {\r\n const { files } = await builders.appConfig.generateModule(parseResult);\r\n\r\n buildResult.push({\r\n path: this.template.slots.appConfig.path,\r\n files,\r\n });\r\n }\r\n\r\n // buildConfig\r\n if (builders.buildConfig) {\r\n const { files } = await builders.buildConfig.generateModule(parseResult);\r\n\r\n buildResult.push({\r\n path: this.template.slots.buildConfig.path,\r\n files,\r\n });\r\n }\r\n\r\n // constants?\r\n if (parseResult.project && builders.constants && this.template.slots.constants) {\r\n const { files } = await builders.constants.generateModule(parseResult.project);\r\n\r\n buildResult.push({\r\n path: this.template.slots.constants.path,\r\n files,\r\n });\r\n }\r\n\r\n // utils?\r\n if (parseResult.globalUtils && builders.utils && this.template.slots.utils) {\r\n const { files } = await builders.utils.generateModule(parseResult.globalUtils);\r\n\r\n buildResult.push({\r\n path: this.template.slots.utils.path,\r\n files,\r\n });\r\n }\r\n\r\n // i18n?\r\n if (builders.i18n && this.template.slots.i18n) {\r\n const { files } = await builders.i18n.generateModule(parseResult.project);\r\n\r\n buildResult.push({\r\n path: this.template.slots.i18n.path,\r\n files,\r\n });\r\n }\r\n\r\n // globalStyle\r\n if (parseResult.project && builders.globalStyle) {\r\n const { files } = await builders.globalStyle.generateModule(parseResult.project);\r\n\r\n buildResult.push({\r\n path: this.template.slots.globalStyle.path,\r\n files,\r\n });\r\n }\r\n\r\n // htmlEntry\r\n if (parseResult.project && builders.htmlEntry) {\r\n const { files } = await builders.htmlEntry.generateModule(parseResult.project);\r\n\r\n buildResult.push({\r\n path: this.template.slots.htmlEntry.path,\r\n files,\r\n });\r\n }\r\n\r\n // packageJSON\r\n if (parseResult.project && builders.packageJSON) {\r\n const { files } = await builders.packageJSON.generateModule(parseResult.project);\r\n\r\n buildResult.push({\r\n path: this.template.slots.packageJSON.path,\r\n files,\r\n });\r\n }\r\n\r\n // demo\r\n if (parseResult.project && builders.demo) {\r\n const { files } = await builders.demo.generateModule(parseResult.project);\r\n buildResult.push({\r\n path: this.template.slots.demo.path,\r\n files,\r\n });\r\n }\r\n\r\n // handle extra slots\r\n await this.generateExtraSlots(builders, parseResult, buildResult);\r\n\r\n // Post Process\r\n const isSingleComponent = parseResult?.project?.projectRemark?.isSingleComponent;\r\n // Combine Modules\r\n buildResult.forEach((moduleInfo) => {\r\n let targetDir = getDirFromRoot(projectRoot, moduleInfo.path);\r\n // if project only contain single component, skip creation of directory.\r\n if (moduleInfo.moduleName && !isSingleComponent) {\r\n const dir = createResultDir(moduleInfo.moduleName);\r\n addDirectory(targetDir, dir);\r\n targetDir = dir;\r\n }\r\n moduleInfo.files.forEach((file) => addFile(targetDir, file));\r\n });\r\n\r\n // post-processors\r\n let finalResult = projectRoot;\r\n for (const projectPostProcessor of this.projectPostProcessors) {\r\n // eslint-disable-next-line no-await-in-loop\r\n finalResult = await projectPostProcessor(finalResult, schema, originalSchema, {\r\n template: this.template,\r\n parseResult,\r\n });\r\n }\r\n\r\n return finalResult;\r\n }\r\n\r\n private createModuleBuilders(extraContextData: Record<string, unknown> = {}):\r\n Record<string, IModuleBuilder> {\r\n const builders: Record<string, IModuleBuilder> = {};\r\n\r\n Object.keys(this.plugins).forEach((pluginName) => {\r\n if (this.plugins[pluginName].length > 0) {\r\n const options: { mainFileName?: string } = {};\r\n if (this.template.slots[pluginName] && this.template.slots[pluginName].fileName) {\r\n options.mainFileName = this.template.slots[pluginName].fileName;\r\n }\r\n builders[pluginName] = createModuleBuilder({\r\n plugins: this.plugins[pluginName],\r\n postProcessors: this.postProcessors,\r\n contextData: {\r\n // template: this.template,\r\n inStrictMode: this.inStrictMode,\r\n tolerateEvalErrors: true,\r\n evalErrorsHandler: '',\r\n ...this.extraContextData,\r\n ...extraContextData,\r\n },\r\n ...options,\r\n });\r\n }\r\n });\r\n\r\n return builders;\r\n }\r\n\r\n private async generateExtraSlots(\r\n builders: Record<string, IModuleBuilder>,\r\n parseResult: IParseResult,\r\n buildResult: IModuleInfo[],\r\n ) {\r\n for (const slotName in this.template.slots) {\r\n if (!isBuiltinSlotName(slotName)) {\r\n const { files } = await builders[slotName].generateModule(parseResult);\r\n buildResult.push({\r\n path: this.template.slots[slotName].path,\r\n files,\r\n });\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function createProjectBuilder(initOptions: ProjectBuilderInitOptions): IProjectBuilder {\r\n return new ProjectBuilder(initOptions);\r\n}\r\n\r\nfunction getDirFromRoot(root: ResultDir, path: string[]): ResultDir {\r\n let current: ResultDir = root;\r\n path.forEach((p) => {\r\n const exist = current.dirs.find((d) => d.name === p);\r\n if (exist) {\r\n current = exist;\r\n } else {\r\n const newDir = createResultDir(p);\r\n addDirectory(current, newDir);\r\n current = newDir;\r\n }\r\n });\r\n\r\n return current;\r\n}\r\n", "import * as defaultFs from 'fs';\r\n\r\nimport { ResultDir } from '@alilc/lowcode-types';\r\nimport { PublisherFactory, IPublisher, IPublisherFactoryParams, PublisherError } from '../../types';\r\nimport { getErrorMessage } from '../../utils/errors';\r\nimport { writeFolder, IFileSystem } from './utils';\r\n\r\nexport interface IDiskFactoryParams extends IPublisherFactoryParams {\r\n outputPath?: string;\r\n projectSlug?: string;\r\n createProjectFolder?: boolean;\r\n fs?: IFileSystem;\r\n}\r\n\r\nexport interface IDiskPublisher extends IPublisher<IDiskFactoryParams, string> {\r\n getOutputPath: () => string;\r\n setOutputPath: (path: string) => void;\r\n}\r\n\r\nexport const createDiskPublisher: PublisherFactory<IDiskFactoryParams, IDiskPublisher> = (\r\n params: IDiskFactoryParams = {},\r\n): IDiskPublisher => {\r\n let { project, outputPath = './' } = params;\r\n const { fs = defaultFs } = params;\r\n\r\n const getProject = (): ResultDir => {\r\n if (!project) {\r\n throw new PublisherError('MissingProject');\r\n }\r\n return project;\r\n };\r\n const setProject = (projectToSet: ResultDir): void => {\r\n project = projectToSet;\r\n };\r\n\r\n const getOutputPath = (): string => {\r\n return outputPath;\r\n };\r\n const setOutputPath = (path: string): void => {\r\n outputPath = path;\r\n };\r\n\r\n const publish = async (options: IDiskFactoryParams = {}) => {\r\n const projectToPublish = options.project || project;\r\n if (!projectToPublish) {\r\n throw new PublisherError('MissingProject');\r\n }\r\n\r\n const projectOutputPath = options.outputPath || outputPath;\r\n const overrideProjectSlug = options.projectSlug || params.projectSlug;\r\n const createProjectFolder = options.createProjectFolder ?? params.createProjectFolder;\r\n\r\n if (overrideProjectSlug) {\r\n projectToPublish.name = overrideProjectSlug;\r\n }\r\n\r\n try {\r\n await writeFolder(projectToPublish, projectOutputPath, createProjectFolder, fs);\r\n return { success: true, payload: projectOutputPath };\r\n } catch (error) {\r\n throw new PublisherError(getErrorMessage(error) || 'UnknownError');\r\n }\r\n };\r\n\r\n return {\r\n publish,\r\n getProject,\r\n setProject,\r\n getOutputPath,\r\n setOutputPath,\r\n };\r\n};\r\n", "import * as systemFs from 'fs';\r\nimport { join } from 'path';\r\nimport { ResultDir, ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport interface IFileSystem {\r\n existsSync: typeof systemFs.existsSync;\r\n mkdir: typeof systemFs.mkdir;\r\n writeFile: typeof systemFs.writeFile;\r\n}\r\n\r\nexport const writeFolder = async (\r\n folder: ResultDir,\r\n currentPath: string,\r\n createProjectFolder = true,\r\n fs: IFileSystem = systemFs,\r\n): Promise<void> => {\r\n const { name, files, dirs } = folder;\r\n\r\n const folderPath = createProjectFolder ? join(currentPath, name) : currentPath;\r\n\r\n if (!fs.existsSync(folderPath)) {\r\n await createDirectory(folderPath, fs);\r\n }\r\n\r\n const promises = [\r\n writeFilesToFolder(folderPath, files, fs),\r\n writeSubFoldersToFolder(folderPath, dirs, fs),\r\n ];\r\n\r\n await Promise.all(promises);\r\n};\r\n\r\nconst writeFilesToFolder = async (\r\n folderPath: string,\r\n files: ResultFile[],\r\n fs: IFileSystem,\r\n): Promise<void> => {\r\n const promises = files.map((file) => {\r\n const fileName = file.ext ? `${file.name}.${file.ext}` : file.name;\r\n const filePath = join(folderPath, fileName);\r\n return writeContentToFile(filePath, file.content, 'utf8', fs);\r\n });\r\n\r\n await Promise.all(promises);\r\n};\r\n\r\nconst writeSubFoldersToFolder = async (\r\n folderPath: string,\r\n subFolders: ResultDir[],\r\n fs: IFileSystem,\r\n): Promise<void> => {\r\n const promises = subFolders.map((subFolder) => {\r\n return writeFolder(subFolder, folderPath, true, fs);\r\n });\r\n\r\n await Promise.all(promises);\r\n};\r\n\r\nconst createDirectory = (pathToDir: string, fs: IFileSystem): Promise<void> => {\r\n return new Promise((resolve, reject) => {\r\n fs.mkdir(pathToDir, { recursive: true }, (err) => {\r\n err ? reject(err) : resolve();\r\n });\r\n });\r\n};\r\n\r\nconst writeContentToFile = (\r\n filePath: string,\r\n fileContent: string,\r\n encoding = 'utf8',\r\n fs: IFileSystem,\r\n): Promise<void> => {\r\n return new Promise((resolve, reject) => {\r\n fs.writeFile(filePath, fileContent, { encoding: encoding as BufferEncoding }, (err) => {\r\n err ? reject(err) : resolve();\r\n });\r\n });\r\n};\r\n", "import JSZip from 'jszip';\r\nimport { ResultDir, ResultFile } from '@alilc/lowcode-types';\r\nimport type { ZipBuffer } from './index';\r\n\r\nexport const isNodeProcess = (): boolean => {\r\n return (\r\n typeof process === 'object' &&\r\n typeof process.versions === 'object' &&\r\n typeof process.versions.node !== 'undefined'\r\n );\r\n};\r\n\r\nexport const writeZipToDisk = (\r\n zipFolderPath: string,\r\n content: ZipBuffer,\r\n zipName: string,\r\n): void => {\r\n if (!isNodeProcess()) {\r\n throw new Error('ZipPublisher: writeZipToDisk is only available in NodeJS');\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const fs = require('fs');\r\n // eslint-disable-next-line @typescript-eslint/no-var-requires\r\n // eslint-disable-next-line @typescript-eslint/no-require-imports\r\n const path = require('path');\r\n\r\n if (!fs.existsSync(zipFolderPath)) {\r\n fs.mkdirSync(zipFolderPath, { recursive: true });\r\n }\r\n\r\n const zipPath = path.join(zipFolderPath, `${zipName}.zip`);\r\n\r\n const writeStream = fs.createWriteStream(zipPath);\r\n writeStream.write(content);\r\n writeStream.end();\r\n};\r\n\r\nexport const generateProjectZip = async (project: ResultDir): Promise<ZipBuffer> => {\r\n let zip = new JSZip();\r\n zip = writeFolderToZip(project, zip, true);\r\n const zipType = isNodeProcess() ? 'nodebuffer' : 'blob';\r\n return zip.generateAsync({ type: zipType });\r\n};\r\n\r\nconst writeFolderToZip = (folder: ResultDir, parentFolder: JSZip, ignoreFolder = false) => {\r\n const zipFolder = ignoreFolder ? parentFolder : parentFolder.folder(folder.name);\r\n if (zipFolder !== null) {\r\n folder.files.forEach((file: ResultFile) => {\r\n // const options = file.contentEncoding === 'base64' ? { base64: true } : {};\r\n const options = {};\r\n const fileName = file.ext ? `${file.name}.${file.ext}` : file.name;\r\n zipFolder.file(fileName, file.content, options);\r\n });\r\n\r\n folder.dirs.forEach((subFolder: ResultDir) => {\r\n writeFolderToZip(subFolder, zipFolder);\r\n });\r\n }\r\n\r\n return parentFolder;\r\n};\r\n", "import { ResultDir } from '@alilc/lowcode-types';\r\nimport { PublisherFactory, IPublisher, IPublisherFactoryParams, PublisherError } from '../../types';\r\nimport { getErrorMessage } from '../../utils/errors';\r\nimport { isNodeProcess, writeZipToDisk, generateProjectZip } from './utils';\r\nimport { saveAs } from 'file-saver';\r\n\r\nexport type ZipBuffer = Buffer | Blob;\r\n\r\ndeclare type ZipPublisherResponse = string | ZipBuffer;\r\n\r\nexport interface ZipFactoryParams extends IPublisherFactoryParams {\r\n outputPath?: string;\r\n projectSlug?: string;\r\n}\r\n\r\nexport interface ZipPublisher extends IPublisher<ZipFactoryParams, ZipPublisherResponse> {\r\n getOutputPath: () => string | undefined;\r\n setOutputPath: (path: string) => void;\r\n}\r\n\r\nexport const createZipPublisher: PublisherFactory<ZipFactoryParams, ZipPublisher> = (\r\n params: ZipFactoryParams = {},\r\n): ZipPublisher => {\r\n let { project, outputPath } = params;\r\n\r\n const getProject = () => project;\r\n const setProject = (projectToSet: ResultDir) => {\r\n project = projectToSet;\r\n };\r\n\r\n const getOutputPath = () => outputPath;\r\n const setOutputPath = (path: string) => {\r\n outputPath = path;\r\n };\r\n\r\n const publish = async (options: ZipFactoryParams = {}) => {\r\n const projectToPublish = options.project || project;\r\n if (!projectToPublish) {\r\n throw new PublisherError('MissingProject');\r\n }\r\n\r\n const zipName = options.projectSlug || params.projectSlug || projectToPublish.name;\r\n\r\n try {\r\n const zipContent = await generateProjectZip(projectToPublish);\r\n\r\n if (isNodeProcess()) {\r\n // If not output path is provided on the node side, zip is not written to disk\r\n const projectOutputPath = options.outputPath || outputPath;\r\n if (projectOutputPath) {\r\n await writeZipToDisk(projectOutputPath, zipContent, zipName);\r\n }\r\n } else {\r\n // the browser end does not require a path\r\n // auto download zip files\r\n saveAs(zipContent as Blob, `${zipName}.zip`);\r\n }\r\n\r\n return { success: true, payload: zipContent };\r\n } catch (error) {\r\n throw new PublisherError(getErrorMessage(error) || 'UnknownError');\r\n }\r\n };\r\n\r\n return {\r\n publish,\r\n getProject,\r\n setProject,\r\n getOutputPath,\r\n setOutputPath,\r\n };\r\n};\r\n", "import { flatMap, camelCase, get } from 'lodash';\r\nimport { COMMON_CHUNK_NAME } from '../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n CodeGeneratorError,\r\n DependencyType,\r\n FileType,\r\n ICodeChunk,\r\n ICodeStruct,\r\n IDependency,\r\n IExternalDependency,\r\n IInternalDependency,\r\n IWithDependency,\r\n} from '../../types';\r\n\r\nimport { isValidIdentifier } from '../../utils/validate';\r\n\r\n// TODO: main \u8FD9\u4E2A\u4FE1\u606F\u5230\u5E95\u600E\u4E48\u7528\uFF0C\u662F\u4E0D\u662F\u5916\u90E8\u5305\u4E0D\u9700\u8981\u4F7F\u7528\uFF1F\r\nconst DEP_MAIN_BLOCKLIST = ['lib', 'lib/index', 'es', 'es/index', 'main'];\r\nconst DEFAULT_EXPORT_NAME = '__default__';\r\n\r\nfunction groupDepsByPack(deps: IDependency[]): Record<string, IDependency[]> {\r\n const depMap: Record<string, IDependency[]> = {};\r\n\r\n const addDep = (pkg: string, dep: IDependency) => {\r\n if (!depMap[pkg]) {\r\n depMap[pkg] = [];\r\n }\r\n depMap[pkg].push(dep);\r\n };\r\n\r\n deps.forEach((dep) => {\r\n if (dep.dependencyType === DependencyType.Internal) {\r\n addDep(`${(dep as IInternalDependency).moduleName}${dep.main ? `/${dep.main}` : ''}`, dep);\r\n } else {\r\n let depMain = '';\r\n // TODO: \u90E8\u5206\u7C7B\u578B\u7684 main \u6682\u65F6\u8BA4\u4E3A\u6CA1\u7528\r\n if (dep.main && DEP_MAIN_BLOCKLIST.indexOf(dep.main) < 0) {\r\n depMain = dep.main;\r\n }\r\n if (depMain.substring(0, 1) === '/') {\r\n depMain = depMain.substring(1);\r\n }\r\n addDep(`${(dep as IExternalDependency).package}${depMain ? `/${depMain}` : ''}`, dep);\r\n }\r\n });\r\n\r\n return depMap;\r\n}\r\n\r\ninterface IDependencyItem {\r\n exportName: string;\r\n aliasName?: string;\r\n isDefault?: boolean;\r\n subName?: string;\r\n nodeIdentifier?: string; // \u4E0E\u4F7F\u7528\u5904\u7684\u6620\u5C04\u5173\u7CFB\uFF0C\u7406\u8BBA\u4E0A\u662F\u4E0D\u53EF\u53D8\u66F4\u7684\uFF0C\u5982\u9700\u53D8\u66F4\u9700\u8981\u63D0\u4F9B\u989D\u5916\u4FE1\u606F\r\n source: IDependency;\r\n}\r\n\r\ninterface IExportItem {\r\n exportName: string;\r\n aliasNames: string[];\r\n isDefault?: boolean;\r\n needOriginExport: boolean;\r\n}\r\n\r\nfunction getDependencyIdentifier(info: IDependencyItem): string {\r\n return info.aliasName || info.exportName;\r\n}\r\n\r\nfunction getExportNameOfDep(dep: IDependency): string {\r\n if (dep.destructuring) {\r\n return (\r\n dep.exportName ||\r\n dep.componentName ||\r\n throwNewError('destructuring dependency must have exportName or componentName')\r\n );\r\n }\r\n\r\n if (!dep.subName) {\r\n return (\r\n dep.componentName ||\r\n dep.exportName ||\r\n throwNewError('dependency item must have componentName or exportName')\r\n );\r\n }\r\n\r\n return (\r\n dep.exportName ||\r\n `__$${camelCase(\r\n get(dep, 'moduleName') ||\r\n get(dep, 'package') ||\r\n throwNewError('dep.moduleName or dep.package is undefined'),\r\n )}_default`\r\n );\r\n}\r\n\r\nfunction throwNewError(msg: string): never {\r\n throw new Error(msg);\r\n}\r\n\r\nfunction buildPackageImport(\r\n pkg: string,\r\n deps: IDependency[],\r\n targetFileType: string,\r\n useAliasName: boolean,\r\n): ICodeChunk[] {\r\n // \u5982\u679C\u538B\u6839\u6CA1\u6709\u5305\uFF0C\u5219\u4E0D\u751F\u6210\u5BF9\u5E94\u7684 import \u8BED\u53E5\uFF08\u751F\u6210\u4E86\u6CA1\u6709\u4EFB\u4F55\u610F\u4E49\uFF09\r\n if (!pkg || pkg === 'undefined' || pkg === 'null') {\r\n // TODO: \u8981\u4E0D\u8981\u52A0\u4E2A warning\uFF1F\r\n return [];\r\n }\r\n\r\n const chunks: ICodeChunk[] = [];\r\n\r\n const exportItems: Record<string, IExportItem> = {};\r\n const defaultExportNames: string[] = [];\r\n\r\n const depsInfo: IDependencyItem[] = deps.map((dep) => {\r\n const info: IDependencyItem = {\r\n exportName: getExportNameOfDep(dep),\r\n isDefault: !dep.destructuring,\r\n subName: dep.subName || undefined,\r\n nodeIdentifier: dep.componentName || undefined,\r\n source: dep,\r\n };\r\n\r\n // \u4E0B\u9762 5 \u4E2A\u903B\u8F91\u662F\u6E05\u7406\u4E0D\u5FC5\u8981\u7684\u5197\u4F59\u4FE1\u606F\uFF0C\u505A\u5230\u6570\u636E\u7ED3\u6784\u5F52\u4E00\u5316\r\n if (info.isDefault) {\r\n if (defaultExportNames.indexOf(info.exportName) < 0) {\r\n defaultExportNames.push(info.exportName);\r\n }\r\n }\r\n\r\n if (!info.subName) {\r\n if (info.nodeIdentifier === info.exportName) {\r\n info.nodeIdentifier = undefined;\r\n }\r\n\r\n if (info.isDefault) {\r\n info.aliasName = info.nodeIdentifier || info.exportName;\r\n info.exportName = DEFAULT_EXPORT_NAME;\r\n }\r\n\r\n if (info.nodeIdentifier) {\r\n info.aliasName = info.nodeIdentifier;\r\n info.nodeIdentifier = undefined;\r\n }\r\n } else {\r\n if (info.isDefault) {\r\n info.aliasName = info.exportName;\r\n info.exportName = DEFAULT_EXPORT_NAME;\r\n }\r\n\r\n if (info.nodeIdentifier === `${info.exportName}.${info.subName}`) {\r\n info.nodeIdentifier = undefined;\r\n }\r\n }\r\n\r\n return info;\r\n });\r\n\r\n // \u5EFA\u7ACB export \u9879\u76EE\u7684\u5217\u8868\r\n depsInfo.forEach((info) => {\r\n if (!exportItems[info.exportName]) {\r\n exportItems[info.exportName] = {\r\n exportName: info.exportName,\r\n isDefault: info.isDefault,\r\n aliasNames: [],\r\n needOriginExport: false,\r\n };\r\n }\r\n\r\n if (!info.nodeIdentifier && !info.aliasName) {\r\n exportItems[info.exportName].needOriginExport = true;\r\n }\r\n });\r\n\r\n // \u5EFA\u7ACB\u522B\u540D\u5B57\u5178\r\n depsInfo.forEach((info) => {\r\n if (info.aliasName) {\r\n const { aliasNames } = exportItems[info.exportName];\r\n if (aliasNames.indexOf(info.aliasName) < 0) {\r\n aliasNames.push(info.aliasName);\r\n }\r\n }\r\n });\r\n\r\n // fix: \u7236\u7EC4\u4EF6ImportAliasDefine, \u4E0E\u5B50\u7EC4\u4EF6import\u7684\u7236\u7EC4\u4EF6\u51B2\u7A81\u60C5\u51B5\r\n depsInfo.forEach((info) => {\r\n if (info.nodeIdentifier) {\r\n const exportItem = exportItems[info.exportName];\r\n if (!exportItem.needOriginExport && exportItem.aliasNames.length > 0) {\r\n // eslint-disable-next-line no-param-reassign\r\n info.aliasName = exportItem.aliasNames[0];\r\n }\r\n }\r\n });\r\n\r\n // \u53D1\u73B0 nodeIdentifier \u4E0E exportName \u6216\u8005 aliasName \u51B2\u7A81\u7684\u573A\u666F\r\n const nodeIdentifiers = depsInfo.map((info) => info.nodeIdentifier).filter(Boolean);\r\n const conflictInfos = flatMap(Object.keys(exportItems), (exportName) => {\r\n const exportItem = exportItems[exportName];\r\n const usedNames = [\r\n ...exportItem.aliasNames,\r\n ...(exportItem.needOriginExport || exportItem.aliasNames.length <= 0 ? [exportName] : []),\r\n ];\r\n const conflictNames = usedNames.filter((n) => nodeIdentifiers.indexOf(n) >= 0);\r\n if (conflictNames.length > 0) {\r\n return [\r\n ...(conflictNames.indexOf(exportName) >= 0 ? [[exportName, true, exportItem]] : []),\r\n ...conflictNames.filter((n) => n !== exportName).map((n) => [n, false, exportItem]),\r\n ];\r\n }\r\n return [];\r\n });\r\n\r\n const conflictExports = conflictInfos.filter((c) => c[1]).map((c) => c[0] as string);\r\n const conflictAlias = conflictInfos.filter((c) => !c[1]).map((c) => c[0] as string);\r\n\r\n const solutions: Record<string, string> = {};\r\n\r\n depsInfo.forEach((info) => {\r\n if (info.aliasName && conflictAlias.indexOf(info.aliasName) >= 0) {\r\n // find solution\r\n let solution = solutions[info.aliasName];\r\n if (!solution) {\r\n solution = `${info.aliasName}Alias`;\r\n const conflictItem = (conflictInfos.find((c) => c[0] === info.aliasName) ||\r\n [])[2] as IExportItem;\r\n conflictItem.aliasNames = conflictItem.aliasNames.filter((a) => a !== info.aliasName);\r\n conflictItem.aliasNames.push(solution);\r\n solutions[info.aliasName] = solution;\r\n }\r\n // eslint-disable-next-line no-param-reassign\r\n info.aliasName = solution;\r\n }\r\n\r\n if (conflictExports.indexOf(info.exportName) >= 0) {\r\n // find solution\r\n let solution = solutions[info.exportName];\r\n if (!solution) {\r\n solution = `${info.exportName}Export`;\r\n const conflictItem = (conflictInfos.find((c) => c[0] === info.exportName) ||\r\n [])[2] as IExportItem;\r\n conflictItem.aliasNames.push(solution);\r\n conflictItem.needOriginExport = false;\r\n solutions[info.exportName] = solution;\r\n }\r\n // eslint-disable-next-line no-param-reassign\r\n info.aliasName = solution;\r\n }\r\n });\r\n\r\n // \u5224\u65AD\u662F\u5426\u6240\u6709\u4F9D\u8D56\u90FD\u6709\u5408\u6CD5\u7684 Identifier\r\n depsInfo.forEach((info) => {\r\n const name = info.aliasName || info.exportName;\r\n if (!isValidIdentifier(name)) {\r\n throw new CodeGeneratorError(`Invalid Identifier [${name}]`);\r\n }\r\n if (info.nodeIdentifier && !isValidIdentifier(info.nodeIdentifier)) {\r\n throw new CodeGeneratorError(`Invalid Identifier [${info.nodeIdentifier}]`);\r\n }\r\n });\r\n\r\n const aliasDefineStatements: Record<string, string> = {};\r\n if (useAliasName) {\r\n Object.keys(exportItems).forEach((exportName) => {\r\n const aliasList = exportItems[exportName]?.aliasNames || [];\r\n if (aliasList.length > 0) {\r\n const srcName = exportItems[exportName].needOriginExport ? exportName : aliasList[0];\r\n const aliasNameList = exportItems[exportName].needOriginExport\r\n ? aliasList\r\n : aliasList.slice(1);\r\n aliasNameList.forEach((a) => {\r\n if (!aliasDefineStatements[a]) {\r\n aliasDefineStatements[a] = `const ${a} = ${srcName};`;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n function getDefaultExportName(info: IDependencyItem): string {\r\n if (info.isDefault) {\r\n return defaultExportNames[0];\r\n }\r\n return info.exportName;\r\n }\r\n\r\n depsInfo.forEach((info) => {\r\n // \u5982\u679C\u662F\u5B50\u7EC4\u4EF6\uFF0C\u5219\u5BFC\u51FA\u7236\u7EC4\u4EF6\uFF0C\u5E76\u4E14\u6839\u636E\u81EA\u7EC4\u4EF6\u547D\u540D\u89C4\u5219\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u5B9A\u4E49\u6807\u8BC6\u7B26\r\n if (info.nodeIdentifier) {\r\n // \u524D\u63D0\uFF0C\u5B58\u5728 nodeIdentifier \u4E00\u5B9A\u662F\u6709 subName \u7684\uFF0C\u4E0D\u7136\u524D\u9762\u4F1A\u4F18\u5316\u6389\r\n const ownerName = getDependencyIdentifier(info);\r\n\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: COMMON_CHUNK_NAME.ImportAliasDefine,\r\n content: useAliasName ? `const ${info.nodeIdentifier} = ${ownerName}.${info.subName};` : '',\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport],\r\n ext: {\r\n originalName: `${getDefaultExportName(info)}.${info.subName}`,\r\n aliasName: info.nodeIdentifier,\r\n dependency: info.source,\r\n },\r\n });\r\n } else if (info.aliasName) {\r\n // default \u65B9\u5F0F\u7684\u5BFC\u5165\u4F1A\u751F\u6210\u5355\u72ECde import \u8BED\u53E5\uFF0C\u65E0\u9700\u751F\u6210\u8D4B\u503C\u8BED\u53E5\r\n if (info.isDefault && defaultExportNames.find((n) => n === info.aliasName)) {\r\n delete aliasDefineStatements[info.aliasName];\r\n return;\r\n }\r\n\r\n let contentStatement = '';\r\n if (aliasDefineStatements[info.aliasName]) {\r\n contentStatement = aliasDefineStatements[info.aliasName];\r\n delete aliasDefineStatements[info.aliasName];\r\n }\r\n\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: COMMON_CHUNK_NAME.ImportAliasDefine,\r\n content: contentStatement,\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport],\r\n ext: {\r\n originalName: getDefaultExportName(info),\r\n aliasName: info.aliasName,\r\n dependency: info.source,\r\n },\r\n });\r\n }\r\n });\r\n\r\n // \u53EF\u80FD\u4F1A\u5269\u4F59\u4E00\u4E9B\u5B58\u5728\u4E8C\u6B21\u8F6C\u6362\u7684\u5B9A\u4E49\r\n Object.keys(aliasDefineStatements).forEach((a) => {\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: COMMON_CHUNK_NAME.ImportAliasDefine,\r\n content: aliasDefineStatements[a],\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport],\r\n });\r\n });\r\n\r\n const exportItemList = Object.keys(exportItems).map((k) => exportItems[k]);\r\n const defaultExport = exportItemList.filter((item) => item.isDefault);\r\n const otherExports = exportItemList.filter((item) => !item.isDefault);\r\n\r\n const statementL = ['import'];\r\n if (defaultExport.length > 0) {\r\n if (useAliasName) {\r\n statementL.push(defaultExportNames[0]);\r\n } else {\r\n statementL.push(defaultExport[0].aliasNames[0]);\r\n }\r\n if (otherExports.length > 0) {\r\n statementL.push(', ');\r\n }\r\n }\r\n if (otherExports.length > 0) {\r\n const items = otherExports.map((item) => {\r\n return !useAliasName || item.needOriginExport || item.aliasNames.length <= 0\r\n ? item.exportName\r\n : `${item.exportName} as ${item.aliasNames[0]}`;\r\n });\r\n statementL.push(`{ ${items.join(', ')} }`);\r\n }\r\n statementL.push('from');\r\n\r\n const getInternalDependencyModuleId = () => `@/${(deps[0] as IInternalDependency).type}/${pkg}`;\r\n\r\n if (deps[0].dependencyType === DependencyType.Internal) {\r\n // TODO: Internal Deps path use project slot setting\r\n statementL.push(`'${getInternalDependencyModuleId()}';`);\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: statementL.join(' '),\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n } else {\r\n statementL.push(`'${pkg}';`);\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n content: statementL.join(' '),\r\n linkAfter: [],\r\n });\r\n }\r\n\r\n // \u5904\u7406\u4E0B\u4E00\u4E9B\u989D\u5916\u7684 default \u65B9\u5F0F\u7684\u5BFC\u5165\r\n if (defaultExportNames.length > 1) {\r\n if (deps[0].dependencyType === DependencyType.Internal) {\r\n defaultExportNames.slice(1).forEach((exportName) => {\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: `import ${exportName} from '${getInternalDependencyModuleId()}';`,\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n });\r\n } else {\r\n defaultExportNames.slice(1).forEach((exportName) => {\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n content: `import ${exportName} from '${pkg}';`,\r\n linkAfter: [],\r\n });\r\n\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: COMMON_CHUNK_NAME.ImportAliasDefine,\r\n content: '',\r\n linkAfter: [],\r\n ext: {\r\n aliasName: exportName,\r\n originalName: exportName,\r\n dependency: {\r\n package: pkg,\r\n componentName: exportName,\r\n },\r\n },\r\n });\r\n });\r\n }\r\n }\r\n\r\n return chunks;\r\n}\r\n\r\nexport interface PluginConfig {\r\n fileType?: string; // \u5BFC\u51FA\u7684\u6587\u4EF6\u7C7B\u578B\r\n useAliasName?: boolean; // \u662F\u5426\u4F7F\u7528 componentName \u91CD\u547D\u540D\u7EC4\u4EF6 identifier\r\n filter?: (deps: IDependency[]) => IDependency[]; // \u652F\u6301\u8FC7\u6EE4\u80FD\u529B\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?: PluginConfig) => {\r\n const cfg = {\r\n fileType: FileType.JS,\r\n useAliasName: true,\r\n ...(config || {}),\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IWithDependency;\r\n\r\n if (ir && ir.deps && ir.deps.length > 0) {\r\n const deps = cfg.filter ? cfg.filter(ir.deps) : ir.deps;\r\n const packs = groupDepsByPack(deps);\r\n\r\n Object.keys(packs).forEach((pkg) => {\r\n const chunks = buildPackageImport(pkg, packs[pkg], cfg.fileType, cfg.useAliasName);\r\n next.chunks.push(...chunks);\r\n });\r\n }\r\n\r\n return next;\r\n };\r\n\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import changeCase from 'change-case';\r\nimport {\r\n FileType,\r\n BuilderComponentPluginFactory,\r\n BuilderComponentPlugin,\r\n ICodeStruct,\r\n IWithDependency,\r\n ChunkType,\r\n} from '../../types';\r\n\r\nimport { COMMON_CHUNK_NAME } from '../../const/generator';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IWithDependency;\r\n const { chunks } = next;\r\n\r\n if (ir && ir.deps && ir.deps.length > 0) {\r\n let lowcodeMaterialsStyleAdded = false;\r\n let fusionUIStyleAdded = false;\r\n let nextStyleAddedMap: Record<string, boolean> = {};\r\n ir.deps.forEach((dep: any) => {\r\n if (dep.package === '@alifd/next' && !nextStyleAddedMap[dep.exportName]) {\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: `import '@alifd/next/lib/${changeCase.paramCase(dep.exportName)}/style';`,\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n nextStyleAddedMap[dep.exportName] = true;\r\n } else if (dep.package === '@alilc/lowcode-materials' && !lowcodeMaterialsStyleAdded) {\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: 'import \\'@alilc/lowcode-materials/lib/style\\';',\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n lowcodeMaterialsStyleAdded = true;\r\n } else if (dep.package === '@alifd/fusion-ui' && !fusionUIStyleAdded) {\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: 'import \\'@alifd/fusion-ui/lib/style\\';',\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n fusionUIStyleAdded = true;\r\n }\r\n });\r\n }\r\n\r\n return next;\r\n };\r\n\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import changeCase from 'change-case';\r\nimport {\r\n COMMON_CHUNK_NAME,\r\n CLASS_DEFINE_CHUNK_NAME,\r\n DEFAULT_LINK_AFTER,\r\n} from '../../../const/generator';\r\nimport { REACT_CHUNK_NAME } from './const';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\nimport { ensureValidClassName } from '../../../utils/validate';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n\r\n // \u5C06\u6A21\u5757\u540D\u8F6C\u6362\u6210 PascalCase \u7684\u683C\u5F0F\uFF0C\u5E76\u6DFB\u52A0\u7279\u5B9A\u540E\u7F00\uFF0C\u9632\u6B62\u547D\u540D\u51B2\u7A81\r\n const componentClassName = ensureValidClassName(\r\n `${changeCase.pascalCase(ir.moduleName)}$$${ir.containerType}`,\r\n );\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: CLASS_DEFINE_CHUNK_NAME.Start,\r\n content: `class ${componentClassName} extends React.Component {`,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n ],\r\n });\r\n\r\n if (ir.containerType === 'Component') {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n content: `static displayName = '${ir.moduleName}';`,\r\n linkAfter: [\r\n CLASS_DEFINE_CHUNK_NAME.Start,\r\n ],\r\n });\r\n }\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: CLASS_DEFINE_CHUNK_NAME.End,\r\n content: '}',\r\n linkAfter: [\r\n ...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.End],\r\n REACT_CHUNK_NAME.ClassRenderEnd,\r\n REACT_CHUNK_NAME.ClassDidMountEnd,\r\n ],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorStart,\r\n content: 'constructor(props, context) { super(props); ',\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorStart]],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorEnd,\r\n content: '}',\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorEnd]],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: REACT_CHUNK_NAME.ClassDidMountStart,\r\n content: 'componentDidMount() {',\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.End]],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: REACT_CHUNK_NAME.ClassDidMountEnd,\r\n content: '}',\r\n linkAfter: [REACT_CHUNK_NAME.ClassDidMountContent, REACT_CHUNK_NAME.ClassDidMountStart],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: REACT_CHUNK_NAME.ClassRenderStart,\r\n content: 'render() {',\r\n linkAfter: [\r\n ...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.End],\r\n REACT_CHUNK_NAME.ClassDidMountEnd,\r\n ],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: REACT_CHUNK_NAME.ClassRenderEnd,\r\n content: '}',\r\n linkAfter: [\r\n REACT_CHUNK_NAME.ClassRenderStart,\r\n REACT_CHUNK_NAME.ClassRenderPre,\r\n REACT_CHUNK_NAME.ClassRenderJSX,\r\n ],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.FileExport,\r\n content: `export default ${componentClassName};`,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n CLASS_DEFINE_CHUNK_NAME.End,\r\n ],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "export const REACT_CHUNK_NAME = {\r\n ClassRenderStart: 'ReactComponentClassRenderStart',\r\n ClassRenderPre: 'ReactComponentClassRenderPre',\r\n ClassRenderEnd: 'ReactComponentClassRenderEnd',\r\n ClassRenderJSX: 'ReactComponentClassRenderJSX',\r\n ClassDidMountStart: 'ReactComponentClassDidMountStart',\r\n ClassDidMountEnd: 'ReactComponentClassDidMountEnd',\r\n ClassDidMountContent: 'ReactComponentClassDidMountContent',\r\n};\r\n", "import {\r\n IPublicTypeCompositeArray,\r\n IPublicTypeCompositeValue,\r\n IPublicTypeCompositeObject,\r\n IPublicTypeJSFunction,\r\n IPublicTypeJSExpression,\r\n isJSExpression,\r\n isJSFunction,\r\n isJSSlot,\r\n IPublicTypeJSSlot,\r\n} from '@alilc/lowcode-types';\r\nimport _ from 'lodash';\r\n\r\nimport { IScope, CompositeValueGeneratorOptions, CodeGeneratorError } from '../types';\r\nimport { generateExpression, generateFunction } from './jsExpression';\r\nimport { generateJsSlot } from './jsSlot';\r\nimport { executeFunctionStack } from './aopHelper';\r\nimport { parseExpressionGetKeywords } from './expressionParser';\r\nimport { isJSExpressionFn } from './common';\r\n\r\ninterface ILegaoVariable {\r\n type: 'variable';\r\n value: string;\r\n variable: string;\r\n}\r\n\r\nfunction isVariable(v: any): v is ILegaoVariable {\r\n if (_.isObject(v) && (v as ILegaoVariable).type === 'variable') {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\ninterface DataSource {\r\n type: 'DataSource';\r\n id: string;\r\n}\r\n\r\n/**\r\n * \u5224\u65AD\u662F\u5426\u662F\u6570\u636E\u6E90\u7C7B\u578B\r\n */\r\nfunction isDataSource(v: unknown): v is DataSource {\r\n return typeof v === 'object' && v != null && (v as Partial<DataSource>).type === 'DataSource';\r\n}\r\n\r\nfunction generateArray(\r\n value: IPublicTypeCompositeArray,\r\n scope: IScope,\r\n options: CompositeValueGeneratorOptions = {},\r\n): string {\r\n const body = value.map((v) => generateUnknownType(v, scope, options)).join(',');\r\n return `[${body}]`;\r\n}\r\n\r\nfunction generateObject(\r\n value: IPublicTypeCompositeObject,\r\n scope: IScope,\r\n options: CompositeValueGeneratorOptions = {},\r\n): string {\r\n if (value.type === 'i18n') {\r\n // params \u53EF\u80FD\u4F1A\u7ED1\u5B9A\u53D8\u91CF\uFF0C\u8FD9\u91CC\u9700\u8981\u5904\u7406\u4E0B\r\n if (value.params && typeof value.params === 'object') {\r\n return `this._i18nText(${generateUnknownType(_.omit(value, 'type'), scope, options)})`;\r\n }\r\n return `this._i18nText(${JSON.stringify(_.omit(value, 'type'))})`; // TODO: \u4F18\u5316\uFF1A\u8FD9\u91CC\u53EF\u4EE5\u8003\u8651\u63D0\u53D6\u6210\u4E2A\u5E38\u91CF...\r\n }\r\n\r\n const body = Object.keys(value)\r\n .map((key) => {\r\n const propName = JSON.stringify(key);\r\n const v = generateUnknownType(value[key], scope, options);\r\n return `${propName}: ${v}`;\r\n })\r\n .join(',\\n');\r\n\r\n return `{${body}}`;\r\n}\r\n\r\nfunction generateString(value: string): string {\r\n // \u6709\u7684\u5B57\u7B26\u4E32\u91CC\u9762\u4F1A\u6709\u7279\u6B8A\u5B57\u7B26\uFF0C\u6BD4\u5982\u6362\u884C\u6216\u5F15\u53F7\u4E4B\u7C7B\u7684\uFF0C\u8FD9\u91CC\u6211\u4EEC\u501F\u52A9 JSON \u7684\u5B57\u7B26\u4E32\u8F6C\u4E49\u529F\u80FD\u6765\u505A\u4E0B\u8F6C\u4E49\u5E76\u52A0\u4E0A\u53CC\u5F15\u53F7\r\n return JSON.stringify(value);\r\n}\r\n\r\nfunction generateNumber(value: number): string {\r\n return String(value);\r\n}\r\n\r\nfunction generateBool(value: boolean): string {\r\n return value ? 'true' : 'false';\r\n}\r\n\r\nfunction genFunction(value: IPublicTypeJSFunction): string {\r\n const globalVars = parseExpressionGetKeywords(value.value);\r\n\r\n if (globalVars.includes('arguments')) {\r\n return generateFunction(value, { isBindExpr: true });\r\n }\r\n\r\n return generateFunction(value, { isArrow: true });\r\n}\r\n\r\nfunction genJsSlot(value: IPublicTypeJSSlot, scope: IScope, options: CompositeValueGeneratorOptions = {}) {\r\n if (options.nodeGenerator) {\r\n return generateJsSlot(value, scope, options.nodeGenerator);\r\n }\r\n return '';\r\n}\r\n\r\nfunction generateUnknownType(\r\n value: IPublicTypeCompositeValue,\r\n scope: IScope,\r\n options: CompositeValueGeneratorOptions = {},\r\n): string {\r\n if (_.isUndefined(value)) {\r\n return 'undefined';\r\n }\r\n\r\n if (_.isNull(value)) {\r\n return 'null';\r\n }\r\n\r\n if (_.isArray(value)) {\r\n if (options.handlers?.array) {\r\n return executeFunctionStack(value, scope, options.handlers.array, generateArray, options);\r\n }\r\n return generateArray(value, scope, options);\r\n }\r\n\r\n // FIXME: \u8FD9\u4E2A\u662F\u4E34\u65F6\u65B9\u6848\r\n // \u5728\u9047\u5230 type variable \u79C1\u6709\u7C7B\u578B\u65F6\uFF0C\u8F6C\u6362\u4E3A JSExpression\r\n if (isVariable(value)) {\r\n const transValue: IPublicTypeJSExpression = {\r\n type: 'JSExpression',\r\n value: value.variable,\r\n };\r\n\r\n if (options.handlers?.expression) {\r\n const expression = executeFunctionStack(\r\n transValue,\r\n scope,\r\n options.handlers.expression,\r\n generateExpression,\r\n options,\r\n );\r\n return expression || 'undefined';\r\n }\r\n return generateExpression(transValue, scope);\r\n }\r\n\r\n if (isJSExpression(value)) {\r\n if (options.handlers?.expression) {\r\n return executeFunctionStack(\r\n value,\r\n scope,\r\n options.handlers.expression,\r\n generateExpression,\r\n options,\r\n );\r\n }\r\n return generateExpression(value, scope);\r\n }\r\n\r\n if (isJSFunction(value) || isJSExpressionFn(value)) {\r\n if (options.handlers?.function) {\r\n return executeFunctionStack(value, scope, options.handlers.function, genFunction, options);\r\n }\r\n return genFunction(value);\r\n }\r\n\r\n if (isJSSlot(value)) {\r\n if (options.handlers?.slot) {\r\n return executeFunctionStack(value, scope, options.handlers.slot, genJsSlot, options);\r\n }\r\n return genJsSlot(value, scope, options);\r\n }\r\n\r\n if (isDataSource(value)) {\r\n return generateUnknownType(\r\n {\r\n type: 'JSExpression',\r\n value: `this.dataSourceMap[${JSON.stringify(value.id)}]`,\r\n },\r\n scope,\r\n options,\r\n );\r\n }\r\n\r\n if (_.isObject(value)) {\r\n if (options.handlers?.object) {\r\n return executeFunctionStack(value, scope, options.handlers.object, generateObject, options);\r\n }\r\n return generateObject(value as IPublicTypeCompositeObject, scope, options);\r\n }\r\n\r\n if (_.isString(value)) {\r\n if (options.handlers?.string) {\r\n return executeFunctionStack(value, scope, options.handlers.string, generateString, options);\r\n }\r\n return generateString(value);\r\n }\r\n\r\n if (_.isNumber(value)) {\r\n if (options.handlers?.number) {\r\n return executeFunctionStack(value, scope, options.handlers.number, generateNumber, options);\r\n }\r\n return generateNumber(value);\r\n }\r\n\r\n if (_.isBoolean(value)) {\r\n if (options.handlers?.boolean) {\r\n return executeFunctionStack(value, scope, options.handlers.boolean, generateBool, options);\r\n }\r\n return generateBool(value);\r\n }\r\n\r\n throw new CodeGeneratorError('Meet unknown composite value type');\r\n}\r\n\r\n// \u8FD9\u4E00\u5C42\u66FE\u7ECF\u662F\u5BF9\u4EA7\u51FA\u505A\u6700\u5916\u5C42\u5305\u88C5\u7684\uFF0C\u4F46\u5176\u5B9E\u5305\u88C5\u903B\u8F91\u4E0D\u5E94\u8BE5\u5C5E\u4E8E\u8FD9\u4E00\u5C42\r\n// \u8FD9\u4E00\u5C42\u5148\u4E0D\u53BB\u6389\uFF0C\u505A\u5197\u4F59\uFF0C\u65B9\u4FBF\u540E\u7EED\u91CD\u6784\r\nexport function generateCompositeType(\r\n value: IPublicTypeCompositeValue,\r\n scope: IScope,\r\n options: CompositeValueGeneratorOptions = {},\r\n): string {\r\n const result = generateUnknownType(value, scope, options);\r\n return result;\r\n}\r\n", "import * as parser from '@babel/parser';\r\nimport generate from '@babel/generator';\r\nimport traverse from '@babel/traverse';\r\nimport * as t from '@babel/types';\r\nimport { IPublicTypeJSExpression, IPublicTypeJSFunction, isJSExpression, isJSFunction } from '@alilc/lowcode-types';\r\nimport { CodeGeneratorError, IScope } from '../types';\r\nimport { transformExpressionLocalRef, ParseError } from './expressionParser';\r\nimport { isJSExpressionFn } from './common';\r\n\r\nfunction parseFunction(content: string): t.FunctionExpression | null {\r\n try {\r\n const ast = parser.parse(`(${content});`, {\r\n plugins: [\r\n 'jsx',\r\n ],\r\n });\r\n\r\n let resultNode: t.FunctionExpression | null = null;\r\n traverse(ast, {\r\n FunctionExpression(path) {\r\n resultNode = path.node;\r\n path.stop();\r\n },\r\n });\r\n return resultNode;\r\n } catch (e) {\r\n throw new ParseError(content, e);\r\n }\r\n}\r\n\r\nfunction transformFuncExpr2MethodMember(methodName: string, content: string): string {\r\n const funcNode = parseFunction(content);\r\n if (funcNode) {\r\n const targetNode = t.classMethod(\r\n 'method',\r\n (methodName && t.identifier(methodName)) || funcNode.id || t.identifier('notDefineName'),\r\n funcNode.params,\r\n funcNode.body,\r\n undefined,\r\n undefined,\r\n undefined,\r\n funcNode.async || undefined,\r\n );\r\n\r\n const { code: resultCode } = generate(targetNode, { sourceMaps: false });\r\n return resultCode;\r\n }\r\n\r\n throw new Error('Can not find Function Statement');\r\n}\r\n\r\nfunction getArrowFunction(content: string) {\r\n const funcNode = parseFunction(content);\r\n if (funcNode) {\r\n const targetNode = t.arrowFunctionExpression(\r\n funcNode.params,\r\n funcNode.body,\r\n funcNode.async || undefined,\r\n );\r\n\r\n const { code: resultCode } = generate(targetNode, { sourceMaps: false });\r\n return resultCode;\r\n }\r\n\r\n throw new Error('Can not find Function Statement');\r\n}\r\n\r\nfunction getBodyStatements(content: string) {\r\n const funcNode = parseFunction(content);\r\n if (funcNode) {\r\n const statements: t.Statement[] = funcNode.body.body;\r\n\r\n const targetNode = t.program(statements, undefined, 'module', undefined);\r\n\r\n const { code: resultCode } = generate(targetNode, { sourceMaps: false });\r\n return resultCode;\r\n }\r\n\r\n throw new Error('Can not find Function Statement');\r\n}\r\n\r\n/**\r\n * \u662F\u5426\u662F\u5E7F\u4E49\u4E0A\u7684 JSFunction\r\n * @param value\r\n * @returns\r\n */\r\nexport function isBroadJSFunction(value: unknown): boolean {\r\n return isJSExpressionFn(value) || isJSFunction(value);\r\n}\r\n\r\nexport function generateExpression(value: any, scope: IScope): string {\r\n if (isJSExpression(value)) {\r\n const exprVal = (value as IPublicTypeJSExpression).value.trim();\r\n if (!exprVal) {\r\n return 'null';\r\n }\r\n\r\n const afterProcessWithLocals = transformExpressionLocalRef(exprVal, scope);\r\n return afterProcessWithLocals;\r\n }\r\n\r\n throw new CodeGeneratorError('Not a JSExpression');\r\n}\r\n\r\nfunction getFunctionSource(cfg: IPublicTypeJSFunction): string {\r\n return cfg.source || cfg.value || cfg.compiled;\r\n}\r\n\r\n/**\r\n * \u751F\u6210\u51FD\u6570\u4EE3\u7801\r\n *\r\n * @param value \u51FD\u6570\u6216\u8868\u8FBE\u5F0F\r\n * @param config \u914D\u7F6E\u5BF9\u8C61\uFF0C\u5305\u542B\u4EE5\u4E0B\u5C5E\u6027\uFF1A\r\n * - name: \u51FD\u6570\u540D\u79F0\uFF0C\u53EF\u9009\r\n * - isMember: \u662F\u5426\u4E3A\u6210\u5458\u51FD\u6570\uFF0C\u9ED8\u8BA4\u4E3Afalse\r\n * - isBlock: \u662F\u5426\u4E3A\u5757\u7EA7\u51FD\u6570\uFF0C\u9ED8\u8BA4\u4E3Afalse\r\n * - isArrow: \u662F\u5426\u4E3A\u7BAD\u5934\u51FD\u6570\uFF0C\u9ED8\u8BA4\u4E3Afalse\r\n * - isBindExpr: \u662F\u5426\u4E3A\u7ED1\u5B9A\u8868\u8FBE\u5F0F\uFF0C\u9ED8\u8BA4\u4E3Afalse\r\n * @returns \u8FD4\u56DE\u751F\u6210\u7684\u51FD\u6570\u4EE3\u7801\r\n * @throws \u5F53 value \u4E0D\u662F JSFunction \u6216 JSExpression \u65F6\u629B\u51FA CodeGeneratorError\r\n */\r\nexport function generateFunction(\r\n value: any,\r\n config: {\r\n name?: string;\r\n isMember?: boolean;\r\n isBlock?: boolean;\r\n isArrow?: boolean;\r\n isBindExpr?: boolean;\r\n } = {\r\n name: undefined,\r\n isMember: false,\r\n isBlock: false,\r\n isArrow: false,\r\n isBindExpr: false,\r\n },\r\n) {\r\n if (isBroadJSFunction(value)) {\r\n const functionCfg = value as IPublicTypeJSFunction;\r\n const functionSource = getFunctionSource(functionCfg);\r\n if (config.isMember) {\r\n return transformFuncExpr2MethodMember(config.name || '', functionSource);\r\n }\r\n if (config.isBlock) {\r\n return getBodyStatements(functionSource);\r\n }\r\n if (config.isArrow) {\r\n return getArrowFunction(functionSource);\r\n }\r\n if (config.isBindExpr) {\r\n return `(${functionSource}).bind(this)`;\r\n }\r\n return functionSource;\r\n }\r\n\r\n if (isJSExpression(value)) {\r\n return value.value;\r\n }\r\n\r\n throw new CodeGeneratorError('Not a JSFunction or JSExpression');\r\n}\r\n", "import * as parser from '@babel/parser';\r\nimport generate from '@babel/generator';\r\nimport traverse, { NodePath } from '@babel/traverse';\r\nimport * as t from '@babel/types';\r\nimport { isIdentifier, Node } from '@babel/types';\r\n\r\nimport { OrderedSet } from './OrderedSet';\r\nimport { IScope } from '../types';\r\n\r\nexport class ParseError extends Error {\r\n readonly expr: string | t.Expression;\r\n\r\n readonly detail: unknown;\r\n\r\n constructor(expr: string | t.Expression, detail: unknown) {\r\n super(`Failed to parse expression \"${typeof expr === 'string' ? expr : generate(expr)}\"`);\r\n this.expr = expr;\r\n this.detail = detail;\r\n Object.setPrototypeOf(this, new.target.prototype);\r\n }\r\n}\r\n\r\nconst MAYBE_EXPRESSIONS: {\r\n [k in Node['type']]?: {\r\n // fields: Array<keyof (Node & { type: k })>\r\n fields: string[] | ((node: Node) => string[]);\r\n };\r\n} = {\r\n ArrayExpression: { fields: ['elements'] },\r\n AssignmentExpression: { fields: ['left', 'right'] },\r\n BinaryExpression: { fields: ['left', 'right'] },\r\n CallExpression: { fields: ['arguments', 'callee'] },\r\n ConditionalExpression: { fields: ['test', 'consequent', 'alternate'] },\r\n DoWhileStatement: { fields: ['test'] },\r\n ExpressionStatement: { fields: ['expression'] },\r\n ForInStatement: { fields: ['right'] },\r\n ForStatement: { fields: ['init', 'test', 'update'] },\r\n IfStatement: { fields: ['test'] },\r\n LogicalExpression: { fields: ['left', 'right'] },\r\n MemberExpression: {\r\n fields: (node) => {\r\n return node.type === 'MemberExpression' && node.computed\r\n ? ['object', 'property']\r\n : ['object'];\r\n },\r\n },\r\n NewExpression: { fields: ['callee', 'arguments'] },\r\n ObjectMethod: {\r\n fields: (node) => {\r\n return node.type === 'ObjectMethod' && node.computed ? ['key'] : [];\r\n },\r\n },\r\n ObjectProperty: {\r\n fields: (node) => {\r\n return node.type === 'ObjectProperty' && node.computed ? ['key', 'value'] : ['value'];\r\n },\r\n },\r\n ReturnStatement: { fields: ['argument'] },\r\n SequenceExpression: { fields: ['expressions'] },\r\n ParenthesizedExpression: { fields: ['expression'] },\r\n SwitchCase: { fields: ['test'] },\r\n SwitchStatement: { fields: ['discriminant'] },\r\n ThrowStatement: { fields: ['argument'] },\r\n UnaryExpression: { fields: ['argument'] },\r\n UpdateExpression: { fields: ['argument'] },\r\n VariableDeclarator: { fields: ['init'] },\r\n WhileStatement: { fields: ['test'] },\r\n WithStatement: { fields: ['object'] },\r\n AssignmentPattern: { fields: ['right'] },\r\n ArrowFunctionExpression: { fields: ['body'] },\r\n ClassExpression: { fields: ['superClass'] },\r\n ClassDeclaration: { fields: ['superClass'] },\r\n ExportDefaultDeclaration: { fields: ['declaration'] },\r\n ForOfStatement: { fields: ['right'] },\r\n ClassMethod: {\r\n fields: (node) => {\r\n return node.type === 'ClassMethod' && node.computed ? ['key'] : [];\r\n },\r\n },\r\n SpreadElement: { fields: ['argument'] },\r\n TaggedTemplateExpression: { fields: ['tag'] },\r\n TemplateLiteral: { fields: ['expressions'] },\r\n YieldExpression: { fields: ['argument'] },\r\n AwaitExpression: { fields: ['argument'] },\r\n OptionalMemberExpression: {\r\n fields: (node) => {\r\n return node.type === 'OptionalMemberExpression' && node.computed\r\n ? ['object', 'property']\r\n : ['object'];\r\n },\r\n },\r\n OptionalCallExpression: { fields: ['callee', 'arguments'] },\r\n JSXSpreadAttribute: { fields: ['argument'] },\r\n BindExpression: { fields: ['object', 'callee'] },\r\n ClassProperty: {\r\n fields: (node) => {\r\n return node.type === 'ClassProperty' && node.computed ? ['key', 'value'] : ['value'];\r\n },\r\n },\r\n PipelineTopicExpression: { fields: ['expression'] },\r\n PipelineBareFunction: { fields: ['callee'] },\r\n ClassPrivateProperty: { fields: ['value'] },\r\n Decorator: { fields: ['expression'] },\r\n TupleExpression: { fields: ['elements'] },\r\n TSDeclareMethod: {\r\n fields: (node) => {\r\n return node.type === 'TSDeclareMethod' && node.computed ? ['key'] : [];\r\n },\r\n },\r\n TSPropertySignature: {\r\n fields: (node) => {\r\n return node.type === 'TSPropertySignature' && node.computed\r\n ? ['key', 'initializer']\r\n : ['initializer'];\r\n },\r\n },\r\n\r\n TSMethodSignature: {\r\n fields: (node) => {\r\n return node.type === 'TSMethodSignature' && node.computed ? ['key'] : [];\r\n },\r\n },\r\n TSAsExpression: { fields: ['expression'] },\r\n TSTypeAssertion: { fields: ['expression'] },\r\n TSEnumDeclaration: { fields: ['initializer'] },\r\n TSEnumMember: { fields: ['initializer'] },\r\n TSNonNullExpression: { fields: ['expression'] },\r\n TSExportAssignment: { fields: ['expression'] },\r\n};\r\n\r\nexport interface ParseExpressionGetGlobalVariablesOptions {\r\n filter?: (varName: string) => boolean;\r\n}\r\n\r\nconst CROSS_THIS_SCOPE_TYPE_NODE: {\r\n [k in Node['type']]?: boolean;\r\n} = {\r\n ArrowFunctionExpression: false, // \u7BAD\u5934\u51FD\u6570\u4E0D\u8DE8\u8D8A this \u7684 scope\r\n FunctionExpression: true,\r\n FunctionDeclaration: true,\r\n // FunctionTypeAnnotation: false, // \u8FD9\u662F TS \u5B9A\u4E49\r\n // FunctionTypeParam: false, // \u8FD9\u662F TS \u5B9A\u4E49\r\n ClassDeclaration: true,\r\n ClassExpression: true,\r\n ClassBody: true,\r\n ClassImplements: true,\r\n ClassMethod: true,\r\n ClassPrivateMethod: true,\r\n ClassProperty: true,\r\n ClassPrivateProperty: true,\r\n DeclareClass: true,\r\n};\r\n\r\nconst JS_KEYWORDS = ['arguments', 'this', 'super'];\r\n\r\nexport function parseExpressionGetKeywords(expr: string | null | undefined): string[] {\r\n if (!expr) {\r\n return [];\r\n }\r\n\r\n try {\r\n const keywordVars = new OrderedSet<string>();\r\n\r\n const ast = parser.parse(`!(${expr});`, {\r\n plugins: [\r\n 'jsx',\r\n ],\r\n });\r\n\r\n const addIdentifierIfNeeded = (x: Node | null | undefined) => {\r\n if (typeof x === 'object' && isIdentifier(x) && JS_KEYWORDS.includes(x.name)) {\r\n keywordVars.add(x.name);\r\n }\r\n };\r\n\r\n traverse(ast, {\r\n enter(path) {\r\n const { node } = path;\r\n const expressionFields = MAYBE_EXPRESSIONS[node.type]?.fields;\r\n if (expressionFields) {\r\n (typeof expressionFields === 'function'\r\n ? expressionFields(node)\r\n : expressionFields\r\n ).forEach((fieldName) => {\r\n const fieldValue = node[fieldName as keyof typeof node];\r\n if (typeof fieldValue === 'object') {\r\n if (Array.isArray(fieldValue)) {\r\n fieldValue.forEach((item: any) => {\r\n addIdentifierIfNeeded(item);\r\n });\r\n } else {\r\n addIdentifierIfNeeded(fieldValue as any);\r\n }\r\n }\r\n });\r\n }\r\n },\r\n });\r\n\r\n return keywordVars.toArray().filter(Boolean);\r\n } catch (e) {\r\n throw new ParseError(expr, e);\r\n }\r\n}\r\n\r\nexport function parseExpressionGetGlobalVariables(\r\n expr: string | null | undefined,\r\n { filter = () => true }: ParseExpressionGetGlobalVariablesOptions = {},\r\n): string[] {\r\n if (!expr) {\r\n return [];\r\n }\r\n\r\n try {\r\n const undeclaredVars = new OrderedSet<string>();\r\n\r\n const ast = parser.parse(`!(${expr});`);\r\n\r\n const addUndeclaredIdentifierIfNeeded = (\r\n x: Node | null | undefined,\r\n path: NodePath<Node>,\r\n ) => {\r\n if (typeof x === 'object' && isIdentifier(x) && !path.scope.hasBinding(x.name)) {\r\n undeclaredVars.add(x.name);\r\n }\r\n };\r\n\r\n traverse(ast, {\r\n enter(path) {\r\n const { node } = path;\r\n const expressionFields = MAYBE_EXPRESSIONS[node.type]?.fields;\r\n if (expressionFields) {\r\n (typeof expressionFields === 'function'\r\n ? expressionFields(node)\r\n : expressionFields\r\n ).forEach((fieldName) => {\r\n const fieldValue = node[fieldName as keyof typeof node];\r\n if (typeof fieldValue === 'object') {\r\n if (Array.isArray(fieldValue)) {\r\n fieldValue.forEach((item: any) => {\r\n addUndeclaredIdentifierIfNeeded(item, path);\r\n });\r\n } else {\r\n addUndeclaredIdentifierIfNeeded(fieldValue as any, path);\r\n }\r\n }\r\n });\r\n }\r\n },\r\n });\r\n\r\n return undeclaredVars.toArray().filter(filter);\r\n } catch (e) {\r\n throw new ParseError(expr, e);\r\n }\r\n}\r\n\r\nexport function parseExpressionConvertThis2Context(\r\n expr: string | t.Expression,\r\n contextName = '__$$context',\r\n localVariables: string[] = [],\r\n): string {\r\n if (!expr) {\r\n return expr;\r\n }\r\n\r\n try {\r\n const exprAst = typeof expr === 'string' ? parser.parseExpression(expr) : expr;\r\n const exprWrapAst = t.expressionStatement(exprAst);\r\n const fileAst = t.file(t.program([exprWrapAst]));\r\n\r\n const localVariablesSet = new Set(localVariables);\r\n\r\n let thisScopeLevel = CROSS_THIS_SCOPE_TYPE_NODE[exprAst.type] ? -1 : 0;\r\n traverse(fileAst, {\r\n enter(path) {\r\n if (CROSS_THIS_SCOPE_TYPE_NODE[path.node.type]) {\r\n thisScopeLevel++;\r\n }\r\n },\r\n exit(path) {\r\n if (CROSS_THIS_SCOPE_TYPE_NODE[path.node.type]) {\r\n thisScopeLevel--;\r\n }\r\n },\r\n MemberExpression(path) {\r\n if (!path.isMemberExpression()) {\r\n return;\r\n }\r\n\r\n const obj = path.get('object');\r\n if (!obj.isThisExpression()) {\r\n return;\r\n }\r\n\r\n // \u5904\u7406\u5C40\u90E8\u53D8\u91CF\r\n if (!path.node.computed) {\r\n const prop = path.get('property');\r\n if (prop.isIdentifier() && localVariablesSet.has(prop.node.name)) {\r\n path.replaceWith(t.identifier(prop.node.name));\r\n return;\r\n }\r\n }\r\n\r\n // \u66FF\u6362 this (\u53EA\u5728\u9876\u5C42\u66FF\u6362)\r\n if (thisScopeLevel <= 0) {\r\n obj.replaceWith(t.identifier(contextName));\r\n }\r\n },\r\n ThisExpression(path) {\r\n if (!path.isThisExpression()) {\r\n return;\r\n }\r\n\r\n // MemberExpression \u4E2D\u7684 this.xxx \u5DF2\u7ECF\u5904\u7406\u8FC7\u4E86\r\n if (path.parent.type === 'MemberExpression') {\r\n return;\r\n }\r\n\r\n if (thisScopeLevel <= 0) {\r\n path.replaceWith(t.identifier(contextName));\r\n }\r\n },\r\n });\r\n\r\n const { code } = generate(exprWrapAst.expression, { sourceMaps: false });\r\n return code;\r\n } catch (e) {\r\n throw new ParseError(expr, e);\r\n }\r\n}\r\n\r\nexport function parseExpression(expr: string) {\r\n try {\r\n return parser.parseExpression(expr);\r\n } catch (e) {\r\n throw new ParseError(expr, e);\r\n }\r\n}\r\n\r\nexport function transformExpressionLocalRef(expr: string, scope: IScope) {\r\n if (!expr) {\r\n return expr;\r\n }\r\n\r\n if (!scope) {\r\n throw new Error('transform expression without scope');\r\n }\r\n\r\n try {\r\n const exprAst = typeof expr === 'string' ? parser.parseExpression(expr) : expr;\r\n const exprWrapAst = t.expressionStatement(exprAst);\r\n const fileAst = t.file(t.program([exprWrapAst]));\r\n\r\n traverse(fileAst, {\r\n MemberExpression(path) {\r\n if (!path.isMemberExpression()) {\r\n return;\r\n }\r\n\r\n const obj = path.get('object');\r\n if (!obj.isThisExpression()) {\r\n return;\r\n }\r\n\r\n // \u67E5\u770B\u662F\u5426\u5B58\u5728\u5F15\u7528 local \u503C\r\n const prop = path.get('property');\r\n let memberName = '';\r\n if (!path.node.computed && prop.isIdentifier()) {\r\n memberName = prop.node.name;\r\n } else if (path.node.computed && prop.isStringLiteral()) {\r\n memberName = prop.node.value;\r\n }\r\n if (memberName && scope.bindings && scope.bindings.hasBinding(memberName)) {\r\n path.replaceWith(t.identifier(memberName));\r\n }\r\n },\r\n });\r\n\r\n const { code } = generate(exprWrapAst.expression, { sourceMaps: false });\r\n return code;\r\n } catch (e) {\r\n throw new ParseError(expr, e);\r\n // throw e;\r\n }\r\n}\r\n", "export class OrderedSet<T> {\r\n private _set = new Set<T>();\r\n private _arr: T[] = [];\r\n\r\n constructor(items?: T[]) {\r\n if (items) {\r\n this._set = new Set(items);\r\n this._arr = items.slice(0);\r\n }\r\n }\r\n\r\n add(item: T) {\r\n if (!this._set.has(item)) {\r\n this._set.add(item);\r\n this._arr.push(item);\r\n }\r\n }\r\n\r\n delete(item: T) {\r\n if (this._set.has(item)) {\r\n this._set.delete(item);\r\n this._arr.splice(this._arr.indexOf(item), 1);\r\n }\r\n }\r\n\r\n has(item: T) {\r\n return this._set.has(item);\r\n }\r\n\r\n toArray() {\r\n return this._arr.slice(0);\r\n }\r\n}\r\n", "import { IPublicTypeJSSlot, isJSSlot, IPublicTypeNodeData } from '@alilc/lowcode-types';\r\nimport { CodeGeneratorError, NodeGenerator, IScope } from '../types';\r\nimport { unwrapJsExprQuoteInJsx } from './jsxHelpers';\r\n\r\nfunction generateSingleLineComment(commentText: string): string {\r\n return `/* ${commentText.split('\\n').join(' ').replace(/\\*\\//g, '*-/')}*/`;\r\n}\r\n\r\nexport function generateJsSlot(slot: any, scope: IScope, generator: NodeGenerator<string>): string {\r\n if (isJSSlot(slot)) {\r\n const { title, params, value } = slot as IPublicTypeJSSlot;\r\n\r\n // slot \u4E5F\u662F\u5206\u6709\u53C2\u6570\u548C\u65E0\u53C2\u6570\u7684\r\n // - \u6709\u53C2\u6570\u7684 slot \u5C31\u662F\u7C7B\u4F3C\u4E00\u4E2A render \u51FD\u6570\uFF0C\u9700\u8981\u521B\u5EFA\u5B50\u4F5C\u7528\u57DF\r\n // - \u65E0\u53C2\u6570\u7684 slot \u5C31\u662F\u7C7B\u4F3C\u4E00\u4E2A JSX \u8282\u70B9\uFF0C\u4E0D\u9700\u8981\u521B\u5EFA\u5B50\u4F5C\u7528\u57DF\r\n const slotScope = params ? scope.createSubScope(params || []) : scope;\r\n const contentExpr = !value\r\n ? 'null'\r\n : generateNodeDataOrArrayForJsSlot(value, generator, slotScope);\r\n if (params) {\r\n return [\r\n title && generateSingleLineComment(title),\r\n '(',\r\n (params || []).join(', '),\r\n ') => ((__$$context) => (',\r\n contentExpr,\r\n '))(',\r\n ` __$$createChildContext(__$$context, { ${(params || []).join(', ')} }`,\r\n '))',\r\n ]\r\n .filter(Boolean)\r\n .join('');\r\n }\r\n\r\n return contentExpr || '[]';\r\n }\r\n\r\n throw new CodeGeneratorError('Not a JSSlot');\r\n}\r\n\r\nfunction generateNodeDataOrArrayForJsSlot(\r\n value: IPublicTypeNodeData | IPublicTypeNodeData[],\r\n generator: NodeGenerator<string>,\r\n scope: IScope,\r\n) {\r\n if (Array.isArray(value)) {\r\n if (value.length === 0) {\r\n return '[]';\r\n }\r\n\r\n if (value.length === 1) {\r\n return unwrapJsExprQuoteInJsx(generator(value, scope)) || 'null';\r\n }\r\n\r\n return `[\\n${\r\n value\r\n .map((v) => {\r\n if (typeof v === 'string') {\r\n return JSON.stringify(v);\r\n }\r\n\r\n return unwrapJsExprQuoteInJsx(generator(v, scope)) || 'null';\r\n })\r\n .join(',\\n') || 'null'\r\n }\\n]`;\r\n }\r\n\r\n return unwrapJsExprQuoteInJsx(generator(value, scope)) || 'null';\r\n}\r\n", "/**\r\n * \u53BB\u6389 JS \u8868\u8FBE\u5F0F\u7684 \"{...}\" \u7684\u5C01\u88C5, \u5982:\r\n * {<xxx />} => <xxx />\r\n */\r\nexport function unwrapJsExprQuoteInJsx(jsxExpr: string): string {\r\n if (jsxExpr.length >= 2 && jsxExpr[0] === '{' && jsxExpr[jsxExpr.length - 1] === '}') {\r\n return jsxExpr.slice(1, jsxExpr.length - 1);\r\n }\r\n\r\n return jsxExpr;\r\n}\r\n", "import { BaseGenerator, IScope } from '../types/core';\r\n\r\nexport function executeFunctionStack<I, T, C>(\r\n input: I,\r\n scope: IScope,\r\n funcs: BaseGenerator<I, T, C> | Array<BaseGenerator<I, T, C>>,\r\n baseFunc: BaseGenerator<I, T, C>,\r\n config?: C,\r\n): T {\r\n const funcList: Array<BaseGenerator<I, T, C>> = [];\r\n if (Array.isArray(funcs)) {\r\n funcList.push(...funcs);\r\n } else {\r\n funcList.push(funcs);\r\n }\r\n\r\n let next: BaseGenerator<I, T, C> = baseFunc;\r\n while (funcList.length > 0) {\r\n const func = funcList.pop();\r\n if (func) {\r\n const warppedFunc = ((nextFunc) => (i: I, s: IScope, cfg?: C) => func(i, s, cfg, nextFunc))(next);\r\n next = warppedFunc;\r\n }\r\n }\r\n\r\n return next(input, scope, config);\r\n}\r\n", "import { IScope } from '../types/core';\r\nimport { IScopeBindings, ScopeBindings } from './ScopeBindings';\r\n\r\nexport class Scope implements IScope {\r\n /**\r\n * \u521B\u5EFA\u6839\u90E8 Scope\uFF0C\u6839\u636E\u9700\u8981\u88AB\u4E0A\u6EAF\u7684\u4F5C\u7528\u57DF\u94FE\u51B3\u5B9A\u662F\u5426\u5F00\u542F\u65B0\u7684\r\n */\r\n static createRootScope(): IScope {\r\n return new Scope();\r\n }\r\n\r\n bindings?: IScopeBindings;\r\n\r\n constructor(public readonly parent: IScope | null = null) {\r\n this.bindings = undefined;\r\n }\r\n\r\n createSubScope(ownIdentifiers: string[]): IScope {\r\n const originalScopeBindings = this.bindings;\r\n const newScopeBindings = new ScopeBindings(originalScopeBindings);\r\n ownIdentifiers.forEach((identifier) => {\r\n newScopeBindings.addBinding(identifier);\r\n });\r\n const newScope = new Scope(this);\r\n newScope.bindings = newScopeBindings;\r\n return newScope;\r\n }\r\n}\r\n", "import { OrderedSet } from './OrderedSet';\r\n\r\nexport interface IScopeBindings {\r\n readonly parent: IScopeBindings | null;\r\n\r\n hasBinding: (varName: string) => boolean;\r\n hasOwnBinding: (varName: string) => boolean;\r\n\r\n addBinding: (varName: string) => void;\r\n removeBinding: (varName: string) => void;\r\n\r\n getAllBindings: () => string[];\r\n getAllOwnedBindings: () => string[];\r\n}\r\n\r\nexport class ScopeBindings implements IScopeBindings {\r\n readonly parent: IScopeBindings | null;\r\n\r\n private _bindings = new OrderedSet<string>();\r\n\r\n constructor(p: IScopeBindings | null = null) {\r\n this.parent = p;\r\n }\r\n\r\n hasBinding(varName: string): boolean {\r\n return this._bindings.has(varName) || !!this.parent?.hasBinding(varName);\r\n }\r\n\r\n hasOwnBinding(varName: string): boolean {\r\n return this._bindings.has(varName);\r\n }\r\n\r\n addBinding(varName: string): void {\r\n this._bindings.add(varName);\r\n }\r\n\r\n removeBinding(varName: string): void {\r\n this._bindings.delete(varName);\r\n }\r\n\r\n getAllBindings(): string[] {\r\n const allBindings = new OrderedSet(this._bindings.toArray());\r\n\r\n for (let { parent } = this; parent; parent = parent?.parent) {\r\n parent.getAllOwnedBindings().forEach((varName) => {\r\n allBindings.add(varName);\r\n });\r\n }\r\n\r\n return allBindings.toArray();\r\n }\r\n\r\n getAllOwnedBindings(): string[] {\r\n return this._bindings.toArray();\r\n }\r\n}\r\n", "import { CLASS_DEFINE_CHUNK_NAME, DEFAULT_LINK_AFTER } from '../../../const/generator';\r\n\r\nimport { generateCompositeType } from '../../../utils/compositeType';\r\nimport { Scope } from '../../../utils/Scope';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\n\r\nexport interface PluginConfig {\r\n fileType?: string;\r\n implementType: 'inConstructor' | 'insMember' | 'hooks';\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig & { fileType: string } = {\r\n fileType: FileType.JSX,\r\n implementType: 'inConstructor',\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n const scope = Scope.createRootScope();\r\n\r\n const state = ir.state || {};\r\n const fields = Object.keys(state).map<string>((stateName) => {\r\n const value = generateCompositeType(state[stateName], scope);\r\n return `${stateName}: ${value},`;\r\n });\r\n\r\n if (cfg.implementType === 'inConstructor') {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\r\n content: `this.state = { ${fields.join('')} };`,\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],\r\n });\r\n } else if (cfg.implementType === 'insMember') {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n content: `state = { ${fields.join('')} };`,\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]],\r\n });\r\n }\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { CLASS_DEFINE_CHUNK_NAME } from '../../../const/generator';\r\n\r\nimport { Scope } from '../../../utils/Scope';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\nimport { DEFAULT_LINK_AFTER } from '../../../const';\r\n\r\nexport interface PluginConfig {\r\n fileType: string;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.JSX,\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n const scope = Scope.createRootScope();\r\n\r\n const { inStrictMode } = next.contextData;\r\n if (!inStrictMode) {\r\n // \u975E\u4E25\u683C\u6A21\u5F0F\u4E0B\uFF0C\u4E0A\u4E0B\u6587\u5C31\u662F\u81EA\u5DF1\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n content: `\r\n _context = this;\r\n `,\r\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\r\n });\r\n } else {\r\n // \u4E25\u683C\u6A21\u5F0F\u4E0B\u7684\u4E0A\u4E0B\u6587\u53EA\u4FDD\u7559\u534F\u8BAE\u4E2D\u89C4\u5B9A\u7684\u90A3\u4E9B\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n content: `\r\n _context = this._createContext();\r\n `,\r\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\r\n content: `\r\n _createContext() {\r\n const self = this;\r\n const context = {\r\n get state() { return self.state; },\r\n setState(newState, callback) { self.setState(newState, callback); },\r\n get dataSourceMap() { return self._dataSourceEngine.dataSourceMap || {}; },\r\n async reloadDataSource() { await self._dataSourceEngine.reloadDataSource(); },\r\n get utils() { return self.utils; },\r\n get page() { return context; },\r\n get component() { return context; },\r\n get props() { return self.props; },\r\n get constants() { return self.constants; },\r\n get $() { return self.$ },\r\n get $$() { return self.$$ },\r\n ...this._methods,\r\n };\r\n \r\n return context;\r\n }\r\n `,\r\n linkAfter: DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod],\r\n });\r\n }\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { IContextData } from '../types';\r\n\r\nfunction relativePath(from: string[], to: string[]): string[] {\r\n const length = Math.min(from.length, to.length);\r\n let samePartsLength = length;\r\n for (let i = 0; i < length; i++) {\r\n if (from[i] !== to[i]) {\r\n samePartsLength = i;\r\n break;\r\n }\r\n }\r\n if (samePartsLength === 0) {\r\n return to;\r\n }\r\n let outputParts = [];\r\n for (let i = samePartsLength; i < from.length; i++) {\r\n outputParts.push('..');\r\n }\r\n outputParts = [...outputParts, ...to.slice(samePartsLength)];\r\n if (outputParts[0] !== '..') {\r\n outputParts.unshift('.');\r\n }\r\n return outputParts;\r\n}\r\n\r\nexport function getSlotRelativePath(options: {\r\n contextData: IContextData;\r\n from: string;\r\n to: string;\r\n}) {\r\n const { contextData, from, to } = options;\r\n const isSingleComponent = contextData?.extraContextData?.projectRemark?.isSingleComponent;\r\n const template = contextData?.extraContextData?.template;\r\n let toPath = template.slots[to].path;\r\n toPath = [...toPath, template.slots[to].fileName!];\r\n let fromPath = template.slots[from].path;\r\n if (!isSingleComponent && ['components', 'pages'].indexOf(from) !== -1) {\r\n fromPath = [...fromPath, 'pageName'];\r\n }\r\n return relativePath(fromPath, toPath).join('/');\r\n}", "import {\r\n CLASS_DEFINE_CHUNK_NAME,\r\n COMMON_CHUNK_NAME,\r\n DEFAULT_LINK_AFTER,\r\n} from '../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\nimport { getSlotRelativePath } from '../../../utils/pathHelper';\r\n\r\nexport interface PluginConfig {\r\n fileType?: string;\r\n\r\n /** prefer using class property to define utils */\r\n preferClassProperty?: boolean;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig & { fileType: string } = {\r\n fileType: FileType.JSX,\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n next.contextData.useRefApi = true;\r\n const useRef = !!ir.analyzeResult?.isUsingRef;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: `\r\n import utils${useRef ? ', { RefsManager }' : ''} from '${getSlotRelativePath({ contextData: next.contextData, from: 'components', to: 'utils' })}';\r\n `,\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n\r\n if (cfg.preferClassProperty) {\r\n // mode: class property\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n content: 'utils = utils;',\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]],\r\n });\r\n } else {\r\n // mode: assign in constructor\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\r\n content: 'this.utils = utils;',\r\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.ConstructorStart],\r\n });\r\n }\r\n\r\n if (useRef) {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\r\n content: 'this._refsManager = new RefsManager();',\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\r\n content: `\r\n $ = (refName) => {\r\n return this._refsManager.get(refName);\r\n }\r\n `,\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\r\n content: `\r\n $$ = (refName) => {\r\n return this._refsManager.getAll(refName);\r\n }\r\n `,\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\r\n });\r\n } else {\r\n // useRef \u4E3A false \u7684\u65F6\u5019\u662F\u6307\u6CA1\u6709\u7EC4\u4EF6\u5728 props \u4E2D\u914D\u7F6E ref \u5C5E\u6027\uFF0C\u4F46\u8FD9\u4E2A\u65F6\u5019\u5176\u5B9E\u4E5F\u53EF\u80FD\u6709\u4EE3\u7801\u8BBF\u95EE this.$/$$ \u6240\u4EE5\u8FD8\u662F\u52A0\u4E0A\u4E2A\u7A7A\u7684\u4EE3\u7801\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\r\n content: ' $ = () => null; ',\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\r\n content: ' $$ = () => []; ',\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\r\n });\r\n }\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "/* eslint-disable @typescript-eslint/indent */\r\n\r\nimport {\r\n IPublicTypeCompositeValue,\r\n IPublicTypeJSExpression,\r\n InterpretDataSourceConfig,\r\n isJSExpression,\r\n isJSFunction,\r\n} from '@alilc/lowcode-types';\r\nimport changeCase from 'change-case';\r\n\r\nimport {\r\n CLASS_DEFINE_CHUNK_NAME,\r\n COMMON_CHUNK_NAME,\r\n DEFAULT_LINK_AFTER,\r\n} from '../../../const/generator';\r\nimport { Scope } from '../../../utils/Scope';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IScope,\r\n} from '../../../types';\r\n\r\nimport { generateCompositeType } from '../../../utils/compositeType';\r\nimport { parseExpressionConvertThis2Context } from '../../../utils/expressionParser';\r\nimport { isValidContainerType } from '../../../utils/schema';\r\nimport { REACT_CHUNK_NAME } from './const';\r\nimport { isJSExpressionFn } from '../../../utils/common';\r\n\r\nexport interface PluginConfig {\r\n fileType?: string;\r\n\r\n /**\r\n * \u6570\u636E\u6E90\u914D\u7F6E\r\n */\r\n datasourceConfig?: {\r\n\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\r\n engineVersion?: string;\r\n\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\r\n enginePackage?: string;\r\n\r\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\r\n handlersVersion?: {\r\n [key: string]: string;\r\n };\r\n\r\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\r\n handlersPackages?: {\r\n [key: string]: string;\r\n };\r\n };\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg = {\r\n ...config,\r\n fileType: config?.fileType || FileType.JSX,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const scope = Scope.createRootScope();\r\n const dataSourceConfig = isValidContainerType(pre.ir) ? pre.ir.dataSource : null;\r\n const dataSourceItems: InterpretDataSourceConfig[] =\r\n (dataSourceConfig && dataSourceConfig.list) || [];\r\n const dataSourceEngineOptions = { runtimeConfig: true };\r\n if (dataSourceItems.length > 0) {\r\n const requestHandlersMap: Record<string, IPublicTypeJSExpression> = {};\r\n\r\n dataSourceItems.forEach((ds) => {\r\n const dsType = ds.type || 'fetch';\r\n if (!(dsType in requestHandlersMap) && dsType !== 'custom') {\r\n const handlerFactoryName = `__$$create${changeCase.pascal(dsType)}RequestHandler`;\r\n\r\n requestHandlersMap[dsType] = {\r\n type: 'JSExpression',\r\n value:\r\n handlerFactoryName + (dsType === 'urlParams' ? '(window.location.search)' : '()'),\r\n };\r\n\r\n const handlerFactoryExportName = `create${changeCase.pascal(dsType)}Handler`;\r\n const handlerPkgName =\r\n cfg.datasourceConfig?.handlersPackages?.[dsType] ||\r\n `@alilc/lowcode-datasource-${changeCase.kebab(dsType)}-handler`;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n content: `\r\n import { ${handlerFactoryExportName} as ${handlerFactoryName} } from '${handlerPkgName}';\r\n `,\r\n linkAfter: [],\r\n });\r\n }\r\n });\r\n\r\n Object.assign(dataSourceEngineOptions, { requestHandlersMap });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n content: `\r\n import { create as __$$createDataSourceEngine } from '@alilc/lowcode-datasource-engine/runtime';\r\n `,\r\n linkAfter: [],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n content: `\r\n _dataSourceConfig = this._defineDataSourceConfig();\r\n _dataSourceEngine = __$$createDataSourceEngine(\r\n this._dataSourceConfig,\r\n this,\r\n ${generateCompositeType(dataSourceEngineOptions, scope)}\r\n );\r\n\r\n get dataSourceMap() {\r\n return this._dataSourceEngine.dataSourceMap || {};\r\n }\r\n\r\n reloadDataSource = async () => {\r\n await this._dataSourceEngine.reloadDataSource();\r\n }\r\n\r\n `,\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]],\r\n });\r\n\r\n next.chunks.unshift({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: REACT_CHUNK_NAME.ClassDidMountContent,\r\n content: `\r\n this._dataSourceEngine.reloadDataSource();\r\n `,\r\n linkAfter: [REACT_CHUNK_NAME.ClassDidMountStart],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\r\n content: `\r\n _defineDataSourceConfig() {\r\n const _this = this;\r\n return (${generateCompositeType(\r\n {\r\n ...dataSourceConfig,\r\n list: [\r\n ...dataSourceItems.map((item) => ({\r\n ...item,\r\n isInit: wrapAsFunction(item.isInit, scope),\r\n options: wrapAsFunction(item.options, scope),\r\n })),\r\n ],\r\n },\r\n scope,\r\n {\r\n handlers: {\r\n function: (jsFunc) => parseExpressionConvertThis2Context(jsFunc.value, '_this'),\r\n expression: (jsExpr) => parseExpressionConvertThis2Context(jsExpr.value, '_this'),\r\n },\r\n },\r\n )});\r\n }\r\n `,\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\r\n });\r\n }\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n\r\nfunction wrapAsFunction(value: IPublicTypeCompositeValue, scope: IScope): IPublicTypeCompositeValue {\r\n if (isJSExpression(value) || isJSFunction(value) || isJSExpressionFn(value)) {\r\n return {\r\n type: 'JSExpression',\r\n value: `function(){ return ((${value.value}))}.bind(this)`,\r\n };\r\n }\r\n\r\n return {\r\n type: 'JSExpression',\r\n value: `function(){return((${generateCompositeType(value, scope)}))}.bind(this)`,\r\n };\r\n}\r\n", "import {\r\n CLASS_DEFINE_CHUNK_NAME,\r\n COMMON_CHUNK_NAME,\r\n DEFAULT_LINK_AFTER,\r\n} from '../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n} from '../../../types';\r\n\r\nexport interface PluginConfig {\r\n fileType: string;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.JSX,\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: \"import __$$constants from '../../constants';\",\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n content: `\r\n get constants() {\r\n return __$$constants || {};\r\n }\r\n `,\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import {\r\n CLASS_DEFINE_CHUNK_NAME,\r\n COMMON_CHUNK_NAME,\r\n DEFAULT_LINK_AFTER,\r\n} from '../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n} from '../../../types';\r\nimport { getSlotRelativePath } from '../../../utils/pathHelper';\r\n\r\nexport interface PluginConfig {\r\n fileType: string;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.JSX,\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: `\r\n import * as __$$i18n from '${getSlotRelativePath({ contextData: next.contextData, from: 'components', to: 'i18n' })}';\r\n `,\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\r\n content: `\r\n __$$i18n._inject2(this);\r\n `,\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { CLASS_DEFINE_CHUNK_NAME, DEFAULT_LINK_AFTER } from '../../../const/generator';\r\nimport { REACT_CHUNK_NAME } from './const';\r\n\r\nimport { generateFunction } from '../../../utils/jsExpression';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeChunk,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\nimport { isJSFunction, isJSExpression } from '@alilc/lowcode-types';\r\nimport { isJSExpressionFn } from '../../../utils/common';\r\n\r\nexport interface PluginConfig {\r\n fileType?: string;\r\n exportNameMapping?: Record<string, string>;\r\n normalizeNameMapping?: Record<string, string>;\r\n exclude?: string[];\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg = {\r\n fileType: FileType.JSX,\r\n exportNameMapping: {},\r\n normalizeNameMapping: {},\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n\r\n if (ir.lifeCycles) {\r\n const { lifeCycles } = ir;\r\n const chunks = Object.keys(lifeCycles).map<ICodeChunk | null>((lifeCycleName) => {\r\n // \u8FC7\u6EE4\u6389\u975E\u6CD5\u6570\u636E\uFF08\u6709\u4E9B\u573A\u666F\u4E0B\u4F1A\u8BEF\u4F20\u5165\u7A7A\u5B57\u7B26\u4E32\u6216 null)\r\n if (\r\n !isJSFunction(lifeCycles[lifeCycleName]) &&\r\n !isJSExpressionFn(lifeCycles[lifeCycleName]) &&\r\n !isJSExpression(lifeCycles[lifeCycleName])\r\n ) {\r\n return null;\r\n }\r\n\r\n let normalizeName;\r\n // constructor\u4F1A\u53D6\u5230\u5BF9\u8C61\u7684\u6784\u9020\u51FD\u6570\r\n if (lifeCycleName === 'constructor') {\r\n normalizeName = lifeCycleName;\r\n } else {\r\n normalizeName = cfg.normalizeNameMapping[lifeCycleName] || lifeCycleName;\r\n }\r\n\r\n if (cfg?.exclude?.includes(normalizeName)) {\r\n return null;\r\n }\r\n\r\n const exportName = cfg.exportNameMapping[lifeCycleName] || lifeCycleName;\r\n if (normalizeName === 'constructor') {\r\n return {\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\r\n content: generateFunction(lifeCycles[lifeCycleName], { isBlock: true }),\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorStart]],\r\n };\r\n }\r\n\r\n if (normalizeName === 'componentDidMount') {\r\n return {\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: REACT_CHUNK_NAME.ClassDidMountContent,\r\n content: generateFunction(lifeCycles[lifeCycleName], { isBlock: true }),\r\n linkAfter: [REACT_CHUNK_NAME.ClassDidMountStart],\r\n };\r\n }\r\n\r\n if (normalizeName === 'render') {\r\n return {\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: REACT_CHUNK_NAME.ClassRenderPre,\r\n content: generateFunction(lifeCycles[lifeCycleName], { isBlock: true }),\r\n linkAfter: [REACT_CHUNK_NAME.ClassRenderStart],\r\n };\r\n }\r\n\r\n return {\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\r\n content: generateFunction(lifeCycles[lifeCycleName], {\r\n name: exportName,\r\n isMember: true,\r\n }),\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\r\n };\r\n }).filter((i) => !!i);\r\n\r\n next.chunks.push(...chunks.filter((x): x is ICodeChunk => x !== null));\r\n }\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { CLASS_DEFINE_CHUNK_NAME, DEFAULT_LINK_AFTER } from '../../../const/generator';\r\n\r\nimport { generateFunction } from '../../../utils/jsExpression';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeChunk,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\nimport { isValidIdentifier } from '../../../utils/validate';\r\n\r\nexport interface PluginConfig {\r\n fileType: string;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.JSX,\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n const { inStrictMode } = next.contextData;\r\n\r\n if (!ir.methods) {\r\n return next;\r\n }\r\n\r\n // \u5C06\u8FD9\u4E9B methods \u90FD\u5B9A\u4E49\u5230 class \u4E0A\r\n const { methods } = ir;\r\n const chunks = Object.keys(methods).map<ICodeChunk>((methodName) => ({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\r\n content: generateFunction(methods[methodName], { name: methodName, isMember: true }),\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\r\n }));\r\n next.chunks.push(...chunks);\r\n\r\n // \u4E25\u683C\u6A21\u5F0F\u4E0B\u9700\u8981\u5C06\u8FD9\u4E9B\u65B9\u6CD5\u90FD\u6302\u5230\u4E0A\u4E0B\u6587\u4E2D\r\n if (inStrictMode) {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\r\n content: Object.keys(ir.methods)\r\n .map((methodName) =>\r\n isValidIdentifier(methodName) ? `.${methodName}` : `[${JSON.stringify(methodName)}]`,\r\n )\r\n .map((method) => `this._context${method} = this${method};`)\r\n .join('\\n'),\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],\r\n });\r\n }\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import _ from 'lodash';\r\nimport { pipe } from 'fp-ts/function';\r\nimport { IPublicTypeNodeSchema, isNodeSchema, IPublicTypeNodeDataType, IPublicTypeCompositeValue } from '@alilc/lowcode-types';\r\n\r\nimport {\r\n IScope,\r\n CodeGeneratorError,\r\n PIECE_TYPE,\r\n CodePiece,\r\n NodeGenerator,\r\n NodeGeneratorConfig,\r\n NodePlugin,\r\n AttrData,\r\n} from '../types';\r\n\r\nimport { generateCompositeType } from './compositeType';\r\nimport { getStaticExprValue } from './common';\r\nimport { executeFunctionStack } from './aopHelper';\r\nimport { encodeJsxStringNode } from './encodeJsxAttrString';\r\nimport { unwrapJsExprQuoteInJsx } from './jsxHelpers';\r\nimport { transformThis2Context } from '../core/jsx/handlers/transformThis2Context';\r\nimport { isValidIdentifier } from './validate';\r\n\r\nfunction mergeNodeGeneratorConfig(\r\n cfg1: NodeGeneratorConfig,\r\n cfg2: NodeGeneratorConfig = {},\r\n): NodeGeneratorConfig {\r\n const resCfg: NodeGeneratorConfig = {};\r\n if (cfg1.handlers || cfg2.handlers) {\r\n resCfg.handlers = {\r\n ...(cfg1.handlers || {}),\r\n ...(cfg2.handlers || {}),\r\n };\r\n }\r\n\r\n if (cfg1.tagMapping || cfg2.tagMapping) {\r\n resCfg.tagMapping = cfg2.tagMapping || cfg1.tagMapping;\r\n }\r\n\r\n if (cfg1.attrPlugins || cfg2.attrPlugins) {\r\n resCfg.attrPlugins = [];\r\n resCfg.attrPlugins.push(...(cfg2.attrPlugins || []));\r\n resCfg.attrPlugins.push(...(cfg1.attrPlugins || []));\r\n }\r\n\r\n if (cfg1.nodePlugins || cfg2.nodePlugins) {\r\n resCfg.nodePlugins = [];\r\n resCfg.nodePlugins.push(...(cfg2.nodePlugins || []));\r\n resCfg.nodePlugins.push(...(cfg1.nodePlugins || []));\r\n }\r\n\r\n return resCfg;\r\n}\r\n\r\nexport function isPureString(v: string) {\r\n // FIXME: \u76EE\u524D\u7684\u65B9\u5F0F\u4E0D\u591F\u4E25\u8C28\r\n return (v[0] === \"'\" && v[v.length - 1] === \"'\") || (v[0] === '\"' && v[v.length - 1] === '\"');\r\n}\r\n\r\nfunction generateAttrValue(\r\n attrData: { attrName: string; attrValue: IPublicTypeCompositeValue },\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n): CodePiece[] {\r\n const valueStr = generateCompositeType(attrData.attrValue, scope, {\r\n handlers: config?.handlers,\r\n nodeGenerator: config?.self,\r\n });\r\n return [\r\n {\r\n type: PIECE_TYPE.ATTR,\r\n name: attrData.attrName,\r\n value: valueStr,\r\n },\r\n ];\r\n}\r\n\r\nfunction generateAttr(\r\n attrName: string,\r\n attrValue: IPublicTypeCompositeValue,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n): CodePiece[] {\r\n let pieces: CodePiece[];\r\n if (config?.attrPlugins) {\r\n pieces = executeFunctionStack<AttrData, CodePiece[], NodeGeneratorConfig>(\r\n { attrName, attrValue },\r\n scope,\r\n config.attrPlugins,\r\n generateAttrValue,\r\n config,\r\n );\r\n } else {\r\n pieces = generateAttrValue({ attrName, attrValue }, scope, config);\r\n }\r\n\r\n pieces = pieces.map((p) => {\r\n // FIXME: \u5728\u7ECF\u8FC7 generateCompositeType \u5904\u7406\u8FC7\u4E4B\u540E\uFF0C\u5176\u5B9E\u5DF2\u7ECF\u65E0\u6CD5\u901A\u8FC7\u4F20\u5165\u503C\u7684\u7C7B\u578B\u5224\u65AD\u4F20\u51FA\u503C\u662F\u5426\u4E3A\u7EAF\u5B57\u9762\u503C\u5B57\u7B26\u4E32\u4E86\uFF08\u53EF\u80FD\u5305\u88F9\u4E86\u52A0\u5DE5\u51FD\u6570\u4E4B\u7C7B\u7684\uFF09\r\n // \u56E0\u6B64\u8FD9\u4E2A\u5904\u7406\u6700\u597D\u7684\u65B9\u5F0F\u662F\u5BF9\u4F20\u51FA\u503C\u505A\u8BED\u6CD5\u5206\u6790\uFF0C\u5224\u65AD\u4EE5\u54EA\u79CD\u6A21\u7248\u4EA7\u51FA Attr \u503C\r\n let newValue: string;\r\n if (p.value && isPureString(p.value)) {\r\n // \u4F3C\u4E4E\u591A\u6B21\u4E00\u4E3E\uFF0C\u76EE\u524D\u7684\u8BC9\u6C42\u662F\u5904\u7406\u591A\u79CD\u5F15\u53F7\u7C7B\u578B\u5B57\u7B26\u4E32\u7684 case\uFF0C\u6B63\u786E\u5904\u7406\u8F6C\u4E49\r\n const content = getStaticExprValue<string>(p.value);\r\n newValue = JSON.stringify(encodeJsxStringNode(content));\r\n } else {\r\n newValue = `{${p.value}}`;\r\n }\r\n\r\n return {\r\n value: `${p.name}=${newValue}`,\r\n type: PIECE_TYPE.ATTR,\r\n };\r\n });\r\n\r\n return pieces;\r\n}\r\n\r\nfunction generateAttrs(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n): CodePiece[] {\r\n const { props } = nodeItem;\r\n\r\n let pieces: CodePiece[] = [];\r\n\r\n if (props) {\r\n if (!Array.isArray(props)) {\r\n Object.keys(props).forEach((propName: string) => {\r\n if (isValidIdentifier(propName)) {\r\n pieces = pieces.concat(generateAttr(propName, props[propName] as IPublicTypeCompositeValue, scope, config));\r\n }\r\n });\r\n } else {\r\n props.forEach((prop) => {\r\n if (prop.name && isValidIdentifier(prop.name) && !prop.spread) {\r\n pieces = pieces.concat(generateAttr(prop.name, prop.value, scope, config));\r\n }\r\n\r\n // TODO: \u5904\u7406 spread \u573A\u666F\uFF08<Xxx {...(something)}/>)\r\n // \u8FD9\u79CD\u5728 schema \u91CC\u9762\u600E\u4E48\u63CF\u8FF0\r\n });\r\n }\r\n }\r\n\r\n return pieces;\r\n}\r\n\r\nfunction generateBasicNode(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n): CodePiece[] {\r\n const pieces: CodePiece[] = [];\r\n const tagName = (config?.tagMapping || _.identity)(nodeItem.componentName);\r\n\r\n pieces.push({\r\n value: tagName || '', // FIXME: type detection error\r\n type: PIECE_TYPE.TAG,\r\n });\r\n\r\n return pieces;\r\n}\r\n\r\nfunction generateSimpleNode(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n): CodePiece[] {\r\n const basicParts = generateBasicNode(nodeItem, scope, config) || [];\r\n const attrParts = generateAttrs(nodeItem, scope, config) || [];\r\n const childrenParts: CodePiece[] = [];\r\n if (nodeItem.children && config?.self) {\r\n const childrenStr = config.self(nodeItem.children, scope);\r\n\r\n childrenParts.push({\r\n type: PIECE_TYPE.CHILDREN,\r\n value: childrenStr,\r\n });\r\n }\r\n\r\n return [...basicParts, ...attrParts, ...childrenParts];\r\n}\r\n\r\nfunction linkPieces(pieces: CodePiece[]): string {\r\n const tagsPieces = pieces.filter((p) => p.type === PIECE_TYPE.TAG);\r\n if (tagsPieces.length !== 1) {\r\n throw new CodeGeneratorError('Only one tag definition required', tagsPieces);\r\n }\r\n const tagName = tagsPieces[0].value;\r\n\r\n const beforeParts = pieces\r\n .filter((p) => p.type === PIECE_TYPE.BEFORE)\r\n .map((p) => p.value)\r\n .join('');\r\n\r\n const afterParts = pieces\r\n .filter((p) => p.type === PIECE_TYPE.AFTER)\r\n .map((p) => p.value)\r\n .join('');\r\n\r\n const childrenParts = pieces\r\n .filter((p) => p.type === PIECE_TYPE.CHILDREN)\r\n .map((p) => p.value)\r\n .join('');\r\n\r\n let attrsParts = pieces\r\n .filter((p) => p.type === PIECE_TYPE.ATTR)\r\n .map((p) => p.value)\r\n .join(' ');\r\n\r\n attrsParts = attrsParts ? ` ${attrsParts}` : '';\r\n\r\n if (childrenParts) {\r\n return `${beforeParts}<${tagName}${attrsParts}>${childrenParts}</${tagName}>${afterParts}`;\r\n }\r\n\r\n return `${beforeParts}<${tagName}${attrsParts} />${afterParts}`;\r\n}\r\n\r\nfunction generateNodeSchema(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n): string {\r\n const pieces: CodePiece[] = [];\r\n if (config?.nodePlugins) {\r\n const res = executeFunctionStack<IPublicTypeNodeSchema, CodePiece[], NodeGeneratorConfig>(\r\n nodeItem,\r\n scope,\r\n config.nodePlugins,\r\n generateSimpleNode,\r\n config,\r\n );\r\n pieces.push(...res);\r\n } else {\r\n pieces.push(...generateSimpleNode(nodeItem, scope, config));\r\n }\r\n\r\n return linkPieces(pieces);\r\n}\r\n\r\n// TODO: \u751F\u6210\u6587\u6863\r\n// \u4E3A\u5305\u88F9\u7684\u4EE3\u7801\u7247\u6BB5\u751F\u6210\u5B50\u4E0A\u4E0B\u6587\uFF0C\u96C6\u6210\u7236\u7EA7\u4E0A\u4E0B\u6587\uFF0C\u5E76\u4F20\u5165\u5B50\u7EA7\u4E0A\u4E0B\u6587\u65B0\u589E\u5185\u5BB9\u3002\uFF08\u5982\u679C\u5B58\u5728\u591A\u7EA7\u4E0A\u4E0B\u6587\u600E\u4E48\u5904\u7406\uFF1F\uFF09\r\n// \u521B\u5EFA\u65B0\u7684\u4E0A\u4E0B\u6587\uFF0C\u5E76\u4ECE\u4F5C\u7528\u57DF\u4E2D\u53D6\u5BF9\u5E94\u540C\u540D\u53D8\u91CF\u585E\u5230\u4F5C\u7528\u57DF\u91CC\u9762\uFF1F\r\n// export function createSubContext() {}\r\n\r\n/**\r\n * JSX \u751F\u6210\u903B\u8F91\u63D2\u4EF6\u3002\u5728 React \u4EE3\u7801\u6A21\u5F0F\u4E0B\u751F\u6210 loop \u76F8\u5173\u7684\u903B\u8F91\u4EE3\u7801\r\n * @type NodePlugin Extended\r\n *\r\n * @export\r\n * @param {IPublicTypeNodeSchema} nodeItem \u5F53\u524D UI \u8282\u70B9\r\n * @returns {CodePiece[]} \u5B9E\u73B0\u529F\u80FD\u7684\u76F8\u5173\u4EE3\u7801\u7247\u6BB5\r\n */\r\nexport function generateReactLoopCtrl(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n next?: NodePlugin,\r\n): CodePiece[] {\r\n if (nodeItem.loop) {\r\n const tolerateEvalErrors = config?.tolerateEvalErrors ?? true;\r\n\r\n const loopItemName = nodeItem.loopArgs?.[0] || 'item';\r\n const loopIndexName = nodeItem.loopArgs?.[1] || 'index';\r\n\r\n // \u65B0\u5EFA\u4F5C\u7528\u57DF\r\n const subScope = scope.createSubScope([loopItemName, loopIndexName]);\r\n const pieces: CodePiece[] = next ? next(nodeItem, subScope, config) : [];\r\n\r\n // \u751F\u6210\u5FAA\u73AF\u53D8\u91CF\u8868\u8FBE\u5F0F\r\n const loopDataExpr = pipe(\r\n nodeItem.loop,\r\n // \u5C06 JSExpression \u8F6C\u6362\u4E3A JS \u8868\u8FBE\u5F0F\u4EE3\u7801:\r\n (expr) => generateCompositeType(expr, scope, {\r\n handlers: config?.handlers,\r\n tolerateEvalErrors: false, // \u8FD9\u4E2A\u5185\u90E8\u4E0D\u9700\u8981\u5305 try catch, \u4E0B\u9762\u4F1A\u7EDF\u4E00\u52A0\u7684\r\n }),\r\n // \u5C06 this.xxx \u8F6C\u6362\u4E3A __$$context.xxx:\r\n (expr) => transformThis2Context(expr, scope, { ignoreRootScope: true }),\r\n // \u5982\u679C\u8981\u5BB9\u5FCD\u9519\u8BEF\uFF0C\u5219\u5305\u4E00\u5C42 try catch (\u57FA\u4E8E\u52A9\u624B\u51FD\u6570 __$$evalArray)\r\n (expr) => (tolerateEvalErrors ? `__$$evalArray(() => (${expr}))` : expr),\r\n );\r\n\r\n pieces.unshift({\r\n value: `(${loopDataExpr}).map((${loopItemName}, ${loopIndexName}) => ((__$$context) => (`,\r\n type: PIECE_TYPE.BEFORE,\r\n });\r\n\r\n pieces.push({\r\n value: `))(__$$createChildContext(__$$context, { ${loopItemName}, ${loopIndexName} })))`,\r\n type: PIECE_TYPE.AFTER,\r\n });\r\n\r\n return pieces;\r\n }\r\n\r\n return next ? next(nodeItem, scope, config) : [];\r\n}\r\n\r\n/**\r\n * JSX \u751F\u6210\u903B\u8F91\u63D2\u4EF6\u3002\u5728 React \u4EE3\u7801\u6A21\u5F0F\u4E0B\u751F\u6210 condition \u76F8\u5173\u7684\u903B\u8F91\u4EE3\u7801\r\n * @type NodePlugin\r\n *\r\n * @export\r\n * @param {IPublicTypeNodeSchema} nodeItem \u5F53\u524D UI \u8282\u70B9\r\n * @returns {CodePiece[]} \u5B9E\u73B0\u529F\u80FD\u7684\u76F8\u5173\u4EE3\u7801\u7247\u6BB5\r\n */\r\nexport function generateConditionReactCtrl(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n next?: NodePlugin,\r\n): CodePiece[] {\r\n const pieces: CodePiece[] = next ? next(nodeItem, scope, config) : [];\r\n\r\n if (nodeItem.condition != null && nodeItem.condition !== true) {\r\n const value = generateCompositeType(nodeItem.condition, scope, {\r\n handlers: config?.handlers,\r\n });\r\n\r\n pieces.unshift({\r\n value: `!!(${value}) && (`,\r\n type: PIECE_TYPE.BEFORE,\r\n });\r\n\r\n pieces.push({\r\n value: ')',\r\n type: PIECE_TYPE.AFTER,\r\n });\r\n }\r\n\r\n return pieces;\r\n}\r\n\r\n/**\r\n * JSX \u751F\u6210\u903B\u8F91\u63D2\u4EF6\u3002\u5728 React \u4EE3\u7801\u6A21\u5F0F\u4E0B\uFF0C\u5982\u679C Node \u751F\u6210\u7ED3\u679C\u662F\u4E00\u4E2A\u8868\u8FBE\u5F0F\uFF0C\u5219\u5BF9\u5176\u8FDB\u884C { Expression } \u5305\u88C5\r\n * @type NodePlugin\r\n *\r\n * @export\r\n * @param {IPublicTypeNodeSchema} nodeItem \u5F53\u524D UI \u8282\u70B9\r\n * @returns {CodePiece[]} \u5B9E\u73B0\u529F\u80FD\u7684\u76F8\u5173\u4EE3\u7801\u7247\u6BB5\r\n */\r\nexport function generateReactExprInJS(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n next?: NodePlugin,\r\n): CodePiece[] {\r\n const pieces: CodePiece[] = next ? next(nodeItem, scope, config) : [];\r\n\r\n if ((nodeItem.condition != null && nodeItem.condition !== true) || nodeItem.loop != null) {\r\n pieces.unshift({\r\n value: '{',\r\n type: PIECE_TYPE.BEFORE,\r\n });\r\n\r\n pieces.push({\r\n value: '}',\r\n type: PIECE_TYPE.AFTER,\r\n });\r\n }\r\n\r\n return pieces;\r\n}\r\n\r\nconst handleChildren = (v: string[]) => v.join('');\r\n\r\nexport function createNodeGenerator(cfg: NodeGeneratorConfig = {}): NodeGenerator<string> {\r\n const generateNode = (nodeItem: IPublicTypeNodeDataType, scope: IScope): string => {\r\n if (_.isArray(nodeItem)) {\r\n const resList = nodeItem.map((n) => generateNode(n, scope));\r\n return handleChildren(resList);\r\n }\r\n\r\n if (isNodeSchema(nodeItem)) {\r\n return generateNodeSchema(nodeItem, scope, {\r\n ...cfg,\r\n self: generateNode,\r\n });\r\n }\r\n\r\n const valueStr = generateCompositeType(nodeItem, scope, {\r\n handlers: cfg.handlers,\r\n nodeGenerator: generateNode,\r\n });\r\n\r\n if (isPureString(valueStr)) {\r\n return encodeJsxStringNode(getStaticExprValue<string>(valueStr));\r\n }\r\n\r\n return `{${valueStr}}`;\r\n };\r\n\r\n return (nodeItem: IPublicTypeNodeDataType, scope: IScope) => unwrapJsExprQuoteInJsx(generateNode(nodeItem, scope));\r\n}\r\n\r\nconst defaultReactGeneratorConfig: NodeGeneratorConfig = {\r\n nodePlugins: [generateReactExprInJS, generateReactLoopCtrl, generateConditionReactCtrl],\r\n};\r\n\r\nexport function createReactNodeGenerator(cfg?: NodeGeneratorConfig): NodeGenerator<string> {\r\n const newCfg = mergeNodeGeneratorConfig(defaultReactGeneratorConfig, cfg);\r\n\r\n return createNodeGenerator(newCfg);\r\n}\r\n", "import _ from 'lodash';\r\n// import { encode } from 'html-entities';\r\n\r\nconst SPECIAL_CHARS = '\\n\\r\\'\"<>&';\r\nconst SPECIAL_CHARS_REG = new RegExp(\r\n `[${SPECIAL_CHARS.split('')\r\n .map((c) => `\\\\x${_.padStart(c.charCodeAt(0).toString(16), 2, '0')}`)\r\n .join('')}]`,\r\n 'g',\r\n);\r\n\r\nexport function encodeJsxStringNode(str: string): string {\r\n return str.replace(SPECIAL_CHARS_REG, (c) => `&#${c.charCodeAt(0)};`);\r\n}\r\n\r\n// export function encodeJsxStringNode(str: string): string {\r\n// return encode(str);\r\n// }\r\n", "import { Expression } from '@babel/types';\r\nimport generate from '@babel/generator';\r\nimport { IScope } from '../../../types';\r\nimport { parseExpressionConvertThis2Context } from '../../../utils/expressionParser';\r\n\r\n/**\r\n * \u5C06\u6240\u6709\u7684 this.xxx \u66FF\u6362\u4E3A __$$context.xxx\r\n * @param expr\r\n */\r\nexport function transformThis2Context(\r\n expr: string | Expression,\r\n scope: IScope,\r\n { ignoreRootScope = false } = {},\r\n): string {\r\n if (ignoreRootScope && scope.parent == null) {\r\n return typeof expr === 'string' ? expr : generate(expr).code;\r\n }\r\n\r\n // \u4E0B\u9762\u8FD9\u79CD\u5B57\u7B26\u4E32\u66FF\u6362\u7684\u65B9\u5F0F\u867D\u7136\u7B80\u5355\u76F4\u63A5\uFF0C\u4F46\u662F\u5BF9\u4E8E\u590D\u6742\u573A\u666F\u4F1A\u8BEF\u5339\u914D\uFF0C\u6545\u540E\u671F\u6539\u6210\u4E86\u89E3\u6790 AST \u7136\u540E\u4FEE\u6539 AST \u6700\u540E\u518D\u91CD\u65B0\u751F\u6210\u4EE3\u7801\u7684\u65B9\u5F0F\r\n // return expr\r\n // .replace(/\\bthis\\.item\\./g, () => 'item.')\r\n // .replace(/\\bthis\\.index\\./g, () => 'index.')\r\n // .replace(/\\bthis\\./g, () => '__$$context.');\r\n return parseExpressionConvertThis2Context(\r\n expr,\r\n '__$$context',\r\n scope.bindings?.getAllBindings() || [],\r\n );\r\n}\r\n", "/**\r\n * \u5224\u65AD\u662F\u5426\u662F\u539F\u5B50\u7C7B\u578B\u7684\u8868\u8FBE\u5F0F\r\n */\r\nexport function isLiteralAtomicExpr(expr: string): boolean {\r\n return (\r\n expr === 'null' ||\r\n expr === 'undefined' ||\r\n expr === 'true' ||\r\n expr === 'false' ||\r\n /^-?\\d+(\\.\\d+)?$/.test(expr)\r\n );\r\n}\r\n", "import { Expression } from '@babel/types';\r\n\r\n/** \u5224\u65AD\u662F\u975E\u662F\u4E00\u4E9B\u7B80\u5355\u76F4\u63A5\u7684\u5B57\u9762\u503C */\r\nexport function isSimpleStraightLiteral(expr: Expression): boolean {\r\n switch (expr.type) {\r\n case 'BigIntLiteral':\r\n case 'BooleanLiteral':\r\n case 'DecimalLiteral':\r\n case 'NullLiteral':\r\n case 'NumericLiteral':\r\n case 'RegExpLiteral':\r\n case 'StringLiteral':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n", "import { IScope } from '../../../types';\r\nimport { parseExpression } from '../../../utils/expressionParser';\r\nimport { isLiteralAtomicExpr } from '../util/isLiteralAtomicExpr';\r\nimport { isSimpleStraightLiteral } from '../util/isSimpleStraightLiteral';\r\nimport { transformThis2Context } from './transformThis2Context';\r\n\r\nexport function transformJsExpr(\r\n expr: string,\r\n scope: IScope,\r\n { dontWrapEval = false, dontTransformThis2ContextAtRootScope = false } = {},\r\n) {\r\n if (!expr) {\r\n return 'undefined';\r\n }\r\n\r\n if (isLiteralAtomicExpr(expr)) {\r\n return expr;\r\n }\r\n\r\n const exprAst = parseExpression(expr);\r\n\r\n // \u5BF9\u4E8E\u4E0B\u9762\u8FD9\u4E9B\u6BD4\u8F83\u5B89\u5168\u7684\u5B57\u9762\u503C\uFF0C\u53EF\u4EE5\u76F4\u63A5\u8FD4\u56DE\u5BF9\u5E94\u7684\u8868\u8FBE\u5F0F\uFF0C\u800C\u975E\u5305\u4E00\u5C42\r\n if (isSimpleStraightLiteral(exprAst)) {\r\n return expr;\r\n }\r\n\r\n if (dontWrapEval) {\r\n return transformThis2Context(exprAst, scope, {\r\n ignoreRootScope: dontTransformThis2ContextAtRootScope,\r\n });\r\n }\r\n\r\n switch (exprAst.type) {\r\n // \u5BF9\u4E8E\u76F4\u63A5\u5199\u4E2A\u51FD\u6570\u7684\uFF0C\u5219\u4E0D\u7528\u518D\u5305\u4E0B\uFF0C\u56E0\u4E3A\u8FD9\u6837\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u7684\r\n case 'ArrowFunctionExpression':\r\n case 'FunctionExpression':\r\n return transformThis2Context(exprAst, scope, {\r\n ignoreRootScope: dontTransformThis2ContextAtRootScope,\r\n });\r\n\r\n default:\r\n break;\r\n }\r\n\r\n // \u5176\u4ED6\u7684\u90FD\u9700\u8981\u5305\u4E00\u5C42\r\n return `__$$eval(() => (${transformThis2Context(exprAst, scope, {\r\n ignoreRootScope: dontTransformThis2ContextAtRootScope,\r\n })}))`;\r\n}\r\n", "import {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n HandlerSet,\r\n ICodeStruct,\r\n IContainerInfo,\r\n IScope,\r\n NodeGeneratorConfig,\r\n PIECE_TYPE,\r\n} from '../../../types';\r\n\r\nimport { REACT_CHUNK_NAME } from './const';\r\nimport { COMMON_CHUNK_NAME } from '../../../const/generator';\r\n\r\nimport { createReactNodeGenerator } from '../../../utils/nodeToJSX';\r\nimport { Scope } from '../../../utils/Scope';\r\nimport { IPublicTypeJSExpression } from '@alilc/lowcode-types';\r\nimport { generateExpression } from '../../../utils/jsExpression';\r\nimport { transformJsExpr } from '../../../core/jsx/handlers/transformJsExpression';\r\nimport { transformThis2Context } from '../../../core/jsx/handlers/transformThis2Context';\r\nimport { generateCompositeType } from '../../../utils/compositeType';\r\n\r\nexport interface PluginConfig {\r\n fileType?: string;\r\n nodeTypeMapping?: Record<string, string>;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg = {\r\n fileType: FileType.JSX,\r\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\r\n nodeTypeMapping: {} as Record<string, string>,\r\n ...config,\r\n };\r\n\r\n const { nodeTypeMapping } = cfg;\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const { tolerateEvalErrors = true, evalErrorsHandler = '' } = next.contextData;\r\n\r\n // \u8FD9\u91CC\u4F1A\u5C06\u5185\u90E8\u7684\u4E00\u4E9B\u5B50\u4E0A\u4E0B\u6587\u7684\u8BBF\u95EE(this.xxx)\u8F6C\u6362\u4E3A __$$context.xxx \u7684\u5F62\u5F0F\r\n // \u4E0E Rax \u6240\u4E0D\u540C\u7684\u662F\uFF0C\u8FD9\u91CC\u4E0D\u4F1A\u5C06\u6700\u9876\u5C42\u7684 this \u8F6C\u6362\u6389\r\n const customHandlers: HandlerSet<string> = {\r\n expression(input: IPublicTypeJSExpression, scope: IScope, config) {\r\n return transformJsExpr(generateExpression(input, scope), scope, {\r\n dontWrapEval: !(config?.tolerateEvalErrors ?? tolerateEvalErrors),\r\n dontTransformThis2ContextAtRootScope: true,\r\n });\r\n },\r\n function(input, scope: IScope) {\r\n return transformThis2Context(\r\n generateCompositeType(\r\n {\r\n type: 'JSFunction',\r\n value: input.value || 'function () {}',\r\n },\r\n Scope.createRootScope(),\r\n ),\r\n scope,\r\n { ignoreRootScope: true },\r\n );\r\n },\r\n };\r\n\r\n const generatorPlugins: NodeGeneratorConfig = {\r\n handlers: customHandlers,\r\n tagMapping: (v) => nodeTypeMapping[v] || v,\r\n tolerateEvalErrors,\r\n };\r\n\r\n if (next.contextData.useRefApi) {\r\n generatorPlugins.attrPlugins = [\r\n (attrData, scope, pluginCfg, nextFunc) => {\r\n if (attrData.attrName === 'ref') {\r\n return [\r\n {\r\n name: attrData.attrName,\r\n value: `this._refsManager.linkRef('${attrData.attrValue}')`,\r\n type: PIECE_TYPE.ATTR,\r\n },\r\n ];\r\n }\r\n\r\n return nextFunc ? nextFunc(attrData, scope, pluginCfg) : [];\r\n },\r\n ];\r\n }\r\n\r\n const generator = createReactNodeGenerator(generatorPlugins);\r\n\r\n const ir = next.ir as IContainerInfo;\r\n const scope: IScope = Scope.createRootScope();\r\n const jsxContent = generator(ir, scope);\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: REACT_CHUNK_NAME.ClassRenderJSX,\r\n content: `\r\n const __$$context = this._context || this;\r\n const { state } = __$$context;\r\n return ${jsxContent};\r\n `,\r\n linkAfter: [REACT_CHUNK_NAME.ClassRenderStart, REACT_CHUNK_NAME.ClassRenderPre],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.CustomContent,\r\n content: [\r\n tolerateEvalErrors &&\r\n `\r\n function __$$eval(expr) {\r\n try {\r\n return expr();\r\n } catch (error) {\r\n ${evalErrorsHandler}\r\n }\r\n }\r\n\r\n function __$$evalArray(expr) {\r\n const res = __$$eval(expr);\r\n return Array.isArray(res) ? res : [];\r\n }\r\n `,\r\n `\r\n function __$$createChildContext(oldContext, ext) {\r\n const childContext = {\r\n ...oldContext,\r\n ...ext,\r\n };\r\n childContext.__proto__ = oldContext;\r\n return childContext;\r\n }\r\n `,\r\n ]\r\n .filter(Boolean)\r\n .join('\\n'),\r\n linkAfter: [COMMON_CHUNK_NAME.FileExport],\r\n });\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { COMMON_CHUNK_NAME } from '../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n} from '../../../types';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n content: `\r\n// \u6CE8\u610F: \u51FA\u7801\u5F15\u64CE\u6CE8\u5165\u7684\u4E34\u65F6\u53D8\u91CF\u9ED8\u8BA4\u90FD\u4EE5 \"__$$\" \u5F00\u5934\uFF0C\u7981\u6B62\u5728\u642D\u5EFA\u7684\u4EE3\u7801\u4E2D\u76F4\u63A5\u8BBF\u95EE\u3002\r\n// \u4F8B\u5916\uFF1Areact \u6846\u67B6\u7684\u5BFC\u51FA\u540D\u548C\u5404\u79CD\u7EC4\u4EF6\u540D\u9664\u5916\u3002\r\nimport React from \\'react\\';`,\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { COMMON_CHUNK_NAME } from '../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\n\r\nexport interface PluginConfig {\r\n fileType: string;\r\n moduleFileType: string;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.CSS,\r\n moduleFileType: FileType.JSX,\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.StyleCssContent,\r\n content: ir.css,\r\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.moduleFileType,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: `import './index.${cfg.fileType}';`,\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { COMMON_CHUNK_NAME } from '../../const/generator';\r\nimport { generateCompositeType } from '../../utils/compositeType';\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IProjectInfo,\r\n} from '../../types';\r\nimport { Scope } from '../../utils/Scope';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IProjectInfo;\r\n const scope = Scope.createRootScope();\r\n const constantStr = generateCompositeType(ir.constants || {}, scope);\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.FileVarDefine,\r\n content: `\r\n const __$$constants = (${constantStr});\r\n `,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n ],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.FileExport,\r\n content: `\r\n export default __$$constants;\r\n `,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n COMMON_CHUNK_NAME.FileMainContent,\r\n ],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { COMMON_CHUNK_NAME } from '../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IProjectInfo,\r\n} from '../../types';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IProjectInfo;\r\n const i18nStr = ir.i18n ? JSON.stringify(ir.i18n, null, 2) : '{}';\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.FileMainContent,\r\n content: `\r\n const i18nConfig = ${i18nStr};\r\n\r\n let locale = typeof navigator === 'object' && typeof navigator.language === 'string' ? navigator.language : 'zh-CN';\r\n\r\n const getLocale = () => locale;\r\n\r\n const setLocale = (target) => {\r\n locale = target;\r\n };\r\n\r\n const isEmptyVariables = variables => (\r\n Array.isArray(variables) && variables.length === 0\r\n || typeof variables === 'object' && (!variables || Object.keys(variables).length === 0)\r\n );\r\n\r\n // \u6309\u4F4E\u4EE3\u7801\u89C4\u8303\u91CC\u9762\u7684\u8981\u6C42\u8FDB\u884C\u53D8\u91CF\u66FF\u6362\r\n const format = (msg, variables) => (\r\n typeof msg === 'string'\r\n ? msg.replace(/\\\\\\$?\\\\{(\\\\w+)\\\\}/g, (match, key) => variables?.[key] ?? '')\r\n : msg\r\n );\r\n\r\n const i18nFormat = ({ id, defaultMessage, fallback }, variables) => {\r\n const msg = i18nConfig[locale]?.[id] ?? i18nConfig[locale.replace('-', '_')]?.[id] ?? defaultMessage;\r\n if (msg == null) {\r\n console.warn('[i18n]: unknown message id: %o (locale=%o)', id, locale);\r\n return fallback === undefined ? \\`\\${id}\\` : fallback;\r\n }\r\n\r\n return format(msg, variables);\r\n }\r\n\r\n const i18n = (id, params) => {\r\n return i18nFormat({ id }, params);\r\n };\r\n\r\n // \u5C06\u56FD\u9645\u5316\u7684\u4E00\u4E9B\u65B9\u6CD5\u6CE8\u5165\u5230\u76EE\u6807\u5BF9\u8C61&\u4E0A\u4E0B\u6587\u4E2D\r\n const _inject2 = (target) => {\r\n target.i18n = i18n;\r\n target.getLocale = getLocale;\r\n target.setLocale = (locale) => {\r\n setLocale(locale);\r\n target.forceUpdate();\r\n };\r\n target._i18nText = (t) => {\r\n // \u4F18\u5148\u53D6\u76F4\u63A5\u4F20\u8FC7\u6765\u7684\u8BED\u6599\r\n const localMsg = t[locale] ?? t[String(locale).replace('-', '_')]\r\n if (localMsg != null) {\r\n return format(localMsg, t.params);\r\n }\r\n\r\n // \u5176\u6B21\u7528\u9879\u76EE\u7EA7\u522B\u7684\r\n const projectMsg = i18nFormat({ id: t.key, fallback: null }, t.params);\r\n if (projectMsg != null) {\r\n return projectMsg;\r\n }\r\n\r\n // \u515C\u5E95\u7528 use \u6307\u5B9A\u7684\u6216\u9ED8\u8BA4\u8BED\u8A00\u7684\r\n return format(t[t.use || \"zh-CN\"] ?? t.en_US, t.params);\r\n }\r\n\r\n // \u6CE8\u5165\u5230\u4E0A\u4E0B\u6587\u4E2D\u53BB\r\n if (target._context && target._context !== target) {\r\n Object.assign(target._context, {\r\n i18n,\r\n getLocale, setLocale: target.setLocale\r\n });\r\n }\r\n }\r\n `,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n ],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.FileExport,\r\n content: `\r\n export {\r\n getLocale,\r\n setLocale,\r\n i18n,\r\n i18nFormat,\r\n _inject2,\r\n };\r\n `,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n COMMON_CHUNK_NAME.FileMainContent,\r\n ],\r\n });\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { COMMON_CHUNK_NAME, DEFAULT_LINK_AFTER } from '../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IUtilInfo,\r\n} from '../../types';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<string> = (baseFramework?: string) => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const framework = baseFramework || 'react';\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IUtilInfo;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n content: `\r\n import { createRef } from '${framework}';\r\n `,\r\n linkAfter: [],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.FileUtilDefine,\r\n content: `\r\n export class RefsManager {\r\n constructor() {\r\n this.refInsStore = {};\r\n }\r\n\r\n clearNullRefs() {\r\n Object.keys(this.refInsStore).forEach((refName) => {\r\n const filteredInsList = this.refInsStore[refName].filter(insRef => !!insRef.current);\r\n if (filteredInsList.length > 0) {\r\n this.refInsStore[refName] = filteredInsList;\r\n } else {\r\n delete this.refInsStore[refName];\r\n }\r\n });\r\n }\r\n\r\n get(refName) {\r\n this.clearNullRefs();\r\n if (this.refInsStore[refName] && this.refInsStore[refName].length > 0) {\r\n return this.refInsStore[refName][0].current;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n getAll(refName) {\r\n this.clearNullRefs();\r\n if (this.refInsStore[refName] && this.refInsStore[refName].length > 0) {\r\n return this.refInsStore[refName].map(i => i.current);\r\n }\r\n\r\n return [];\r\n }\r\n\r\n linkRef(refName) {\r\n const refIns = createRef();\r\n this.refInsStore[refName] = this.refInsStore[refName] || [];\r\n this.refInsStore[refName].push(refIns);\r\n return refIns;\r\n }\r\n }\r\n `,\r\n linkAfter: [...DEFAULT_LINK_AFTER[COMMON_CHUNK_NAME.FileUtilDefine]],\r\n });\r\n\r\n if (ir.utils) {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.FileExport,\r\n content: `\r\n export default {\r\n `,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n COMMON_CHUNK_NAME.FileMainContent,\r\n ],\r\n });\r\n\r\n ir.utils.forEach((util) => {\r\n if (util.type === 'function') {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.FileVarDefine,\r\n content: `\r\n const ${util.name} = ${util.content.value};\r\n `,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n ],\r\n });\r\n }\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.FileExport,\r\n content: `${util.name},`,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n COMMON_CHUNK_NAME.FileMainContent,\r\n ],\r\n });\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.FileExport,\r\n content: `\r\n };\r\n `,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n COMMON_CHUNK_NAME.FileMainContent,\r\n ],\r\n });\r\n }\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { ResultDir, ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultDir, addDirectory, addFile } from './resultHelper';\r\n\r\ntype FuncFileGenerator = () => [string[], ResultFile];\r\n\r\nexport function insertFile(root: ResultDir, path: string[], file: ResultFile) {\r\n let current: ResultDir = root;\r\n path.forEach((pathNode) => {\r\n const dir = current.dirs.find((d) => d.name === pathNode);\r\n if (dir) {\r\n current = dir;\r\n } else {\r\n const newDir = createResultDir(pathNode);\r\n addDirectory(current, newDir);\r\n current = newDir;\r\n }\r\n });\r\n\r\n addFile(current, file);\r\n}\r\n\r\nexport function runFileGenerator(root: ResultDir, fun: FuncFileGenerator) {\r\n try {\r\n const result = fun();\r\n const [path, file] = result;\r\n insertFile(root, path, file);\r\n } catch (error) {\r\n throw new Error(`Error: ${typeof fun}`);\r\n }\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n [],\r\n {\r\n name: 'abc',\r\n ext: 'json',\r\n content: `\r\n{\r\n \"type\": \"ice-app\",\r\n \"builder\": \"@ali/builder-ice-app\"\r\n}\r\n `,\r\n },\r\n ];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n [],\r\n {\r\n name: 'build',\r\n ext: 'json',\r\n content: `\r\n{\r\n \"entry\": \"src/app.js\",\r\n \"plugins\": [\r\n [\r\n \"build-plugin-fusion\",\r\n {\r\n \"themePackage\": \"@alifd/theme-design-pro\"\r\n }\r\n ],\r\n [\r\n \"build-plugin-moment-locales\",\r\n {\r\n \"locales\": [\r\n \"zh-cn\"\r\n ]\r\n }\r\n ]\r\n ]\r\n}\r\n `,\r\n },\r\n ];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n '.editorconfig',\r\n '',\r\n `\r\n# http://editorconfig.org\r\nroot = true\r\n\r\n[*]\r\nindent_style = space\r\nindent_size = 2\r\ncharset = utf-8\r\ntrim_trailing_whitespace = true\r\ninsert_final_newline = true\r\n\r\n[*.md]\r\ntrim_trailing_whitespace = false\r\n `,\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n '.eslintignore',\r\n '',\r\n `\r\n# \u5FFD\u7565\u76EE\u5F55\r\nbuild/\r\ntests/\r\ndemo/\r\n.ice/\r\n\r\n# node \u8986\u76D6\u7387\u6587\u4EF6\r\ncoverage/\r\n\r\n# \u5FFD\u7565\u6587\u4EF6\r\n**/*-min.js\r\n**/*.min.js\r\n\r\npackage-lock.json\r\nyarn.lock\r\n `,\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n '.eslintrc',\r\n 'js',\r\n `\r\nconst { eslint } = require('@ice/spec');\r\n\r\nmodule.exports = eslint;\r\n `,\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n '.gitignore',\r\n '',\r\n `\r\n# See https://help.github.com/ignore-files/ for more about ignoring files.\r\n\r\n# dependencies\r\nnode_modules/\r\n\r\n# production\r\nbuild/\r\ndist/\r\ntmp/\r\nlib/\r\n\r\n# misc\r\n.idea/\r\n.happypack\r\n.DS_Store\r\n*.swp\r\n*.dia~\r\n.ice\r\n\r\nnpm-debug.log*\r\nyarn-debug.log*\r\nyarn-error.log*\r\nindex.module.scss.d.ts\r\n `,\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'jsconfig',\r\n 'json',\r\n `\r\n{\r\n \"compilerOptions\": {\r\n \"baseUrl\": \".\",\r\n \"jsx\": \"react\",\r\n \"paths\": {\r\n \"@/*\": [\"./src/*\"],\r\n \"ice\": [\".ice/index.ts\"],\r\n \"ice/*\": [\".ice/pages/*\"]\r\n }\r\n }\r\n}\r\n `,\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n '.prettierignore',\r\n '',\r\n `\r\nbuild/\r\ntests/\r\ndemo/\r\n.ice/\r\ncoverage/\r\n**/*-min.js\r\n**/*.min.js\r\npackage-lock.json\r\nyarn.lock\r\n `,\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n '.prettierrc',\r\n 'js',\r\n `\r\nconst { prettier } = require('@ice/spec');\r\n\r\nmodule.exports = prettier;\r\n `,\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'README',\r\n 'md',\r\n `\r\n## Scaffold Lite\r\n\r\n> \u8F7B\u91CF\u7EA7\u6A21\u677F\uFF0C\u4F7F\u7528 JavaScript\uFF0C\u4EC5\u5305\u542B\u57FA\u7840\u7684 Layout\u3002\r\n\r\n## \u4F7F\u7528\r\n\r\n\\`\\`\\`bash\r\n# \u5B89\u88C5\u4F9D\u8D56\r\n$ npm install\r\n\r\n# \u542F\u52A8\u670D\u52A1\r\n$ npm start # visit http://localhost:3333\r\n\\`\\`\\`\r\n\r\n[More docs](https://ice.work/docs/guide/about).\r\n\r\n## \u76EE\u5F55\r\n\r\n\\`\\`\\`md\r\n\u251C\u2500\u2500 build/ # \u6784\u5EFA\u4EA7\u7269\r\n\u251C\u2500\u2500 mock/ # \u672C\u5730\u6A21\u62DF\u6570\u636E\r\n\u2502 \u251C\u2500\u2500 index.[j,t]s\r\n\u251C\u2500\u2500 public/\r\n\u2502 \u251C\u2500\u2500 index.html # \u5E94\u7528\u5165\u53E3 HTML\r\n\u2502 \u2514\u2500\u2500 favicon.png # Favicon\r\n\u251C\u2500\u2500 src/ # \u6E90\u7801\u8DEF\u5F84\r\n\u2502 \u251C\u2500\u2500 components/ # \u81EA\u5B9A\u4E49\u4E1A\u52A1\u7EC4\u4EF6\r\n\u2502 \u2502 \u2514\u2500\u2500 Guide/\r\n\u2502 \u2502 \u251C\u2500\u2500 index.[j,t]sx\r\n\u2502 \u2502 \u251C\u2500\u2500 index.module.scss\r\n\u2502 \u251C\u2500\u2500 layouts/ # \u5E03\u5C40\u7EC4\u4EF6\r\n\u2502 \u2502 \u2514\u2500\u2500 BasicLayout/\r\n\u2502 \u2502 \u251C\u2500\u2500 index.[j,t]sx\r\n\u2502 \u2502 \u2514\u2500\u2500 index.module.scss\r\n\u2502 \u251C\u2500\u2500 pages/ # \u9875\u9762\r\n\u2502 \u2502 \u2514\u2500\u2500 Home/ # home \u9875\u9762\uFF0C\u7EA6\u5B9A\u8DEF\u7531\u8F6C\u6210\u5C0F\u5199\r\n\u2502 \u2502 \u251C\u2500\u2500 components/ # \u9875\u9762\u7EA7\u81EA\u5B9A\u4E49\u4E1A\u52A1\u7EC4\u4EF6\r\n\u2502 \u2502 \u251C\u2500\u2500 models.[j,t]sx # \u9875\u9762\u7EA7\u6570\u636E\u72B6\u6001\r\n\u2502 \u2502 \u251C\u2500\u2500 index.[j,t]sx # \u9875\u9762\u5165\u53E3\r\n\u2502 \u2502 \u2514\u2500\u2500 index.module.scss # \u9875\u9762\u6837\u5F0F\u6587\u4EF6\r\n\u2502 \u251C\u2500\u2500 configs/ # [\u53EF\u9009] \u914D\u7F6E\u6587\u4EF6\r\n\u2502 \u2502 \u2514\u2500\u2500 menu.[j,t]s # [\u53EF\u9009] \u83DC\u5355\u914D\u7F6E\r\n\u2502 \u251C\u2500\u2500 models/ # [\u53EF\u9009] \u5E94\u7528\u7EA7\u6570\u636E\u72B6\u6001\r\n\u2502 \u2502 \u2514\u2500\u2500 user.[j,t]s\r\n\u2502 \u251C\u2500\u2500 utils/ # [\u53EF\u9009] \u5DE5\u5177\u5E93\r\n\u2502 \u251C\u2500\u2500 global.scss # \u5168\u5C40\u6837\u5F0F\r\n\u2502 \u251C\u2500\u2500 routes.[j,t]s # \u8DEF\u7531\u914D\u7F6E\r\n\u2502 \u2514\u2500\u2500 app.[j,t]s[x] # \u5E94\u7528\u5165\u53E3\u811A\u672C\r\n\u251C\u2500\u2500 build.json # \u5DE5\u7A0B\u914D\u7F6E\r\n\u251C\u2500\u2500 README.md\r\n\u251C\u2500\u2500 package.json\r\n\u251C\u2500\u2500 .editorconfig\r\n\u251C\u2500\u2500 .eslintignore\r\n\u251C\u2500\u2500 .eslintrc.[j,t]s\r\n\u251C\u2500\u2500 .gitignore\r\n\u251C\u2500\u2500 .stylelintignore\r\n\u251C\u2500\u2500 .stylelintrc.[j,t]s\r\n\u251C\u2500\u2500 .gitignore\r\n\u2514\u2500\u2500 [j,t]sconfig.json\r\n\\`\\`\\`\r\n `,\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'index',\r\n 'jsx',\r\n `\r\nimport React from 'react';\r\nimport styles from './index.module.scss';\r\n\r\nexport default function Footer() {\r\n return (\r\n <p className={styles.footer}>\r\n <span className={styles.logo}>Alibaba Fusion</span>\r\n <br />\r\n <span className={styles.copyright}>\u00A9 2019-\u73B0\u5728 Alibaba Fusion & ICE</span>\r\n </p>\r\n );\r\n}\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout', 'components', 'Footer'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'index',\r\n 'module.scss',\r\n `\r\n.footer {\r\n line-height: 20px;\r\n text-align: center;\r\n}\r\n\r\n.logo {\r\n font-weight: bold;\r\n font-size: 16px;\r\n}\r\n\r\n.copyright {\r\n font-size: 12px;\r\n}\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout', 'components', 'Footer'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'index',\r\n 'jsx',\r\n `\r\nimport React from 'react';\r\nimport { Link } from 'ice';\r\nimport styles from './index.module.scss';\r\n\r\nexport default function Logo({ image, text, url }) {\r\n return (\r\n <div className=\"logo\">\r\n <Link to={url || '/'} className={styles.logo}>\r\n {image && <img src={image} alt=\"logo\" />}\r\n <span>{text}</span>\r\n </Link>\r\n </div>\r\n );\r\n}\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout', 'components', 'Logo'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'index',\r\n 'module.scss',\r\n `\r\n.logo{\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: $color-text1-1;\r\n font-weight: bold;\r\n font-size: 14px;\r\n line-height: 22px;\r\n\r\n &:visited, &:link {\r\n color: $color-text1-1;\r\n }\r\n\r\n img {\r\n height: 24px;\r\n margin-right: 10px;\r\n }\r\n}\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout', 'components', 'Logo'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'index',\r\n 'jsx',\r\n `\r\nimport React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link, withRouter } from 'ice';\r\nimport { Nav } from '@alifd/next';\r\nimport { asideMenuConfig } from '../../menuConfig';\r\n\r\nconst { SubNav } = Nav;\r\nconst NavItem = Nav.Item;\r\n\r\nfunction getNavMenuItems(menusData) {\r\n if (!menusData) {\r\n return [];\r\n }\r\n\r\n return menusData\r\n .filter(item => item.name && !item.hideInMenu)\r\n .map((item, index) => getSubMenuOrItem(item, index));\r\n}\r\n\r\nfunction getSubMenuOrItem(item, index) {\r\n if (item.children && item.children.some(child => child.name)) {\r\n const childrenItems = getNavMenuItems(item.children);\r\n\r\n if (childrenItems && childrenItems.length > 0) {\r\n const subNav = (\r\n <SubNav key={index} icon={item.icon} label={item.name}>\r\n {childrenItems}\r\n </SubNav>\r\n );\r\n return subNav;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n const navItem = (\r\n <NavItem key={item.path} icon={item.icon}>\r\n <Link to={item.path}>{item.name}</Link>\r\n </NavItem>\r\n );\r\n return navItem;\r\n}\r\n\r\nconst Navigation = (props, context) => {\r\n const { location } = props;\r\n const { pathname } = location;\r\n const { isCollapse } = context;\r\n return (\r\n <Nav\r\n type=\"primary\"\r\n selectedKeys={[pathname]}\r\n defaultSelectedKeys={[pathname]}\r\n embeddable\r\n openMode=\"single\"\r\n iconOnly={isCollapse}\r\n hasArrow={false}\r\n mode={isCollapse ? 'popup' : 'inline'}\r\n >\r\n {getNavMenuItems(asideMenuConfig)}\r\n </Nav>\r\n );\r\n};\r\n\r\nNavigation.contextTypes = {\r\n isCollapse: PropTypes.bool,\r\n};\r\nconst PageNav = withRouter(Navigation);\r\nexport default PageNav;\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout', 'components', 'PageNav'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'index',\r\n 'jsx',\r\n `\r\nimport React, { useState } from 'react';\r\nimport { Shell, ConfigProvider } from '@alifd/next';\r\nimport PageNav from './components/PageNav';\r\nimport Logo from './components/Logo';\r\nimport Footer from './components/Footer';\r\n\r\n(function() {\r\n const throttle = function(type, name, obj = window) {\r\n let running = false;\r\n\r\n const func = () => {\r\n if (running) {\r\n return;\r\n }\r\n\r\n running = true;\r\n requestAnimationFrame(() => {\r\n obj.dispatchEvent(new CustomEvent(name));\r\n running = false;\r\n });\r\n };\r\n\r\n obj.addEventListener(type, func);\r\n };\r\n\r\n throttle('resize', 'optimizedResize');\r\n})();\r\n\r\nexport default function BasicLayout({ children }) {\r\n const getDevice = width => {\r\n const isPhone =\r\n typeof navigator !== 'undefined' && navigator && navigator.userAgent.match(/phone/gi);\r\n\r\n if (width < 680 || isPhone) {\r\n return 'phone';\r\n }\r\n if (width < 1280 && width > 680) {\r\n return 'tablet';\r\n }\r\n return 'desktop';\r\n };\r\n\r\n const [device, setDevice] = useState(getDevice(NaN));\r\n window.addEventListener('optimizedResize', e => {\r\n setDevice(getDevice(e && e.target && e.target.innerWidth));\r\n });\r\n return (\r\n <ConfigProvider device={device}>\r\n <Shell\r\n type=\"dark\"\r\n style={{\r\n minHeight: '100vh',\r\n }}\r\n >\r\n <Shell.Branding>\r\n <Logo\r\n image=\"https://img.alicdn.com/tfs/TB1.ZBecq67gK0jSZFHXXa9jVXa-904-826.png\"\r\n text=\"Logo\"\r\n />\r\n </Shell.Branding>\r\n <Shell.Navigation\r\n direction=\"hoz\"\r\n style={{\r\n marginRight: 10,\r\n }}\r\n ></Shell.Navigation>\r\n <Shell.Action></Shell.Action>\r\n <Shell.Navigation>\r\n <PageNav />\r\n </Shell.Navigation>\r\n\r\n <Shell.Content>{children}</Shell.Content>\r\n <Shell.Footer>\r\n <Footer />\r\n </Shell.Footer>\r\n </Shell>\r\n </ConfigProvider>\r\n );\r\n}\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'menuConfig',\r\n 'js',\r\n `\r\nconst headerMenuConfig = [];\r\nconst asideMenuConfig = [\r\n {\r\n name: 'Dashboard',\r\n path: '/',\r\n icon: 'smile',\r\n },\r\n];\r\nexport { headerMenuConfig, asideMenuConfig };\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n '.stylelintignore',\r\n '',\r\n `\r\n# \u5FFD\u7565\u76EE\u5F55\r\nbuild/\r\ntests/\r\ndemo/\r\n\r\n# node \u8986\u76D6\u7387\u6587\u4EF6\r\ncoverage/\r\n `,\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n '.stylelintrc',\r\n 'js',\r\n `\r\nconst { stylelint } = require('@ice/spec');\r\n\r\nmodule.exports = stylelint;\r\n `,\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'tsconfig',\r\n 'json',\r\n `\r\n{\r\n \"compileOnSave\": false,\r\n \"buildOnSave\": false,\r\n \"compilerOptions\": {\r\n \"baseUrl\": \".\",\r\n \"outDir\": \"build\",\r\n \"module\": \"esnext\",\r\n \"target\": \"es6\",\r\n \"jsx\": \"react\",\r\n \"moduleResolution\": \"node\",\r\n \"allowSyntheticDefaultImports\": true,\r\n \"lib\": [\"es6\", \"dom\"],\r\n \"sourceMap\": true,\r\n \"allowJs\": true,\r\n \"rootDir\": \"./\",\r\n \"forceConsistentCasingInFileNames\": true,\r\n \"noImplicitReturns\": true,\r\n \"noImplicitThis\": true,\r\n \"noImplicitAny\": false,\r\n \"importHelpers\": true,\r\n \"strictNullChecks\": true,\r\n \"suppressImplicitAnyIndexErrors\": true,\r\n \"noUnusedLocals\": true,\r\n \"skipLibCheck\": true,\r\n \"paths\": {\r\n \"@/*\": [\"./src/*\"],\r\n \"ice\": [\".ice/index.ts\"],\r\n \"ice/*\": [\".ice/pages/*\"]\r\n }\r\n },\r\n \"include\": [\"src/*\", \".ice\"],\r\n \"exclude\": [\"node_modules\", \"build\", \"public\"]\r\n}\r\n `,\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultDir } from '@alilc/lowcode-types';\r\n\r\nimport { createResultDir } from '../../../../../utils/resultHelper';\r\nimport { runFileGenerator } from '../../../../../utils/templateHelper';\r\n\r\nimport file12 from './files/abc.json';\r\nimport file11 from './files/build.json';\r\nimport file10 from './files/editorconfig';\r\nimport file9 from './files/eslintignore';\r\nimport file8 from './files/eslintrc.js';\r\nimport file7 from './files/gitignore';\r\nimport file6 from './files/jsconfig.json';\r\nimport file5 from './files/prettierignore';\r\nimport file4 from './files/prettierrc.js';\r\nimport file13 from './files/README.md';\r\nimport file16 from './files/src/layouts/BasicLayout/components/Footer/index.jsx';\r\nimport file17 from './files/src/layouts/BasicLayout/components/Footer/index.style';\r\nimport file18 from './files/src/layouts/BasicLayout/components/Logo/index.jsx';\r\nimport file19 from './files/src/layouts/BasicLayout/components/Logo/index.style';\r\nimport file20 from './files/src/layouts/BasicLayout/components/PageNav/index.jsx';\r\nimport file14 from './files/src/layouts/BasicLayout/index.jsx';\r\nimport file15 from './files/src/layouts/BasicLayout/menuConfig.js';\r\nimport file3 from './files/stylelintignore';\r\nimport file2 from './files/stylelintrc.js';\r\nimport file1 from './files/tsconfig.json';\r\n\r\nexport function generateStaticFiles(root = createResultDir('.')): ResultDir {\r\n runFileGenerator(root, file1);\r\n runFileGenerator(root, file2);\r\n runFileGenerator(root, file3);\r\n runFileGenerator(root, file4);\r\n runFileGenerator(root, file5);\r\n runFileGenerator(root, file6);\r\n runFileGenerator(root, file7);\r\n runFileGenerator(root, file8);\r\n runFileGenerator(root, file9);\r\n runFileGenerator(root, file10);\r\n runFileGenerator(root, file11);\r\n runFileGenerator(root, file12);\r\n runFileGenerator(root, file13);\r\n runFileGenerator(root, file14);\r\n runFileGenerator(root, file15);\r\n runFileGenerator(root, file16);\r\n runFileGenerator(root, file17);\r\n runFileGenerator(root, file18);\r\n runFileGenerator(root, file19);\r\n runFileGenerator(root, file20);\r\n\r\n return root;\r\n}\r\n", "import { ResultDir } from '@alilc/lowcode-types';\r\nimport { IProjectTemplate } from '../../../../../types';\r\nimport { generateStaticFiles } from './static-files';\r\n\r\nconst icejsTemplate: IProjectTemplate = {\r\n slots: {\r\n components: {\r\n path: ['src', 'components'],\r\n },\r\n pages: {\r\n path: ['src', 'pages'],\r\n },\r\n router: {\r\n path: ['src'],\r\n fileName: 'routes',\r\n },\r\n entry: {\r\n path: ['src'],\r\n fileName: 'app',\r\n },\r\n constants: {\r\n path: ['src'],\r\n fileName: 'constants',\r\n },\r\n utils: {\r\n path: ['src'],\r\n fileName: 'utils',\r\n },\r\n i18n: {\r\n path: ['src'],\r\n fileName: 'i18n',\r\n },\r\n globalStyle: {\r\n path: ['src'],\r\n fileName: 'global',\r\n },\r\n htmlEntry: {\r\n path: ['public'],\r\n fileName: 'index',\r\n },\r\n packageJSON: {\r\n path: [],\r\n fileName: 'package',\r\n },\r\n },\r\n\r\n generateTemplate(): ResultDir {\r\n return generateStaticFiles();\r\n },\r\n};\r\n\r\nexport default icejsTemplate;\r\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n} from '../../../../../types';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n content: `\r\n import { createApp } from 'ice';\r\n `,\r\n linkAfter: [],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.FileMainContent,\r\n content: `\r\n const appConfig = {\r\n app: {\r\n rootId: 'app',\r\n },\r\n router: {\r\n type: 'hash',\r\n },\r\n };\r\n createApp(appConfig);\r\n `,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n ],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IProjectInfo,\r\n} from '../../../../../types';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IProjectInfo;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.HTML,\r\n name: COMMON_CHUNK_NAME.HtmlContent,\r\n content: `\r\n <!DOCTYPE html>\r\n <html>\r\n <head>\r\n <meta charset=\"utf-8\" />\r\n <meta http-equiv=\"x-ua-compatible\" content=\"ie=edge,chrome=1\" />\r\n <meta name=\"viewport\" content=\"width=device-width\" />\r\n <title>${ir?.meta?.name || 'Ice App'}</title>\r\n </head>\r\n <body>\r\n <div id=\"app\"></div>\r\n </body>\r\n </html>\r\n `,\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IProjectInfo,\r\n} from '../../../../../types';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IProjectInfo;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.SCSS,\r\n name: COMMON_CHUNK_NAME.StyleDepsImport,\r\n content: `\r\n // \u5F15\u5165\u9ED8\u8BA4\u5168\u5C40\u6837\u5F0F\r\n @import '@alifd/next/reset.scss';\r\n `,\r\n linkAfter: [],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.SCSS,\r\n name: COMMON_CHUNK_NAME.StyleCssContent,\r\n content: `\r\n body {\r\n -webkit-font-smoothing: antialiased;\r\n }\r\n `,\r\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.SCSS,\r\n name: COMMON_CHUNK_NAME.StyleCssContent,\r\n content: ir.css || '',\r\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import changeCase from 'change-case';\r\nimport type { IProjectInfo } from '../types/intermediate';\r\n\r\nexport interface DataSourceDependenciesConfig {\r\n\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\r\n engineVersion?: string;\r\n\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\r\n enginePackage?: string;\r\n\r\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\r\n handlersVersion?: {\r\n [key: string]: string;\r\n };\r\n\r\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\r\n handlersPackages?: {\r\n [key: string]: string;\r\n };\r\n}\r\n\r\nexport function buildDataSourceDependencies(\r\n ir: IProjectInfo,\r\n cfg: DataSourceDependenciesConfig = {},\r\n): Record<string, string> {\r\n return {\r\n // \u6570\u636E\u6E90\u5F15\u64CE\u7684\u4F9D\u8D56\u5305\r\n [cfg.enginePackage || '@alilc/lowcode-datasource-engine']: cfg.engineVersion || '^1.0.0',\r\n\r\n // \u5404\u79CD\u6570\u636E\u6E90\u7684 handlers \u7684\u4F9D\u8D56\u5305\r\n ...(ir.dataSourcesTypes || []).reduce(\r\n (acc, dsType) => ({\r\n ...acc,\r\n [getDataSourceHandlerPackageName(dsType)]: cfg.handlersVersion?.[dsType] || '^1.0.0',\r\n }),\r\n {},\r\n ),\r\n };\r\n\r\n function getDataSourceHandlerPackageName(dsType: string) {\r\n return (\r\n cfg.handlersPackages?.[dsType] ||\r\n `@alilc/lowcode-datasource-${changeCase.kebab(dsType)}-handler`\r\n );\r\n }\r\n}\r\n", "import { PackageJSON } from '@alilc/lowcode-types';\r\n\r\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IProjectInfo,\r\n} from '../../../../../types';\r\nimport { buildDataSourceDependencies } from '../../../../../utils/dataSource';\r\n\r\ninterface IIceJsPackageJSON extends PackageJSON {\r\n ideMode: {\r\n name: string;\r\n };\r\n iceworks: {\r\n type: string;\r\n adapter: string;\r\n };\r\n originTemplate: string;\r\n}\r\n\r\nexport type IceJsPackageJsonPluginConfig = {\r\n /**\r\n * \u6570\u636E\u6E90\u914D\u7F6E\r\n */\r\n datasourceConfig?: {\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\r\n engineVersion?: string;\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\r\n enginePackage?: string;\r\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\r\n handlersVersion?: {\r\n [key: string]: string;\r\n };\r\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\r\n handlersPackages?: {\r\n [key: string]: string;\r\n };\r\n };\r\n /** \u5305\u540D */\r\n packageName?: string;\r\n /** \u7248\u672C */\r\n packageVersion?: string;\r\n};\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<IceJsPackageJsonPluginConfig> = (cfg) => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IProjectInfo;\r\n\r\n const packageJson: IIceJsPackageJSON = {\r\n name: cfg?.packageName || 'icejs-demo-app',\r\n version: cfg?.packageVersion || '0.1.5',\r\n description: '\u8F7B\u91CF\u7EA7\u6A21\u677F\uFF0C\u4F7F\u7528 JavaScript\uFF0C\u4EC5\u5305\u542B\u57FA\u7840\u7684 Layout\u3002',\r\n dependencies: {\r\n moment: '^2.24.0',\r\n react: '^16.4.1',\r\n 'react-dom': '^16.4.1',\r\n 'react-router': '^5.2.1',\r\n '@alifd/theme-design-pro': '^0.x',\r\n 'intl-messageformat': '^9.3.6',\r\n '@ice/store': '^1.4.3',\r\n '@loadable/component': '^5.15.2',\r\n\r\n // \u6570\u636E\u6E90\u76F8\u5173\u7684\u4F9D\u8D56:\r\n ...buildDataSourceDependencies(ir, cfg?.datasourceConfig),\r\n },\r\n devDependencies: {\r\n '@ice/spec': '^1.0.0',\r\n 'build-plugin-fusion': '^0.1.0',\r\n 'build-plugin-moment-locales': '^0.1.0',\r\n eslint: '^6.0.1',\r\n 'ice.js': '^1.0.0',\r\n stylelint: '^13.2.0',\r\n },\r\n scripts: {\r\n start: 'icejs start',\r\n build: 'icejs build',\r\n lint: 'npm run eslint && npm run stylelint',\r\n eslint: 'eslint --cache --ext .js,.jsx ./',\r\n stylelint: 'stylelint ./**/*.scss',\r\n },\r\n ideMode: {\r\n name: 'ice-react',\r\n },\r\n iceworks: {\r\n type: 'react',\r\n adapter: 'adapter-react-v3',\r\n },\r\n engines: {\r\n node: '>=8.0.0',\r\n },\r\n repository: {\r\n type: 'git',\r\n url: 'http://gitlab.xxx.com/msd/leak-scan/tree/master',\r\n },\r\n private: true,\r\n originTemplate: '@alifd/scaffold-lite-js',\r\n };\r\n\r\n ir.packages.forEach((packageInfo) => {\r\n packageJson.dependencies[packageInfo.package] = packageInfo.version;\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.JSON,\r\n fileType: FileType.JSON,\r\n name: COMMON_CHUNK_NAME.FileMainContent,\r\n content: packageJson,\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IRouterInfo,\r\n} from '../../../../../types';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IRouterInfo;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: `\r\n import BasicLayout from '@/layouts/BasicLayout';\r\n `,\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.FileVarDefine,\r\n content: `\r\n const routerConfig = [\r\n {\r\n path: '/',\r\n component: BasicLayout,\r\n children: [\r\n ${ir.routes\r\n .map(\r\n (route) => `\r\n {\r\n path: '${route.path}',\r\n component: ${route.componentName},\r\n }\r\n `,\r\n )\r\n .join(',')}\r\n ],\r\n },\r\n ];\r\n `,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n ],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.FileExport,\r\n content: `\r\n export default routerConfig;\r\n `,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileMainContent,\r\n ],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import template from './template';\r\nimport entry from './plugins/entry';\r\nimport entryHtml from './plugins/entryHtml';\r\nimport globalStyle from './plugins/globalStyle';\r\nimport packageJSON from './plugins/packageJSON';\r\nimport router from './plugins/router';\r\n\r\nexport default {\r\n template,\r\n plugins: {\r\n entry,\r\n entryHtml,\r\n globalStyle,\r\n packageJSON,\r\n router,\r\n },\r\n};\r\n", "import prettier from 'prettier';\r\nimport parserBabel from 'prettier/parser-babel';\r\nimport parserPostCss from 'prettier/parser-postcss';\r\nimport parserHtml from 'prettier/parser-html';\r\n\r\nimport { PostProcessor, PostProcessorFactory } from '../../types';\r\n\r\nconst PARSERS = ['css', 'scss', 'less', 'json', 'html', 'vue'];\r\n\r\nexport interface ProcessorConfig {\r\n customFileTypeParser: Record<string, string>;\r\n plugins?: prettier.Plugin[];\r\n}\r\n\r\nconst factory: PostProcessorFactory<ProcessorConfig> = (config?: ProcessorConfig) => {\r\n const cfg: ProcessorConfig = {\r\n customFileTypeParser: {},\r\n ...config,\r\n };\r\n\r\n const codePrettier: PostProcessor = (content: string, fileType: string) => {\r\n let parser: prettier.BuiltInParserName | any;\r\n if (fileType === 'js' || fileType === 'jsx' || fileType === 'ts' || fileType === 'tsx') {\r\n parser = 'babel-ts';\r\n } else if (fileType === 'json') {\r\n parser = 'json-stringify';\r\n } else if (PARSERS.indexOf(fileType) >= 0) {\r\n parser = fileType;\r\n } else if (cfg.customFileTypeParser[fileType]) {\r\n parser = cfg.customFileTypeParser[fileType];\r\n } else {\r\n return content;\r\n }\r\n\r\n return prettier.format(content, {\r\n parser,\r\n plugins: [parserBabel, parserPostCss, parserHtml, ...(cfg.plugins || [])],\r\n singleQuote: true,\r\n jsxSingleQuote: false,\r\n });\r\n };\r\n\r\n return codePrettier;\r\n};\r\n\r\nexport default factory;\r\n", "import { IProjectBuilder, IProjectBuilderOptions } from '../types';\r\n\r\nimport { createProjectBuilder } from '../generator/ProjectBuilder';\r\n\r\nimport esmodule from '../plugins/common/esmodule';\r\nimport styleImport from '../plugins/common/styleImport';\r\nimport containerClass from '../plugins/component/react/containerClass';\r\nimport containerInitState from '../plugins/component/react/containerInitState';\r\nimport containerInjectContext from '../plugins/component/react/containerInjectContext';\r\nimport containerInjectUtils from '../plugins/component/react/containerInjectUtils';\r\nimport containerInjectDataSourceEngine from '../plugins/component/react/containerInjectDataSourceEngine';\r\nimport containerInjectConstants from '../plugins/component/react/containerInjectConstants';\r\nimport containerInjectI18n from '../plugins/component/react/containerInjectI18n';\r\nimport containerLifeCycle from '../plugins/component/react/containerLifeCycle';\r\nimport containerMethod from '../plugins/component/react/containerMethod';\r\nimport jsx from '../plugins/component/react/jsx';\r\nimport reactCommonDeps from '../plugins/component/react/reactCommonDeps';\r\nimport css from '../plugins/component/style/css';\r\nimport constants from '../plugins/project/constants';\r\nimport i18n from '../plugins/project/i18n';\r\nimport utils from '../plugins/project/utils';\r\n\r\nimport icejs from '../plugins/project/framework/icejs';\r\n\r\nimport { prettier } from '../postprocessor';\r\n\r\nexport type IceJsProjectBuilderOptions = IProjectBuilderOptions;\r\n\r\nexport default function createIceJsProjectBuilder(\r\n options?: IceJsProjectBuilderOptions,\r\n): IProjectBuilder {\r\n return createProjectBuilder({\r\n inStrictMode: options?.inStrictMode,\r\n extraContextData: { ...options },\r\n template: icejs.template,\r\n plugins: {\r\n components: [\r\n reactCommonDeps(),\r\n esmodule({\r\n fileType: 'jsx',\r\n }),\r\n styleImport(),\r\n containerClass(),\r\n containerInjectContext(),\r\n containerInjectUtils(),\r\n containerInjectDataSourceEngine(),\r\n containerInjectI18n(),\r\n containerInjectConstants(),\r\n containerInitState(),\r\n containerLifeCycle(),\r\n containerMethod(),\r\n jsx({\r\n nodeTypeMapping: {\r\n Div: 'div',\r\n Component: 'div',\r\n Page: 'div',\r\n Block: 'div',\r\n },\r\n }),\r\n css(),\r\n ],\r\n pages: [\r\n reactCommonDeps(),\r\n esmodule({\r\n fileType: 'jsx',\r\n }),\r\n styleImport(),\r\n containerClass(),\r\n containerInjectContext(),\r\n containerInjectUtils(),\r\n containerInjectDataSourceEngine(),\r\n containerInjectI18n(),\r\n containerInjectConstants(),\r\n containerInitState(),\r\n containerLifeCycle(),\r\n containerMethod(),\r\n jsx({\r\n nodeTypeMapping: {\r\n Div: 'div',\r\n Component: 'div',\r\n Page: 'div',\r\n Block: 'div',\r\n // Box: 'div',\r\n },\r\n }),\r\n css(),\r\n ],\r\n router: [esmodule(), icejs.plugins.router()],\r\n entry: [icejs.plugins.entry()],\r\n constants: [constants()],\r\n utils: [esmodule(), utils('react')],\r\n i18n: [i18n()],\r\n globalStyle: [icejs.plugins.globalStyle()],\r\n htmlEntry: [icejs.plugins.entryHtml()],\r\n packageJSON: [icejs.plugins.packageJSON()],\r\n },\r\n postProcessors: [prettier()],\r\n customizeBuilderOptions: options?.customizeBuilderOptions,\r\n });\r\n}\r\n\r\nexport const plugins = {\r\n containerClass,\r\n containerInjectContext,\r\n containerInjectUtils,\r\n containerInjectDataSourceEngine,\r\n containerInjectI18n,\r\n containerInjectConstants,\r\n containerInitState,\r\n containerLifeCycle,\r\n containerMethod,\r\n jsx,\r\n commonDeps: reactCommonDeps,\r\n\r\n /** @deprecated Please use commonDeps */\r\n reactCommonDeps,\r\n};\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n '.gitignore',\r\n '',\r\n `\r\n# See https://help.github.com/ignore-files/ for more about ignoring files.\r\n\r\n# dependencies\r\nnode_modules/\r\n\r\n# production\r\nbuild/\r\ndist/\r\ntmp/\r\nlib/\r\n\r\n# misc\r\n.idea/\r\n.happypack\r\n.DS_Store\r\n*.swp\r\n*.dia~\r\n.ice\r\n\r\nnpm-debug.log*\r\nyarn-debug.log*\r\nyarn-error.log*\r\nindex.module.scss.d.ts\r\n `,\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'README',\r\n 'md',\r\n 'This project is generated by lowcode-code-generator & lowcode-solution-icejs3.',\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n '.browserslistrc',\r\n '',\r\n `defaults\r\nios_saf 9\r\n `,\r\n );\r\n\r\n return [[], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'typings.d',\r\n 'ts',\r\n `/// <reference types=\"@ice/app/types\" />\r\n\r\nexport {};\r\ndeclare global {\r\n interface Window {\r\n g_config: Record<string, any>;\r\n }\r\n}\r\n `,\r\n );\r\n\r\n return [['src'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../utils/resultHelper';\r\n\r\n/* eslint-disable max-len */\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'document',\r\n 'tsx',\r\n `import React from 'react';\r\nimport { Meta, Title, Links, Main, Scripts } from 'ice';\r\n\r\nexport default function Document() {\r\n return (\r\n <html>\r\n <head>\r\n <meta charSet=\"utf-8\" />\r\n <meta name=\"description\" content=\"ice.js 3 lite scaffold\" />\r\n <link rel=\"icon\" href=\"/favicon.ico\" />\r\n <link rel=\"stylesheet\" href=\"//alifd.alicdn.com/npm/@alifd/next/1.21.16/next.min.css\" />\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\" />\r\n <Meta />\r\n <Title />\r\n <Links />\r\n </head>\r\n <body>\r\n <Main />\r\n <script crossOrigin=\"anonymous\" src=\"//g.alicdn.com/code/lib/react/18.2.0/umd/react.development.js\" />\r\n <script crossOrigin=\"anonymous\" src=\"//g.alicdn.com/code/lib/react-dom/18.2.0/umd/react-dom.development.js\" />\r\n <script crossOrigin=\"anonymous\" src=\"//g.alicdn.com/code/lib/??react-router/6.9.0/react-router.production.min.js,react-router-dom/6.9.0/react-router-dom.production.min.js\" />\r\n <script crossOrigin=\"anonymous\" src=\"//g.alicdn.com/code/lib/alifd__next/1.26.22/next.min.js\" />\r\n <script crossOrigin=\"anonymous\" src=\"//g.alicdn.com/code/lib/prop-types/15.7.2/prop-types.js\" />\r\n <script crossOrigin=\"anonymous\" src=\"//g.alicdn.com/platform/c/??lodash/4.6.1/lodash.min.js,immutable/3.7.6/dist/immutable.min.js\" />\r\n <Scripts />\r\n </body>\r\n </html>\r\n );\r\n}`,\r\n );\r\n\r\n return [['src'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'index',\r\n 'jsx',\r\n `\r\nimport React from 'react';\r\nimport styles from './index.module.scss';\r\n\r\nexport default function Footer() {\r\n return (\r\n <p className={styles.footer}>\r\n <span className={styles.logo}>Alibaba Fusion</span>\r\n <br />\r\n <span className={styles.copyright}>\u00A9 2019-\u73B0\u5728 Alibaba Fusion & ICE</span>\r\n </p>\r\n );\r\n}\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout', 'components', 'Footer'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'index',\r\n 'module.scss',\r\n `\r\n.footer {\r\n line-height: 20px;\r\n text-align: center;\r\n}\r\n\r\n.logo {\r\n font-weight: bold;\r\n font-size: 16px;\r\n}\r\n\r\n.copyright {\r\n font-size: 12px;\r\n}\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout', 'components', 'Footer'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'index',\r\n 'jsx',\r\n `\r\nimport React from 'react';\r\nimport { Link } from 'ice';\r\nimport styles from './index.module.scss';\r\n\r\nexport default function Logo({ image, text, url }) {\r\n return (\r\n <div className=\"logo\">\r\n <Link to={url || '/'} className={styles.logo}>\r\n {image && <img src={image} alt=\"logo\" />}\r\n <span>{text}</span>\r\n </Link>\r\n </div>\r\n );\r\n}\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout', 'components', 'Logo'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'index',\r\n 'module.scss',\r\n `\r\n.logo{\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n color: #FF7300;\r\n font-weight: bold;\r\n font-size: 14px;\r\n line-height: 22px;\r\n\r\n &:visited, &:link {\r\n color: #FF7300;\r\n }\r\n\r\n img {\r\n height: 24px;\r\n margin-right: 10px;\r\n }\r\n}\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout', 'components', 'Logo'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'index',\r\n 'jsx',\r\n `import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { Link, useLocation } from 'ice';\r\nimport { Nav } from '@alifd/next';\r\nimport { asideMenuConfig } from '../../menuConfig';\r\n\r\nconst { SubNav } = Nav;\r\nconst NavItem = Nav.Item;\r\n\r\nfunction getNavMenuItems(menusData) {\r\n if (!menusData) {\r\n return [];\r\n }\r\n\r\n return menusData\r\n .filter(item => item.name && !item.hideInMenu)\r\n .map((item, index) => getSubMenuOrItem(item, index));\r\n}\r\n\r\nfunction getSubMenuOrItem(item, index) {\r\n if (item.children && item.children.some(child => child.name)) {\r\n const childrenItems = getNavMenuItems(item.children);\r\n\r\n if (childrenItems && childrenItems.length > 0) {\r\n const subNav = (\r\n <SubNav key={index} icon={item.icon} label={item.name}>\r\n {childrenItems}\r\n </SubNav>\r\n );\r\n return subNav;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n const navItem = (\r\n <NavItem key={item.path} icon={item.icon}>\r\n <Link to={item.path}>{item.name}</Link>\r\n </NavItem>\r\n );\r\n return navItem;\r\n}\r\n\r\nconst Navigation = (props, context) => {\r\n const location = useLocation();\r\n const { pathname } = location;\r\n const { isCollapse } = context;\r\n return (\r\n <Nav\r\n type=\"primary\"\r\n selectedKeys={[pathname]}\r\n defaultSelectedKeys={[pathname]}\r\n embeddable\r\n openMode=\"single\"\r\n iconOnly={isCollapse}\r\n hasArrow={false}\r\n mode={isCollapse ? 'popup' : 'inline'}\r\n >\r\n {getNavMenuItems(asideMenuConfig)}\r\n </Nav>\r\n );\r\n};\r\n\r\nNavigation.contextTypes = {\r\n isCollapse: PropTypes.bool,\r\n};\r\nexport default Navigation;\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout', 'components', 'PageNav'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'index',\r\n 'jsx',\r\n `\r\nimport React, { useState } from 'react';\r\nimport { Shell, ConfigProvider } from '@alifd/next';\r\nimport PageNav from './components/PageNav';\r\nimport Logo from './components/Logo';\r\nimport Footer from './components/Footer';\r\n\r\n(function() {\r\n const throttle = function(type, name, obj = window) {\r\n let running = false;\r\n\r\n const func = () => {\r\n if (running) {\r\n return;\r\n }\r\n\r\n running = true;\r\n requestAnimationFrame(() => {\r\n obj.dispatchEvent(new CustomEvent(name));\r\n running = false;\r\n });\r\n };\r\n\r\n obj.addEventListener(type, func);\r\n };\r\n\r\n throttle('resize', 'optimizedResize');\r\n})();\r\n\r\nexport default function BasicLayout({ children }) {\r\n const getDevice = width => {\r\n const isPhone =\r\n typeof navigator !== 'undefined' && navigator && navigator.userAgent.match(/phone/gi);\r\n\r\n if (width < 680 || isPhone) {\r\n return 'phone';\r\n }\r\n if (width < 1280 && width > 680) {\r\n return 'tablet';\r\n }\r\n return 'desktop';\r\n };\r\n\r\n const [device, setDevice] = useState(getDevice(NaN));\r\n window.addEventListener('optimizedResize', e => {\r\n setDevice(getDevice(e && e.target && e.target.innerWidth));\r\n });\r\n return (\r\n <ConfigProvider device={device}>\r\n <Shell\r\n type=\"dark\"\r\n style={{\r\n minHeight: '100vh',\r\n }}\r\n >\r\n <Shell.Branding>\r\n <Logo\r\n image=\"https://img.alicdn.com/tfs/TB1.ZBecq67gK0jSZFHXXa9jVXa-904-826.png\"\r\n text=\"Logo\"\r\n />\r\n </Shell.Branding>\r\n <Shell.Navigation\r\n direction=\"hoz\"\r\n style={{\r\n marginRight: 10,\r\n }}\r\n ></Shell.Navigation>\r\n <Shell.Action></Shell.Action>\r\n <Shell.Navigation>\r\n <PageNav />\r\n </Shell.Navigation>\r\n\r\n <Shell.Content>{children}</Shell.Content>\r\n <Shell.Footer>\r\n <Footer />\r\n </Shell.Footer>\r\n </Shell>\r\n </ConfigProvider>\r\n );\r\n}\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'menuConfig',\r\n 'js',\r\n `\r\nconst headerMenuConfig = [];\r\nconst asideMenuConfig = [\r\n {\r\n name: 'Dashboard',\r\n path: '/',\r\n icon: 'smile',\r\n },\r\n];\r\nexport { headerMenuConfig, asideMenuConfig };\r\n `,\r\n );\r\n\r\n return [['src', 'layouts', 'BasicLayout'], file];\r\n}\r\n", "import { ResultDir } from '@alilc/lowcode-types';\r\nimport { createResultDir } from '../../../../../utils/resultHelper';\r\nimport { runFileGenerator } from '../../../../../utils/templateHelper';\r\n\r\nimport file1 from './files/gitignore';\r\nimport file2 from './files/README.md';\r\nimport file3 from './files/browserslistrc';\r\nimport file4 from './files/typings';\r\nimport file5 from './files/document';\r\nimport file6 from './files/src/layouts/BasicLayout/components/Footer/index.jsx';\r\nimport file7 from './files/src/layouts/BasicLayout/components/Footer/index.style';\r\nimport file8 from './files/src/layouts/BasicLayout/components/Logo/index.jsx';\r\nimport file9 from './files/src/layouts/BasicLayout/components/Logo/index.style';\r\nimport file10 from './files/src/layouts/BasicLayout/components/PageNav/index.jsx';\r\nimport file11 from './files/src/layouts/BasicLayout/index.jsx';\r\nimport file12 from './files/src/layouts/BasicLayout/menuConfig.js';\r\n\r\nexport function generateStaticFiles(root = createResultDir('.')): ResultDir {\r\n runFileGenerator(root, file1);\r\n runFileGenerator(root, file2);\r\n runFileGenerator(root, file3);\r\n runFileGenerator(root, file4);\r\n runFileGenerator(root, file5);\r\n runFileGenerator(root, file6);\r\n runFileGenerator(root, file7);\r\n runFileGenerator(root, file8);\r\n runFileGenerator(root, file9);\r\n runFileGenerator(root, file10);\r\n runFileGenerator(root, file11);\r\n runFileGenerator(root, file12);\r\n\r\n return root;\r\n}\r\n", "import { IProjectTemplate } from '../../../../../types';\r\nimport { generateStaticFiles } from './static-files';\r\n\r\nconst icejs3Template: IProjectTemplate = {\r\n slots: {\r\n components: {\r\n path: ['src', 'components'],\r\n fileName: 'index',\r\n },\r\n pages: {\r\n path: ['src', 'pages'],\r\n fileName: 'index',\r\n },\r\n entry: {\r\n path: ['src'],\r\n fileName: 'app',\r\n },\r\n constants: {\r\n path: ['src'],\r\n fileName: 'constants',\r\n },\r\n utils: {\r\n path: ['src'],\r\n fileName: 'utils',\r\n },\r\n i18n: {\r\n path: ['src'],\r\n fileName: 'i18n',\r\n },\r\n globalStyle: {\r\n path: ['src'],\r\n fileName: 'global',\r\n },\r\n packageJSON: {\r\n path: [],\r\n fileName: 'package',\r\n },\r\n appConfig: {\r\n path: ['src'],\r\n fileName: 'app',\r\n },\r\n buildConfig: {\r\n path: [],\r\n fileName: 'ice.config',\r\n },\r\n layout: {\r\n path: ['src', 'pages'],\r\n fileName: 'layout',\r\n },\r\n },\r\n\r\n generateTemplate() {\r\n return generateStaticFiles();\r\n },\r\n};\r\n\r\nexport default icejs3Template;\r\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IProjectInfo,\r\n} from '../../../../../types';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IProjectInfo;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.SCSS,\r\n name: COMMON_CHUNK_NAME.StyleDepsImport,\r\n content: `\r\n // \u5F15\u5165\u9ED8\u8BA4\u5168\u5C40\u6837\u5F0F\r\n @import '@alifd/next/reset.scss';\r\n `,\r\n linkAfter: [],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.SCSS,\r\n name: COMMON_CHUNK_NAME.StyleCssContent,\r\n content: `\r\n body {\r\n -webkit-font-smoothing: antialiased;\r\n }\r\n `,\r\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.SCSS,\r\n name: COMMON_CHUNK_NAME.StyleCssContent,\r\n content: ir.css || '',\r\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { PackageJSON } from '@alilc/lowcode-types';\r\n\r\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IProjectInfo,\r\n} from '../../../../../types';\r\nimport { buildDataSourceDependencies } from '../../../../../utils/dataSource';\r\n\r\ninterface IIceJs3PackageJSON extends PackageJSON {\r\n originTemplate: string;\r\n}\r\n\r\nexport type IceJs3PackageJsonPluginConfig = {\r\n\r\n /**\r\n * \u6570\u636E\u6E90\u914D\u7F6E\r\n */\r\n datasourceConfig?: {\r\n\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\r\n engineVersion?: string;\r\n\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\r\n enginePackage?: string;\r\n\r\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\r\n handlersVersion?: {\r\n [key: string]: string;\r\n };\r\n\r\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\r\n handlersPackages?: {\r\n [key: string]: string;\r\n };\r\n };\r\n\r\n /** \u5305\u540D */\r\n packageName?: string;\r\n\r\n /** \u7248\u672C */\r\n packageVersion?: string;\r\n};\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<IceJs3PackageJsonPluginConfig> = (cfg) => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IProjectInfo;\r\n\r\n const packageJson: IIceJs3PackageJSON = {\r\n name: cfg?.packageName || 'icejs3-demo-app',\r\n version: cfg?.packageVersion || '0.1.5',\r\n description: 'icejs 3 \u8F7B\u91CF\u7EA7\u6A21\u677F\uFF0C\u4F7F\u7528 JavaScript\uFF0C\u4EC5\u5305\u542B\u57FA\u7840\u7684 Layout\u3002',\r\n dependencies: {\r\n moment: '^2.24.0',\r\n react: '^18.2.0',\r\n 'react-dom': '^18.2.0',\r\n 'react-router': '^6.9.0',\r\n 'react-router-dom': '^6.9.0',\r\n 'intl-messageformat': '^9.3.6',\r\n '@alifd/next': '1.26.15',\r\n '@ice/runtime': '~1.1.0',\r\n // \u6570\u636E\u6E90\u76F8\u5173\u7684\u4F9D\u8D56:\r\n ...buildDataSourceDependencies(ir, cfg?.datasourceConfig),\r\n },\r\n devDependencies: {\r\n '@ice/app': '~3.1.0',\r\n '@types/react': '^18.0.0',\r\n '@types/react-dom': '^18.0.0',\r\n '@types/node': '^18.11.17',\r\n '@ice/plugin-fusion': '^1.0.1',\r\n '@ice/plugin-moment-locales': '^1.0.0',\r\n eslint: '^6.0.1',\r\n stylelint: '^13.2.0',\r\n },\r\n scripts: {\r\n start: 'ice start',\r\n build: 'ice build',\r\n lint: 'npm run eslint && npm run stylelint',\r\n eslint: 'eslint --cache --ext .js,.jsx ./',\r\n stylelint: 'stylelint ./**/*.scss',\r\n },\r\n engines: {\r\n node: '>=14.0.0',\r\n },\r\n repository: {\r\n type: 'git',\r\n url: 'http://gitlab.xxx.com/msd/leak-scan/tree/master',\r\n },\r\n private: true,\r\n originTemplate: '@alifd/scaffold-lite-js',\r\n };\r\n\r\n ir.packages.forEach((packageInfo) => {\r\n packageJson.dependencies[packageInfo.package] = packageInfo.version;\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.JSON,\r\n fileType: FileType.JSON,\r\n name: COMMON_CHUNK_NAME.FileMainContent,\r\n content: packageJson,\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n} from '../../../../../types';\r\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.FileMainContent,\r\n content: `\r\n import { Outlet } from 'ice';\r\n import BasicLayout from '@/layouts/BasicLayout';\r\n\r\n export default function Layout() {\r\n return (\r\n <BasicLayout>\r\n <Outlet />\r\n </BasicLayout>\r\n );;\r\n }\r\n `,\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n} from '../../../../../types';\r\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nexport interface AppConfigPluginConfig {\r\n\r\n}\r\n\r\nfunction getContent() {\r\n return `import { defineAppConfig } from 'ice';\r\n\r\n// App config, see https://v3.ice.work/docs/guide/basic/app\r\nexport default defineAppConfig(() => ({\r\n // Set your configs here.\r\n app: {\r\n rootId: 'App',\r\n },\r\n router: {\r\n type: 'browser',\r\n basename: '/',\r\n },\r\n}));`;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<AppConfigPluginConfig> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.TS,\r\n name: COMMON_CHUNK_NAME.FileMainContent,\r\n content: getContent(),\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import prettier from 'prettier';\r\nimport parserBabel from 'prettier/parser-babel';\r\n\r\nexport function format(content: string, options = {}) {\r\n return prettier.format(content, {\r\n parser: 'babel',\r\n plugins: [parserBabel],\r\n singleQuote: true,\r\n jsxSingleQuote: false,\r\n ...options,\r\n });\r\n}\r\n", "/**\r\n * \u83B7\u53D6\u4E3B\u9898\u4FE1\u606F\r\n * @param theme theme \u5F62\u5982 @alife/theme-97 \u6216\u8005 @alife/theme-97@^1.0.0\r\n */\r\n\r\nexport interface ThemeInfo {\r\n name: string;\r\n version?: string;\r\n}\r\n\r\nexport function getThemeInfo(theme: string): ThemeInfo {\r\n const sepIdx = theme.indexOf('@', 1);\r\n if (sepIdx === -1) {\r\n return { name: theme };\r\n }\r\n return {\r\n name: theme.slice(0, sepIdx),\r\n version: theme.slice(sepIdx + 1),\r\n };\r\n}", "import {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n} from '../../../../../types';\r\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\nimport { format } from '../../../../../utils/format';\r\nimport { getThemeInfo } from '../../../../../utils/theme';\r\n\r\nexport interface BuildConfigPluginConfig {\r\n\r\n /** \u5305\u540D */\r\n themePackage?: string;\r\n}\r\n\r\nfunction getContent(cfg?: BuildConfigPluginConfig, routesContent?: string) {\r\n return `\r\nimport { join } from 'path';\r\nimport { defineConfig } from '@ice/app';\r\nimport _ from 'lodash';\r\nimport fusion from '@ice/plugin-fusion';\r\nimport locales from '@ice/plugin-moment-locales';\r\nimport type { Plugin } from '@ice/app/esm/types';\r\n\r\ninterface PluginOptions {\r\n id: string;\r\n}\r\n\r\nconst plugin: Plugin<PluginOptions> = (options) => ({\r\n // name \u53EF\u9009\uFF0C\u63D2\u4EF6\u540D\u79F0\r\n name: 'plugin-name',\r\n // setup \u5FC5\u9009\uFF0C\u7528\u4E8E\u5B9A\u5236\u5DE5\u7A0B\u6784\u5EFA\u914D\u7F6E\r\n setup: ({ onGetConfig, modifyUserConfig }) => {\r\n modifyUserConfig('codeSplitting', 'page');\r\n\r\n onGetConfig((config) => {\r\n config.entry = {\r\n web: join(process.cwd(), '.ice/entry.client.tsx'),\r\n };\r\n\r\n config.cssFilename = '[name].css';\r\n\r\n config.configureWebpack = config.configureWebpack || [];\r\n config.configureWebpack?.push((webpackConfig) => {\r\n if (webpackConfig.output) {\r\n webpackConfig.output.filename = '[name].js';\r\n webpackConfig.output.chunkFilename = '[name].js';\r\n }\r\n return webpackConfig;\r\n });\r\n\r\n config.swcOptions = _.merge(config.swcOptions, {\r\n compilationConfig: {\r\n jsc: {\r\n transform: {\r\n react: {\r\n runtime: 'classic',\r\n },\r\n },\r\n },\r\n }\r\n });\r\n\r\n // \u89E3\u51B3 webpack publicPath \u95EE\u9898\r\n config.transforms = config.transforms || [];\r\n config.transforms.push((source: string, id: string) => {\r\n if (id.includes('.ice/entry.client.tsx')) {\r\n let code = \\`\r\n if (!__webpack_public_path__?.startsWith('http') && document.currentScript) {\r\n // @ts-ignore\r\n __webpack_public_path__ = document.currentScript.src.replace(/^(.*\\\\\\\\/)[^/]+$/, '$1');\r\n window.__ICE_ASSETS_MANIFEST__ = window.__ICE_ASSETS_MANIFEST__ || {};\r\n window.__ICE_ASSETS_MANIFEST__.publicPath = __webpack_public_path__;\r\n }\r\n \\`;\r\n code += source;\r\n return { code };\r\n }\r\n });\r\n });\r\n },\r\n});\r\n\r\n// The project config, see https://v3.ice.work/docs/guide/basic/config\r\nconst minify = process.env.NODE_ENV === 'production' ? 'swc' : false;\r\nexport default defineConfig(() => ({\r\n ssr: false,\r\n ssg: false,\r\n minify,\r\n ${routesContent}\r\n externals: {\r\n react: 'React',\r\n 'react-dom': 'ReactDOM',\r\n 'react-dom/client': 'ReactDOM',\r\n '@alifd/next': 'Next',\r\n lodash: 'var window._',\r\n '@alilc/lowcode-engine': 'var window.AliLowCodeEngine',\r\n },\r\n plugins: [\r\n fusion(${cfg?.themePackage ? `{\r\n importStyle: 'sass',\r\n themePackage: '${getThemeInfo(cfg.themePackage).name}',\r\n }` : `{\r\n importStyle: 'sass',\r\n }`}),\r\n locales(),\r\n plugin(),\r\n ]\r\n}));\r\n `;\r\n}\r\n\r\nfunction getRoutesContent(navData: any, needShell = true) {\r\n const routes = [\r\n 'routes: {',\r\n ' defineRoutes: route => {',\r\n ];\r\n function _getRoutes(nav: any, _routes: string[] = []) {\r\n const { slug, children } = nav;\r\n if (children && children.length > 0) {\r\n children.forEach((_nav: any) => _getRoutes(_nav, _routes));\r\n } else if (slug) {\r\n _routes.push(`route('/${slug}', '${slug}/index.jsx');`);\r\n }\r\n }\r\n if (needShell) {\r\n routes.push(\" route('/', 'layout.jsx', () => {\");\r\n }\r\n navData?.forEach((nav: any) => {\r\n _getRoutes(nav, routes);\r\n });\r\n if (needShell) {\r\n routes.push(' });');\r\n }\r\n routes.push(' }'); // end of defineRoutes\r\n routes.push(' },'); // end of routes\r\n return routes.join('\\n');\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<BuildConfigPluginConfig> = (cfg?) => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const { navConfig } = next.contextData;\r\n const routesContent = navConfig?.data ? getRoutesContent(navConfig.data, true) : '';\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.MTS,\r\n name: COMMON_CHUNK_NAME.FileMainContent,\r\n content: format(getContent(cfg, routesContent)),\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import template from './template';\r\nimport globalStyle from './plugins/globalStyle';\r\nimport packageJSON from './plugins/packageJSON';\r\nimport layout from './plugins/layout';\r\nimport appConfig from './plugins/appConfig';\r\nimport buildConfig from './plugins/buildConfig';\r\n\r\nexport default {\r\n template,\r\n plugins: {\r\n appConfig,\r\n buildConfig,\r\n globalStyle,\r\n packageJSON,\r\n layout,\r\n },\r\n};\r\n", "import { IProjectBuilder, IProjectBuilderOptions } from '../types';\r\n\r\nimport { createProjectBuilder } from '../generator/ProjectBuilder';\r\n\r\nimport esmodule from '../plugins/common/esmodule';\r\nimport styleImport from '../plugins/common/styleImport';\r\nimport containerClass from '../plugins/component/react/containerClass';\r\nimport containerInitState from '../plugins/component/react/containerInitState';\r\nimport containerInjectContext from '../plugins/component/react/containerInjectContext';\r\nimport containerInjectUtils from '../plugins/component/react/containerInjectUtils';\r\nimport containerInjectDataSourceEngine from '../plugins/component/react/containerInjectDataSourceEngine';\r\nimport containerInjectConstants from '../plugins/component/react/containerInjectConstants';\r\nimport containerInjectI18n from '../plugins/component/react/containerInjectI18n';\r\nimport containerLifeCycle from '../plugins/component/react/containerLifeCycle';\r\nimport containerMethod from '../plugins/component/react/containerMethod';\r\nimport jsx from '../plugins/component/react/jsx';\r\nimport reactCommonDeps from '../plugins/component/react/reactCommonDeps';\r\nimport css from '../plugins/component/style/css';\r\nimport constants from '../plugins/project/constants';\r\nimport i18n from '../plugins/project/i18n';\r\nimport utils from '../plugins/project/utils';\r\n\r\nimport icejs3 from '../plugins/project/framework/icejs3';\r\n\r\nimport { prettier } from '../postprocessor';\r\n\r\nexport type IceJs3ProjectBuilderOptions = IProjectBuilderOptions;\r\n\r\nexport default function createIceJsProjectBuilder(\r\n options?: IceJs3ProjectBuilderOptions,\r\n): IProjectBuilder {\r\n return createProjectBuilder({\r\n inStrictMode: options?.inStrictMode,\r\n extraContextData: { ...options },\r\n template: icejs3.template,\r\n plugins: {\r\n components: [\r\n reactCommonDeps(),\r\n esmodule({\r\n fileType: 'jsx',\r\n }),\r\n styleImport(),\r\n containerClass(),\r\n containerInjectContext(),\r\n containerInjectUtils(),\r\n containerInjectDataSourceEngine(),\r\n containerInjectI18n(),\r\n containerInjectConstants(),\r\n containerInitState(),\r\n containerLifeCycle(),\r\n containerMethod(),\r\n jsx({\r\n nodeTypeMapping: {\r\n Div: 'div',\r\n Component: 'div',\r\n Page: 'div',\r\n Block: 'div',\r\n },\r\n }),\r\n css(),\r\n ],\r\n pages: [\r\n reactCommonDeps(),\r\n esmodule({\r\n fileType: 'jsx',\r\n }),\r\n styleImport(),\r\n containerClass(),\r\n containerInjectContext(),\r\n containerInjectUtils(),\r\n containerInjectDataSourceEngine(),\r\n containerInjectI18n(),\r\n containerInjectConstants(),\r\n containerInitState(),\r\n containerLifeCycle(),\r\n containerMethod(),\r\n jsx({\r\n nodeTypeMapping: {\r\n Div: 'div',\r\n Component: 'div',\r\n Page: 'div',\r\n Block: 'div',\r\n Box: 'div',\r\n },\r\n }),\r\n css(),\r\n ],\r\n constants: [constants()],\r\n utils: [esmodule(), utils('react')],\r\n i18n: [i18n()],\r\n globalStyle: [icejs3.plugins.globalStyle()],\r\n packageJSON: [icejs3.plugins.packageJSON()],\r\n buildConfig: [icejs3.plugins.buildConfig()],\r\n appConfig: [icejs3.plugins.appConfig()],\r\n layout: [icejs3.plugins.layout()],\r\n },\r\n postProcessors: [prettier()],\r\n customizeBuilderOptions: options?.customizeBuilderOptions,\r\n });\r\n}\r\n\r\nexport const plugins = {\r\n containerClass,\r\n containerInitState,\r\n containerInjectContext,\r\n containerInjectUtils,\r\n containerInjectI18n,\r\n containerInjectDataSourceEngine,\r\n containerLifeCycle,\r\n containerMethod,\r\n jsx,\r\n commonDeps: reactCommonDeps,\r\n};\r\n", "import changeCase from 'change-case';\r\nimport {\r\n COMMON_CHUNK_NAME,\r\n CLASS_DEFINE_CHUNK_NAME,\r\n DEFAULT_LINK_AFTER,\r\n} from '../../../const/generator';\r\nimport { RAX_CHUNK_NAME } from './const';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\nimport { ensureValidClassName } from '../../../utils/validate';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n\r\n // \u5C06\u6A21\u5757\u540D\u8F6C\u6362\u6210 PascalCase \u7684\u683C\u5F0F\uFF0C\u5E76\u6DFB\u52A0\u7279\u5B9A\u540E\u7F00\uFF0C\u9632\u6B62\u547D\u540D\u51B2\u7A81\r\n const componentClassName = ensureValidClassName(\r\n `${changeCase.pascalCase(ir.moduleName)}$$Page`,\r\n );\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: CLASS_DEFINE_CHUNK_NAME.Start,\r\n content: `class ${componentClassName} extends Component {`,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n ],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: CLASS_DEFINE_CHUNK_NAME.End,\r\n content: '}',\r\n linkAfter: [\r\n CLASS_DEFINE_CHUNK_NAME.Start,\r\n CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\r\n RAX_CHUNK_NAME.ClassRenderEnd,\r\n RAX_CHUNK_NAME.MethodsEnd,\r\n ],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorStart,\r\n content: 'constructor(props, context) { super(props); ',\r\n linkAfter: DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorStart],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorEnd,\r\n content: '} /* end of constructor */',\r\n linkAfter: DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorEnd],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: RAX_CHUNK_NAME.ClassDidMountBegin,\r\n content: 'componentDidMount() {',\r\n linkAfter: [\r\n CLASS_DEFINE_CHUNK_NAME.Start,\r\n CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n CLASS_DEFINE_CHUNK_NAME.InsMethod,\r\n CLASS_DEFINE_CHUNK_NAME.ConstructorEnd,\r\n ],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: RAX_CHUNK_NAME.ClassDidMountEnd,\r\n content: '} /* end of componentDidMount */',\r\n linkAfter: [RAX_CHUNK_NAME.ClassDidMountBegin, RAX_CHUNK_NAME.ClassDidMountContent],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: RAX_CHUNK_NAME.ClassWillUnmountBegin,\r\n content: 'componentWillUnmount() {',\r\n linkAfter: [\r\n CLASS_DEFINE_CHUNK_NAME.Start,\r\n CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n CLASS_DEFINE_CHUNK_NAME.InsMethod,\r\n RAX_CHUNK_NAME.ClassDidMountEnd,\r\n ],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: RAX_CHUNK_NAME.ClassWillUnmountEnd,\r\n content: '} /* end of componentWillUnmount */',\r\n linkAfter: [RAX_CHUNK_NAME.ClassWillUnmountBegin, RAX_CHUNK_NAME.ClassWillUnmountContent],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: RAX_CHUNK_NAME.ClassRenderBegin,\r\n content: 'render() {',\r\n linkAfter: [RAX_CHUNK_NAME.ClassDidMountEnd, RAX_CHUNK_NAME.ClassWillUnmountEnd],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: RAX_CHUNK_NAME.ClassRenderEnd,\r\n content: '} /* end of render */',\r\n linkAfter: [\r\n RAX_CHUNK_NAME.ClassRenderBegin,\r\n RAX_CHUNK_NAME.ClassRenderPre,\r\n RAX_CHUNK_NAME.ClassRenderJSX,\r\n ],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.FileExport,\r\n content: `export default ${componentClassName};`,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n CLASS_DEFINE_CHUNK_NAME.End,\r\n ],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "export const RAX_CHUNK_NAME = {\r\n ClassDidMountBegin: 'RaxComponentClassDidMountBegin',\r\n ClassDidMountContent: 'RaxComponentClassDidMountContent',\r\n ClassDidMountEnd: 'RaxComponentClassDidMountEnd',\r\n ClassWillUnmountBegin: 'RaxComponentClassWillUnmountBegin',\r\n ClassWillUnmountContent: 'RaxComponentClassWillUnmountContent',\r\n ClassWillUnmountEnd: 'RaxComponentClassWillUnmountEnd',\r\n ClassRenderBegin: 'RaxComponentClassRenderBegin',\r\n ClassRenderPre: 'RaxComponentClassRenderPre',\r\n ClassRenderJSX: 'RaxComponentClassRenderJSX',\r\n ClassRenderEnd: 'RaxComponentClassRenderEnd',\r\n MethodsBegin: 'RaxComponentMethodsBegin',\r\n MethodsContent: 'RaxComponentMethodsContent',\r\n MethodsEnd: 'RaxComponentMethodsEnd',\r\n LifeCyclesBegin: 'RaxComponentLifeCyclesBegin',\r\n LifeCyclesContent: 'RaxComponentLifeCyclesContent',\r\n LifeCyclesEnd: 'RaxComponentLifeCyclesEnd',\r\n};\r\n", "import _ from 'lodash';\r\nimport { isJSExpression, isJSFunction } from '@alilc/lowcode-types';\r\n\r\nimport { CLASS_DEFINE_CHUNK_NAME } from '../../../const/generator';\r\nimport { RAX_CHUNK_NAME } from './const';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n FileType,\r\n ChunkType,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\nimport { debug } from '../../../utils/debug';\r\nimport { isJSExpressionFn } from '../../../utils/common';\r\n\r\nexport interface PluginConfig {\r\n fileType: string;\r\n exportNameMapping: Record<string, string>;\r\n normalizeNameMapping: Record<string, string>;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.JSX,\r\n exportNameMapping: {},\r\n normalizeNameMapping: {\r\n didMount: 'componentDidMount',\r\n willUnmount: 'componentWillUnmount',\r\n },\r\n ...config,\r\n };\r\n\r\n const exportNameMapping = new Map(Object.entries(cfg.exportNameMapping));\r\n const normalizeNameMapping = new Map(Object.entries(cfg.normalizeNameMapping));\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n // Rax \u5148\u53EA\u652F\u6301 didMount \u548C willUnmount \u5427\r\n\r\n const ir = next.ir as IContainerInfo;\r\n const { lifeCycles } = ir;\r\n\r\n if (lifeCycles && !_.isEmpty(lifeCycles)) {\r\n Object.entries(lifeCycles).forEach(([lifeCycleName, lifeCycleMethodExpr]) => {\r\n // \u8FC7\u6EE4\u6389\u975E\u6CD5\u6570\u636E\uFF08\u6709\u4E9B\u573A\u666F\u4E0B\u4F1A\u8BEF\u4F20\u5165\u7A7A\u5B57\u7B26\u4E32\u6216 null)\r\n if (\r\n !isJSFunction(lifeCycles[lifeCycleName]) &&\r\n !isJSExpressionFn(lifeCycles[lifeCycleName]) &&\r\n !isJSExpression(lifeCycles[lifeCycleName])\r\n ) {\r\n return;\r\n }\r\n\r\n const normalizeName = normalizeNameMapping.get(lifeCycleName) || lifeCycleName;\r\n const exportName = exportNameMapping.get(lifeCycleName) || lifeCycleName;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: RAX_CHUNK_NAME.LifeCyclesContent,\r\n content: `${exportName}: (${lifeCycleMethodExpr.value}),`,\r\n linkAfter: [RAX_CHUNK_NAME.LifeCyclesBegin],\r\n });\r\n\r\n if (normalizeName === 'constructor') {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\r\n content: `this._lifeCycles.${exportName}();`,\r\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.ConstructorStart],\r\n });\r\n } else if (normalizeName === 'componentDidMount') {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: RAX_CHUNK_NAME.ClassDidMountContent,\r\n content: `this._lifeCycles.${exportName}();`,\r\n linkAfter: [RAX_CHUNK_NAME.ClassDidMountBegin],\r\n });\r\n } else if (normalizeName === 'componentWillUnmount') {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: RAX_CHUNK_NAME.ClassWillUnmountContent,\r\n content: `this._lifeCycles.${exportName}();`,\r\n linkAfter: [RAX_CHUNK_NAME.ClassWillUnmountBegin],\r\n });\r\n } else {\r\n debug(`[CodeGen]: unknown life cycle: ${lifeCycleName}`);\r\n }\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n content: '_lifeCycles = this._defineLifeCycles();',\r\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: RAX_CHUNK_NAME.LifeCyclesBegin,\r\n content: `\r\n _defineLifeCycles() {\r\n const __$$lifeCycles = ({\r\n `,\r\n linkAfter: [RAX_CHUNK_NAME.ClassRenderEnd, CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: RAX_CHUNK_NAME.LifeCyclesEnd,\r\n content: `\r\n });\r\n\r\n // \u4E3A\u6240\u6709\u7684\u65B9\u6CD5\u7ED1\u5B9A\u4E0A\u4E0B\u6587\r\n Object.entries(__$$lifeCycles).forEach(([lifeCycleName, lifeCycleMethod]) => {\r\n if (typeof lifeCycleMethod === 'function') {\r\n __$$lifeCycles[lifeCycleName] = (...args) => {\r\n return lifeCycleMethod.apply(this._context, args);\r\n }\r\n }\r\n });\r\n\r\n return __$$lifeCycles;\r\n }\r\n `,\r\n linkAfter: [RAX_CHUNK_NAME.LifeCyclesBegin, RAX_CHUNK_NAME.LifeCyclesContent],\r\n });\r\n }\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import createDebug from 'debug';\r\n\r\nexport const debug = createDebug('code-generator');\r\n", "import { CLASS_DEFINE_CHUNK_NAME } from '../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\n\r\nimport { RAX_CHUNK_NAME } from './const';\r\n\r\nexport interface PluginConfig {\r\n fileType: string;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.JSX,\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n content: `\r\n _methods = this._defineMethods();\r\n `,\r\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: RAX_CHUNK_NAME.MethodsBegin,\r\n content: `\r\n _defineMethods() {\r\n return ({\r\n `,\r\n linkAfter: [\r\n RAX_CHUNK_NAME.ClassRenderEnd,\r\n CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\r\n RAX_CHUNK_NAME.LifeCyclesEnd,\r\n ],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: RAX_CHUNK_NAME.MethodsEnd,\r\n content: `\r\n });\r\n }\r\n `,\r\n linkAfter: [RAX_CHUNK_NAME.MethodsBegin, RAX_CHUNK_NAME.MethodsContent],\r\n });\r\n\r\n if (ir.methods && Object.keys(ir.methods).length > 0) {\r\n Object.entries(ir.methods).forEach(([methodName, methodDefine]) => {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: RAX_CHUNK_NAME.MethodsContent,\r\n content: `${methodName}: (${methodDefine.value}),`,\r\n linkAfter: [RAX_CHUNK_NAME.MethodsBegin],\r\n });\r\n });\r\n }\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { CLASS_DEFINE_CHUNK_NAME, DEFAULT_LINK_AFTER } from '../../../const/generator';\r\n\r\nimport { generateCompositeType } from '../../../utils/compositeType';\r\nimport { Scope } from '../../../utils/Scope';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\n\r\nexport interface PluginConfig {\r\n fileType: string;\r\n implementType: 'inConstructor' | 'insMember' | 'hooks';\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.JSX,\r\n implementType: 'insMember',\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n const scope = Scope.createRootScope();\r\n\r\n const state = ir.state || {};\r\n const fields = Object.keys(state).map<string>((stateName) => {\r\n // TODO: \u8FD9\u91CC\u7528\u4EC0\u4E48 handlers?\r\n const value = generateCompositeType(state[stateName], scope);\r\n return `${JSON.stringify(stateName)}: ${value}`;\r\n });\r\n\r\n if (cfg.implementType === 'inConstructor') {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\r\n content: `this.state = { ${fields.join(',')} };`,\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],\r\n });\r\n } else if (cfg.implementType === 'insMember') {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n content: `state = { ${fields.join(',')} };`,\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]],\r\n });\r\n }\r\n // TODO: hooks state??\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "/* eslint-disable @typescript-eslint/indent */\r\nimport { CLASS_DEFINE_CHUNK_NAME, COMMON_CHUNK_NAME } from '../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\nimport { RAX_CHUNK_NAME } from './const';\r\nimport { DEFAULT_LINK_AFTER } from '../../../const';\r\n\r\nexport interface PluginConfig {\r\n fileType: string;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.JSX,\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n const useRef = !!ir.analyzeResult?.isUsingRef;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: \"import __$$constants from '../../constants';\",\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n\r\n // TODO: i18n \u662F\u53EF\u9009\u7684\uFF0C\u5982\u679C\u6CA1\u6709 i18n \u8FD9\u4E2A\u6587\u4EF6\u600E\u4E48\u529E\uFF1F\u8BE5\u600E\u4E48\u5224\u65AD\uFF1F\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: \"import * as __$$i18n from '../../i18n';\",\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\r\n content: `\r\n __$$i18n._inject2(this);\r\n `,\r\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n content: `\r\n _context = this._createContext();\r\n `,\r\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\r\n });\r\n\r\n // TODO: \u6309\u7167\u76EE\u524D\u7684\u5B9E\u73B0\u65B9\u6848\uFF0C\u4EE3\u7801\u7684\u63D2\u62D4\u80FD\u529B\u592A\u5F31\u4E86\uFF0C\u9700\u8981\u6709\u4E00\u4E9B\u53D8\u5316\u3002\r\n // Step 1: \u589E\u52A0\u524D\u7F6E\u7684\u5206\u6790\u5668\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\r\n content: `\r\n _createContext() {\r\n const self = this;\r\n const context = {\r\n get state() {\r\n return self.state;\r\n },\r\n setState(newState, callback) {\r\n self.setState(newState, callback);\r\n },\r\n get dataSourceMap() {\r\n return self._dataSourceEngine.dataSourceMap || {};\r\n },\r\n async reloadDataSource() {\r\n await self._dataSourceEngine.reloadDataSource();\r\n },\r\n get utils() {\r\n return self._utils;\r\n },\r\n get page() {\r\n return context;\r\n },\r\n get component() {\r\n return context;\r\n },\r\n get props() {\r\n return self.props;\r\n },\r\n get constants() {\r\n return __$$constants;\r\n },\r\n i18n: __$$i18n.i18n,\r\n i18nFormat: __$$i18n.i18nFormat,\r\n getLocale: __$$i18n.getLocale,\r\n setLocale(locale) {\r\n __$$i18n.setLocale(locale);\r\n self.forceUpdate();\r\n },${\r\n useRef\r\n ? `\r\n $(refName) {\r\n return self._refsManager.get(refName);\r\n },\r\n $$(refName) {\r\n return self._refsManager.getAll(refName);\r\n },\r\n get _refsManager() {\r\n if (!self._refsManager) {\r\n self._refsManager = new RefsManager();\r\n }\r\n return self._refsManager;\r\n },\r\n `\r\n : ''\r\n }\r\n ...this._methods,\r\n };\r\n\r\n return context;\r\n }\r\n `,\r\n linkAfter: [RAX_CHUNK_NAME.ClassRenderEnd],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "/* eslint-disable @typescript-eslint/indent */\r\n\r\nimport {\r\n IPublicTypeCompositeValue,\r\n IPublicTypeJSExpression,\r\n InterpretDataSourceConfig,\r\n isJSExpression,\r\n isJSFunction,\r\n} from '@alilc/lowcode-types';\r\nimport changeCase from 'change-case';\r\n\r\nimport { CLASS_DEFINE_CHUNK_NAME, COMMON_CHUNK_NAME } from '../../../const/generator';\r\nimport { Scope } from '../../../utils/Scope';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IScope,\r\n} from '../../../types';\r\n\r\nimport { generateCompositeType } from '../../../utils/compositeType';\r\nimport { parseExpressionConvertThis2Context } from '../../../utils/expressionParser';\r\nimport { isContainerSchema } from '../../../utils/schema';\r\nimport { RaxFrameworkOptions } from '../../project/framework/rax/types/RaxFrameworkOptions';\r\nimport { RAX_CHUNK_NAME } from './const';\r\n\r\nexport interface PluginConfig extends RaxFrameworkOptions {\r\n fileType?: string;\r\n\r\n /**\r\n * \u6570\u636E\u6E90\u7684 handlers \u7684\u6620\u5C04\u914D\u7F6E\r\n * @deprecated \u8BF7\u4F7F\u7528 datasourceConfig.handlersPackages \u6765\u914D\u7F6E\r\n */\r\n dataSourceHandlersPackageMap?: Record<string, string>;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.JSX,\r\n ...config,\r\n dataSourceHandlersPackageMap:\r\n config?.dataSourceHandlersPackageMap || config?.datasourceConfig?.handlersPackages,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const scope = Scope.createRootScope();\r\n const dataSourceConfig = isContainerSchema(pre.ir) ? pre.ir.dataSource : null;\r\n const dataSourceItems: InterpretDataSourceConfig[] =\r\n (dataSourceConfig && dataSourceConfig.list) || [];\r\n const dataSourceEngineOptions = { runtimeConfig: true };\r\n if (dataSourceItems.length > 0) {\r\n const requestHandlersMap: Record<string, IPublicTypeJSExpression> = {};\r\n\r\n dataSourceItems.forEach((ds) => {\r\n const dsType = ds.type || 'fetch';\r\n if (!(dsType in requestHandlersMap) && dsType !== 'custom') {\r\n const handlerFactoryName = `__$$create${changeCase.pascal(dsType)}RequestHandler`;\r\n\r\n requestHandlersMap[dsType] = {\r\n type: 'JSExpression',\r\n value: `${handlerFactoryName}(${\r\n dsType === 'urlParams' ? '__$$getSearchParams()' : ''\r\n })`,\r\n };\r\n\r\n const handlerFactoryExportName = `create${changeCase.pascal(dsType)}Handler`;\r\n const handlerPkgName =\r\n cfg.dataSourceHandlersPackageMap?.[dsType] ||\r\n `@alilc/lowcode-datasource-${changeCase.kebab(dsType)}-handler`;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n content: `\r\n import { ${handlerFactoryExportName} as ${handlerFactoryName} } from '${handlerPkgName}';\r\n `,\r\n linkAfter: [],\r\n });\r\n }\r\n });\r\n\r\n Object.assign(dataSourceEngineOptions, { requestHandlersMap });\r\n }\r\n\r\n const datasourceEnginePackageName =\r\n cfg.datasourceConfig?.enginePackage || '@alilc/lowcode-datasource-engine';\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n content: `\r\n import { create as __$$createDataSourceEngine } from '${datasourceEnginePackageName}/runtime';\r\n `,\r\n linkAfter: [],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType!,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n content: `\r\n _dataSourceConfig = this._defineDataSourceConfig();\r\n _dataSourceEngine = __$$createDataSourceEngine(\r\n this._dataSourceConfig,\r\n this._context,\r\n ${generateCompositeType(dataSourceEngineOptions, scope)}\r\n );`,\r\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType!,\r\n name: RAX_CHUNK_NAME.ClassDidMountContent,\r\n content: `\r\n this._dataSourceEngine.reloadDataSource();\r\n `,\r\n linkAfter: [RAX_CHUNK_NAME.ClassDidMountBegin],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType!,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\r\n content: `\r\n_defineDataSourceConfig() {\r\n const __$$context = this._context;\r\n return (${generateCompositeType(\r\n {\r\n ...dataSourceConfig,\r\n list: [\r\n ...dataSourceItems.map((item) => ({\r\n // \u6570\u636E\u6E90\u5F15\u64CE\u9ED8\u8BA4\u7684 errorHandler \u662F\u7A7A\u7684\uFF0C\u800C\u4E14\u5E76\u4E0D\u4F1A\u89E6\u53D1\u7EC4\u4EF6\u91CD\u65B0\u6E32\u67D3\u2026\u2026\r\n // \u8FD9\u4F1A\u5BFC\u81F4\u9875\u9762\u72B6\u6001\u4E0D\u80FD\u6B63\u5E38\u5C55\u793A\uFF0C\u6545\u8FD9\u91CC\u5904\u7406\u4E0B:\r\n errorHandler: {\r\n type: 'JSFunction',\r\n value: `function (err){\r\n setTimeout(() => {\r\n this.setState({ __refresh: Date.now() + Math.random() });\r\n }, 0);\r\n throw err;\r\n }`,\r\n },\r\n ...item,\r\n isInit:\r\n typeof item.isInit === 'boolean' || typeof item.isInit === 'undefined'\r\n ? item.isInit ?? true\r\n : wrapAsFunction(item.isInit, scope),\r\n options: wrapAsFunction(item.options, scope),\r\n })),\r\n ],\r\n },\r\n scope,\r\n {\r\n handlers: {\r\n function: (jsFunc) => parseExpressionConvertThis2Context(jsFunc.value, '__$$context'),\r\n expression: (jsExpr) => parseExpressionConvertThis2Context(jsExpr.value, '__$$context'),\r\n },\r\n },\r\n )});\r\n}\r\n `,\r\n linkAfter: [RAX_CHUNK_NAME.ClassRenderEnd],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n\r\nfunction wrapAsFunction(value: IPublicTypeCompositeValue, scope: IScope): IPublicTypeCompositeValue {\r\n if (isJSExpression(value) || isJSFunction(value)) {\r\n return {\r\n type: 'JSExpression',\r\n value: `function(){ return ((${value.value}))}`,\r\n };\r\n }\r\n\r\n return {\r\n type: 'JSExpression',\r\n value: `function(){return((${generateCompositeType(value, scope)}))}`,\r\n };\r\n}\r\n", "import { CLASS_DEFINE_CHUNK_NAME, COMMON_CHUNK_NAME } from '../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\nimport { RAX_CHUNK_NAME } from './const';\r\n\r\nexport interface PluginConfig {\r\n fileType: string;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.JSX,\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n const useRef = !!ir.analyzeResult?.isUsingRef;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n // TODO: \u4E0B\u9762\u8FD9\u4E2A\u8DEF\u5F84\u6709\u6CA1\u6709\u66F4\u597D\u7684\u65B9\u5F0F\u6765\u83B7\u53D6\uFF1F\u800C\u975E\u5199\u6B7B\r\n content: `\r\n import __$$projectUtils${useRef ? ', { RefsManager }' : ''} from '../../utils';\r\n `,\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\r\n content: '_utils = this._defineUtils();',\r\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\r\n\r\n content: `\r\n _defineUtils() {\r\n return {\r\n ...__$$projectUtils,\r\n };\r\n }`,\r\n linkAfter: [RAX_CHUNK_NAME.ClassRenderEnd],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import {\r\n IPublicTypeNodeSchema,\r\n IPublicTypeJSExpression,\r\n IPublicTypeNpmInfo,\r\n IPublicTypeCompositeValue,\r\n isJSExpression,\r\n} from '@alilc/lowcode-types';\r\n\r\nimport _ from 'lodash';\r\nimport changeCase from 'change-case';\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n CodePiece,\r\n FileType,\r\n ICodeChunk,\r\n ICodeStruct,\r\n IContainerInfo,\r\n PIECE_TYPE,\r\n HandlerSet,\r\n IScope,\r\n NodeGeneratorConfig,\r\n NodePlugin,\r\n AttrPlugin,\r\n} from '../../../types';\r\n\r\nimport { RAX_CHUNK_NAME } from './const';\r\nimport { COMMON_CHUNK_NAME } from '../../../const/generator';\r\n\r\nimport { generateExpression } from '../../../utils/jsExpression';\r\nimport {\r\n createNodeGenerator,\r\n generateConditionReactCtrl,\r\n generateReactExprInJS,\r\n} from '../../../utils/nodeToJSX';\r\nimport { generateCompositeType } from '../../../utils/compositeType';\r\nimport { Scope } from '../../../utils/Scope';\r\nimport { parseExpressionGetGlobalVariables } from '../../../utils/expressionParser';\r\nimport { transformThis2Context } from '../../../core/jsx/handlers/transformThis2Context';\r\nimport { transformJsExpr } from '../../../core/jsx/handlers/transformJsExpression';\r\n\r\nexport interface PluginConfig {\r\n fileType: string;\r\n\r\n /** \u662F\u5426\u8981\u5FFD\u7565\u5C0F\u7A0B\u5E8F */\r\n ignoreMiniApp?: boolean;\r\n}\r\n\r\n// TODO: componentName \u82E5\u5E76\u975E\u5927\u5199\u5B57\u7B26\u6253\u5934\uFF0C\u751A\u81F3\u5E76\u975E\u662F\u4E00\u4E2A\u6709\u6548\u7684 JS \u6807\u8BC6\u7B26\u600E\u4E48\u529E\uFF1F\uFF1F\r\n// FIXME: \u6211\u60F3\u4E86\u4E0B\uFF0C\u8FD9\u5757\u5E94\u8BE5\u653E\u5230\u89E3\u6790\u9636\u6BB5\u5C31\u53BB\u505A\u6389\uFF0C\u5BF9\u6240\u6709 componentName \u505A identifier validate\uFF0C\u7136\u540E\u5BF9\u4E0D\u5408\u6CD5\u7684\u505A\u7EDF\u4E00\u66FF\u6362\u3002\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.JSX,\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n const rootScope = Scope.createRootScope();\r\n const { tolerateEvalErrors = true, evalErrorsHandler = '' } = next.contextData;\r\n\r\n // Rax \u6784\u5EFA\u5230\u5C0F\u7A0B\u5E8F\u7684\u65F6\u5019\uFF0C\u4E0D\u80FD\u7ED9\u7EC4\u4EF6\u8D77\u8D77\u522B\u540D\uFF0C\u5F97\u76F4\u63A5\u5F15\u7528\uFF0C\u6545\u8FD9\u91CC\u5C06\u6240\u6709\u7684\u522B\u540D\u66FF\u6362\u6389\r\n // \u5148\u6536\u96C6\u4E0B\u6240\u6709\u7684 alias \u7684\u6620\u5C04\r\n const componentsNameAliasMap = new Map<string, string>();\r\n next.chunks.forEach((chunk) => {\r\n if (isImportAliasDefineChunk(chunk)) {\r\n componentsNameAliasMap.set(chunk.ext.aliasName, chunk.ext.originalName);\r\n }\r\n });\r\n\r\n // \u6CE8\u610F\uFF1A\u8FD9\u91CC\u5176\u5B9E\u9690\u542B\u4E86\u4E00\u4E2A\u5047\u8BBE\uFF1Aschema \u4E2D\u7684 componentName \u5E94\u8BE5\u662F\u4E00\u4E2A\u6709\u6548\u7684 JS \u6807\u8BC6\u7B26\uFF0C\u800C\u4E14\u662F\u5927\u5199\u5B57\u6BCD\u6253\u5934\u7684\r\n // FIXME: \u4E3A\u4E86\u5FEB\u901F\u4FEE\u590D\u4E34\u65F6\u52A0\u7684\u903B\u8F91\uFF0C\u9700\u8981\u7528 pre-process \u7684\u65B9\u5F0F\u66FF\u4EE3\u5904\u7406\u3002\r\n const mapComponentNameToAliasOrKeepIt = (componentName: string) => componentsNameAliasMap.get(componentName) || componentName;\r\n\r\n // \u7136\u540E\u8FC7\u6EE4\u6389\u6240\u6709\u7684\u522B\u540D chunks\r\n next.chunks = next.chunks.filter((chunk) => !isImportAliasDefineChunk(chunk));\r\n\r\n // \u5982\u679C\u76F4\u63A5\u6309\u76EE\u524D\u7684 React \u7684\u65B9\u5F0F\u4E4B\u95F4\u51FA\u7801 JSX \u7684\u8BDD\uFF0C\u4F1A\u6709 3 \u4E2A\u95EE\u9898\uFF1A\r\n // 1. \u5C0F\u7A0B\u5E8F\u51FA\u7801\u7684\u65F6\u5019\uFF0C\u5FAA\u73AF\u53D8\u91CF\u6CA1\u6CD5\u62FF\u5230\r\n // 2. \u5C0F\u7A0B\u5E8F\u51FA\u7801\u7684\u65F6\u5019\uFF0C\u5F88\u5BB9\u6613\u51FA\u73B0 Uncaught TypeError: Cannot read property 'avatar' of undefined \u8FD9\u6837\u7684\u5F02\u5E38(\u5982\u4E0B\u56FE\u7684 50 \u884C) -- \u56E0\u4E3A\u82E5\u76F4\u63A5\u51FA\u7801\uFF0CRax \u6784\u5EFA\u5230\u5C0F\u7A0B\u5E8F\u7684\u65F6\u5019\u4F1A\u7ACB\u5373\u8BA1\u7B97\u6240\u6709\u5728\u89C6\u56FE\u4E2D\u7528\u5230\u7684\u53D8\u91CF\r\n // 3. \u901A\u8FC7 this.xxx \u80FD\u62FF\u5230\u7684\u4E1C\u897F\u592A\u591A\u4E86\uFF0C\u800C\u4E14\u81EA\u5B9A\u4E49\u7684 methods \u53EF\u80FD\u4F1A\u65E0\u610F\u95F4\u7834\u574F Rax \u6846\u67B6\u6216\u5C0F\u7A0B\u5E8F\u6846\u67B6\u5728\u9875\u9762 this \u4E0A\u7684\u4E1C\u4E1C\r\n const customHandlers: HandlerSet<string> = {\r\n expression(input: IPublicTypeJSExpression, scope: IScope) {\r\n return transformJsExpr(generateExpression(input, scope), scope, {\r\n dontWrapEval: !tolerateEvalErrors,\r\n });\r\n },\r\n function(input, scope: IScope) {\r\n return transformThis2Context(input.value || 'null', scope);\r\n },\r\n };\r\n\r\n // \u521B\u5EFA\u4EE3\u7801\u751F\u6210\u5668\r\n const commonNodeGenerator = createNodeGenerator({\r\n handlers: customHandlers,\r\n tagMapping: mapComponentNameToAliasOrKeepIt,\r\n nodePlugins: [generateReactExprInJS, generateConditionReactCtrl, generateRaxLoopCtrl],\r\n attrPlugins: [generateNodeAttrForRax.bind({ cfg })],\r\n });\r\n\r\n // \u751F\u6210 JSX \u4EE3\u7801\r\n const jsxContent = commonNodeGenerator(ir, rootScope);\r\n\r\n if (!cfg.ignoreMiniApp) {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n content: \"import { isMiniApp as __$$isMiniApp } from 'universal-env';\",\r\n linkAfter: [],\r\n });\r\n }\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: RAX_CHUNK_NAME.ClassRenderPre,\r\n // TODO: setState, dataSourceMap, reloadDataSource, utils, i18n, i18nFormat, getLocale, setLocale \u8FD9\u4E9B\u5728 Rax \u7684\u7F16\u8BD1\u6A21\u5F0F\u4E0B\u4E0D\u80FD\u5728\u89C6\u56FE\u4E2D\u76F4\u63A5\u8BBF\u95EE\uFF0C\u9700\u8981\u8F6C\u5316\u6210 this.xxx\r\n content: `\r\n const __$$context = this._context;\r\n const { state, setState, dataSourceMap, reloadDataSource, utils, constants, i18n, i18nFormat, getLocale, setLocale } = __$$context;\r\n `,\r\n linkAfter: [RAX_CHUNK_NAME.ClassRenderBegin],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: RAX_CHUNK_NAME.ClassRenderJSX,\r\n content: `return ${jsxContent};`,\r\n linkAfter: [RAX_CHUNK_NAME.ClassRenderBegin, RAX_CHUNK_NAME.ClassRenderPre],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.CustomContent,\r\n content: [\r\n tolerateEvalErrors &&\r\n `\r\n function __$$eval(expr) {\r\n try {\r\n return expr();\r\n } catch (error) {\r\n ${evalErrorsHandler}\r\n }\r\n }\r\n\r\n function __$$evalArray(expr) {\r\n const res = __$$eval(expr);\r\n return Array.isArray(res) ? res : [];\r\n }\r\n `,\r\n `\r\n function __$$createChildContext(oldContext, ext) {\r\n return Object.assign({}, oldContext, ext);\r\n }\r\n `,\r\n ]\r\n .filter(Boolean)\r\n .join('\\n'),\r\n linkAfter: [COMMON_CHUNK_NAME.FileExport],\r\n });\r\n\r\n return next;\r\n\r\n function generateRaxLoopCtrl(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n next?: NodePlugin,\r\n ): CodePiece[] {\r\n if (nodeItem.loop) {\r\n const loopItemName = nodeItem.loopArgs?.[0] || 'item';\r\n const loopIndexName = nodeItem.loopArgs?.[1] || 'index';\r\n const subScope = scope.createSubScope([loopItemName, loopIndexName]);\r\n const pieces: CodePiece[] = next ? next(nodeItem, subScope, config) : [];\r\n\r\n const loopDataExpr = tolerateEvalErrors\r\n ? `__$$evalArray(() => (${transformThis2Context(\r\n generateCompositeType(nodeItem.loop, scope, { handlers: config?.handlers }),\r\n scope,\r\n )}))`\r\n : `(${transformThis2Context(\r\n generateCompositeType(nodeItem.loop, scope, { handlers: config?.handlers }),\r\n scope,\r\n )})`;\r\n\r\n pieces.unshift({\r\n value: `${loopDataExpr}.map((${loopItemName}, ${loopIndexName}) => ((__$$context) => (`,\r\n type: PIECE_TYPE.BEFORE,\r\n });\r\n\r\n pieces.push({\r\n value: `))(__$$createChildContext(__$$context, { ${loopItemName}, ${loopIndexName} })))`,\r\n type: PIECE_TYPE.AFTER,\r\n });\r\n\r\n return pieces;\r\n }\r\n\r\n return next ? next(nodeItem, scope, config) : [];\r\n }\r\n };\r\n\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n\r\nfunction isImportAliasDefineChunk(chunk: ICodeChunk): chunk is ICodeChunk & {\r\n ext: {\r\n aliasName: string;\r\n originalName: string;\r\n dependency: IPublicTypeNpmInfo;\r\n };\r\n} {\r\n return (\r\n chunk.name === COMMON_CHUNK_NAME.ImportAliasDefine &&\r\n !!chunk.ext &&\r\n typeof chunk.ext.aliasName === 'string' &&\r\n typeof chunk.ext.originalName === 'string' &&\r\n !!(chunk.ext.dependency as IPublicTypeNpmInfo | null)?.componentName\r\n );\r\n}\r\n\r\nfunction generateNodeAttrForRax(\r\n this: { cfg: PluginConfig },\r\n attrData: { attrName: string; attrValue: IPublicTypeCompositeValue },\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n next?: AttrPlugin,\r\n): CodePiece[] {\r\n if (!this.cfg.ignoreMiniApp && /^on/.test(attrData.attrName)) {\r\n // else: onXxx \u7684\u90FD\u662F\u4E8B\u4EF6\u5904\u7406\u51FD\u6570\u9700\u8981\u7279\u6B8A\u5904\u7406\u4E0B\r\n return generateEventHandlerAttrForRax(attrData.attrName, attrData.attrValue, scope, config);\r\n }\r\n\r\n if (attrData.attrName === 'ref') {\r\n return [\r\n {\r\n name: attrData.attrName,\r\n value: `__$$context._refsManager.linkRef('${attrData.attrValue}')`,\r\n type: PIECE_TYPE.ATTR,\r\n },\r\n ];\r\n }\r\n\r\n return next ? next(attrData, scope, config) : [];\r\n}\r\n\r\nfunction generateEventHandlerAttrForRax(\r\n attrName: string,\r\n attrValue: IPublicTypeCompositeValue,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n): CodePiece[] {\r\n // -- \u4E8B\u4EF6\u5904\u7406\u51FD\u6570\u4E2D JSExpression \u8F6C\u6210 JSFunction \u6765\u5904\u7406\uFF0C\u907F\u514D\u5F53 JSExpression \u5904\u7406\u7684\u65F6\u5019\u591A\u5305\u4E00\u5C42 eval \u800C\u5BFC\u81F4 Rax \u8F6C\u7801\u6210\u5C0F\u7A0B\u5E8F\u7684\u65F6\u5019\u51FA\u95EE\u9898\r\n const valueExpr = generateCompositeType(\r\n isJSExpression(attrValue) ? { type: 'JSFunction', value: attrValue.value } : attrValue,\r\n scope,\r\n {\r\n handlers: config?.handlers,\r\n },\r\n );\r\n\r\n // \u67E5\u8BE2\u5F53\u524D\u4F5C\u7528\u57DF\u4E0B\u7684\u53D8\u91CF\r\n const currentScopeVariables = scope.bindings?.getAllBindings() || [];\r\n if (currentScopeVariables.length <= 0) {\r\n return [\r\n {\r\n type: PIECE_TYPE.ATTR,\r\n name: attrName,\r\n value: valueExpr,\r\n },\r\n ];\r\n }\r\n\r\n // \u63D0\u53D6\u51FA\u6240\u6709\u7684\u672A\u5B9A\u4E49\u7684\u5168\u5C40\u53D8\u91CF\r\n const undeclaredVariablesInValueExpr = parseExpressionGetGlobalVariables(valueExpr);\r\n const referencedLocalVariables = _.intersection(\r\n undeclaredVariablesInValueExpr,\r\n currentScopeVariables,\r\n );\r\n if (referencedLocalVariables.length <= 0) {\r\n return [\r\n {\r\n type: PIECE_TYPE.ATTR,\r\n name: attrName,\r\n value: valueExpr,\r\n },\r\n ];\r\n }\r\n\r\n const wrappedAttrValueExpr = [\r\n '(...__$$args) => {',\r\n ' if (__$$isMiniApp) {',\r\n ' const __$$event = __$$args[0];',\r\n ...referencedLocalVariables.map(\r\n (localVar) => `const ${localVar} = __$$event.target.dataset.${localVar};`,\r\n ),\r\n ` return (${valueExpr}).apply(this, __$$args);`,\r\n ' } else {',\r\n ` return (${valueExpr}).apply(this, __$$args);`,\r\n ' }',\r\n '}',\r\n ].join('\\n');\r\n\r\n return [\r\n ...referencedLocalVariables.map((localVar) => ({\r\n type: PIECE_TYPE.ATTR,\r\n name: `data-${changeCase.snake(localVar)}`,\r\n value: localVar,\r\n })),\r\n {\r\n type: PIECE_TYPE.ATTR,\r\n name: attrName,\r\n value: wrappedAttrValueExpr,\r\n },\r\n ];\r\n}\r\n", "import { COMMON_CHUNK_NAME } from '../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n} from '../../../types';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n content: `\r\n // \u6CE8\u610F: \u51FA\u7801\u5F15\u64CE\u6CE8\u5165\u7684\u4E34\u65F6\u53D8\u91CF\u9ED8\u8BA4\u90FD\u4EE5 \"__$$\" \u5F00\u5934\uFF0C\u7981\u6B62\u5728\u642D\u5EFA\u7684\u4EE3\u7801\u4E2D\u76F4\u63A5\u8BBF\u95EE\u3002\r\n // \u4F8B\u5916\uFF1Arax \u6846\u67B6\u7684\u5BFC\u51FA\u540D\u548C\u5404\u79CD\u7EC4\u4EF6\u540D\u9664\u5916\u3002\r\n import { createElement, Component } from 'rax';\r\n import { getSearchParams as __$$getSearchParams } from 'rax-app';\r\n `,\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "/* eslint-disable max-len */\r\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\r\n/* -- instead, you should modify \"static-files/rax/.eslintignore.template\" and run \"npm run template\" */\r\nimport { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n ['.'],\r\n {\r\n name: '.eslintignore',\r\n ext: '',\r\n content: 'node_modules/\\nlib/\\ndist/\\nbuild/\\ncoverage/\\ndemo/\\nes/\\n.rax/\\n',\r\n },\r\n ];\r\n}\r\n", "/* eslint-disable max-len */\r\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\r\n/* -- instead, you should modify \"static-files/rax/.eslintrc.js.template\" and run \"npm run template\" */\r\nimport { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n ['.'],\r\n {\r\n name: '.eslintrc',\r\n ext: 'js',\r\n content:\r\n \"const { getESLintConfig } = require('@iceworks/spec');\\n\\n// https://www.npmjs.com/package/@iceworks/spec\\nmodule.exports = {\\n ...getESLintConfig('rax'),\\n rules: {\\n 'max-len': ['error', { code: 200 }],\\n 'function-paren-newline': 'off',\\n '@typescript-eslint/indent': 'off',\\n 'prettier/prettier': 'off',\\n 'no-empty': 'off',\\n 'no-unused-vars': 'off',\\n '@iceworks/best-practices/recommend-functional-component': 'off',\\n },\\n};\\n\",\r\n },\r\n ];\r\n}\r\n", "/* eslint-disable max-len */\r\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\r\n/* -- instead, you should modify \"static-files/rax/.gitignore.template\" and run \"npm run template\" */\r\nimport { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n ['.'],\r\n {\r\n name: '.gitignore',\r\n ext: '',\r\n content:\r\n '# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\\n\\n*~\\n*.swp\\n*.log\\n\\n.DS_Store\\n.idea/\\n.temp/\\n\\nbuild/\\ndist/\\nlib/\\ncoverage/\\nnode_modules/\\n.rax/\\n\\ntemplate.yml',\r\n },\r\n ];\r\n}\r\n", "/* eslint-disable max-len */\r\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\r\n/* -- instead, you should modify \"static-files/rax/.prettierignore.template\" and run \"npm run template\" */\r\nimport { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n ['.'],\r\n {\r\n name: '.prettierignore',\r\n ext: '',\r\n content: 'node_modules/\\nlib/\\ndist/\\nbuild/\\ncoverage/\\ndemo/\\nes/\\n.rax/\\n',\r\n },\r\n ];\r\n}\r\n", "/* eslint-disable max-len */\r\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\r\n/* -- instead, you should modify \"static-files/rax/.prettierrc.js.template\" and run \"npm run template\" */\r\nimport { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n ['.'],\r\n {\r\n name: '.prettierrc',\r\n ext: 'js',\r\n content:\r\n \"const { getPrettierConfig } = require('@iceworks/spec');\\n\\nmodule.exports = getPrettierConfig('rax');\\n\",\r\n },\r\n ];\r\n}\r\n", "/* eslint-disable max-len */\r\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\r\n/* -- instead, you should modify \"static-files/rax/.stylelintignore.template\" and run \"npm run template\" */\r\nimport { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n ['.'],\r\n {\r\n name: '.stylelintignore',\r\n ext: '',\r\n content: 'node_modules/\\nlib/\\ndist/\\nbuild/\\ncoverage/\\ndemo/\\nes/\\n.rax/\\n',\r\n },\r\n ];\r\n}\r\n", "/* eslint-disable max-len */\r\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\r\n/* -- instead, you should modify \"static-files/rax/.stylelintrc.js.template\" and run \"npm run template\" */\r\nimport { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n ['.'],\r\n {\r\n name: '.stylelintrc',\r\n ext: 'js',\r\n content:\r\n \"const { getStylelintConfig } = require('@iceworks/spec');\\n\\nmodule.exports = getStylelintConfig('rax');\\n\",\r\n },\r\n ];\r\n}\r\n", "/* eslint-disable max-len */\r\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\r\n/* -- instead, you should modify \"static-files/rax/jsconfig.json.template\" and run \"npm run template\" */\r\nimport { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n ['.'],\r\n {\r\n name: 'jsconfig',\r\n ext: 'json',\r\n content:\r\n '{\\n \"compilerOptions\": {\\n \"baseUrl\": \".\",\\n \"jsx\": \"react\",\\n \"paths\": {\\n \"@/*\": [\"./src/*\"],\\n \"rax-app\": [\".rax/index.ts\"]\\n }\\n }\\n}\\n',\r\n },\r\n ];\r\n}\r\n", "/* eslint-disable max-len */\r\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\r\n/* -- instead, you should modify \"static-files/rax/README.md.template\" and run \"npm run template\" */\r\nimport { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n ['.'],\r\n {\r\n name: 'README',\r\n ext: 'md',\r\n content:\r\n '# rax-materials-basic-app\\n\\n## Getting Started\\n\\n### `npm run start`\\n\\nRuns the app in development mode.\\n\\nOpen [http://localhost:3333](http://localhost:3333) to view it in the browser.\\n\\nThe page will reload if you make edits.\\n\\n### `npm run build`\\n\\nBuilds the app for production to the `build` folder.\\n',\r\n },\r\n ];\r\n}\r\n", "/* eslint-disable max-len */\r\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\r\n/* -- instead, you should modify \"static-files/rax/tsconfig.json.template\" and run \"npm run template\" */\r\nimport { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n ['.'],\r\n {\r\n name: 'tsconfig',\r\n ext: 'json',\r\n content:\r\n '{\\n \"compileOnSave\": false,\\n \"buildOnSave\": false,\\n \"compilerOptions\": {\\n \"baseUrl\": \".\",\\n \"outDir\": \"build\",\\n \"module\": \"esnext\",\\n \"target\": \"es6\",\\n \"jsx\": \"preserve\",\\n \"jsxFactory\": \"createElement\",\\n \"moduleResolution\": \"node\",\\n \"allowSyntheticDefaultImports\": true,\\n \"lib\": [\"es6\", \"dom\"],\\n \"sourceMap\": true,\\n \"allowJs\": true,\\n \"rootDir\": \"./\",\\n \"forceConsistentCasingInFileNames\": true,\\n \"noImplicitReturns\": true,\\n \"noImplicitThis\": true,\\n \"noImplicitAny\": false,\\n \"importHelpers\": true,\\n \"strictNullChecks\": true,\\n \"suppressImplicitAnyIndexErrors\": true,\\n \"noUnusedLocals\": true,\\n \"skipLibCheck\": true,\\n \"paths\": {\\n \"@/*\": [\"./src/*\"],\\n \"rax-app\": [\".rax/index.ts\"]\\n }\\n },\\n \"include\": [\"src\", \".rax\"],\\n \"exclude\": [\"node_modules\", \"build\", \"public\"]\\n}',\r\n },\r\n ];\r\n}\r\n", "/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\r\nimport { ResultDir } from '@alilc/lowcode-types';\r\n\r\nimport { createResultDir } from '../../../../../utils/resultHelper';\r\nimport { runFileGenerator } from '../../../../../utils/templateHelper';\r\nimport file0 from './files/.eslintignore';\r\nimport file1 from './files/.eslintrc.js';\r\nimport file2 from './files/.gitignore';\r\nimport file3 from './files/.prettierignore';\r\nimport file4 from './files/.prettierrc.js';\r\nimport file5 from './files/.stylelintignore';\r\nimport file6 from './files/.stylelintrc.js';\r\nimport file7 from './files/jsconfig.json';\r\nimport file8 from './files/README.md';\r\nimport file9 from './files/tsconfig.json';\r\n\r\nexport function generateStaticFiles(root = createResultDir('.')): ResultDir {\r\n runFileGenerator(root, file0);\r\n runFileGenerator(root, file1);\r\n runFileGenerator(root, file2);\r\n runFileGenerator(root, file3);\r\n runFileGenerator(root, file4);\r\n runFileGenerator(root, file5);\r\n runFileGenerator(root, file6);\r\n runFileGenerator(root, file7);\r\n runFileGenerator(root, file8);\r\n runFileGenerator(root, file9);\r\n return root;\r\n}\r\n", "import { ResultDir } from '@alilc/lowcode-types';\r\nimport { IProjectTemplate } from '../../../../../types';\r\nimport { generateStaticFiles } from './static-files';\r\n\r\nconst raxAppTemplate: IProjectTemplate = {\r\n slots: {\r\n components: {\r\n path: ['src', 'components'],\r\n },\r\n pages: {\r\n path: ['src', 'pages'],\r\n },\r\n router: {\r\n path: ['src'],\r\n fileName: 'router',\r\n },\r\n entry: {\r\n path: ['src'],\r\n fileName: 'app',\r\n },\r\n appConfig: {\r\n path: ['src'],\r\n fileName: 'app',\r\n },\r\n buildConfig: {\r\n path: [],\r\n fileName: 'build',\r\n },\r\n constants: {\r\n path: ['src'],\r\n fileName: 'constants',\r\n },\r\n utils: {\r\n path: ['src'],\r\n fileName: 'utils',\r\n },\r\n i18n: {\r\n path: ['src'],\r\n fileName: 'i18n',\r\n },\r\n globalStyle: {\r\n path: ['src'],\r\n fileName: 'global',\r\n },\r\n htmlEntry: {\r\n path: ['src', 'document'],\r\n fileName: 'index',\r\n },\r\n packageJSON: {\r\n path: [],\r\n fileName: 'package',\r\n },\r\n },\r\n\r\n async generateTemplate(): Promise<ResultDir> {\r\n return generateStaticFiles();\r\n },\r\n};\r\n\r\nexport default raxAppTemplate;\r\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n} from '../../../../../types';\r\nimport { RaxFrameworkOptions } from '../types/RaxFrameworkOptions';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<RaxFrameworkOptions> = (cfg) => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n content: `\r\nimport { runApp } from 'rax-app';\r\n\r\nimport './global.${cfg?.globalStylesFileType || 'css'}';\r\n`,\r\n linkAfter: [],\r\n });\r\n\r\n // \u5E94\u7528\u914D\u7F6E\r\n const appConfig = cfg?.appConfig || {};\r\n Object.assign(appConfig, {\r\n // \u8DEF\u7531\u914D\u7F6E\r\n router: {\r\n mode: 'hash',\r\n ...appConfig.router,\r\n },\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JS,\r\n name: COMMON_CHUNK_NAME.FileMainContent,\r\n content: `\r\nrunApp(${JSON.stringify(appConfig, null, 2)});\r\n`,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.ImportAliasDefine,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileUtilDefine,\r\n ],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import changeCase from 'change-case';\r\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IParseResult,\r\n} from '../../../../../types';\r\nimport { ensureValidClassName } from '../../../../../utils/validate';\r\nimport { RaxFrameworkOptions } from '../types/RaxFrameworkOptions';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<RaxFrameworkOptions> = (cfg) => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IParseResult;\r\n\r\n const routes = ir.globalRouter?.routes?.map((route) => ({\r\n path: route.path,\r\n source: `pages/${ensureValidClassName(changeCase.pascalCase(route.fileName))}/index`,\r\n })) || [{ path: '/', source: 'pages/Home/index' }];\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSON,\r\n name: COMMON_CHUNK_NAME.CustomContent,\r\n content: `\r\n{\r\n \"routes\": ${JSON.stringify(routes, null, 2)},\r\n \"window\": {\r\n \"title\": ${JSON.stringify(\r\n cfg?.title || ir.project?.meta?.title || ir.project?.meta?.name || '',\r\n )}\r\n }\r\n}\r\n `,\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IParseResult,\r\n} from '../../../../../types';\r\nimport type { RaxFrameworkOptions } from '../types/RaxFrameworkOptions';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<RaxFrameworkOptions> = (cfg) => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IParseResult;\r\n\r\n const miniAppBuildType =\r\n cfg?.buildConfig?.miniAppBuildType || ir.project?.config?.miniAppBuildType;\r\n const targets = cfg?.targets || ['web'];\r\n\r\n const buildCfg = {\r\n inlineStyle: false,\r\n plugins: [],\r\n targets,\r\n miniapp: miniAppBuildType\r\n ? {\r\n buildType: miniAppBuildType,\r\n ...cfg?.buildConfig?.miniapp,\r\n }\r\n : cfg?.buildConfig?.miniapp,\r\n ...cfg?.buildConfig,\r\n };\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSON,\r\n name: COMMON_CHUNK_NAME.CustomContent,\r\n content: `${JSON.stringify(buildCfg, null, 2)}\\n`,\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IProjectInfo,\r\n} from '../../../../../types';\r\nimport { RaxFrameworkOptions } from '../types/RaxFrameworkOptions';\r\n\r\n/**\r\n * \u8FD9\u79CD\u65B9\u5F0F\u5DF2\u7ECF\u4E0D\u63A8\u8350\u4F7F\u7528\u4E86\r\n */\r\nconst pluginFactory: BuilderComponentPluginFactory<RaxFrameworkOptions> = (cfg) => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IProjectInfo;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.CustomContent,\r\n content: `\r\nimport { createElement } from 'rax';\r\nimport { Root, Style, Script } from 'rax-document';\r\n\r\nfunction Document() {\r\n return (\r\n <html>\r\n <head>\r\n <meta charset=\"utf-8\" />\r\n <meta\r\n name=\"viewport\"\r\n content=\"width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no,viewport-fit=cover\"\r\n />\r\n <title>${cfg?.title || ir?.meta?.name || 'Rax App'}</title>\r\n <Style />\r\n </head>\r\n <body>\r\n {/* root container */}\r\n <Root />\r\n <Script />\r\n </body>\r\n </html>\r\n );\r\n}\r\n\r\nexport default Document;\r\n`,\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IProjectInfo,\r\n} from '../../../../../types';\r\n\r\nexport interface GlobalStylePluginConfig {\r\n fileType: string;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<GlobalStylePluginConfig> = (\r\n config?: Partial<GlobalStylePluginConfig>,\r\n) => {\r\n const cfg: GlobalStylePluginConfig = {\r\n fileType: FileType.SCSS,\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IProjectInfo;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.StyleDepsImport,\r\n content: '',\r\n linkAfter: [],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.StyleCssContent,\r\n content: `\r\nbody {\r\n -webkit-font-smoothing: antialiased;\r\n}\r\n`,\r\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.StyleCssContent,\r\n content: ir.css || '',\r\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import semver from 'semver';\r\n\r\nexport function calcCompatibleVersion(v1: string | undefined | null, v2: string | undefined | null): string {\r\n if (!v1 && !v2) {\r\n return '*';\r\n }\r\n\r\n if (!v1 || v1 === '*') {\r\n return v2 || '*';\r\n }\r\n\r\n if (!v2 || v2 === '*') {\r\n return v1;\r\n }\r\n\r\n if (v1 === v2) {\r\n return v1;\r\n }\r\n\r\n if (!semver.intersects(v1, v2, { loose: true })) {\r\n throw new Error(`no compatible versions for \"${v1}\" and \"${v2}\"`);\r\n }\r\n\r\n if (semver.subset(v1, v2, { loose: true })) {\r\n return v1;\r\n }\r\n\r\n return v2;\r\n}\r\n", "import { IPublicTypeNpmInfo, PackageJSON } from '@alilc/lowcode-types';\r\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IProjectInfo,\r\n} from '../../../../../types';\r\nimport { isNpmInfo } from '../../../../../utils/schema';\r\nimport { getErrorMessage } from '../../../../../utils/errors';\r\nimport { calcCompatibleVersion } from '../../../../../utils/version';\r\nimport { RaxFrameworkOptions } from '../types/RaxFrameworkOptions';\r\nimport { buildDataSourceDependencies } from '../../../../../utils/dataSource';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<RaxFrameworkOptions> = (cfg) => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IProjectInfo;\r\n\r\n const npmDeps = getNpmDependencies(ir);\r\n\r\n const packageJson: PackageJSON = {\r\n name: cfg?.packageName || 'rax-demo-app',\r\n private: true,\r\n version: cfg?.packageVersion || '1.0.0',\r\n scripts: {\r\n start: 'rax-app start',\r\n build: 'rax-app build',\r\n eslint: 'eslint --ext .js,.jsx ./',\r\n stylelint: 'stylelint \"**/*.{css,scss,less}\"',\r\n prettier: 'prettier **/* --write',\r\n lint: 'npm run eslint && npm run stylelint',\r\n },\r\n dependencies: {\r\n // \u6570\u636E\u6E90\u76F8\u5173\u7684\u4F9D\u8D56:\r\n ...buildDataSourceDependencies(ir, cfg?.datasourceConfig),\r\n\r\n // \u73AF\u5883\u5224\u65AD\r\n 'universal-env': '^3.2.0',\r\n\r\n // \u56FD\u9645\u5316\u76F8\u5173\u4F9D\u8D56:\r\n 'intl-messageformat': '^9.3.6',\r\n\r\n // \u57FA\u7840\u5E93\r\n rax: '^1.1.0',\r\n 'rax-document': '^0.1.6',\r\n\r\n // \u5176\u4ED6\u7EC4\u4EF6\u5E93\r\n ...npmDeps.reduce<Record<string, string>>(\r\n (acc, npm) => ({\r\n ...acc,\r\n [npm.package]: npm.version || '*',\r\n }),\r\n {},\r\n ),\r\n },\r\n devDependencies: {\r\n '@iceworks/spec': '^1.0.0',\r\n 'rax-app': '^3.0.0',\r\n eslint: '^6.8.0',\r\n prettier: '^2.1.2',\r\n stylelint: '^13.7.2',\r\n },\r\n };\r\n\r\n next.chunks.push({\r\n type: ChunkType.JSON,\r\n fileType: FileType.JSON,\r\n name: COMMON_CHUNK_NAME.FileMainContent,\r\n content: packageJson,\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n\r\nfunction getNpmDependencies(project: IProjectInfo): IPublicTypeNpmInfo[] {\r\n const npmDeps: IPublicTypeNpmInfo[] = [];\r\n const npmNameToPkgMap = new Map<string, IPublicTypeNpmInfo>();\r\n\r\n const allDeps = project.packages;\r\n\r\n allDeps.forEach((dep) => {\r\n if (!isNpmInfo(dep)) {\r\n return;\r\n }\r\n\r\n const existing = npmNameToPkgMap.get(dep.package);\r\n if (!existing) {\r\n npmNameToPkgMap.set(dep.package, dep);\r\n npmDeps.push(dep);\r\n return;\r\n }\r\n\r\n if (existing.version !== dep.version) {\r\n try {\r\n npmNameToPkgMap.set(dep.package, {\r\n ...existing,\r\n version: calcCompatibleVersion(existing.version, dep.version),\r\n });\r\n } catch (e) {\r\n throw new Error(\r\n `Cannot find compatible version for ${dep.package}. Detail: ${getErrorMessage(e)}`,\r\n );\r\n }\r\n }\r\n });\r\n\r\n return npmDeps;\r\n}\r\n", "import template from './template';\r\nimport entry from './plugins/entry';\r\nimport appConfig from './plugins/appConfig';\r\nimport buildConfig from './plugins/buildConfig';\r\nimport entryDocument from './plugins/entryDocument';\r\nimport globalStyle from './plugins/globalStyle';\r\nimport packageJSON from './plugins/packageJSON';\r\n\r\nexport default {\r\n template,\r\n plugins: {\r\n appConfig,\r\n buildConfig,\r\n entry,\r\n entryDocument,\r\n globalStyle,\r\n packageJSON,\r\n },\r\n};\r\n", "import { IProjectBuilder, IProjectBuilderOptions } from '../types';\r\n\r\nimport { createProjectBuilder } from '../generator/ProjectBuilder';\r\n\r\nimport esModule from '../plugins/common/esmodule';\r\nimport containerClass from '../plugins/component/rax/containerClass';\r\nimport containerLifeCycles from '../plugins/component/rax/containerLifeCycle';\r\nimport containerMethods from '../plugins/component/rax/containerMethods';\r\nimport containerInitState from '../plugins/component/rax/containerInitState';\r\nimport containerInjectContext from '../plugins/component/rax/containerInjectContext';\r\nimport containerInjectDataSourceEngine from '../plugins/component/rax/containerInjectDataSourceEngine';\r\nimport containerInjectUtils from '../plugins/component/rax/containerInjectUtils';\r\nimport jsx from '../plugins/component/rax/jsx';\r\nimport commonDeps from '../plugins/component/rax/commonDeps';\r\nimport css from '../plugins/component/style/css';\r\nimport constants from '../plugins/project/constants';\r\nimport i18n from '../plugins/project/i18n';\r\nimport utils from '../plugins/project/utils';\r\n\r\nimport raxApp from '../plugins/project/framework/rax';\r\n\r\nimport { prettier } from '../postprocessor';\r\nimport { RaxFrameworkOptions } from '../plugins/project/framework/rax/types/RaxFrameworkOptions';\r\n\r\nexport interface RaxProjectBuilderOptions extends IProjectBuilderOptions, RaxFrameworkOptions {}\r\n\r\nexport default function createRaxProjectBuilder(\r\n options?: RaxProjectBuilderOptions,\r\n): IProjectBuilder {\r\n return createProjectBuilder({\r\n inStrictMode: options?.inStrictMode,\r\n extraContextData: { ...options },\r\n template: raxApp.template,\r\n plugins: {\r\n components: [\r\n commonDeps(),\r\n esModule({ fileType: 'jsx', useAliasName: false }),\r\n containerClass(),\r\n containerInitState(),\r\n containerMethods(),\r\n containerInjectContext(),\r\n containerInjectDataSourceEngine(options),\r\n containerInjectUtils(),\r\n containerLifeCycles(),\r\n jsx(),\r\n css(),\r\n ],\r\n pages: [\r\n commonDeps(),\r\n esModule({ fileType: 'jsx' }),\r\n containerClass(),\r\n containerInitState(),\r\n containerMethods(),\r\n containerInjectContext(),\r\n containerInjectDataSourceEngine(options),\r\n containerInjectUtils(),\r\n containerLifeCycles(),\r\n jsx(),\r\n css(),\r\n ],\r\n appConfig: [raxApp.plugins.appConfig(options)],\r\n buildConfig: [raxApp.plugins.buildConfig(options)],\r\n entry: [raxApp.plugins.entry(options)],\r\n constants: [constants()],\r\n utils: [esModule(), utils('rax')],\r\n i18n: [i18n()],\r\n globalStyle: [\r\n raxApp.plugins.globalStyle({ fileType: options?.globalStylesFileType || 'css' }),\r\n ],\r\n htmlEntry: [raxApp.plugins.entryDocument(options)],\r\n packageJSON: [raxApp.plugins.packageJSON(options)],\r\n },\r\n postProcessors: [prettier()],\r\n customizeBuilderOptions: options?.customizeBuilderOptions,\r\n });\r\n}\r\n\r\nexport const plugins = {\r\n containerClass,\r\n containerLifeCycles,\r\n containerMethods,\r\n containerInitState,\r\n containerInjectContext,\r\n containerInjectDataSourceEngine,\r\n containerInjectUtils,\r\n jsx,\r\n commonDeps,\r\n raxApp,\r\n};\r\n", "// \u751F\u6210 Vue 3 \u7EC4\u4EF6\r\n// import changeCase from 'change-case';\r\nimport {\r\n TEMPLATE_DEFINE_CHUNK_NAME,\r\n VUE_DEFAULT_LINK_AFTER,\r\n} from '../../../const/generator';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n} from '../../../types';\r\n// import { ensureValidClassName } from '../../../utils/validate';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n // const ir = next.ir as IContainerInfo;\r\n\r\n // \u5C06\u6A21\u5757\u540D\u8F6C\u6362\u6210 PascalCase \u7684\u683C\u5F0F\uFF0C\u5E76\u6DFB\u52A0\u7279\u5B9A\u540E\u7F00\uFF0C\u9632\u6B62\u547D\u540D\u51B2\u7A81\r\n // const componentName = ensureValidClassName(\r\n // `${changeCase.pascalCase(ir.moduleName)}$$${ir.containerType}`,\r\n // );\r\n\r\n // template \u5F00\u59CB\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart,\r\n content: '<template>',\r\n linkAfter: [\r\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart]\r\n ],\r\n });\r\n\r\n // \u9875\u9762\u7ED3\u6784\r\n // next.chunks.push({\r\n // type: ChunkType.STRING,\r\n // fileType: FileType.VUE,\r\n // name: TEMPLATE_DEFINE_CHUNK_NAME.TemplateDom,\r\n // content: `<div>${componentName} Component</div>`, // \u793A\u4F8B\u7ED3\u6784\r\n // linkAfter: [\r\n // ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.TemplateDom]\r\n // ],\r\n // });\r\n\r\n // template \u7ED3\u675F\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.TemplateEnd,\r\n content: '</template>',\r\n linkAfter: [\r\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.TemplateEnd]\r\n ],\r\n });\r\n\r\n // script \u5F00\u59CB\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart,\r\n content: '<script setup lang=\"ts\">',\r\n linkAfter: [\r\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart]\r\n ],\r\n });\r\n\r\n // \u5F15\u5165\u5916\u90E8\u4F9D\u8D56(\u5199\u5728vueCommonDeps.ts\u6587\u4EF6)\r\n // next.chunks.push({\r\n // type: ChunkType.STRING,\r\n // fileType: FileType.VUE,\r\n // name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\r\n // content: \"import { ref, onMounted } from 'vue';\",\r\n // linkAfter: [\r\n // ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart]\r\n // ],\r\n // });\r\n\r\n // \u6570\u636E\u5B9A\u4E49\r\n // next.chunks.push({\r\n // type: ChunkType.STRING,\r\n // fileType: FileType.VUE,\r\n // name: TEMPLATE_DEFINE_CHUNK_NAME.ConstVar,\r\n // content: '',\r\n // linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport],\r\n // });\r\n\r\n // mounted \u751F\u547D\u5468\u671F\u5F00\u59CB\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart,\r\n content: 'onMounted(async () => {',\r\n linkAfter: [\r\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart]\r\n ],\r\n });\r\n\r\n // mounted \u751F\u547D\u5468\u671F\u5185\u5BB9\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent,\r\n content: '',\r\n linkAfter: [\r\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent]\r\n ],\r\n });\r\n\r\n // mounted \u751F\u547D\u5468\u671F\u7ED3\u675F\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.OnMountedEnd,\r\n content: '});',\r\n linkAfter: [\r\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.OnMountedEnd]\r\n ],\r\n });\r\n\r\n // onUnMounted \u751F\u547D\u5468\u671F\u5F00\u59CB\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.UnMountedStart,\r\n content: 'onUnmounted(() => {',\r\n linkAfter: [\r\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.UnMountedStart]\r\n ],\r\n });\r\n\r\n // // onUnMounted \u751F\u547D\u5468\u671F\u5185\u5BB9\r\n // next.chunks.push({\r\n // type: ChunkType.STRING,\r\n // fileType: FileType.VUE,\r\n // name: TEMPLATE_DEFINE_CHUNK_NAME.UnMountedContent,\r\n // content: '',\r\n // linkAfter: [\r\n // ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.UnMountedContent]\r\n // ],\r\n // });\r\n\r\n // onUnMounted \u751F\u547D\u5468\u671F\u7ED3\u675F\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd,\r\n content: '});',\r\n linkAfter: [\r\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd]\r\n ],\r\n });\r\n\r\n // script \u7ED3\u675F\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd,\r\n content: '</script>',\r\n linkAfter: [\r\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd]\r\n ],\r\n });\r\n\r\n // CSS \u6837\u5F0F\u5F00\u59CB\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.CssStyleStart,\r\n content: '<style scoped lang=\"scss\">',\r\n linkAfter: [\r\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.CssStyleStart]\r\n ],\r\n });\r\n\r\n // \u793A\u4F8B CSS \u6837\u5F0F\r\n // next.chunks.push({\r\n // type: ChunkType.STRING,\r\n // fileType: FileType.VUE,\r\n // name: TEMPLATE_DEFINE_CHUNK_NAME.CssStyleImport,\r\n // content: '', // \u793A\u4F8B\u6837\u5F0F\r\n // linkAfter: [\r\n // ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.CssStyleImport]\r\n // ],\r\n // });\r\n\r\n // CSS \u6837\u5F0F\u7ED3\u675F\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.CssStyleEnd,\r\n content: '</style>',\r\n linkAfter: [\r\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.CssStyleEnd]\r\n ],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import _ from 'lodash';\r\nimport {\r\n IScope,\r\n CodePiece,\r\n NodeGenerator,\r\n NodeGeneratorConfig,\r\n NodePlugin,\r\n PIECE_TYPE,\r\n CodeGeneratorError,\r\n AttrData,\r\n} from '../types';\r\nimport { generateCompositeType } from './compositeType';\r\nimport { IPublicTypeNodeSchema, isNodeSchema, IPublicTypeNodeDataType, IPublicTypeCompositeValue } from '@alilc/lowcode-types';\r\nimport { isValidIdentifier } from './validate';\r\nimport { executeFunctionStack } from './aopHelper';\r\nimport { encodeJsxStringNode } from './encodeJsxAttrString';\r\nimport { getStaticExprValue } from './common';\r\n\r\n\r\n// \u5408\u5E76\u4E24\u4E2A NodeGeneratorConfig \u5BF9\u8C61\r\n// \u5B83\u4F1A\u5408\u5E76\u5904\u7406\u7A0B\u5E8F\u3001\u6807\u7B7E\u6620\u5C04\u3001\u5C5E\u6027\u63D2\u4EF6\u548C\u8282\u70B9\u63D2\u4EF6\uFF0C\u5E76\u8FD4\u56DE\u4E00\u4E2A\u65B0\u7684\u914D\u7F6E\u5BF9\u8C61\r\n// \u5982\u679C cfg1 \u548C cfg2 \u90FD\u6709 handlers\u3001tagMapping\u3001attrPlugins \u6216 nodePlugins\uFF0C\u5219\u5C06\u5B83\u4EEC\u5408\u5E76\u5230\u4E00\u8D77\r\nfunction mergeNodeGeneratorConfig(\r\n cfg1: NodeGeneratorConfig,\r\n cfg2: NodeGeneratorConfig = {},\r\n): NodeGeneratorConfig {\r\n const resCfg: NodeGeneratorConfig = {};\r\n if (cfg1.handlers || cfg2.handlers) {\r\n resCfg.handlers = {\r\n ...(cfg1.handlers || {}),\r\n ...(cfg2.handlers || {}),\r\n };\r\n }\r\n\r\n if (cfg1.tagMapping || cfg2.tagMapping) {\r\n resCfg.tagMapping = cfg2.tagMapping || cfg1.tagMapping;\r\n }\r\n\r\n if (cfg1.attrPlugins || cfg2.attrPlugins) {\r\n resCfg.attrPlugins = [];\r\n resCfg.attrPlugins.push(...(cfg2.attrPlugins || []));\r\n resCfg.attrPlugins.push(...(cfg1.attrPlugins || []));\r\n }\r\n\r\n if (cfg1.nodePlugins || cfg2.nodePlugins) {\r\n resCfg.nodePlugins = [];\r\n resCfg.nodePlugins.push(...(cfg2.nodePlugins || []));\r\n resCfg.nodePlugins.push(...(cfg1.nodePlugins || []));\r\n }\r\n\r\n return resCfg;\r\n}\r\n\r\n// \u68C0\u67E5\u5B57\u7B26\u4E32 v \u662F\u5426\u662F\u4E00\u4E2A\u7EAF\u5B57\u7B26\u4E32\r\nexport function isPureString(v: string) {\r\n // FIXME: \u76EE\u524D\u7684\u65B9\u5F0F\u4E0D\u591F\u4E25\u8C28\r\n return (v[0] === \"'\" && v[v.length - 1] === \"'\") || (v[0] === '\"' && v[v.length - 1] === '\"');\r\n}\r\n\r\n// \u751F\u6210\u5C5E\u6027\u503C\u3002\r\n// \u4F20\u5165\u7684 attrData \u5305\u542B\u5C5E\u6027\u540D\u548C\u5C5E\u6027\u503C\uFF0Cscope \u7528\u4E8E\u5B58\u50A8\u4E0A\u4E0B\u6587\u4FE1\u606F\uFF0Cconfig \u5305\u542B\u4E86\u8282\u70B9\u751F\u6210\u5668\u7684\u914D\u7F6E\u4FE1\u606F\u3002\r\n// \u8BE5\u51FD\u6570\u8FD4\u56DE\u4E00\u4E2A CodePiece \u6570\u7EC4\uFF0C\u5176\u4E2D\u5305\u542B\u5C5E\u6027\u540D\u548C\u5904\u7406\u540E\u7684\u5C5E\u6027\u503C\u3002\r\nfunction generateAttrValue(\r\n attrData: { attrName: string; attrValue: IPublicTypeCompositeValue },\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n): CodePiece[] {\r\n const valueStr = generateCompositeType(attrData.attrValue, scope, {\r\n handlers: config?.handlers,\r\n nodeGenerator: config?.self,\r\n });\r\n return [\r\n {\r\n type: PIECE_TYPE.ATTR,\r\n name: attrData.attrName,\r\n value: valueStr,\r\n },\r\n ];\r\n}\r\n\r\n// \u751F\u6210 Vue \u7684\u5C5E\u6027\r\nfunction generateAttr(\r\n attrName: string,\r\n attrValue: IPublicTypeCompositeValue,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n): CodePiece[] {\r\n let pieces: CodePiece[] = [];\r\n // pieces = generateAttrValue({ attrName, attrValue }, scope, config);\r\n\r\n if (config?.attrPlugins) {\r\n pieces = executeFunctionStack<AttrData, CodePiece[], NodeGeneratorConfig>(\r\n { attrName, attrValue },\r\n scope,\r\n config.attrPlugins,\r\n generateAttrValue,\r\n config,\r\n );\r\n } else {\r\n pieces = generateAttrValue({ attrName, attrValue }, scope, config);\r\n }\r\n\r\n pieces = pieces.map((p) => {\r\n let newValue: string;\r\n let pName: string;\r\n if (p.name === 'style' && p.value) {\r\n // \u5BF9 Vue 3 \u7684 style \u5C5E\u6027\u683C\u5F0F\u8FDB\u884C\u5904\u7406\r\n const styleObject = JSON.parse(p.value.replace(/{{|}}/g, '')); // \u53BB\u6389 {{}} \u5E76\u89E3\u6790\u4E3A\u5BF9\u8C61\r\n const styleString = Object.entries(styleObject)\r\n .map(([key, value]) => {\r\n // \u5224\u65AD value \u662F\u5426\u4E3A\u6570\u5B57\r\n const isNumber = typeof value === 'number' || (!isNaN(Number(value)));\r\n return isNumber ? `${key}: ${value}` : `${key}: '${value}'`;\r\n })\r\n .join('; ');\r\n pName = `:${p.name}`;\r\n newValue = `\"{${styleString}}\"`; // \u8F6C\u6362\u4E3A Vue \u7684 style \u683C\u5F0F\r\n } else if (p.name === 'dataSource') {\r\n newValue = `'${p.value}'`;\r\n pName = `${p.name}`;\r\n } else if (p.value && isPureString(p.value)) {\r\n newValue = `${p.value}`;\r\n pName = `${p.name}`;\r\n } else {\r\n // Vue \u7684\u6570\u636E\u7ED1\u5B9A\u4F7F\u7528\u53CC\u82B1\u62EC\u53F7\r\n newValue = `${p.value}`;\r\n pName = `:${p.name}`;\r\n }\r\n\r\n return {\r\n value: `${pName}=${newValue}`,\r\n type: PIECE_TYPE.ATTR,\r\n };\r\n });\r\n\r\n return pieces;\r\n}\r\n\r\n// \u751F\u6210\u8282\u70B9\u7684\u6240\u6709\u5C5E\u6027\u90E8\u5206\uFF0C\u8FD4\u56DE\u4EE3\u7801\u7247\u6BB5\u6570\u7EC4\r\nfunction generateAttrs(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n): CodePiece[] {\r\n const { props } = nodeItem;\r\n\r\n let pieces: CodePiece[] = [];\r\n\r\n if (props) {\r\n if (!Array.isArray(props)) {\r\n Object.keys(props).forEach((propName: string) => {\r\n if (isValidIdentifier(propName)) {\r\n pieces = pieces.concat(generateAttr(propName, props[propName] as IPublicTypeCompositeValue, scope, config));\r\n }\r\n });\r\n } else {\r\n props.forEach((prop) => {\r\n if (prop.name && isValidIdentifier(prop.name) && !prop.spread) {\r\n pieces = pieces.concat(generateAttr(prop.name, prop.value, scope, config));\r\n }\r\n\r\n // TODO: \u5904\u7406 spread \u573A\u666F\uFF08<Xxx {...(something)}/>)\r\n // \u8FD9\u79CD\u5728 schema \u91CC\u9762\u600E\u4E48\u63CF\u8FF0\r\n });\r\n }\r\n }\r\n\r\n return pieces;\r\n}\r\n\r\n// \u751F\u6210 v-if \u903B\u8F91\r\nfunction generateConditionVueCtrl(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n next?: NodePlugin,\r\n): CodePiece[] {\r\n const pieces: CodePiece[] = next ? next(nodeItem, scope, config) : [];\r\n\r\n if (nodeItem.condition != null && nodeItem.condition !== true) {\r\n let value = generateCompositeType(nodeItem.condition, scope, {\r\n handlers: config?.handlers,\r\n });\r\n\r\n value = value.replace(/[{}]/g, '');\r\n\r\n pieces.unshift({\r\n value: `v-if=\"${value}\"`,\r\n type: PIECE_TYPE.ATTR,\r\n });\r\n }\r\n\r\n return pieces;\r\n}\r\n\r\n// \u751F\u6210 v-for \u903B\u8F91\r\nfunction generateVueLoopCtrl(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n next?: NodePlugin,\r\n): CodePiece[] {\r\n if (nodeItem.loop) {\r\n const loopItemName = nodeItem.loopArgs?.[0] || 'item';\r\n const loopIndexName = nodeItem.loopArgs?.[1] || 'index';\r\n\r\n let loopDataExpr = generateCompositeType(nodeItem.loop, scope, {\r\n handlers: config?.handlers,\r\n });\r\n\r\n // \u5C06 v-for \u8868\u8FBE\u5F0F\u4E2D\u7684\u53CC\u5F15\u53F7\u66FF\u6362\u4E3A\u5355\u5F15\u53F7\r\n loopDataExpr = loopDataExpr.replace(/\"/g, \"'\");\r\n\r\n const pieces: CodePiece[] = next ? next(nodeItem, scope, config) : [];\r\n pieces.unshift({\r\n value: `v-for=\"(${loopItemName}, ${loopIndexName}) in ${loopDataExpr}\"`,\r\n type: PIECE_TYPE.ATTR,\r\n });\r\n\r\n return pieces;\r\n }\r\n\r\n return next ? next(nodeItem, scope, config) : [];\r\n}\r\n\r\n// generateBasicNode \u7528\u4E8E\u751F\u6210\u8282\u70B9\u7684\u57FA\u672C\u7ED3\u6784\u3002\u5B83\u4F1A\u751F\u6210\u5305\u542B\u6807\u7B7E\u540D\u79F0\u7684 CodePiece \u5E76\u8FD4\u56DE\u8BE5\u6570\u7EC4\u3002\r\nfunction generateBasicNode(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n): CodePiece[] {\r\n const pieces: CodePiece[] = [];\r\n let tagName = (config?.tagMapping || _.identity)(nodeItem.componentName);\r\n\r\n // Div\u6807\u7B7E\u8F6C\u6210div\u6807\u7B7E\r\n tagName = tagName === 'Div' ? 'div' : tagName;\r\n pieces.push({\r\n value: tagName || '', // FIXME: type detection error\r\n type: PIECE_TYPE.TAG,\r\n });\r\n\r\n return pieces;\r\n}\r\n\r\n// generateSimpleNode \u751F\u6210\u7B80\u5355\u7684\u8282\u70B9\u7ED3\u6784\uFF0C\u5305\u62EC\u57FA\u672C\u90E8\u5206\uFF08\u6807\u7B7E\uFF09\u3001\u5C5E\u6027\u90E8\u5206\u548C\u5B50\u8282\u70B9\u90E8\u5206\u3002\r\n// \u5B50\u8282\u70B9\u901A\u8FC7\u8C03\u7528 config.self \u6765\u9012\u5F52\u751F\u6210\u3002\r\nfunction generateSimpleNode(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n): CodePiece[] {\r\n const basicParts = generateBasicNode(nodeItem, scope, config) || [];\r\n const attrParts = generateAttrs(nodeItem, scope, config) || [];\r\n const childrenParts: CodePiece[] = [];\r\n if (nodeItem.children && config?.self) {\r\n const childrenStr = config.self(nodeItem.children, scope);\r\n\r\n childrenParts.push({\r\n type: PIECE_TYPE.CHILDREN,\r\n value: childrenStr,\r\n });\r\n }\r\n\r\n return [...basicParts, ...attrParts, ...childrenParts];\r\n}\r\n\r\n// \u5C06\u751F\u6210\u7684\u4EE3\u7801\u7247\u6BB5\u8FDE\u63A5\u6210\u4E00\u4E2A\u5B8C\u6574\u7684 template \u8282\u70B9\u3002\r\n// \u5B83\u68C0\u67E5\u4EE3\u7801\u7247\u6BB5\u662F\u5426\u5305\u542B\u5355\u4E2A\u6807\u7B7E\u540D\u79F0\uFF0C\u5E76\u5C06\u5C5E\u6027\u3001\u5B50\u8282\u70B9\u3001before \u548C after \u7247\u6BB5\u6574\u5408\u6210\u4E00\u4E2A JSX \u5B57\u7B26\u4E32\u3002\r\n\r\nfunction linkPieces(pieces: CodePiece[]): string {\r\n const tagsPieces = pieces.filter((p) => p.type === PIECE_TYPE.TAG);\r\n if (tagsPieces.length !== 1) {\r\n throw new CodeGeneratorError('Only one tag definition required', tagsPieces);\r\n }\r\n const tagName = tagsPieces[0].value;\r\n\r\n const beforeParts = pieces\r\n .filter((p) => p.type === PIECE_TYPE.BEFORE)\r\n .map((p) => p.value)\r\n .join('');\r\n\r\n const afterParts = pieces\r\n .filter((p) => p.type === PIECE_TYPE.AFTER)\r\n .map((p) => p.value)\r\n .join('');\r\n\r\n const childrenParts = pieces\r\n .filter((p) => p.type === PIECE_TYPE.CHILDREN)\r\n .map((p) => p.value)\r\n .join('');\r\n\r\n let attrsParts = pieces\r\n .filter((p) => p.type === PIECE_TYPE.ATTR)\r\n .map((p) => p.value)\r\n .join(' ');\r\n\r\n attrsParts = attrsParts ? ` ${attrsParts}` : '';\r\n\r\n if (childrenParts) {\r\n return `${beforeParts}<${tagName}${attrsParts}>${childrenParts}</${tagName}>${afterParts}`;\r\n }\r\n\r\n return `${beforeParts}<${tagName}${attrsParts} />${afterParts}`;\r\n}\r\n\r\n// generateNodeSchema \u662F\u8BE5\u6A21\u5757\u7684\u6838\u5FC3\u90E8\u5206\uFF0C\u7528\u4E8E\u5C06\u8282\u70B9\u751F\u6210 template \u4EE3\u7801\u3002\r\n// \u5B83\u53EF\u4EE5\u5E94\u7528 nodePlugins \u6765\u751F\u6210\u989D\u5916\u7684\u4EE3\u7801\u7247\u6BB5\uFF0C\u5E76\u8C03\u7528 generateSimpleNode \u751F\u6210\u8282\u70B9\u7684\u57FA\u672C\u7ED3\u6784\u3002\r\nfunction generateNodeSchema(\r\n nodeItem: IPublicTypeNodeSchema,\r\n scope: IScope,\r\n config?: NodeGeneratorConfig,\r\n): string {\r\n const pieces: CodePiece[] = [];\r\n if (config?.nodePlugins) {\r\n const res = executeFunctionStack<IPublicTypeNodeSchema, CodePiece[], NodeGeneratorConfig>(\r\n nodeItem,\r\n scope,\r\n config.nodePlugins,\r\n generateSimpleNode,\r\n config,\r\n );\r\n pieces.push(...res);\r\n } else {\r\n pieces.push(...generateSimpleNode(nodeItem, scope, config));\r\n }\r\n\r\n return linkPieces(pieces);\r\n}\r\n\r\nconst handleChildren = (v: string[]) => v.join('');\r\n\r\n// createNodeGenerator \u662F\u751F\u6210\u5668\u7684\u4E3B\u51FD\u6570\uFF0C\u5B83\u4F1A\u6839\u636E\u4F20\u5165\u7684\u914D\u7F6E cfg \u751F\u6210\u8282\u70B9\u4EE3\u7801\u3002\r\n// \u5982\u679C nodeItem \u662F\u6570\u7EC4\uFF0C\u751F\u6210\u5668\u4F1A\u9012\u5F52\u751F\u6210\u6BCF\u4E2A\u8282\u70B9\u7684\u4EE3\u7801\uFF0C\u5E76\u5C06\u5B83\u4EEC\u5408\u5E76\u6210\u4E00\u4E2A\u5B8C\u6574\u7684\u5B57\u7B26\u4E32\u3002\r\nexport function createNodeGenerator(cfg: NodeGeneratorConfig = {}): NodeGenerator<string> {\r\n const generateNode = (nodeItem: IPublicTypeNodeDataType, scope: IScope): string => {\r\n if (_.isArray(nodeItem)) {\r\n const resList = nodeItem.map((n) => generateNode(n, scope));\r\n return handleChildren(resList);\r\n }\r\n\r\n if (isNodeSchema(nodeItem)) {\r\n return generateNodeSchema(nodeItem, scope, {\r\n ...cfg,\r\n self: generateNode,\r\n });\r\n }\r\n\r\n const valueStr = generateCompositeType(nodeItem, scope, {\r\n handlers: cfg.handlers,\r\n nodeGenerator: generateNode,\r\n });\r\n\r\n if (isPureString(valueStr)) {\r\n // Vue \u6A21\u677F\u4E2D\u7684\u63D2\u503C\u8868\u8FBE\u5F0F\u4F7F\u7528 {{ }}\r\n return `{{ ${encodeJsxStringNode(getStaticExprValue<string>(valueStr))} }}`;\r\n }\r\n\r\n // \u5904\u7406 Vue \u6A21\u677F\u4E2D\u7684\u52A8\u6001\u7ED1\u5B9A\uFF0C\u7528 v-bind \u6216 : \u6765\u4EE3\u66FF JSX \u4E2D\u7684 {}\r\n return `{{${valueStr}}}`;\r\n };\r\n\r\n // Vue \u4E0D\u9700\u8981 JSX \u7684 {} \u5305\u88F9\uFF0C\u56E0\u6B64\u4E0D\u9700\u8981 unwrapJsExprQuoteInJsx\r\n return (nodeItem: IPublicTypeNodeDataType, scope: IScope) => generateNode(nodeItem, scope);\r\n}\r\n\r\n\r\n// Vue \u4EE3\u7801\u751F\u6210\u5668\u7684\u6838\u5FC3\u51FD\u6570\r\nexport function createVueNodeGenerator(cfg?: NodeGeneratorConfig): NodeGenerator<string> {\r\n const newCfg = mergeNodeGeneratorConfig({\r\n nodePlugins: [generateVueLoopCtrl, generateConditionVueCtrl],\r\n }, cfg);\r\n\r\n return createNodeGenerator(newCfg);\r\n}\r\n\r\n", "/**\r\n * \u5224\u65AD\u662F\u5426\u662F\u539F\u5B50\u7C7B\u578B\u7684\u8868\u8FBE\u5F0F\r\n */\r\nexport function isLiteralAtomicExpr(expr: string): boolean {\r\n return (\r\n expr === 'null' ||\r\n expr === 'undefined' ||\r\n expr === 'true' ||\r\n expr === 'false' ||\r\n /^-?\\d+(\\.\\d+)?$/.test(expr)\r\n );\r\n}\r\n", "import { Expression } from '@babel/types';\r\n\r\n/** \u5224\u65AD\u662F\u975E\u662F\u4E00\u4E9B\u7B80\u5355\u76F4\u63A5\u7684\u5B57\u9762\u503C */\r\nexport function isSimpleStraightLiteral(expr: Expression): boolean {\r\n switch (expr.type) {\r\n case 'BigIntLiteral':\r\n case 'BooleanLiteral':\r\n case 'DecimalLiteral':\r\n case 'NullLiteral':\r\n case 'NumericLiteral':\r\n case 'RegExpLiteral':\r\n case 'StringLiteral':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n}\r\n", "import { Expression } from '@babel/types';\r\nimport generate from '@babel/generator';\r\nimport { IScope } from '../../../types';\r\nimport { parseExpressionConvertThis2Context } from '../../../utils/expressionParser';\r\n\r\n/**\r\n * \u5C06\u6240\u6709\u7684 this.xxx \u66FF\u6362\u4E3A __$$context.xxx\r\n * @param expr\r\n */\r\nexport function transformThis2Context(\r\n expr: string | Expression,\r\n scope: IScope,\r\n { ignoreRootScope = false } = {},\r\n): string {\r\n if (ignoreRootScope && scope.parent == null) {\r\n return typeof expr === 'string' ? expr : generate(expr).code;\r\n }\r\n\r\n // \u4E0B\u9762\u8FD9\u79CD\u5B57\u7B26\u4E32\u66FF\u6362\u7684\u65B9\u5F0F\u867D\u7136\u7B80\u5355\u76F4\u63A5\uFF0C\u4F46\u662F\u5BF9\u4E8E\u590D\u6742\u573A\u666F\u4F1A\u8BEF\u5339\u914D\uFF0C\u6545\u540E\u671F\u6539\u6210\u4E86\u89E3\u6790 AST \u7136\u540E\u4FEE\u6539 AST \u6700\u540E\u518D\u91CD\u65B0\u751F\u6210\u4EE3\u7801\u7684\u65B9\u5F0F\r\n // return expr\r\n // .replace(/\\bthis\\.item\\./g, () => 'item.')\r\n // .replace(/\\bthis\\.index\\./g, () => 'index.')\r\n // .replace(/\\bthis\\./g, () => '__$$context.');\r\n return parseExpressionConvertThis2Context(\r\n expr,\r\n '__$$context',\r\n scope.bindings?.getAllBindings() || [],\r\n );\r\n}\r\n", "import { IScope } from '../../../types';\r\nimport { parseExpression } from '../../../utils/expressionParser';\r\nimport { isLiteralAtomicExpr } from '../util/isLiteralAtomicExpr';\r\nimport { isSimpleStraightLiteral } from '../util/isSimpleStraightLiteral';\r\nimport { transformThis2Context } from './transformThis2Context';\r\n\r\nexport function transformJsExpr(\r\n expr: string,\r\n scope: IScope,\r\n { dontWrapEval = false, dontTransformThis2ContextAtRootScope = false } = {},\r\n) {\r\n if (!expr) {\r\n return 'undefined';\r\n }\r\n\r\n if (isLiteralAtomicExpr(expr)) {\r\n return expr;\r\n }\r\n\r\n const exprAst = parseExpression(expr);\r\n\r\n // \u5BF9\u4E8E\u4E0B\u9762\u8FD9\u4E9B\u6BD4\u8F83\u5B89\u5168\u7684\u5B57\u9762\u503C\uFF0C\u53EF\u4EE5\u76F4\u63A5\u8FD4\u56DE\u5BF9\u5E94\u7684\u8868\u8FBE\u5F0F\uFF0C\u800C\u975E\u5305\u4E00\u5C42\r\n if (isSimpleStraightLiteral(exprAst)) {\r\n return expr;\r\n }\r\n\r\n // \u79FB\u9664 `this` \u5173\u952E\u5B57\r\n const transformedExpr = transformThis2Context(exprAst, scope, {\r\n ignoreRootScope: dontTransformThis2ContextAtRootScope,\r\n }).replace(/this\\.|state\\./g, '');\r\n\r\n if (dontWrapEval) {\r\n return transformedExpr;\r\n // return transformThis2Context(exprAst, scope, {\r\n // ignoreRootScope: dontTransformThis2ContextAtRootScope,\r\n // });\r\n }\r\n\r\n switch (exprAst.type) {\r\n // \u5BF9\u4E8E\u76F4\u63A5\u5199\u4E2A\u51FD\u6570\u7684\uFF0C\u5219\u4E0D\u7528\u518D\u5305\u4E0B\uFF0C\u56E0\u4E3A\u8FD9\u6837\u4E0D\u4F1A\u629B\u51FA\u5F02\u5E38\u7684\r\n case 'ArrowFunctionExpression':\r\n case 'FunctionExpression':\r\n return transformThis2Context(exprAst, scope, {\r\n ignoreRootScope: dontTransformThis2ContextAtRootScope,\r\n });\r\n\r\n default:\r\n break;\r\n }\r\n\r\n // \u5176\u4ED6\u7684\u90FD\u9700\u8981\u5305\u4E00\u5C42\r\n // return `__$$eval(() => (${transformThis2Context(exprAst, scope, {\r\n // ignoreRootScope: dontTransformThis2ContextAtRootScope,\r\n // })}))`;\r\n // return `{{${transformThis2Context(exprAst, scope, {\r\n // ignoreRootScope: dontTransformThis2ContextAtRootScope,\r\n // })}}}`;\r\n return `${transformedExpr}`;\r\n}\r\n", "// \u4ECE\u7EC4\u4EF6\u6811\u751F\u6210template\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n HandlerSet,\r\n ICodeStruct,\r\n IContainerInfo,\r\n IScope,\r\n NodeGeneratorConfig,\r\n} from '../../../types';\r\n\r\nimport { TEMPLATE_DEFINE_CHUNK_NAME } from '../../../const';\r\n\r\nimport { createVueNodeGenerator } from '../../../utils/nodeToTemplate';\r\nimport { Scope } from '../../../utils/Scope';\r\nimport { IPublicTypeJSExpression } from '@alilc/lowcode-types';\r\nimport { generateExpression } from '../../../utils/jsExpression';\r\nimport { transformJsExpr } from '../../../core/vue/handlers/transformJsExpression';\r\nimport { transformThis2Context } from '../../../core/vue/handlers/transformThis2Context';\r\nimport { generateCompositeType } from '../../../utils/compositeType';\r\n\r\n// \u63D2\u4EF6\u7684\u914D\u7F6E\u63A5\u53E3\uFF0C\u7528\u4E8E\u81EA\u5B9A\u4E49\u63D2\u4EF6\u7684\u884C\u4E3A\uFF0C\u5982\u6587\u4EF6\u7C7B\u578B\u548C\u8282\u70B9\u7C7B\u578B\u6620\u5C04\r\nexport interface PluginConfig {\r\n fileType?: string;\r\n nodeTypeMapping?: Record<string, string>;\r\n}\r\n\r\n// \u6838\u5FC3\u7684\u63D2\u4EF6\u5DE5\u5382\u51FD\u6570\uFF0C\u5B83\u751F\u6210\u5E76\u8FD4\u56DE\u4E00\u4E2A\u7528\u4E8E\u5904\u7406template\u751F\u6210\u7684\u63D2\u4EF6\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg = {\r\n fileType: FileType.VUE,\r\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\r\n nodeTypeMapping: {} as Record<string, string>,\r\n ...config,\r\n };\r\n\r\n const { nodeTypeMapping } = cfg;\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const { tolerateEvalErrors = true } = next.contextData;\r\n\r\n // \u8FD9\u91CC\u4F1A\u5C06\u5185\u90E8\u7684\u4E00\u4E9B\u5B50\u4E0A\u4E0B\u6587\u7684\u8BBF\u95EE(this.xxx)\u8F6C\u6362\u4E3A __$$context.xxx \u7684\u5F62\u5F0F\r\n // \u4E0E Rax \u6240\u4E0D\u540C\u7684\u662F\uFF0C\u8FD9\u91CC\u4E0D\u4F1A\u5C06\u6700\u9876\u5C42\u7684 this \u8F6C\u6362\u6389\r\n const customHandlers: HandlerSet<string> = {\r\n expression(input: IPublicTypeJSExpression, scope: IScope, config2) {\r\n return transformJsExpr(generateExpression(input, scope), scope, {\r\n dontWrapEval: !(config2?.tolerateEvalErrors ?? tolerateEvalErrors),\r\n dontTransformThis2ContextAtRootScope: true,\r\n });\r\n },\r\n function(input, scope: IScope) {\r\n return transformThis2Context(\r\n generateCompositeType(\r\n {\r\n type: 'JSFunction',\r\n value: input.value || 'function () {}',\r\n },\r\n Scope.createRootScope(),\r\n ),\r\n scope,\r\n { ignoreRootScope: true },\r\n );\r\n },\r\n };\r\n\r\n // \u5B9A\u4E49\u4E86\u5982\u4F55\u5904\u7406\u5C5E\u6027\uFF08\u5982 ref\uFF09\u3001\u6807\u7B7E\u6620\u5C04\u548C\u9519\u8BEF\u5BB9\u5FCD\u673A\u5236\r\n const generatorPlugins: NodeGeneratorConfig = {\r\n handlers: customHandlers,\r\n tagMapping: (v) => nodeTypeMapping[v] || v,\r\n tolerateEvalErrors,\r\n };\r\n\r\n const generator = createVueNodeGenerator(generatorPlugins);\r\n\r\n // createReactNodeGenerator \u51FD\u6570\u521B\u5EFA\u4E00\u4E2A Vue \u8282\u70B9\u751F\u6210\u5668\uFF0C\u5E76\u901A\u8FC7\u4F20\u5165\u7684 ir\uFF08\u4E2D\u95F4\u8868\u793A\uFF09\u548C scope\uFF08\u4F5C\u7528\u57DF\uFF09\u751F\u6210\u6700\u7EC8\u7684 JSX \u5185\u5BB9\r\n const ir = next.ir as IContainerInfo;\r\n const scope: IScope = Scope.createRootScope();\r\n const templateContent = generator(ir, scope); // \u751F\u6210 Vue \u6A21\u677F\u5185\u5BB9\r\n // Vue \u6A21\u677F\u751F\u6210\u7ED3\u679C\u88AB\u4FDD\u5B58\u5230 next.chunks \u4E2D\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.TemplateDom,\r\n // content: '',\r\n content: `\r\n ${templateContent}\r\n `,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "// VUE\u6846\u67B6\u7684\u516C\u5171\u4F9D\u8D56\r\nimport { TEMPLATE_DEFINE_CHUNK_NAME } from '../../../const';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n} from '../../../types';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\r\n content: `\r\nimport { onMounted, onUnmounted, ref } from 'vue';`,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "const suffix = 'Request';\r\n/**\r\n * \u83B7\u53D6api\u540D\u79F0\r\n */\r\nexport function getApiName(apiId: string) {\r\n return apiId + suffix;\r\n}\r\n", "import {\r\n InterpretDataSourceConfig\r\n} from '@alilc/lowcode-types';\r\n\r\nimport {\r\n TEMPLATE_DEFINE_CHUNK_NAME,\r\n DEFAULT_LINK_AFTER\r\n} from '../../../const';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct\r\n} from '../../../types';\r\n\r\nimport { isValidContainerType } from '../../../utils/schema';\r\nimport { getApiName } from '../../../utils/apiHandler';\r\n\r\nexport interface PluginConfig {\r\n fileType?: string;\r\n\r\n /**\r\n * \u6570\u636E\u6E90\u914D\u7F6E\r\n */\r\n datasourceConfig?: {\r\n\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\r\n engineVersion?: string;\r\n\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\r\n enginePackage?: string;\r\n\r\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\r\n handlersVersion?: {\r\n [key: string]: string;\r\n };\r\n\r\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\r\n handlersPackages?: {\r\n [key: string]: string;\r\n };\r\n };\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const dataSourceConfig = isValidContainerType(pre.ir) ? pre.ir.dataSource : null;\r\n const dataSourceItems: InterpretDataSourceConfig[] =\r\n (dataSourceConfig && dataSourceConfig.list) || [];\r\n if (dataSourceItems.length > 0) {\r\n dataSourceItems.forEach((ds) => {\r\n const dsType = ds.type || 'fetch';\r\n // \u5904\u7406\u975E\u81EA\u5B9A\u4E49\u6570\u636E\u6E90\r\n if (dsType !== 'custom') {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport,\r\n content: `\r\n import ${getApiName(ds.id)} from '@/api/${ds.id}'\r\n `,\r\n linkAfter: [...DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport]],\r\n });\r\n }\r\n });\r\n }\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { flatMap, camelCase, get } from 'lodash';\r\nimport { DEFAULT_LINK_AFTER, TEMPLATE_DEFINE_CHUNK_NAME } from '../../../const';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n CodeGeneratorError,\r\n DependencyType,\r\n FileType,\r\n ICodeChunk,\r\n ICodeStruct,\r\n IDependency,\r\n IExternalDependency,\r\n IInternalDependency,\r\n IWithDependency,\r\n} from '../../../types';\r\n\r\nimport { isValidIdentifier } from '../../../utils/validate';\r\n\r\n// TODO: main \u8FD9\u4E2A\u4FE1\u606F\u5230\u5E95\u600E\u4E48\u7528\uFF0C\u662F\u4E0D\u662F\u5916\u90E8\u5305\u4E0D\u9700\u8981\u4F7F\u7528\uFF1F\r\nconst DEP_MAIN_BLOCKLIST = ['lib', 'lib/index', 'es', 'es/index', 'main'];\r\nconst DEFAULT_EXPORT_NAME = '__default__';\r\n\r\nfunction groupDepsByPack(deps: IDependency[]): Record<string, IDependency[]> {\r\n const depMap: Record<string, IDependency[]> = {};\r\n\r\n const addDep = (pkg: string, dep: IDependency) => {\r\n if (!depMap[pkg]) {\r\n depMap[pkg] = [];\r\n }\r\n depMap[pkg].push(dep);\r\n };\r\n\r\n deps.forEach((dep) => {\r\n if (dep.dependencyType === DependencyType.Internal) {\r\n addDep(`${(dep as IInternalDependency).moduleName}${dep.main ? `/${dep.main}` : ''}`, dep);\r\n } else {\r\n let depMain = '';\r\n // TODO: \u90E8\u5206\u7C7B\u578B\u7684 main \u6682\u65F6\u8BA4\u4E3A\u6CA1\u7528\r\n if (dep.main && DEP_MAIN_BLOCKLIST.indexOf(dep.main) < 0) {\r\n depMain = dep.main;\r\n }\r\n if (depMain.substring(0, 1) === '/') {\r\n depMain = depMain.substring(1);\r\n }\r\n addDep(`${(dep as IExternalDependency).package}${depMain ? `/${depMain}` : ''}`, dep);\r\n }\r\n });\r\n\r\n return depMap;\r\n}\r\n\r\ninterface IDependencyItem {\r\n exportName: string;\r\n aliasName?: string;\r\n isDefault?: boolean;\r\n subName?: string;\r\n nodeIdentifier?: string; // \u4E0E\u4F7F\u7528\u5904\u7684\u6620\u5C04\u5173\u7CFB\uFF0C\u7406\u8BBA\u4E0A\u662F\u4E0D\u53EF\u53D8\u66F4\u7684\uFF0C\u5982\u9700\u53D8\u66F4\u9700\u8981\u63D0\u4F9B\u989D\u5916\u4FE1\u606F\r\n source: IDependency;\r\n}\r\n\r\ninterface IExportItem {\r\n exportName: string;\r\n aliasNames: string[];\r\n isDefault?: boolean;\r\n needOriginExport: boolean;\r\n}\r\n\r\nfunction getDependencyIdentifier(info: IDependencyItem): string {\r\n return info.aliasName || info.exportName;\r\n}\r\n\r\nfunction getExportNameOfDep(dep: IDependency): string {\r\n if (dep.destructuring) {\r\n return (\r\n dep.exportName ||\r\n dep.componentName ||\r\n throwNewError('destructuring dependency must have exportName or componentName')\r\n );\r\n }\r\n\r\n if (!dep.subName) {\r\n return (\r\n dep.componentName ||\r\n dep.exportName ||\r\n throwNewError('dependency item must have componentName or exportName')\r\n );\r\n }\r\n\r\n return (\r\n dep.exportName ||\r\n `__$${camelCase(\r\n get(dep, 'moduleName') ||\r\n get(dep, 'package') ||\r\n throwNewError('dep.moduleName or dep.package is undefined'),\r\n )}_default`\r\n );\r\n}\r\n\r\nfunction throwNewError(msg: string): never {\r\n throw new Error(msg);\r\n}\r\n\r\nfunction buildPackageImport(\r\n pkg: string,\r\n deps: IDependency[],\r\n targetFileType: string,\r\n useAliasName: boolean,\r\n): ICodeChunk[] {\r\n // \u5982\u679C\u538B\u6839\u6CA1\u6709\u5305\uFF0C\u5219\u4E0D\u751F\u6210\u5BF9\u5E94\u7684 import \u8BED\u53E5\uFF08\u751F\u6210\u4E86\u6CA1\u6709\u4EFB\u4F55\u610F\u4E49\uFF09\r\n if (!pkg || pkg === 'undefined' || pkg === 'null') {\r\n // TODO: \u8981\u4E0D\u8981\u52A0\u4E2A warning\uFF1F\r\n return [];\r\n }\r\n\r\n const chunks: ICodeChunk[] = [];\r\n\r\n const exportItems: Record<string, IExportItem> = {};\r\n const defaultExportNames: string[] = [];\r\n\r\n const depsInfo: IDependencyItem[] = deps.map((dep) => {\r\n const info: IDependencyItem = {\r\n exportName: getExportNameOfDep(dep),\r\n isDefault: !dep.destructuring,\r\n subName: dep.subName || undefined,\r\n nodeIdentifier: dep.componentName || undefined,\r\n source: dep,\r\n };\r\n\r\n // \u4E0B\u9762 5 \u4E2A\u903B\u8F91\u662F\u6E05\u7406\u4E0D\u5FC5\u8981\u7684\u5197\u4F59\u4FE1\u606F\uFF0C\u505A\u5230\u6570\u636E\u7ED3\u6784\u5F52\u4E00\u5316\r\n if (info.isDefault) {\r\n if (defaultExportNames.indexOf(info.exportName) < 0) {\r\n defaultExportNames.push(info.exportName);\r\n }\r\n }\r\n\r\n if (!info.subName) {\r\n if (info.nodeIdentifier === info.exportName) {\r\n info.nodeIdentifier = undefined;\r\n }\r\n\r\n if (info.isDefault) {\r\n info.aliasName = info.nodeIdentifier || info.exportName;\r\n info.exportName = DEFAULT_EXPORT_NAME;\r\n }\r\n\r\n if (info.nodeIdentifier) {\r\n info.aliasName = info.nodeIdentifier;\r\n info.nodeIdentifier = undefined;\r\n }\r\n } else {\r\n if (info.isDefault) {\r\n info.aliasName = info.exportName;\r\n info.exportName = DEFAULT_EXPORT_NAME;\r\n }\r\n\r\n if (info.nodeIdentifier === `${info.exportName}.${info.subName}`) {\r\n info.nodeIdentifier = undefined;\r\n }\r\n }\r\n\r\n return info;\r\n });\r\n\r\n // \u5EFA\u7ACB export \u9879\u76EE\u7684\u5217\u8868\r\n depsInfo.forEach((info) => {\r\n if (!exportItems[info.exportName]) {\r\n exportItems[info.exportName] = {\r\n exportName: info.exportName,\r\n isDefault: info.isDefault,\r\n aliasNames: [],\r\n needOriginExport: false,\r\n };\r\n }\r\n\r\n if (!info.nodeIdentifier && !info.aliasName) {\r\n exportItems[info.exportName].needOriginExport = true;\r\n }\r\n });\r\n\r\n // \u5EFA\u7ACB\u522B\u540D\u5B57\u5178\r\n depsInfo.forEach((info) => {\r\n if (info.aliasName) {\r\n const { aliasNames } = exportItems[info.exportName];\r\n if (aliasNames.indexOf(info.aliasName) < 0) {\r\n aliasNames.push(info.aliasName);\r\n }\r\n }\r\n });\r\n\r\n // fix: \u7236\u7EC4\u4EF6ImportAliasDefine, \u4E0E\u5B50\u7EC4\u4EF6import\u7684\u7236\u7EC4\u4EF6\u51B2\u7A81\u60C5\u51B5\r\n depsInfo.forEach((info) => {\r\n if (info.nodeIdentifier) {\r\n const exportItem = exportItems[info.exportName];\r\n if (!exportItem.needOriginExport && exportItem.aliasNames.length > 0) {\r\n // eslint-disable-next-line no-param-reassign\r\n info.aliasName = exportItem.aliasNames[0];\r\n }\r\n }\r\n });\r\n\r\n // \u53D1\u73B0 nodeIdentifier \u4E0E exportName \u6216\u8005 aliasName \u51B2\u7A81\u7684\u573A\u666F\r\n const nodeIdentifiers = depsInfo.map((info) => info.nodeIdentifier).filter(Boolean);\r\n const conflictInfos = flatMap(Object.keys(exportItems), (exportName) => {\r\n const exportItem = exportItems[exportName];\r\n const usedNames = [\r\n ...exportItem.aliasNames,\r\n ...(exportItem.needOriginExport || exportItem.aliasNames.length <= 0 ? [exportName] : []),\r\n ];\r\n const conflictNames = usedNames.filter((n) => nodeIdentifiers.indexOf(n) >= 0);\r\n if (conflictNames.length > 0) {\r\n return [\r\n ...(conflictNames.indexOf(exportName) >= 0 ? [[exportName, true, exportItem]] : []),\r\n ...conflictNames.filter((n) => n !== exportName).map((n) => [n, false, exportItem]),\r\n ];\r\n }\r\n return [];\r\n });\r\n\r\n const conflictExports = conflictInfos.filter((c) => c[1]).map((c) => c[0] as string);\r\n const conflictAlias = conflictInfos.filter((c) => !c[1]).map((c) => c[0] as string);\r\n\r\n const solutions: Record<string, string> = {};\r\n\r\n depsInfo.forEach((info) => {\r\n if (info.aliasName && conflictAlias.indexOf(info.aliasName) >= 0) {\r\n // find solution\r\n let solution = solutions[info.aliasName];\r\n if (!solution) {\r\n solution = `${info.aliasName}Alias`;\r\n const conflictItem = (conflictInfos.find((c) => c[0] === info.aliasName) ||\r\n [])[2] as IExportItem;\r\n conflictItem.aliasNames = conflictItem.aliasNames.filter((a) => a !== info.aliasName);\r\n conflictItem.aliasNames.push(solution);\r\n solutions[info.aliasName] = solution;\r\n }\r\n // eslint-disable-next-line no-param-reassign\r\n info.aliasName = solution;\r\n }\r\n\r\n if (conflictExports.indexOf(info.exportName) >= 0) {\r\n // find solution\r\n let solution = solutions[info.exportName];\r\n if (!solution) {\r\n solution = `${info.exportName}Export`;\r\n const conflictItem = (conflictInfos.find((c) => c[0] === info.exportName) ||\r\n [])[2] as IExportItem;\r\n conflictItem.aliasNames.push(solution);\r\n conflictItem.needOriginExport = false;\r\n solutions[info.exportName] = solution;\r\n }\r\n // eslint-disable-next-line no-param-reassign\r\n info.aliasName = solution;\r\n }\r\n });\r\n\r\n // \u5224\u65AD\u662F\u5426\u6240\u6709\u4F9D\u8D56\u90FD\u6709\u5408\u6CD5\u7684 Identifier\r\n depsInfo.forEach((info) => {\r\n const name = info.aliasName || info.exportName;\r\n if (!isValidIdentifier(name)) {\r\n throw new CodeGeneratorError(`Invalid Identifier [${name}]`);\r\n }\r\n if (info.nodeIdentifier && !isValidIdentifier(info.nodeIdentifier)) {\r\n throw new CodeGeneratorError(`Invalid Identifier [${info.nodeIdentifier}]`);\r\n }\r\n });\r\n\r\n const aliasDefineStatements: Record<string, string> = {};\r\n if (useAliasName) {\r\n Object.keys(exportItems).forEach((exportName) => {\r\n const aliasList = exportItems[exportName]?.aliasNames || [];\r\n if (aliasList.length > 0) {\r\n const srcName = exportItems[exportName].needOriginExport ? exportName : aliasList[0];\r\n const aliasNameList = exportItems[exportName].needOriginExport\r\n ? aliasList\r\n : aliasList.slice(1);\r\n aliasNameList.forEach((a) => {\r\n if (!aliasDefineStatements[a]) {\r\n aliasDefineStatements[a] = `const ${a} = ${srcName};`;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n function getDefaultExportName(info: IDependencyItem): string {\r\n if (info.isDefault) {\r\n return defaultExportNames[0];\r\n }\r\n return info.exportName;\r\n }\r\n\r\n depsInfo.forEach((info) => {\r\n // \u5982\u679C\u662F\u5B50\u7EC4\u4EF6\uFF0C\u5219\u5BFC\u51FA\u7236\u7EC4\u4EF6\uFF0C\u5E76\u4E14\u6839\u636E\u81EA\u7EC4\u4EF6\u547D\u540D\u89C4\u5219\uFF0C\u5224\u65AD\u662F\u5426\u9700\u8981\u5B9A\u4E49\u6807\u8BC6\u7B26\r\n if (info.nodeIdentifier) {\r\n // \u524D\u63D0\uFF0C\u5B58\u5728 nodeIdentifier \u4E00\u5B9A\u662F\u6709 subName \u7684\uFF0C\u4E0D\u7136\u524D\u9762\u4F1A\u4F18\u5316\u6389\r\n const ownerName = getDependencyIdentifier(info);\r\n\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\r\n content: useAliasName ? `const ${info.nodeIdentifier} = ${ownerName}.${info.subName};` : '',\r\n linkAfter: [...DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport]],\r\n ext: {\r\n originalName: `${getDefaultExportName(info)}.${info.subName}`,\r\n aliasName: info.nodeIdentifier,\r\n dependency: info.source,\r\n },\r\n });\r\n } else if (info.aliasName) {\r\n // default \u65B9\u5F0F\u7684\u5BFC\u5165\u4F1A\u751F\u6210\u5355\u72ECde import \u8BED\u53E5\uFF0C\u65E0\u9700\u751F\u6210\u8D4B\u503C\u8BED\u53E5\r\n if (info.isDefault && defaultExportNames.find((n) => n === info.aliasName)) {\r\n delete aliasDefineStatements[info.aliasName];\r\n return;\r\n }\r\n\r\n let contentStatement = '';\r\n if (aliasDefineStatements[info.aliasName]) {\r\n contentStatement = aliasDefineStatements[info.aliasName];\r\n delete aliasDefineStatements[info.aliasName];\r\n }\r\n\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\r\n content: contentStatement,\r\n linkAfter: [...DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport]],\r\n ext: {\r\n originalName: getDefaultExportName(info),\r\n aliasName: info.aliasName,\r\n dependency: info.source,\r\n },\r\n });\r\n }\r\n });\r\n\r\n // \u53EF\u80FD\u4F1A\u5269\u4F59\u4E00\u4E9B\u5B58\u5728\u4E8C\u6B21\u8F6C\u6362\u7684\u5B9A\u4E49\r\n Object.keys(aliasDefineStatements).forEach((a) => {\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\r\n content: aliasDefineStatements[a],\r\n linkAfter: [...DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport]],\r\n });\r\n });\r\n\r\n const exportItemList = Object.keys(exportItems).map((k) => exportItems[k]);\r\n const defaultExport = exportItemList.filter((item) => item.isDefault);\r\n const otherExports = exportItemList.filter((item) => !item.isDefault);\r\n\r\n const statementL = ['import'];\r\n if (defaultExport.length > 0) {\r\n if (useAliasName) {\r\n statementL.push(defaultExportNames[0]);\r\n } else {\r\n statementL.push(defaultExport[0].aliasNames[0]);\r\n }\r\n if (otherExports.length > 0) {\r\n statementL.push(', ');\r\n }\r\n }\r\n if (otherExports.length > 0) {\r\n const items = otherExports.map((item) => {\r\n return !useAliasName || item.needOriginExport || item.aliasNames.length <= 0\r\n ? item.exportName\r\n : `${item.exportName} as ${item.aliasNames[0]}`;\r\n });\r\n statementL.push(`{ ${items.join(', ')} }`);\r\n }\r\n statementL.push('from');\r\n\r\n const getInternalDependencyModuleId = () => `@/${(deps[0] as IInternalDependency).type}/${pkg}`;\r\n\r\n if (deps[0].dependencyType === DependencyType.Internal) {\r\n // TODO: Internal Deps path use project slot setting\r\n statementL.push(`'${getInternalDependencyModuleId()}';`);\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport,\r\n content: statementL.join(' '),\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n } else {\r\n statementL.push(`'${pkg}';`);\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\r\n content: statementL.join(' '),\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart],\r\n });\r\n }\r\n\r\n // \u5904\u7406\u4E0B\u4E00\u4E9B\u989D\u5916\u7684 default \u65B9\u5F0F\u7684\u5BFC\u5165\r\n if (defaultExportNames.length > 1) {\r\n if (deps[0].dependencyType === DependencyType.Internal) {\r\n defaultExportNames.slice(1).forEach((exportName) => {\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport,\r\n content: `import ${exportName} from '${getInternalDependencyModuleId()}';`,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n });\r\n } else {\r\n defaultExportNames.slice(1).forEach((exportName) => {\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\r\n content: `import ${exportName} from '${pkg}';`,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart],\r\n });\r\n\r\n chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: targetFileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\r\n content: '',\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart],\r\n ext: {\r\n aliasName: exportName,\r\n originalName: exportName,\r\n dependency: {\r\n package: pkg,\r\n componentName: exportName,\r\n },\r\n },\r\n });\r\n });\r\n }\r\n }\r\n\r\n return chunks;\r\n}\r\n\r\nexport interface PluginConfig {\r\n fileType?: string; // \u5BFC\u51FA\u7684\u6587\u4EF6\u7C7B\u578B\r\n useAliasName?: boolean; // \u662F\u5426\u4F7F\u7528 componentName \u91CD\u547D\u540D\u7EC4\u4EF6 identifier\r\n filter?: (deps: IDependency[]) => IDependency[]; // \u652F\u6301\u8FC7\u6EE4\u80FD\u529B\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?: PluginConfig) => {\r\n const cfg = {\r\n fileType: FileType.JS,\r\n useAliasName: true,\r\n ...(config || {}),\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IWithDependency;\r\n\r\n if (ir && ir.deps && ir.deps.length > 0) {\r\n const deps = cfg.filter ? cfg.filter(ir.deps) : ir.deps;\r\n const packs = groupDepsByPack(deps);\r\n\r\n Object.keys(packs).forEach((pkg) => {\r\n const chunks = buildPackageImport(pkg, packs[pkg], cfg.fileType, cfg.useAliasName);\r\n next.chunks.push(...chunks);\r\n });\r\n }\r\n\r\n return next;\r\n };\r\n\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { TEMPLATE_DEFINE_CHUNK_NAME, VUE_DEFAULT_LINK_AFTER } from '../../../const';\r\n\r\nimport { generateCompositeType } from '../../../utils/compositeType';\r\nimport { Scope } from '../../../utils/Scope';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\nimport { isValidContainerType } from '../../../utils/schema';\r\nimport { InterpretDataSourceConfig } from '@alilc/lowcode-types';\r\n\r\nexport interface PluginConfig {\r\n fileType?: string;\r\n implementType: 'inConstructor' | 'insMember' | 'hooks';\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig & { fileType: string } = {\r\n fileType: FileType.VUE,\r\n implementType: 'inConstructor',\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n const scope = Scope.createRootScope();\r\n\r\n const state = ir.state || {};\r\n // react\u7684state\u8F6Cvue\u7684ref\r\n const fields = Object.keys(state).map<string>((stateName) => {\r\n const value = generateCompositeType(state[stateName], scope);\r\n return `const ${stateName} = ref(${value})`;\r\n });\r\n // \u5C06api\u7684\u7ED3\u679C\u8F6C\u4E3Aref\u53D8\u91CF\r\n const dataSourceConfig = isValidContainerType(pre.ir) ? pre.ir.dataSource : null;\r\n const dataSourceItems: InterpretDataSourceConfig[] =\r\n (dataSourceConfig && dataSourceConfig.list) || [];\r\n dataSourceItems.forEach((item) => {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.ConstVar,\r\n content: `\r\n const ${item.id} = ref()\r\n `,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ConstVar]],\r\n });\r\n });\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.ConstVar,\r\n content: `\r\n ${fields.join('\\n')}\r\n `,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ConstVar]],\r\n });\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { TEMPLATE_DEFINE_CHUNK_NAME, VUE_DEFAULT_LINK_AFTER } from '../../../const';\r\n\r\nimport { generateFunction } from '../../../utils/jsExpression';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeChunk,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\nimport { isJSFunction, isJSExpression, InterpretDataSourceConfig } from '@alilc/lowcode-types';\r\nimport { isJSExpressionFn } from '../../../utils/common';\r\nimport { isValidContainerType } from '../../../utils/schema';\r\nimport { getApiName } from '../../../utils/apiHandler';\r\n\r\nexport interface PluginConfig {\r\n fileType?: string;\r\n exportNameMapping?: Record<string, string>;\r\n normalizeNameMapping?: Record<string, string>;\r\n exclude?: string[];\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg = {\r\n fileType: FileType.VUE,\r\n exportNameMapping: {},\r\n normalizeNameMapping: {},\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n\r\n if (ir.lifeCycles) {\r\n const { lifeCycles } = ir;\r\n const chunks = Object.keys(lifeCycles).map<ICodeChunk | null>((lifeCycleName) => {\r\n // \u8FC7\u6EE4\u6389\u975E\u6CD5\u6570\u636E\uFF08\u6709\u4E9B\u573A\u666F\u4E0B\u4F1A\u8BEF\u4F20\u5165\u7A7A\u5B57\u7B26\u4E32\u6216 null)\r\n if (\r\n !isJSFunction(lifeCycles[lifeCycleName]) &&\r\n !isJSExpressionFn(lifeCycles[lifeCycleName]) &&\r\n !isJSExpression(lifeCycles[lifeCycleName])\r\n ) {\r\n return null;\r\n }\r\n\r\n let normalizeName;\r\n // constructor\u4F1A\u53D6\u5230\u5BF9\u8C61\u7684\u6784\u9020\u51FD\u6570\r\n if (lifeCycleName === 'constructor') {\r\n normalizeName = lifeCycleName;\r\n } else {\r\n normalizeName = cfg.normalizeNameMapping[lifeCycleName] || lifeCycleName;\r\n }\r\n\r\n if (cfg?.exclude?.includes(normalizeName)) {\r\n return null;\r\n }\r\n\r\n const exportName = cfg.exportNameMapping[lifeCycleName] || lifeCycleName;\r\n if (normalizeName === 'constructor') {\r\n // todo \u6784\u9020\u51FD\u6570\u6682\u65F6\u4E0D\u5904\u7406\r\n // return {\r\n // type: ChunkType.STRING,\r\n // fileType: cfg.fileType,\r\n // name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\r\n // content: generateFunction(lifeCycles[lifeCycleName], { isBlock: true }),\r\n // linkAfter: [...VUE_DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorStart]],\r\n // };\r\n }\r\n // react\u7684componentDidMount\u5BF9\u5E94vue\u7684mounted\r\n if (normalizeName === 'componentDidMount') {\r\n // todo \u6D89\u53CA\u5230react\u4E13\u6709\u8BED\u6CD5\u540E\u7EED\u518D\u5904\u7406\u5FFD\u7565\r\n return {\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent,\r\n content: generateFunction(lifeCycles[lifeCycleName], { isBlock: true }),\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent]],\r\n };\r\n }\r\n\r\n if (normalizeName === 'render') {\r\n // todo \u6682\u65F6\u4E0D\u5904\u7406 render\r\n // return {\r\n // type: ChunkType.STRING,\r\n // fileType: cfg.fileType,\r\n // name: TEMPLATE_DEFINE_CHUNK_NAME.ClassRenderPre,\r\n // content: generateFunction(lifeCycles[lifeCycleName], { isBlock: true }),\r\n // linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ClassRenderStart],\r\n // };\r\n }\r\n\r\n return {\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.Method,\r\n content: generateFunction(lifeCycles[lifeCycleName], {\r\n name: exportName,\r\n isMember: true,\r\n }),\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.Method]],\r\n };\r\n }).filter((i) => !!i);\r\n\r\n next.chunks.push(...chunks.filter((x): x is ICodeChunk => x !== null));\r\n // \u5C06api\u7684\u7ED3\u679C\u8D4B\u503C\u7ED9ref\u53D8\u91CF\r\n const dataSourceConfig = isValidContainerType(pre.ir) ? pre.ir.dataSource : null;\r\n const dataSourceItems: InterpretDataSourceConfig[] =\r\n (dataSourceConfig && dataSourceConfig.list) || [];\r\n dataSourceItems.forEach((item) => {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent,\r\n content: `${item.id}.value = await ${getApiName(item.id)}.${item.id}();`,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent]],\r\n });\r\n });\r\n }\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "\n/**\n * \u9996\u5B57\u6BCD\u6539\u4E3A\u5927\u5199\uFF0C\u5176\u4ED6\u5B57\u6BCD\u5C0F\u5199\n * @param {string} str\n */\nexport function toFirstUpperCase(str: string): string {\n let name = str.toLowerCase();\n return name.charAt(0).toUpperCase() + name.slice(1);\n}\n", "import { JSONObject } from '@alilc/lowcode-datasource-types/src/value-type';\r\n\r\n/**\r\n * \u8BF7\u6C42\u5934\u5904\u7406\r\n * @param headers \u8BF7\u6C42\u5934\r\n */\r\nexport function requestHeaderHandler(headers: JSONObject): string {\r\n // todo \u5F53\u8BF7\u6C42\u5934\u4E3Ajs\u8868\u8FBE\u5F0F\u65F6\uFF0C\u7559\u540E\u7EED\u5904\u7406\r\n if (!headers) {\r\n return '';\r\n }\r\n let endHeaders = '';\r\n Object.keys(headers).forEach((key) => {\r\n if (headers[key]) {\r\n const tempHeaders = `defaultConfig.header.data['${key}'] = '${headers[key]}'`;\r\n endHeaders +=\r\n `${tempHeaders };`;\r\n }\r\n });\r\n return endHeaders;\r\n}\r\n\r\n/**\r\n * \u8BF7\u6C42\u4F53\u5904\u7406\r\n * @param params \u8BF7\u6C42\u4F53\r\n */\r\nexport function requestParamsHandler(params: JSONObject) {\r\n if (!params || Object.keys(params).length === 0) {\r\n return '';\r\n }\r\n // \u5C06\u8BF7\u6C42\u4F53\u5904\u7406\u6210key\uFF1A value\u7684\u5B57\u7B26\u4E32\r\n const paramsData = params ? Object.keys(params).map((key) => `${key}: ${params[key]}`).join(',') : '';\r\n return `const data = {\r\n ...data,\r\n ${paramsData}\r\n }`;\r\n}\r\n\r\n/**\r\n * \u8BF7\u6C42\u7ED3\u679C\u5904\u7406\r\n */\r\nexport function requestAfterDataHandler() {\r\n // todo \u5F85\u5B9E\u73B0\r\n}\r\n", "/* eslint-disable @typescript-eslint/indent */\r\n\r\nimport {\r\n InterpretDataSourceConfig\r\n} from '@alilc/lowcode-types';\r\n\r\nimport {\r\n COMMON_CHUNK_NAME\r\n} from '../../../const';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct\r\n} from '../../../types';\r\n\r\nimport { isValidContainerType } from '../../../utils/schema';\r\nimport { toFirstUpperCase } from '../../../utils/changeCase';\r\nimport { requestHeaderHandler, requestParamsHandler } from '../../../utils/requestHandle';\r\nimport { JSONObject } from '@alilc/lowcode-datasource-types/src/value-type';\r\n\r\nexport interface PluginConfig {\r\n fileType?: string;\r\n\r\n /**\r\n * \u6570\u636E\u6E90\u914D\u7F6E\r\n */\r\n datasourceConfig?: {\r\n\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\r\n engineVersion?: string;\r\n\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\r\n enginePackage?: string;\r\n\r\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\r\n handlersVersion?: {\r\n [key: string]: string;\r\n };\r\n\r\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\r\n handlersPackages?: {\r\n [key: string]: string;\r\n };\r\n };\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = () => {\r\n // const cfg = {\r\n // ...config,\r\n // fileType: config?.fileType || FileType.JSX,\r\n // };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const dataSourceConfig = isValidContainerType(pre.ir.containers[0]) ? pre.ir.containers[0].dataSource : null;\r\n const dataSourceItems: InterpretDataSourceConfig[] =\r\n (dataSourceConfig && dataSourceConfig.list) || [];\r\n if (dataSourceItems.length > 0) {\r\n dataSourceItems.forEach((ds) => {\r\n const dsType = ds.type || 'fetch';\r\n // \u8BF7\u6C42\u7C7B\u578B\r\n const method = toFirstUpperCase(ds.options?.method ?? 'Post');\r\n // \u5904\u7406\u975E\u81EA\u5B9A\u4E49\u6570\u636E\u6E90\r\n if (dsType !== 'custom') {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.TS,\r\n subModule: ds.id,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n content: `\r\n import { ${method}RequestModel, QueryType } from '@dc/vue-h5-base/src/http/request-model'\r\n import { getDefaultConfig } from '@dc/vue-h5-base/src/http/config/custom-config'\r\n import { PageModel } from '@dc/vue-h5-base/src/http/result-model'\r\n `,\r\n linkAfter: [],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.TS,\r\n subModule: ds.id,\r\n name: COMMON_CHUNK_NAME.FileMainContent,\r\n content: `\r\nexport default {\r\n /**\r\n * \u5206\u9875\u67E5\u8BE2\r\n * @param data\r\n */\r\n ${ds.id}: (data?: QueryType) => {\r\n // \u8BF7\u6C42\u5934\u5904\u7406\r\n ${requestHeaderHandler(ds.options?.headers as JSONObject)}\r\n // \u8BF7\u6C42\u53C2\u6570\u5904\u7406\r\n ${requestParamsHandler(ds.options?.params as JSONObject)}\r\n return new ${method}RequestModel<PageModel<any>>('${ds.options?.uri}', data).request()\r\n },\r\n}\r\n `,\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n }\r\n });\r\n }\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { VUE_DEFAULT_LINK_AFTER, TEMPLATE_DEFINE_CHUNK_NAME } from '../../../const';\r\n\r\nimport { generateFunction } from '../../../utils/jsExpression';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeChunk,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\n\r\nexport interface PluginConfig {\r\n fileType: string;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.VUE,\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo;\r\n\r\n if (!ir.methods) {\r\n return next;\r\n }\r\n\r\n // \u5C06\u8FD9\u4E9B methods \u90FD\u5B9A\u4E49\u5230 class \u4E0A\r\n const { methods } = ir;\r\n const chunks = Object.keys(methods).map<ICodeChunk>((methodName) => ({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.Method,\r\n content: `function ${generateFunction(methods[methodName], { name: methodName, isMember: true })}`,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.Method]],\r\n }));\r\n next.chunks.push(...chunks);\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { ResultFile } from '@alilc/lowcode-types';\nimport { createResultFile } from '../../../../../../utils/resultHelper';\n\nexport default function getFile(): [string[], ResultFile] {\n const file = createResultFile(\n '.env',\n '',\n `\n# .env\nVITE_APP_API_LOGIN=/login\nVITE_APP_API_LOGIN_OUT=/loginOut\nVITE_APP_API_BASE_URL=/express/api\n\nVITE_APP_API_FILE_REVIEW=http://tz.future.dct99.com:8090/\n#VITE_APP_COPYRIGHT=Copyright@2022 \u7248\u6743\u6240\u6709\uFF1A\u4E2D\u56FD\u8054\u901A\u7F51\u7EDC\u901A\u4FE1\u6709\u9650\u516C\u53F8\n\n# oss\n#VITE_APP_OSS_URL=https://tz-community.oss-cn-hangzhou.aliyuncs.com\n#VITE_APP_API_OSS=/oss/logFile/upload\n#VITE_APP_OSS_SUFFIX=!tz_sy\n\n# message\n#VITE_APP_API_MESSAGE=/WxXcx/sendLoginCode\n#VITE_APP_API_CODE_LOGIN=/WxXcx/loginOrSignByMobile\n#VITE_APP_API_CODE_LOGIN_PARAMS_MOBILE=mobile\n#VITE_APP_API_CODE_LOGIN_PARAMS_CODE=smsCode\n\n# mask\nVITE_APP_DEFAULT_MASK='false'\n `,\n );\n\n return [[], file];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\nimport { createResultFile } from '../../../../../../utils/resultHelper';\n\nexport default function getFile(): [string[], ResultFile] {\n const file = createResultFile(\n '.eslintignore',\n '',\n `\nnode_modules\n.vscode\n.idea\ndist\n/public\n.eslintrc.js\n `,\n );\n\n return [[], file];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\nimport { createResultFile } from '../../../../../../utils/resultHelper';\n\nexport default function getFile(): [string[], ResultFile] {\n const file = createResultFile(\n '.eslintrc',\n 'yml',\n `\nenv:\n browser: true\n es2021: true\n node: true\n 'vue/setup-compiler-macros': true\nextends:\n - eslint:recommended\n - plugin:vue/essential\n - prettier\n - plugin:prettier/recommended\n - plugin:@typescript-eslint/recommended\nparserOptions:\n ecmaVersion: 2020\n parser: '@typescript-eslint/parser'\n sourceType: module\nparser: 'vue-eslint-parser'\nplugins:\n - vue\n - '@typescript-eslint'\nrules:\n # \u7F29\u8FDB tab\n indent:\n - error\n - tab\n - SwitchCase: 1\n # \u5B57\u7B26\u5355\u5F15\u53F7\n quotes:\n - error\n - single\n # \u5C3E\u90E8\u5206\u53F7\n semi:\n - error\n - never\n # \u652F\u6301\u5355\u4E2Atemplate\u4E2D\u591A\u4E2A\u4E00\u7EA7\u6807\u7B7E\n vue/no-multiple-template-root: off\n # \u5904\u7406v-model\u540E\u65B9\u53C2\u6570\u95EE\u9898\n vue/no-v-model-argument: off\n # \u7EC4\u4EF6\u540D\u79F0\u68C0\u67E5\n vue/multi-word-component-names: 0\n `,\n );\n\n return [[], file];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n [],\r\n {\r\n name: '.gitignore',\r\n ext: '',\r\n content: `\r\n# \u9879\u76EE\u7684\u73AF\u5883\u6587\u4EF6\r\n.DS_Store\r\nnode_modules\r\n/dist\r\n\r\n\r\n# \u672C\u5730\u73AF\u5883\u6587\u4EF6\r\n.env.local\r\n.env.*.local\r\n\r\n# \u65E5\u5FD7\u6587\u4EF6\r\nnpm-debug.log*\r\nyarn-debug.log*\r\nyarn-error.log*\r\npnpm-debug.log*\r\n*-debug.log\r\n\r\n# \u7F16\u8F91\u76EE\u5F55\u548C\u6587\u4EF6\r\n.idea\r\n.vscode\r\n*.suo\r\n*.ntvs*\r\n*.njsproj\r\n*.sln\r\n*.sw?\r\nlocal\r\n\r\n# \u6B64\u6587\u4EF6\u9700\u8981\u63D0\u4EA4\uFF0C\u8BE5\u6587\u4EF6\u65E8\u5728\u8DDF\u8E2A\u88AB\u5B89\u88C5\u7684\u6BCF\u4E2A\u8F6F\u4EF6\u5305\u7684\u786E\u5207\u7248\u672C\uFF0C\u4EE5\u4FBF\u4EA7\u54C1\u53EF\u4EE5\u4EE5\u76F8\u540C\u7684\u65B9\u5F0F\u88AB 100\uFF05 \u590D\u5236\r\npackage-lock.json\r\nyarn.lock\r\npnpm-lock.yaml\r\n\r\n# \u6392\u9664\u672C\u5730\u6587\u4EF6\r\nlocal/\r\n\r\ndist.zip\r\n `\r\n }\r\n ];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n [],\r\n {\r\n name: '.npmrc',\r\n ext: '',\r\n content: `\r\nregistry=https://registry.npmmirror.com/\r\n@dc-basic-component:registry=https://nexus.dct99.com/repository/npm-public/\r\n@dc:registry=https://nexus.dct99.com/repository/npm-public/\r\nshamefully-hoist=true\r\nstrict-peer-dependencies=false\r\n `\r\n }\r\n ];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n [],\r\n {\r\n name: '.prettierignore',\r\n ext: '',\r\n content: `\r\nnode_modules\r\n.vscode\r\n.idea\r\ndist\r\n/public\r\n.eslintrc.js\r\n*.yml\r\n*.yaml\r\n*.md\r\n*.min.js\r\n `\r\n }\r\n ];\r\n}\r\n\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n [],\r\n {\r\n name: '.prettierrc',\r\n ext: 'yml',\r\n content: `\r\n# \u6BCF\u884C\u4EE3\u7801\u957F\u5EA6\uFF08\u9ED8\u8BA480\uFF09\r\nprintWidth: 160\r\n# \u6BCF\u4E2Atab\u76F8\u5F53\u4E8E\u591A\u5C11\u4E2A\u7A7A\u683C\uFF08\u9ED8\u8BA42\uFF09\r\ntabWidth: 4\r\n# \u662F\u5426\u4F7F\u7528tab\u8FDB\u884C\u7F29\u8FDB\uFF08\u9ED8\u8BA4false\uFF09\r\nuseTabs: true\r\n# \u4F7F\u7528\u5355\u5F15\u53F7\uFF08\u9ED8\u8BA4false\uFF09\r\nsingleQuote: true\r\n# \u58F0\u660E\u7ED3\u5C3E\u4F7F\u7528\u5206\u53F7(\u9ED8\u8BA4true)\r\nsemi: false\r\n# \u591A\u884C\u4F7F\u7528\u62D6\u5C3E\u9017\u53F7\uFF08\u9ED8\u8BA4none\uFF09\r\ntrailingComma: none\r\n# \u5BF9\u8C61\u5B57\u9762\u91CF\u7684\u5927\u62EC\u53F7\u95F4\u4F7F\u7528\u7A7A\u683C\uFF08\u9ED8\u8BA4true\uFF09\r\nbracketSpacing: true\r\n# \u53EA\u6709\u4E00\u4E2A\u53C2\u6570\u7684\u7BAD\u5934\u51FD\u6570\u7684\u53C2\u6570\u662F\u5426\u5E26\u5706\u62EC\u53F7\uFF08\u9ED8\u8BA4avoid\uFF09\r\narrowParens: 'avoid'\r\n# \u884C\u7ED3\u675F\u95EE\u9898\u5904\u7406, lf\r\nendOfLine: lf\r\n `\r\n }\r\n ];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n [],\r\n {\r\n name: 'index',\r\n ext: 'html',\r\n content: `\r\n<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n <meta charset=\"UTF-8\"/>\r\n <link rel=\"icon\" type=\"image/png\" href=\"/logo.png\"/>\r\n <meta name=\"viewport\"\r\n content=\"width=device-width, initial-scale=1.0, user-scalable=1.0, minimum-scale=1.0, maximum-scale=1.0, viewport-fit=cover\"/>\r\n <title>\u7801\u94FA</title>\r\n <!--\u5FAE\u4FE1web view api-->\r\n <script type=\"text/javascript\" src=\"https://res.wx.qq.com/open/js/jweixin-1.3.2.js\"></script>\r\n</head>\r\n<body>\r\n<div id=\"app\">\r\n <div class=\"loading\" style=\"display: flex;justify-content: center;align-items: center;height: 100vh\">\r\n <div class=\"loading__icon\"></div>\r\n <div class=\"loading__text\">\u8BF7\u7A0D\u7B49\uFF0C\u9875\u9762\u52A0\u8F7D\u4E2D...</div>\r\n </div>\r\n</div>\r\n<script type=\"module\" src=\"/src/main.ts\"></script>\r\n</body>\r\n</html>\r\n `\r\n }\r\n ];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n [],\r\n {\r\n name: 'postcss.config',\r\n ext: 'cjs',\r\n content: '// postcss.config.js\\n' +\r\n 'module.exports = {\\n' +\r\n ' plugins: {\\n' +\r\n ' \\'postcss-px-to-viewport\\': {\\n' +\r\n ' // \u8BBE\u8BA1\u7A3F\u5BBD\u5EA6\\n' +\r\n ' viewportWidth: 375,\\n' +\r\n ' // \u6392\u9664 node_modules\\n' +\r\n ' // exclude: /(\\\\/|\\\\\\\\)(node_modules)(\\\\/|\\\\\\\\)/,\\n' +\r\n ' // \u4E0D\u8F6C\u6362\u7684\u7C7B\u540D\\n' +\r\n ' selectorBlackList: [\\'.ignore\\', \\'.hairlines\\']\\n' +\r\n ' }\\n' +\r\n ' }\\n' +\r\n '}'\r\n }\r\n ];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n [],\r\n {\r\n name: 'tsconfig.json',\r\n ext: 'ts',\r\n content: `\r\n{\r\n \"compilerOptions\": {\r\n \"target\": \"ESNext\",\r\n \"useDefineForClassFields\": true,\r\n \"module\": \"ESNext\",\r\n \"moduleResolution\": \"Node\",\r\n \"strict\": true,\r\n \"jsx\": \"preserve\",\r\n \"sourceMap\": true,\r\n \"resolveJsonModule\": true,\r\n \"isolatedModules\": true,\r\n \"esModuleInterop\": true,\r\n \"lib\": [\"ESNext\", \"DOM\"],\r\n \"skipLibCheck\": true,\r\n \"baseUrl\": \".\",\r\n \"paths\": {\r\n \"@/*\": [\"src/*\"]\r\n }\r\n },\r\n \"include\": [\"src/**/*.ts\", \"src/**/*.d.ts\", \"src/**/*.tsx\", \"src/**/*.vue\"],\r\n \"references\": [{ \"path\": \"./tsconfig.node.json\" }]\r\n}\r\n `\r\n }\r\n ];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n [],\r\n {\r\n name: 'tsconfig.node',\r\n ext: 'json',\r\n content: `\r\n{\r\n \"compilerOptions\": {\r\n \"composite\": true,\r\n \"module\": \"ESNext\",\r\n \"moduleResolution\": \"Node\",\r\n \"allowSyntheticDefaultImports\": true\r\n },\r\n \"include\": [\"vite.config.ts\"]\r\n}\r\n `\r\n }\r\n ];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n return [\r\n [],\r\n {\r\n name: 'vite.config',\r\n ext: 'ts',\r\n content: 'import { defineConfig } from \\'vite\\'\\n' +\r\n 'import vue from \\'@vitejs/plugin-vue\\'\\n' +\r\n 'import viteCompression from \\'vite-plugin-compression\\'\\n' +\r\n 'import * as path from \\'path\\'\\n' +\r\n '\\n' +\r\n '// https://vitejs.dev/config/\\n' +\r\n 'export default defineConfig({\\n' +\r\n ' base: \\'/expressH5/\\',\\n' +\r\n ' plugins: [vue(), viteCompression()],\\n' +\r\n ' resolve: {\\n' +\r\n ' alias: {\\n' +\r\n ' \\'@\\': path.resolve(__dirname, \\'./src\\'),\\n' +\r\n ' \\'~@\\': path.resolve(__dirname, \\'./src\\')\\n' +\r\n ' }\\n' +\r\n ' },\\n' +\r\n ' server: {\\n' +\r\n ' // host: \\'127.0.0.1\\',\\n' +\r\n ' host: \\'0.0.0.0\\',\\n' +\r\n ' port: 3211,\\n' +\r\n ' cors: true,\\n' +\r\n ' proxy: {\\n' +\r\n ' \\'/express/api\\': {\\n' +\r\n ' // target: \\'https://kdhctraining.dct99.com\\',\\n' +\r\n ' target: \\'http://localhost:9231/\\',\\n' +\r\n ' changeOrigin: true,\\n' +\r\n ' ws: true,\\n' +\r\n ' // rewrite: path => path.replace(/^\\\\/api/, \\'/training\\')\\n' +\r\n ' rewrite: path => path.replace(/\\\\/express\\\\/api/g, \\'/express\\')\\n' +\r\n ' }\\n' +\r\n ' }\\n' +\r\n ' },\\n' +\r\n ' css: {\\n' +\r\n ' preprocessorOptions: {\\n' +\r\n ' less: {\\n' +\r\n ' javascriptEnabled: true\\n' +\r\n ' }\\n' +\r\n ' }\\n' +\r\n ' },\\n' +\r\n ' // \u914D\u7F6E\u6253\u5305\u5757\u5927\u5C0F\\n' +\r\n ' build: {\\n' +\r\n ' chunkSizeWarningLimit: 1500\\n' +\r\n ' },\\n' +\r\n ' optimizeDeps: {\\n' +\r\n ' exclude: [\\'@dc/vue-h5-base\\'],\\n' +\r\n ' include: [\\'axios\\']\\n' +\r\n ' }\\n' +\r\n '})'\r\n }\r\n ];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\nimport { createResultFile } from '../../../../../../../utils/resultHelper';\n\nexport default function getFile(): [string[], ResultFile] {\n const file = createResultFile(\n 'global',\n 'scss',\n `\n// \u4E00\u4E9B\u5176\u4ED6\u7684\u516C\u5171\u6837\u5F0F\n@import '@dc/vue-h5-base/src/assets/scss/global.scss';\n\n.page {\n // \u4E0D\u663E\u793A\u6EDA\u52A8\u6761\n scrollbar-width: none; /* Firefox */\n background: #fff;\n\n &::-webkit-scrollbar {\n display: none; /* Chrome Safari */\n }\n}\n\n.van-uploader {\n flex: 1 1 auto;\n}\n\n.van-search {\n background: #ffffff;\n padding: 10px 16px;\n border-top: 1px solid #f3f3f3;\n\n @at-root &__content--round {\n background: #f3f3f3;\n padding: 4px 16px;\n }\n}\n\n// \u7BA1\u7406\u9875\u9762\n.manage-page {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n padding-bottom: 16px;\n\n --van-tab-text-color: var(--van-text-color-3);\n --van-tab-active-text-color: var(--van-primary-color);\n --van-tabs-bottom-bar-color: var(--van-primary-color);\n\n .van-pull-refresh {\n flex: 1 1 auto;\n overflow-y: scroll;\n padding: 16px;\n }\n}\n\n// \u8BE6\u60C5\u9875\u9762\n.detail-page {\n flex: 1 1 auto;\n overflow-y: auto;\n font-size: 14px;\n font-weight: 400;\n color: #9b9ba3;\n padding-bottom: 16px;\n position: relative;\n display: flex;\n flex-direction: column;\n\n .detail {\n display: grid;\n grid-template-columns: max-content 1fr;\n box-shadow: 0 0 0.5rem 0 rgba(35, 24, 21, 0.1);\n grid-row-gap: 16px;\n column-gap: 16px;\n background: white;\n margin: 16px 16px 0 16px;\n padding: 16px;\n border-radius: 10px;\n\n @at-root &__label {\n color: #51515c;\n display: flex;\n align-items: center;\n grid-column: 1;\n\n &:before {\n content: '';\n width: 6px;\n height: 6px;\n border-radius: 3px;\n background: #aeaeb4;\n margin-right: 6px;\n display: inline-block;\n }\n }\n\n @at-root &__value {\n grid-column: 2;\n color: #9b9ba3;\n flex: 1 1 auto;\n text-align: right;\n }\n\n @at-root &__images {\n grid-column: 1/-1;\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n\n .van-image {\n width: 100%;\n min-height: 60px;\n aspect-ratio: 1;\n }\n }\n\n .van-divider {\n grid-column: span 2;\n margin: 0;\n }\n }\n}\n\n// \u5F39\u7A97\u9875\u9762\n.overlay-page {\n width: 100vw;\n height: 100vh;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n background: transparent;\n padding: 16px;\n\n\n .van-form {\n flex: 0 0 auto;\n overflow-y: auto;\n display: flex;\n flex-direction: column;\n background: white;\n border-radius: 10px;\n\n .van-button {\n margin: 15px 16px;\n }\n }\n\n .van-cell.tip {\n color: #d46b08;\n }\n}\n\n.card__actions {\n grid-column: 1 / -1;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n gap: 10px;\n\n @at-root &__button {\n font-size: 12px;\n font-weight: 500;\n border-radius: 18px;\n padding: 0 8px;\n height: 24px;\n\n }\n}\n`,\n );\n\n return [['src', 'assets', 'scss'], file];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\nimport { createResultFile } from '../../../../../../../utils/resultHelper';\n\nexport default function getFile(): [string[], ResultFile] {\n const file = createResultFile(\n 'mixin',\n 'scss',\n `\n//sass\u5E38\u7528\u6DF7\u5408\u5668(\u5E94\u8BE5\u5408\u7406\u4F7F\u7528)\n// \u5F39\u6027\u5E03\u5C40\u6DF7\u5408\u5668\n@mixin flexMixer($justify: center, $align: center, $flex: row) {\n\\t// \u7533\u660E\u4E3A\u5F39\u6027\u76D2\u5B50\n\\tdisplay: flex;\n\\t// \u6392\u5217\u65B9\u5F0F\n\\tflex-direction: $flex;\n\\t// \u4E3B\uFF08\u526F\uFF09\u8F74\u7684\u5BF9\u9F50\u65B9\u5F0F\n\\tjustify-content: $justify;\n\\t// \u4E3B\uFF08\u526F\uFF09\u8F74\u7684\u5BF9\u9F50\u65B9\u5F0F\n\\talign-items: $align;\n}\n// \u5B9A\u4F4D\u6DF7\u5408\u5668\n@mixin positionMixer($position: static, $left: auto, $top: auto, $right: auto, $bottom: auto) {\n\\tposition: $position;\n\\tleft: $left;\n\\ttop: $top;\n\\tright: $right;\n\\tbottom: $bottom;\n}\n// \u6D6E\u52A8\u6DF7\u5408\u5668\n@mixin floatMixer($float: left) {\n\\tfloat: $float;\n}\n// \u8BBE\u7F6E\u80CC\u666F\u6DF7\u5408\u5668\n@mixin bgMixer($url, $position: center center, $size: 100% 100%, $repeat: no-repeat) {\n\\tbackground: $url $repeat $position;\n\\tbackground-size: $size;\n}\n// \u5BBD\u9AD8\u6DF7\u5408\u5668\n@mixin widthMixer($width: 100px, $height: 100px) {\n\\twidth: $width;\n\\theight: $height;\n}\n// \u6587\u5B57\u6DF7\u5408\u5668\n@mixin fontMixer($fontSize: 16px, $color: #515a6e, $weight: 500, $font-familyt: Source Han Sans SC) {\n\\tfont-family: $font-familyt;\n\\tfont-size: $fontSize;\n\\tfont-weight: $weight;\n\\tcolor: $color;\n}\n\n// \u591A\u884C\u5B57\u4F53\u7701\u7565\u6DF7\u5408\u5668\n@mixin pointMixer($line: 2) {\n\\tdisplay: -webkit-box; //\u5FC5\u987B\u7ED3\u5408\u7684\u5C5E\u6027 \uFF0C\u5C06\u5BF9\u8C61\u4F5C\u4E3A\u5F39\u6027\u4F38\u7F29\u76D2\u5B50\u6A21\u578B\u663E\u793A \u3002\n\\tword-break: break-all;\n\\t-webkit-line-clamp: $line;\n\\tline-clamp: $line;\n\\toverflow: hidden;\n\\ttext-overflow: ellipsis; //\u53EF\u4EE5\u7528\u6765\u591A\u884C\u6587\u672C\u7684\u60C5\u51B5\u4E0B\uFF0C\u7528\u7701\u7565\u53F7\u201C\u2026\u201D\u9690\u85CF\u8D85\u51FA\u8303\u56F4\u7684\u6587\u672C \u3002\n\\twhite-space: normal;\n\\t/* autoprefixer: off */\n\\t-webkit-box-orient: vertical; //\u5FC5\u987B\u7ED3\u5408\u7684\u5C5E\u6027 \uFF0C\u8BBE\u7F6E\u6216\u68C0\u7D22\u4F38\u7F29\u76D2\u5BF9\u8C61\u7684\u5B50\u5143\u7D20\u7684\u6392\u5217\u65B9\u5F0F \u3002\n\\t/* autoprefixer: on */\n}\n`,\n );\n\n return [['src', 'assets', 'scss'], file];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'theme',\r\n 'css',\r\n `\r\n@import '@dc/vue-h5-base/src/assets/scss/theme.css';\r\n\r\n:root {\r\n\\t--van-primary-color: #008fff;\r\n\\t/* Color Palette */\r\n\\t--van-gray-9: #eeeeee;\r\n\\t--van-gray-10: #bdbdbd;\r\n\\t--van-gray-11: #cccccc;\r\n\\t--van-blue-1: #008fff;\r\n\\t--van-blue-2: #3296fb;\r\n\\t--van-orange-1: #f27623;\r\n\r\n\\t/* --------------------------------------------- */\r\n\\t/* tabbar height */\r\n\\t--van-tabbar-height: 50px;\r\n\r\n\\t/* --------------------------------------------- */\r\n\\t/* input \u80CC\u666F\u8272*/\r\n\\t--input-background-color: #f4f4f4;\r\n\r\n\\t/* --------------------------------------------- */\r\n\\t/* \u6D59\u91CC\u529E\u4E3B\u9898 */\r\n\r\n\\t/* \u5706\u89D2*/\r\n\\t--zlb-radius-r5: 10px;\r\n\\t--zlb-radius-r6: 12px;\r\n\\t--zlb-radius-r7: 14px;\r\n\\t--zlb-radius-r8: 16px;\r\n\\t--zlb-radius-r9: 18px;\r\n\r\n\\t/* --------------------------------------------- */\r\n\\t/* \u5B57\u4F53\u989C\u8272 */\r\n\\t--van-text-color-4: #7897ba;\r\n\\t--van-text-color-5: #232d2d;\r\n\\t/*--van-text-size2: 18px;*/\r\n\r\n\\t/* --------------------------------------------- */\r\n\\t/* \u5B57\u4F53 */\r\n\\t/*\u5DF2\u6709\u5B57\u4F53\uFF0C\u53EF\u4EE5\u4E0D\u7528\u8986\u5199*/\r\n\\t--van-font-size-xs: 10px;\r\n\\t--van-font-size-sm: 12px;\r\n\\t--van-font-size-md: 14px;\r\n\\t--van-font-size-lg: 16px;\r\n\\t/*\u8FFD\u52A0\u4E00\u4E2A\u8D85\u5927\u53F7\u5B57\u4F53*/\r\n\\t--van-font-size-ml: 18px;\r\n\r\n\\t/* --------------------------------------------- */\r\n\\t/*\u8F93\u5165\u6846\u6837\u5F0F*/\r\n\\t--van-field-label-color: var(--van-text-color);\r\n\\t--van-field-placeholder-text-color: var(--van-text-color-3);\r\n\r\n\\t/* --------------------------------------------- */\r\n\\t/*\u8F93\u5165\u6846\u6837\u5F0F*/\r\n\\t/*--van-uploader-size: 69px;*/\r\n\\t/*--van-uploader-delete-icon-size: 18px;*/\r\n\r\n\\t--title-bar-height: 50px;\r\n\\t--title-bar-padding-top: 0;\r\n\r\n\\t--van-cascader-active-color: var(--van-primary-color);\r\n\\t--van-cascader-tab-color: var(--van-primary-color);\r\n\\t--van-tabs-bottom-bar-color: var(--van-primary-color);\r\n}\r\n `,\r\n );\r\n\r\n return [['src', 'assets', 'scss'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\nimport { createResultFile } from '../../../../../../../utils/resultHelper';\n\nexport default function getFile(): [string[], ResultFile] {\n const file = createResultFile(\n 'App',\n 'vue',\n `\n<template>\n\\t<router-view v-slot=\"{ Component }\">\n\\t\\t<!--\\t\\t<keep-alive>-->\n\\t\\t<component :is=\"Component\" />\n\\t\\t<!--\\t\\t</keep-alive>-->\n\\t</router-view>\n</template>\n\n<script lang=\"ts\" setup>\nimport { onMounted } from 'vue'\nimport { useRequestStore } from '@dc/vue-h5-base/src/store/request'\n\nlet store = useRequestStore()\n\nonMounted(() => {\n\\tstore.$reset()\n})\n</script>\n\n<style>\n.amap-logo {\n\\tdisplay: none;\n\\topacity: 0 !important;\n}\n\n.amap-copyright {\n\\topacity: 0;\n}\n</style>\n `,\n );\n\n return [['src'], file];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'main',\r\n 'ts',\r\n `\r\nimport { createApp } from 'vue'\r\nimport App from './App.vue'\r\n\r\n/**\r\n * \u72B6\u6001\u7BA1\u7406\r\n */\r\nimport { createPinia } from 'pinia'\r\nimport piniaPluginPersist from 'pinia-plugin-persist'\r\n// \u8DEF\u7531\r\nimport router from './router'\r\n/**\r\n * vant \u7EC4\u4EF6\uFF0C\u6309\u9700\u5F15\u5165\r\n */\r\nimport Vant from 'vant'\r\nimport 'vant/lib/index.css'\r\n\r\n// \u8986\u76D6\u4E3B\u9898\u6837\u5F0F\r\nimport '@/assets/scss/theme.css'\r\n\r\n/* \u8FD9\u91CC\u662F\u57FA\u7840\u6846\u67B6\u7684\u6837\u5F0F */\r\nimport '@/assets/scss/global.scss'\r\nimport '@dc/vue-h5-base/src/assets/font/iconfont.css'\r\n\r\ncreateApp(App)\r\n\\t.use(createPinia().use(piniaPluginPersist))\r\n\\t.use(Vant)\r\n\\t// \u8DEF\u7531\r\n\\t.use(router)\r\n\\t.mount('#app')\r\n\r\n `,\r\n );\r\n\r\n return [['src'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'vite-env.d',\r\n 'ts',\r\n `\r\ndeclare module '*.vue' {\r\n import type { DefineComponent } from 'vue'\r\n const component: DefineComponent<{}, {}, any>\r\n export default component\r\n}\r\n\r\ninterface ImportMetaEnv {\r\n // \u767B\u5F55\u7684\u63A5\u53E3\u5730\u5740\r\n readonly VITE_APP_API_LOGIN: string\r\n // \u767B\u5F55\u7684\u63A5\u53E3\u5730\u5740\r\n readonly VITE_APP_API_LOGIN_OUT: string\r\n // \u767B\u5F55\u7684\u63A5\u53E3\u5730\u5740\r\n readonly VITE_APP_API_BASE_URL: string\r\n //\u6587\u4EF6\u9884\u89C8\u5730\u5740\u524D\u7F00\r\n readonly VITE_APP_API_FILE_REVIEW: string\r\n\r\n // copyright\r\n readonly VITE_APP_COPYRIGHT: string\r\n // \u9ED8\u8BA4\u7684\u8BF7\u6C42\u906E\u7F69\u5C42\u662F\u5426\u5F00\u542F\r\n readonly VITE_APP_DEFAULT_MASK: boolean\r\n}\r\n\r\ninterface ImportMeta {\r\n readonly env: ImportMetaEnv\r\n}\r\n `,\r\n );\r\n\r\n return [['src'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'Welcome',\r\n 'vue',\r\n `\r\n<template>\r\n <div></div>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n</style>\r\n `,\r\n );\r\n\r\n return [['src', 'views', 'index'], file];\r\n}\r\n", "import { ResultFile } from '@alilc/lowcode-types';\r\nimport { createResultFile } from '../../../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'tabs',\r\n 'ts',\r\n `\r\nimport home from '@/assets/images/index/home.png'\r\nimport homeActive from '@/assets/images/index/home-active.png'\r\nimport housekeeper from '@/assets/images/index/housekeeper.png'\r\nimport housekeeperActive from '@/assets/images/index/housekeeper-active.png'\r\nimport mine from '@/assets/images/index/mine.png'\r\nimport mineActive from '@/assets/images/index/mine-active.png'\r\n\r\nexport interface TabItem {\r\n /**\r\n * \u6807\u9898\r\n */\r\n label: string\r\n /**\r\n * \u56FE\u6807\r\n */\r\n icon: string\r\n /**\r\n * \u6FC0\u6D3B\u56FE\u6807\r\n */\r\n activeIcon: string\r\n /**\r\n * \u8DEF\u7531\u5730\u5740\r\n */\r\n router: string\r\n}\r\n\r\nexport const tabs: Array<TabItem> = [\r\n {\r\n label: '\u9996\u9875',\r\n icon: home,\r\n activeIcon: homeActive,\r\n router: '/home'\r\n },\r\n {\r\n label: '\u6D88\u606F',\r\n icon: housekeeper,\r\n activeIcon: housekeeperActive,\r\n router: '/message'\r\n },\r\n {\r\n label: '\u6211\u7684',\r\n icon: mine,\r\n activeIcon: mineActive,\r\n router: '/mine'\r\n }\r\n]\r\n `,\r\n );\r\n\r\n return [['src', 'views', 'index'], file];\r\n}\r\n", "import { ResultDir } from '@alilc/lowcode-types';\r\n\r\nimport { createResultDir } from '../../../../../utils/resultHelper';\r\nimport { runFileGenerator } from '../../../../../utils/templateHelper';\r\n\r\nimport file12 from './files/env';\r\nimport file11 from './files/eslintignore';\r\nimport file10 from './files/eslintrc.yml';\r\nimport file9 from './files/gitignore';\r\nimport file8 from './files/npmrc';\r\nimport file7 from './files/prettierignore';\r\nimport file6 from './files/prettierrc.yml';\r\nimport file5 from './files/index.html';\r\nimport file4 from './files/postcss.config.cjs';\r\nimport file13 from './files/tsconfig.json';\r\nimport file16 from './files/tsconfig.node.json';\r\nimport file17 from './files/vite.config.ts';\r\nimport file18 from './files/css/global.scss';\r\nimport file19 from './files/css/mixin.scss';\r\nimport file20 from './files/css/theme.css';\r\nimport file14 from './files/src/App.vue';\r\nimport file15 from './files/src/main';\r\nimport file3 from './files/src/vite-env';\r\nimport file21 from './files/src/views/index/welcome.vue';\r\nimport file22 from './files/src/views/index/tabs';\r\n\r\nexport function generateStaticFiles(root = createResultDir('.')): ResultDir {\r\n runFileGenerator(root, file3);\r\n runFileGenerator(root, file4);\r\n runFileGenerator(root, file5);\r\n runFileGenerator(root, file6);\r\n runFileGenerator(root, file7);\r\n runFileGenerator(root, file8);\r\n runFileGenerator(root, file9);\r\n runFileGenerator(root, file10);\r\n runFileGenerator(root, file11);\r\n runFileGenerator(root, file12);\r\n runFileGenerator(root, file13);\r\n runFileGenerator(root, file14);\r\n runFileGenerator(root, file15);\r\n runFileGenerator(root, file16);\r\n runFileGenerator(root, file17);\r\n runFileGenerator(root, file18);\r\n runFileGenerator(root, file19);\r\n runFileGenerator(root, file20);\r\n runFileGenerator(root, file21);\r\n runFileGenerator(root, file22);\r\n\r\n return root;\r\n}\r\n", "import { ResultDir } from '@alilc/lowcode-types';\r\nimport { IProjectTemplate } from '../../../../../types';\r\nimport { generateStaticFiles } from './static-files';\r\n\r\nconst vuejs3Template: IProjectTemplate = {\r\n slots: {\r\n // \u4E0D\u80FD\u5C11\uFF0C\u4F1A\u62A5\u9519\r\n components: {\r\n path: ['src', 'components'],\r\n },\r\n // \u4E0D\u80FD\u5C11\uFF0C\u4F1A\u62A5\u9519\r\n pages: {\r\n path: ['src', 'views'],\r\n },\r\n router: {\r\n path: ['src', 'router'],\r\n fileName: 'index',\r\n },\r\n // entry: {\r\n // path: ['src'],\r\n // fileName: 'app',\r\n // },\r\n // constants: {\r\n // path: ['src'],\r\n // fileName: 'constants',\r\n // },\r\n // \u4E0D\u80FD\u5C11\uFF0C\u4F1A\u62A5\u9519\r\n utils: {\r\n path: ['src'],\r\n fileName: 'utils',\r\n },\r\n // \u4E0D\u80FD\u5C11\uFF0C\u4F1A\u62A5\u9519\r\n i18n: {\r\n path: ['src'],\r\n fileName: 'i18n',\r\n },\r\n // globalStyle: {\r\n // path: ['src'],\r\n // fileName: 'global',\r\n // },\r\n // htmlEntry: {\r\n // path: ['public'],\r\n // fileName: 'index',\r\n // },\r\n packageJSON: {\r\n path: [],\r\n fileName: 'package',\r\n },\r\n // \u63A5\u53E3api\r\n api: {\r\n path: ['src', 'api']\r\n }\r\n },\r\n\r\n generateTemplate(): ResultDir {\r\n return generateStaticFiles();\r\n },\r\n};\r\n\r\nexport default vuejs3Template;\r\n", "import { PackageJSON } from '@alilc/lowcode-types';\r\n\r\nimport { COMMON_CHUNK_NAME } from '../../../../../const';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IProjectInfo,\r\n} from '../../../../../types';\r\n// \u540E\u7EED\u8003\u8651\u81EA\u5B9A\u4E49axios\u8BF7\u6C42\uFF0C\u518D\u4ECEschema\u4E2D\u83B7\u53D6\u6570\u636E\u6E90\u4F9D\u8D56\r\n// import { buildDataSourceDependencies } from '../../../../../utils/dataSource';\r\n\r\ninterface IIceJsPackageJSON extends PackageJSON {\r\n type: string;\r\n}\r\n\r\nexport interface IceJsPackageJsonPluginConfig {\r\n /**\r\n * \u6570\u636E\u6E90\u914D\u7F6E\r\n */\r\n datasourceConfig?: {\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\r\n engineVersion?: string;\r\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\r\n enginePackage?: string;\r\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\r\n handlersVersion?: {\r\n [key: string]: string;\r\n };\r\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\r\n handlersPackages?: {\r\n [key: string]: string;\r\n };\r\n };\r\n /** \u5305\u540D */\r\n packageName?: string;\r\n /** \u7248\u672C */\r\n packageVersion?: string;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<IceJsPackageJsonPluginConfig> = (cfg) => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IProjectInfo;\r\n\r\n const packageJson: IIceJsPackageJSON = {\r\n name: cfg?.packageName || 'vuejs3-demo-app',\r\n private: true,\r\n version: cfg?.packageVersion || '0.0.1',\r\n type: 'module',\r\n scripts: {\r\n dev: 'vite',\r\n build: 'vite build',\r\n preview: 'vite preview',\r\n },\r\n description: 'vue3\u57FA\u7840\u9879\u76EE',\r\n dependencies: {\r\n dayjs: '^1.11.9',\r\n axios: '^0.26.1',\r\n 'js-base64': '^3.7.5',\r\n pinia: '^2.1.0',\r\n 'pinia-plugin-persist': '^1.0.0',\r\n 'postcss-px-to-viewport': '^1.1.1',\r\n vant: '^3.6.4',\r\n vue: '3.3.0',\r\n 'vue-router': '^4.1.3',\r\n jsencrypt: '^3.2.1',\r\n },\r\n devDependencies: {\r\n '@dc/vue-h5-base': '^1.0.53-beta.10',\r\n '@types/node': '^17.0.45',\r\n '@typescript-eslint/eslint-plugin': '^5.56.0',\r\n '@typescript-eslint/parser': '^5.56.0',\r\n '@vitejs/plugin-vue': '^3.2.0',\r\n '@vue/compiler-sfc': '3.2.33',\r\n '@vue/eslint-config-prettier': '^7.1.0',\r\n eslint: '^8.36.0',\r\n 'eslint-plugin-prettier': '^4.2.1',\r\n 'eslint-plugin-vue': '^8.7.1',\r\n prettier: '^2.8.6',\r\n sass: '^1.60.0',\r\n typescript: '^4.9.5',\r\n vite: '^3.2.5',\r\n 'vite-plugin-compression': '^0.5.1',\r\n 'vite-plugin-eslint': '^1.8.1',\r\n 'vite-plugin-style-import': '^2.0.0',\r\n 'vue-eslint-parser': '^8.3.0',\r\n 'vue-tsc': '^0.40.13'\r\n }\r\n };\r\n\r\n ir.packages.forEach((packageInfo) => {\r\n packageJson.dependencies[packageInfo.package] = packageInfo.version;\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.JSON,\r\n fileType: FileType.JSON,\r\n name: COMMON_CHUNK_NAME.FileMainContent,\r\n content: packageJson,\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import { COMMON_CHUNK_NAME } from '../../../../../const';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType,\r\n FileType,\r\n ICodeStruct,\r\n IRouterInfo,\r\n} from '../../../../../types';\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IRouterInfo;\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.TS,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: `\r\n import {\r\n \\tcreateRouter,\r\n \\tcreateWebHashHistory,\r\n \\tcreateWebHistory,\r\n \\tNavigationGuardNext,\r\n \\tRouteLocationNormalized,\r\n \\tRouteLocationNormalizedLoaded,\r\n \\tRouteRecordRaw\r\n } from \"vue-router\"\r\n import { useSystemStore } from \"@dc/vue-h5-base/src/store/system\"\r\n import { setRouter, defaultBeforeEach } from \"@dc/vue-h5-base/src/router\"\r\n import { useUserStore } from '@dc/vue-h5-base/src/store/user'\r\n `,\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.TS,\r\n name: COMMON_CHUNK_NAME.FileVarDefine,\r\n content: `\r\n// \u52A8\u6001\u5BFC\u5165\u6240\u6709modules\u4E0B\u7684\u8DEF\u7531\u6587\u4EF6\u4FE1\u606F\r\nconst modelsFile = import.meta.globEager<Record<\"default\", Array<RouteRecordRaw>>>(\"./modules/**/*.ts\")\r\n\r\n// \u8DEF\u7531\u53BB\u4E2D\u5FC3\u5316\r\nconst children =\r\n Object.keys(modelsFile)\r\n .map((key: string) => modelsFile[key].default)\r\n .flat(1) || []\r\n\r\n/**\r\n * \u7CFB\u7EDF\u8DEF\u7531\u4FE1\u606F\r\n */\r\nconst routes: RouteRecordRaw[] = [\r\n {\r\n path: \"/\",\r\n redirect: \"${ir.routes[0].path}\",\r\n name: \"index\",\r\n meta: {\r\n keepAlive: true\r\n },\r\n component: () => import(\"@dc/vue-h5-base/src/views/index/Index.vue\"),\r\n children: [\r\n ${ir.routes\r\n .map(\r\n (route) => `\r\n {\r\n path: '${route.path}',\r\n component: () => import(\"@/views/${route.componentName}/Index.vue\"),\r\n }\r\n `,\r\n )\r\n .join(',')}\r\n ]\r\n },\r\n {\r\n path: \"/business\",\r\n name: \"business\",\r\n component: () => import(\"@dc/vue-h5-base/src/views/Main.vue\"),\r\n children: children,\r\n // \u8FD9\u91CC\u7528\u6765\u663E\u793A\u6807\u9898\r\n props: (route: RouteLocationNormalizedLoaded) => ({\r\n title: route.query.title || route.query.title || route.name\r\n })\r\n },\r\n {\r\n path: \"/login\",\r\n name: \"\u767B\u5F55\",\r\n component: () => import(\"@dc/vue-h5-base/src/views/login/Login.vue\")\r\n }\r\n]\r\nconst router = createRouter({\r\n history: createWebHashHistory(import.meta.env.BASE_URL),\r\n routes,\r\n})\r\n\r\n// \u8BBE\u7F6E\u57FA\u7840\u6846\u67B6\u4E2D\u7684\u8DEF\u7531\u4FE1\u606F\r\nsetRouter(router)\r\n\r\n/**\r\n * \u5F00\u542F\u8DEF\u7531\u524D\u7F6E\u5B88\u536B\r\n */\r\nrouter.beforeEach(defaultBeforeEach)\r\n `,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n ],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.TS,\r\n name: COMMON_CHUNK_NAME.FileExport,\r\n content: `\r\n export default router;\r\n `,\r\n linkAfter: [\r\n COMMON_CHUNK_NAME.ExternalDepsImport,\r\n COMMON_CHUNK_NAME.InternalDepsImport,\r\n COMMON_CHUNK_NAME.FileVarDefine,\r\n COMMON_CHUNK_NAME.FileMainContent,\r\n ],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "import template from './template';\r\nimport packageJSON from './plugins/packageJSON';\r\nimport router from './plugins/router';\r\n\r\nexport default {\r\n template,\r\n plugins: {\r\n packageJSON,\r\n router\r\n },\r\n};\r\n", "import { createProjectBuilder } from '../generator/ProjectBuilder';\r\nimport containerVue from '../plugins/component/vue/containerVue';\r\nimport template from '../plugins/component/vue/template';\r\nimport vueCommonDeps from '../plugins/component/vue/vueCommonDeps';\r\nimport apiImport from '../plugins/component/vue/apiImport';\r\nimport esmodule from '../plugins/component/vue/esmodule';\r\nimport containerInitVariable from '../plugins/component/vue/containerInitVariable';\r\nimport containerLifeCycle from '../plugins/component/vue/containerLifeCycle';\r\nimport containerInjectDataSourceEngine from '../plugins/component/vue/containerInjectDataSourceEngine';\r\nimport containerMethod from '../plugins/component/vue/containerMethod';\r\nimport vuejs3 from '../plugins/project/framework/vuejs3';\r\nimport { prettier } from '../postprocessor';\r\n\r\nexport default function createDcSolutionProjectBuilder() {\r\n return createProjectBuilder({\r\n template: vuejs3.template,\r\n plugins: {\r\n components: [\r\n ],\r\n pages: [\r\n template(),\r\n vueCommonDeps(),\r\n esmodule({ fileType: 'vue' }),\r\n containerVue(),\r\n apiImport(),\r\n containerInitVariable(),\r\n containerLifeCycle(),\r\n containerMethod()\r\n ],\r\n router: [\r\n // CodeGen.plugins.common.esModule(),\r\n vuejs3.plugins.router(),\r\n ],\r\n // entry: [CodeGen.solutionParts.icejs.plugins.entry()],\r\n // constants: [CodeGen.plugins.project.constants()],\r\n utils: [\r\n ],\r\n i18n: [],\r\n // globalStyle: [CodeGen.solutionParts.icejs.plugins.globalStyle()],\r\n // htmlEntry: [CodeGen.solutionParts.icejs.plugins.entryHtml()],\r\n packageJSON: [vuejs3.plugins.packageJSON()],\r\n api: [containerInjectDataSourceEngine()]\r\n },\r\n postProcessors: [prettier()],\r\n });\r\n}\r\nexport const plugins = {\r\n template,\r\n vueCommonDeps,\r\n esmodule,\r\n containerVue,\r\n apiImport,\r\n containerInitVariable,\r\n containerLifeCycle,\r\n containerMethod,\r\n vuejs3\r\n};\r\n", "import { COMMON_CHUNK_NAME } from '../../const/generator';\r\n\r\nimport { BuilderComponentPlugin, BuilderComponentPluginFactory, ChunkType, FileType, ICodeStruct } from '../../types';\r\n\r\n// TODO: How to merge this logic to common deps\r\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.JSX,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: 'import * from \\'react\\';',\r\n linkAfter: [],\r\n });\r\n\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "// \u672C\u6587\u4EF6\u662F\u8981\u5BFC\u51FA\u5230\u5916\u9762\u7684\uFF0C\u6CE8\u610F\u53EA\u5BFC\u51FA\u6BD4\u8F83\u7A33\u5B9A\u7684\u4E1C\u897F\r\nimport * as common from './common';\r\nimport * as compositeType from './compositeType';\r\nimport * as jsExpression from './jsExpression';\r\nimport * as jsSlot from './jsSlot';\r\nimport * as nodeToJSX from './nodeToJSX';\r\nimport * as resultHelper from './resultHelper';\r\nimport * as templateHelper from './templateHelper';\r\nimport * as validate from './validate';\r\nimport * as schema from './schema';\r\nimport * as version from './version';\r\nimport * as scope from './Scope';\r\nimport * as expressionParser from './expressionParser';\r\nimport * as dataSource from './dataSource';\r\nimport * as pathHelper from './pathHelper';\r\n\r\nexport {\r\n common,\r\n compositeType,\r\n jsExpression,\r\n jsSlot,\r\n nodeToJSX,\r\n resultHelper,\r\n templateHelper,\r\n validate,\r\n schema,\r\n version,\r\n scope,\r\n expressionParser,\r\n dataSource,\r\n pathHelper,\r\n};\r\n", "/**\r\n * \u4F4E\u4EE3\u7801\u5F15\u64CE\u7684\u51FA\u7801\u6A21\u5757\uFF0C\u8D1F\u8D23\u5C06\u7F16\u6392\u4EA7\u51FA\u7684 Schema \u8F6C\u6362\u6210\u5B9E\u9645\u53EF\u6267\u884C\u7684\u4EE3\u7801\u3002\r\n * \u6CE8\u610F\uFF1A\u4E3A\u4E86\u4FDD\u6301 API \u7684\u7A33\u5B9A\u6027\uFF0C\u8FD9\u91CC\u6240\u6709\u5BFC\u51FA\u7684 API \u5747\u8981\u663E\u5F0F\u547D\u540D\u65B9\u5F0F\u5BFC\u51FA\r\n * \uFF08\u5373\u7528 export { xxx } from 'xx' \u7684\u65B9\u5F0F\uFF0C\u4E0D\u8981\u76F4\u63A5 export * from 'xxx')\r\n * \u800C\u4E14\u6240\u6709\u5BFC\u51FA\u7684 API \u52A1\u5FC5\u5728 tests/public \u4E2D\u7F16\u5199\u5355\u5143\u6D4B\u8BD5\r\n */\r\nimport { createProjectBuilder } from './generator/ProjectBuilder';\r\nimport { createModuleBuilder } from './generator/ModuleBuilder';\r\nimport { createDiskPublisher } from './publisher/disk';\r\nimport { createZipPublisher } from './publisher/zip';\r\nimport createIceJsProjectBuilder, { plugins as icejsPlugins } from './solutions/icejs';\r\nimport createIceJs3ProjectBuilder, { plugins as icejs3Plugins } from './solutions/icejs3';\r\nimport createRaxAppProjectBuilder, { plugins as raxPlugins } from './solutions/rax-app';\r\nimport createDcSolutionProjectBuilder, { plugins as vuejs3Plugins } from './solutions/vuejs3';\r\n\r\n// \u5F15\u5165\u8BF4\u660E\r\nimport { REACT_CHUNK_NAME } from './plugins/component/react/const';\r\nimport { COMMON_CHUNK_NAME, CLASS_DEFINE_CHUNK_NAME, DEFAULT_LINK_AFTER, TEMPLATE_DEFINE_CHUNK_NAME, VUE_DEFAULT_LINK_AFTER } from './const/generator';\r\n\r\n// \u5F15\u5165\u901A\u7528\u63D2\u4EF6\u7EC4\r\nimport esmodule from './plugins/common/esmodule';\r\nimport requireUtils from './plugins/common/requireUtils';\r\nimport styleImport from './plugins/common/styleImport';\r\n\r\nimport css from './plugins/component/style/css';\r\nimport constants from './plugins/project/constants';\r\nimport i18n from './plugins/project/i18n';\r\nimport utils from './plugins/project/utils';\r\nimport prettier from './postprocessor/prettier';\r\n\r\n// \u5F15\u5165\u5168\u5C40\u5E38\u7528\u5DE5\u5177\r\nimport * as globalUtils from './utils';\r\n\r\nimport * as CONSTANTS from './const';\r\n\r\n// \u5F15\u5165\u5185\u7F6E\u89E3\u51B3\u65B9\u6848\u6A21\u5757\r\nimport icejs from './plugins/project/framework/icejs';\r\nimport icejs3 from './plugins/project/framework/icejs3';\r\nimport rax from './plugins/project/framework/rax';\r\nimport vuejs3 from './plugins/project/framework/vuejs3';\r\n\r\nexport default {\r\n createProjectBuilder,\r\n createModuleBuilder,\r\n solutions: {\r\n icejs: createIceJsProjectBuilder,\r\n icejs3: createIceJs3ProjectBuilder,\r\n rax: createRaxAppProjectBuilder,\r\n vuejs3: createDcSolutionProjectBuilder\r\n },\r\n solutionParts: {\r\n icejs,\r\n icejs3,\r\n rax,\r\n vuejs3\r\n },\r\n publishers: {\r\n disk: createDiskPublisher,\r\n zip: createZipPublisher,\r\n },\r\n plugins: {\r\n common: {\r\n\r\n /**\r\n * \u5904\u7406 ES Module\r\n * @deprecated please use esModule\r\n */\r\n esmodule,\r\n esModule: esmodule,\r\n requireUtils,\r\n styleImport,\r\n },\r\n style: {\r\n css,\r\n },\r\n project: {\r\n constants,\r\n i18n,\r\n utils,\r\n },\r\n icejs: {\r\n ...icejsPlugins,\r\n },\r\n icejs3: {\r\n ...icejs3Plugins,\r\n },\r\n rax: {\r\n ...raxPlugins,\r\n },\r\n vuejs3: {\r\n ...vuejs3Plugins\r\n },\r\n\r\n /**\r\n * @deprecated please use icejs\r\n */\r\n react: {\r\n ...icejsPlugins,\r\n },\r\n },\r\n postprocessor: {\r\n prettier,\r\n },\r\n utils: globalUtils,\r\n chunkNames: {\r\n COMMON_CHUNK_NAME,\r\n CLASS_DEFINE_CHUNK_NAME,\r\n REACT_CHUNK_NAME,\r\n TEMPLATE_DEFINE_CHUNK_NAME\r\n },\r\n defaultLinkAfter: {\r\n COMMON_DEFAULT_LINK_AFTER: DEFAULT_LINK_AFTER,\r\n VUE_DEFAULT_LINK_AFTER: VUE_DEFAULT_LINK_AFTER\r\n },\r\n constants: CONSTANTS,\r\n};\r\n\r\n// \u4E00\u4E9B\u7C7B\u578B\u5B9A\u4E49\r\nexport * from './types';\r\n\r\n// \u4E00\u4E9B\u5E38\u91CF\u5B9A\u4E49\r\nexport * from './const';\r\n\r\n// \u4E00\u4E9B\u5DE5\u5177\u51FD\u6570\r\nexport * from './analyzer/componentAnalyzer';\r\nexport * from './parser/SchemaParser';\r\nexport * from './generator/ChunkBuilder';\r\nexport * from './generator/CodeBuilder';\r\nexport * from './generator/ModuleBuilder';\r\nexport * from './generator/ProjectBuilder';\r\n", "/* eslint-disable no-console */\r\nimport * as fs from 'fs-extra';\r\nimport * as path from 'path';\r\nimport chalk from 'chalk';\r\nimport * as changeCase from 'change-case';\r\nimport { getErrorMessage } from '../utils/errors';\r\nimport { getLowcodeSolutionTemplateFiles } from './solutions/example-solution';\r\n\r\n\r\nexport async function initSolution(args: string[], options: {\r\n quiet?: boolean;\r\n verbose?: boolean;\r\n}) {\r\n try {\r\n const cwd = process.cwd();\r\n let solutionName = args[0] || 'hello';\r\n let solutionPath = path.resolve(cwd, solutionName);\r\n if (solutionName === '.') {\r\n solutionName = path.basename(cwd);\r\n solutionPath = cwd;\r\n }\r\n\r\n const modifyFileContent = (content: string) =>\r\n content\r\n .replace(/hello-world/g, changeCase.paramCase(solutionName))\r\n .replace(/HelloWorld/g, changeCase.pascalCase(solutionName))\r\n .replace(/Hello World/g, changeCase.titleCase(solutionName));\r\n\r\n await ensureDirExists(solutionPath);\r\n\r\n const templateFiles = getLowcodeSolutionTemplateFiles();\r\n for (const templateFile of templateFiles) {\r\n if (options.verbose) {\r\n console.log('%s', chalk.gray(`creating file ${templateFile.file}`));\r\n }\r\n\r\n const templateFilePath = path.join(solutionPath, templateFile.file);\r\n await ensureDirExists(path.dirname(templateFilePath));\r\n await fs.writeFile(templateFilePath, modifyFileContent(templateFile.content), { encoding: 'utf-8' });\r\n }\r\n\r\n if (!options.quiet) {\r\n console.log('%s', chalk.green(`solution ${solutionName} created successfully`));\r\n }\r\n\r\n return 0;\r\n } catch (e) {\r\n console.log(chalk.red(getErrorMessage(e) || `Unexpected error: ${e}`));\r\n if (typeof e === 'object' && (e as { stack: string } | null)?.stack && options.verbose) {\r\n console.log(chalk.gray((e as { stack: string }).stack));\r\n }\r\n return 1;\r\n }\r\n}\r\n\r\nasync function ensureDirExists(dirPath: string) {\r\n try {\r\n await fs.mkdir(dirPath, { recursive: true });\r\n } catch (e) {\r\n if ((e as { code: string }).code === 'EEXIST') {\r\n return;// ignore existing error\r\n }\r\n throw e;\r\n }\r\n}", "export function getLowcodeSolutionTemplateFiles() {\r\n return [\r\n {\r\n file: '.editorconfig',\r\n content: `root = true\r\n\r\n[*]\r\nindent_style = space\r\nindent_size = 2\r\nend_of_line = lf\r\ncharset = utf-8\r\ntrim_trailing_whitespace = true\r\ninsert_final_newline = true\r\nquote_type = single\r\n\r\n[*.md]\r\ntrim_trailing_whitespace = false\r\n`,\r\n },\r\n {\r\n file: '.eslintignore',\r\n content: `# \u5FFD\u7565\u76EE\u5F55\r\nnode_modules/\r\nbuild/\r\ndist/\r\ntest-cases/\r\ntest/\r\ntests/\r\noutput/\r\nes/\r\nlib/\r\ncoverage/\r\n\r\n# \u5FFD\u7565\u6587\u4EF6\r\n**/*.min.js\r\n**/*-min.js\r\n**/*.bundle.js\r\n`,\r\n },\r\n {\r\n file: '.eslintrc.js',\r\n content: `module.exports = {\r\n extends: 'eslint-config-ali/typescript/react',\r\n rules: {\r\n 'max-len': ['error', { code: 200 }],\r\n 'comma-dangle': 0,\r\n },\r\n};\r\n`,\r\n },\r\n {\r\n file: '.gitignore',\r\n content: `# project custom\r\nbuild\r\nes\r\nlib\r\ndist\r\noutput\r\npackage-lock.json\r\ndeploy-space/packages\r\ndeploy-space/.env\r\ngenerated\r\n\r\n# IDE\r\n.vscode\r\n.idea\r\n\r\n# Logs\r\nlogs\r\n*.log\r\nnpm-debug.log*\r\nyarn-debug.log*\r\nyarn-error.log*\r\nlerna-debug.log*\r\n\r\n# Runtime data\r\npids\r\n*.pid\r\n*.seed\r\n*.pid.lock\r\n\r\n\r\n# Directory for instrumented libs generated by jscoverage/JSCover\r\nlib-cov\r\n\r\n# Coverage directory used by tools like istanbul\r\ncoverage\r\n\r\n# nyc test coverage\r\n.nyc_output\r\n\r\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\r\n.grunt\r\n\r\n# Bower dependency directory (https://bower.io/)\r\nbower_components\r\n\r\n# node-waf configuration\r\n.lock-wscript\r\n\r\n# Compiled binary addons (https://nodejs.org/api/addons.html)\r\nbuild/Release\r\nlib\r\n\r\n# Dependency directories\r\nnode_modules/\r\njspm_packages/\r\n\r\n# TypeScript v1 declaration files\r\ntypings/\r\n\r\n# Optional npm cache directory\r\n.npm\r\n\r\n# Optional eslint cache\r\n.eslintcache\r\n\r\n# Optional REPL history\r\n.node_repl_history\r\n\r\n# Output of 'npm pack'\r\n*.tgz\r\n\r\n# Yarn Integrity file\r\n.yarn-integrity\r\n\r\n# dotenv environment variables file\r\n.env\r\n.env.test\r\n\r\n# parcel-bundler cache (https://parceljs.org/)\r\n.cache\r\n\r\n# next.js build output\r\n.next\r\n\r\n# nuxt.js build output\r\n.nuxt\r\n\r\n# vuepress build output\r\n.vuepress/dist\r\n\r\n# Serverless directories\r\n.serverless/\r\n\r\n# FuseBox cache\r\n.fusebox/\r\n\r\n# DynamoDB Local files\r\n.dynamodb/\r\n\r\n# mac config files\r\n.DS_Store\r\n\r\n# codealike\r\ncodealike.json\r\n.node\r\n`,\r\n },\r\n {\r\n file: '.prettierignore',\r\n content: '/test-cases/',\r\n },\r\n {\r\n file: '.prettierrc',\r\n content: `{\r\n \"tabWidth\": 2,\r\n \"singleQuote\": true,\r\n \"trailingComma\": \"es5\"\r\n}\r\n`,\r\n },\r\n {\r\n file: 'CHANGELOG.md',\r\n content: '',\r\n },\r\n {\r\n file: 'CONTRIBUTING.md',\r\n content: `# \u6B22\u8FCE\u5171\u5EFA\r\n\r\n# \u6CE8\u610F\r\n\r\n- \u6CE8\u610F\u89E3\u51B3 eslint \u95EE\u9898\r\n- \u6CE8\u610F\u4EE3\u7801\u683C\u5F0F\u5316 -- \u5EFA\u8BAE\u5B89\u88C5 prettier \u63D2\u4EF6\r\n- \u53D1\u5E03\u524D\u6CE8\u610F\u8981\u8DD1\u901A demo \u548C\u6240\u6709\u7684\u5355\u6D4B\r\n\r\n## \u672C\u5730\u8C03\u8BD5\u8FD0\u884C Demo\r\n\r\n\\`\\`\\`sh\r\n> npm run demo\r\n\\`\\`\\`\r\n\r\n## \u672C\u5730\u8DD1\u5355\u6D4B\r\n\r\n\\`\\`\\`sh\r\n> npm test\r\n\\`\\`\\`\r\n`,\r\n },\r\n {\r\n file: 'README.md',\r\n content: `# \u4F4E\u4EE3\u7801\u51FA\u7801\u81EA\u5B9A\u4E49\u65B9\u6848\u4E4B Hello World\r\n\r\n## \u76F4\u63A5\u6267\u884C\r\n\r\n\\`\\`\\`sh\r\n> npx ali-lowcode-solution-hello-world demo-schema.json\r\n\\`\\`\\`\r\n\r\n## \u672C\u5730\u8C03\u8BD5\u8FD0\u884C Demo\r\n\r\n\\`\\`\\`sh\r\n> npm run demo\r\n\\`\\`\\`\r\n`,\r\n },\r\n {\r\n file: 'demo-schema.json',\r\n content: `{\r\n \"version\": \"1.0.0\",\r\n \"componentsMap\": [\r\n {\r\n \"componentName\": \"Button\",\r\n \"package\": \"@alifd/next\",\r\n \"version\": \"1.19.18\",\r\n \"destructuring\": true,\r\n \"exportName\": \"Button\"\r\n },\r\n {\r\n \"componentName\": \"Button.Group\",\r\n \"package\": \"@alifd/next\",\r\n \"version\": \"1.19.18\",\r\n \"destructuring\": true,\r\n \"exportName\": \"Button\",\r\n \"subName\": \"Group\"\r\n },\r\n {\r\n \"componentName\": \"Input\",\r\n \"package\": \"@alifd/next\",\r\n \"version\": \"1.19.18\",\r\n \"destructuring\": true,\r\n \"exportName\": \"Input\"\r\n },\r\n {\r\n \"componentName\": \"Form\",\r\n \"package\": \"@alifd/next\",\r\n \"version\": \"1.19.18\",\r\n \"destructuring\": true,\r\n \"exportName\": \"Form\"\r\n },\r\n {\r\n \"componentName\": \"Form.Item\",\r\n \"package\": \"@alifd/next\",\r\n \"version\": \"1.19.18\",\r\n \"destructuring\": true,\r\n \"exportName\": \"Form\",\r\n \"subName\": \"Item\"\r\n },\r\n {\r\n \"componentName\": \"NumberPicker\",\r\n \"package\": \"@alifd/next\",\r\n \"version\": \"1.19.18\",\r\n \"destructuring\": true,\r\n \"exportName\": \"NumberPicker\"\r\n },\r\n {\r\n \"componentName\": \"Select\",\r\n \"package\": \"@alifd/next\",\r\n \"version\": \"1.19.18\",\r\n \"destructuring\": true,\r\n \"exportName\": \"Select\"\r\n }\r\n ],\r\n \"componentsTree\": [\r\n {\r\n \"componentName\": \"Page\",\r\n \"id\": \"node$1\",\r\n \"meta\": {\r\n \"title\": \"\u6D4B\u8BD5\",\r\n \"router\": \"/\"\r\n },\r\n \"props\": {\r\n \"ref\": \"outterView\",\r\n \"autoLoading\": true\r\n },\r\n \"fileName\": \"test\",\r\n \"state\": {\r\n \"text\": \"outter\"\r\n },\r\n \"lifeCycles\": {\r\n \"componentDidMount\": {\r\n \"type\": \"JSFunction\",\r\n \"value\": \"function componentDidMount() {\\\\n console.log('componentDidMount');\\\\n}\"\r\n }\r\n },\r\n \"methodsModule\": {\r\n \"type\": \"JSModule\",\r\n \"source\": \"export function helloWorld() {\\\\n console.log('Hello world!');\\\\n}\\\\n\"\r\n },\r\n \"dataSource\": {\r\n \"list\": [\r\n {\r\n \"id\": \"urlParams\",\r\n \"type\": \"urlParams\"\r\n },\r\n\r\n {\r\n \"id\": \"user\",\r\n \"type\": \"fetch\",\r\n \"options\": {\r\n \"method\": \"GET\",\r\n \"uri\": \"https://shs.xxx.com/mock/1458/demo/user\",\r\n \"isSync\": true\r\n },\r\n \"dataHandler\": {\r\n \"type\": \"JSExpression\",\r\n \"value\": \"function (response) {\\\\nif (!response.data.success){\\\\n throw new Error(response.data.message);\\\\n }\\\\n return response.data.data;\\\\n}\"\r\n }\r\n },\r\n\r\n {\r\n \"id\": \"orders\",\r\n \"type\": \"fetch\",\r\n \"options\": {\r\n \"method\": \"GET\",\r\n \"uri\": \"https://shs.xxx.com/mock/1458/demo/orders\",\r\n \"isSync\": true\r\n },\r\n \"dataHandler\": {\r\n \"type\": \"JSExpression\",\r\n \"value\": \"function (response) {\\\\nif (!response.data.success){\\\\n throw new Error(response.data.message);\\\\n }\\\\n return response.data.data.result;\\\\n}\"\r\n }\r\n }\r\n ],\r\n \"dataHandler\": {\r\n \"type\": \"JSExpression\",\r\n \"value\": \"function (dataMap) {\\\\n console.info(\\\\\"All datasources loaded:\\\\\", dataMap);\\\\n}\"\r\n }\r\n },\r\n \"children\": [\r\n {\r\n \"componentName\": \"Form\",\r\n \"id\": \"node$2\",\r\n \"props\": {\r\n \"labelCol\": {\r\n \"type\": \"JSExpression\",\r\n \"value\": \"this.state.colNum\"\r\n },\r\n \"style\": {},\r\n \"ref\": \"testForm\"\r\n },\r\n \"children\": [\r\n {\r\n \"componentName\": \"Form.Item\",\r\n \"id\": \"node$3\",\r\n \"props\": {\r\n \"label\": \"\u59D3\u540D\uFF1A\",\r\n \"name\": \"name\",\r\n \"initValue\": \"\u674E\u96F7\"\r\n },\r\n \"children\": [\r\n {\r\n \"componentName\": \"Input\",\r\n \"id\": \"node$4\",\r\n \"props\": {\r\n \"placeholder\": \"\u8BF7\u8F93\u5165\",\r\n \"size\": \"medium\",\r\n \"style\": {\r\n \"width\": 320\r\n }\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n \"componentName\": \"Form.Item\",\r\n \"id\": \"node$5\",\r\n \"props\": {\r\n \"label\": \"\u5E74\u9F84\uFF1A\",\r\n \"name\": \"age\",\r\n \"initValue\": \"22\"\r\n },\r\n \"children\": [\r\n {\r\n \"componentName\": \"NumberPicker\",\r\n \"id\": \"node$6\",\r\n \"props\": {\r\n \"size\": \"medium\",\r\n \"type\": \"normal\"\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n \"componentName\": \"Form.Item\",\r\n \"id\": \"node$7\",\r\n \"props\": {\r\n \"label\": \"\u804C\u4E1A\uFF1A\",\r\n \"name\": \"profession\"\r\n },\r\n \"children\": [\r\n {\r\n \"componentName\": \"Select\",\r\n \"id\": \"node$8\",\r\n \"props\": {\r\n \"dataSource\": [\r\n {\r\n \"label\": \"\u6559\u5E08\",\r\n \"value\": \"t\"\r\n },\r\n {\r\n \"label\": \"\u533B\u751F\",\r\n \"value\": \"d\"\r\n },\r\n {\r\n \"label\": \"\u6B4C\u624B\",\r\n \"value\": \"s\"\r\n }\r\n ]\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n \"componentName\": \"Div\",\r\n \"id\": \"node$9\",\r\n \"props\": {\r\n \"style\": {\r\n \"textAlign\": \"center\"\r\n }\r\n },\r\n \"children\": [\r\n {\r\n \"componentName\": \"Button.Group\",\r\n \"id\": \"node$a\",\r\n \"props\": {},\r\n \"children\": [\r\n {\r\n \"componentName\": \"Button\",\r\n \"id\": \"node$b\",\r\n \"condition\": {\r\n \"type\": \"JSExpression\",\r\n \"value\": \"this.index >= 1\"\r\n },\r\n \"loop\": [\"a\", \"b\", \"c\"],\r\n \"props\": {\r\n \"type\": \"primary\",\r\n \"style\": {\r\n \"margin\": \"0 5px 0 5px\"\r\n }\r\n },\r\n \"children\": [\r\n {\r\n \"type\": \"JSExpression\",\r\n \"value\": \"this.item\"\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n ],\r\n \"constants\": {\r\n \"ENV\": \"prod\",\r\n \"DOMAIN\": \"xxx.xxx.com\"\r\n },\r\n \"css\": \"body {font-size: 12px;} .table { width: 100px;}\",\r\n \"config\": {\r\n \"sdkVersion\": \"1.0.3\",\r\n \"historyMode\": \"hash\",\r\n \"targetRootID\": \"J_Container\",\r\n \"layout\": {\r\n \"componentName\": \"BasicLayout\",\r\n \"props\": {\r\n \"logo\": \"...\",\r\n \"name\": \"\u6D4B\u8BD5\u7F51\u7AD9\"\r\n }\r\n },\r\n \"theme\": {\r\n \"package\": \"@alife/theme-fusion\",\r\n \"version\": \"^0.1.0\",\r\n \"primary\": \"#ff9966\"\r\n }\r\n },\r\n \"meta\": {\r\n \"name\": \"demo\u5E94\u7528\",\r\n \"git_group\": \"appGroup\",\r\n \"project_name\": \"app_demo\",\r\n \"description\": \"\u8FD9\u662F\u4E00\u4E2A\u6D4B\u8BD5\u5E94\u7528\",\r\n \"spma\": \"spa23d\",\r\n \"creator\": \"\u6708\u98DE\"\r\n }\r\n}\r\n`,\r\n },\r\n {\r\n file: 'jest.config.js',\r\n content: `module.exports = {\r\n preset: 'ts-jest',\r\n testEnvironment: 'node',\r\n testPathIgnorePatterns: ['/node_modules/', '/test-cases/', '/static-files/', '/lib/'],\r\n};\r\n`,\r\n },\r\n {\r\n file: 'package.json',\r\n content: `{\r\n \"name\": \"ali-lowcode-solution-hello-world\",\r\n \"version\": \"1.0.0\",\r\n \"description\": \"AlLowCode Code Generate Solution - Hello World\",\r\n \"files\": [\r\n \"src\",\r\n \"lib\",\r\n \"tests\",\r\n \"jest.config.js\",\r\n \".editorconfig\",\r\n \".eslintignore\",\r\n \".eslintrc.js\",\r\n \".gitignore\",\r\n \".prettierignore\",\r\n \".prettierrc\",\r\n \"CHANGELOG.md\",\r\n \"CONTRIBUTING.md\",\r\n \"demo-schema.json\",\r\n \"package.json\",\r\n \"README.md\",\r\n \"tsconfig.json\"\r\n ],\r\n \"main\": \"lib/index.js\",\r\n \"scripts\": {\r\n \"start\": \"jest --watch\",\r\n \"build\": \"npm run clean && concurrently 'npm run build:ts' 'npm run lint'\",\r\n \"build:ts\": \"tsc\",\r\n \"check:type\": \"tsc -p . --noEmit\",\r\n \"clean\": \"rm -rf build dist lib generated\",\r\n \"dev\": \"build-scripts start\",\r\n \"lint\": \"eslint --ext .tsx,.ts,.js,.jsx src\",\r\n \"lintfix\": \"eslint --fix --color --ext .tsx,.ts,.js,.jsx src\",\r\n \"lint-staged\": \"lint-staged\",\r\n \"prepublishOnly\": \"npm run build\",\r\n \"postpublish\": \"git push origin master --tags\",\r\n \"test\": \"jest\",\r\n \"test:watch\": \"jest --watch\",\r\n \"test:update-snapshots\": \"cross-env UPDATE_EXPECTED=true npx jest\",\r\n \"demo\": \"npm run build && npx @alilc/lowcode-code-generator --solution . --output generated demo-schema.json\"\r\n },\r\n \"repository\": {\r\n \"type\": \"git\",\r\n \"url\": \"git@github.com:your-name/ali-lowcode-solution-hello-world.git\"\r\n },\r\n \"author\": \"\",\r\n \"license\": \"ISC\",\r\n \"publishConfig\": {\r\n \"registry\": \"https://registry.npm.xxx.com\"\r\n },\r\n \"dependencies\": {\r\n \"@alilc/lowcode-code-generator\": \"^1.0.0\",\r\n \"@alilc/lowcode-types\": \"^1.0.0\",\r\n \"tslib\": \"^2.3.0\"\r\n },\r\n \"devDependencies\": {\r\n \"@types/async\": \"^3.2.3\",\r\n \"@types/jest\": \"^26.0.17\",\r\n \"@typescript-eslint/eslint-plugin\": \"^4.28.4\",\r\n \"@typescript-eslint/parser\": \"^4.28.4\",\r\n \"async\": \"^3.2.0\",\r\n \"babel-runtime\": \"^6.26.0\",\r\n \"concurrently\": \"^5.2.0\",\r\n \"cross-env\": \"^7.0.0\",\r\n \"debug\": \"^4.1.1\",\r\n \"eslint\": \"^7.31.0\",\r\n \"eslint-config-ali\": \"^12.1.0\",\r\n \"eslint-plugin-import\": \"^2.23.4\",\r\n \"eslint-plugin-react\": \"^7.24.0\",\r\n \"eslint-plugin-react-hooks\": \"^4.2.0\",\r\n \"glob\": \"^7.2.0\",\r\n \"husky\": \"4.2.5\",\r\n \"jest\": \"^26.6.3\",\r\n \"json5\": \"^2.2.0\",\r\n \"lint-staged\": \"10.1.x\",\r\n \"lodash\": \"^4.17.21\",\r\n \"md5\": \"^2.2.1\",\r\n \"prettier\": \"^2.3.2\",\r\n \"ts-jest\": \"^26.4.4\",\r\n \"ts-node\": \"^9.0.0\",\r\n \"typescript\": \"4.x\"\r\n }\r\n}\r\n`,\r\n },\r\n {\r\n file: 'tsconfig.json',\r\n content: `{\r\n \"compilerOptions\": {\r\n \"esModuleInterop\": true,\r\n \"declaration\": true,\r\n \"experimentalDecorators\": true,\r\n \"forceConsistentCasingInFileNames\": true,\r\n \"importHelpers\": true,\r\n \"incremental\": false,\r\n \"jsx\": \"react\",\r\n \"moduleResolution\": \"node\",\r\n \"resolveJsonModule\": true,\r\n \"skipLibCheck\": true,\r\n \"sourceMap\": true,\r\n \"strict\": true,\r\n \"stripInternal\": true,\r\n \"outDir\": \"./lib\",\r\n \"declarationDir\": \"./lib\",\r\n \"rootDirs\": [\"./src\"],\r\n \"target\": \"es6\",\r\n \"module\": \"commonjs\",\r\n \"lib\": [\"esnext\"],\r\n \"types\": [\"jest\", \"node\"],\r\n \"noUnusedLocals\": false,\r\n \"noUnusedParameters\": false\r\n },\r\n \"include\": [\"src/**/*\", \"typings/**/*\"]\r\n}\r\n`,\r\n },\r\n {\r\n file: 'src/index.ts',\r\n content: `import CodeGen from '@alilc/lowcode-code-generator';\r\n\r\nimport examplePlugin from './plugins/example';\r\n\r\nexport default function createHelloWorldProjectBuilder() {\r\n return CodeGen.createProjectBuilder({\r\n template: CodeGen.solutionParts.icejs.template,\r\n plugins: {\r\n components: [\r\n CodeGen.plugins.icejs.reactCommonDeps(),\r\n CodeGen.plugins.common.esModule({ fileType: 'jsx' }),\r\n CodeGen.plugins.common.styleImport(),\r\n CodeGen.plugins.icejs.containerClass(),\r\n CodeGen.plugins.icejs.containerInjectContext(),\r\n CodeGen.plugins.icejs.containerInjectUtils(),\r\n CodeGen.plugins.icejs.containerInjectDataSourceEngine(),\r\n CodeGen.plugins.icejs.containerInjectI18n(),\r\n CodeGen.plugins.icejs.containerInjectConstants(),\r\n CodeGen.plugins.icejs.containerInitState(),\r\n CodeGen.plugins.icejs.containerLifeCycle(),\r\n CodeGen.plugins.icejs.containerMethod(),\r\n examplePlugin(),\r\n CodeGen.plugins.icejs.jsx({\r\n nodeTypeMapping: {\r\n Div: 'div',\r\n Component: 'div',\r\n Page: 'div',\r\n Block: 'div',\r\n },\r\n }),\r\n CodeGen.plugins.style.css(),\r\n ],\r\n pages: [\r\n CodeGen.plugins.icejs.reactCommonDeps(),\r\n CodeGen.plugins.common.esModule({ fileType: 'jsx' }),\r\n CodeGen.plugins.common.styleImport(),\r\n CodeGen.plugins.icejs.containerClass(),\r\n CodeGen.plugins.icejs.containerInjectContext(),\r\n CodeGen.plugins.icejs.containerInjectUtils(),\r\n CodeGen.plugins.icejs.containerInjectDataSourceEngine(),\r\n CodeGen.plugins.icejs.containerInjectI18n(),\r\n CodeGen.plugins.icejs.containerInjectConstants(),\r\n CodeGen.plugins.icejs.containerInitState(),\r\n CodeGen.plugins.icejs.containerLifeCycle(),\r\n CodeGen.plugins.icejs.containerMethod(),\r\n examplePlugin(),\r\n CodeGen.plugins.icejs.jsx({\r\n nodeTypeMapping: {\r\n Div: 'div',\r\n Component: 'div',\r\n Page: 'div',\r\n Block: 'div',\r\n },\r\n }),\r\n CodeGen.plugins.style.css(),\r\n ],\r\n router: [\r\n CodeGen.plugins.common.esModule(),\r\n CodeGen.solutionParts.icejs.plugins.router(),\r\n ],\r\n entry: [CodeGen.solutionParts.icejs.plugins.entry()],\r\n constants: [CodeGen.plugins.project.constants()],\r\n utils: [\r\n CodeGen.plugins.common.esModule(),\r\n CodeGen.plugins.project.utils('react'),\r\n ],\r\n i18n: [CodeGen.plugins.project.i18n()],\r\n globalStyle: [CodeGen.solutionParts.icejs.plugins.globalStyle()],\r\n htmlEntry: [CodeGen.solutionParts.icejs.plugins.entryHtml()],\r\n packageJSON: [CodeGen.solutionParts.icejs.plugins.packageJSON()],\r\n },\r\n postProcessors: [CodeGen.postprocessor.prettier()],\r\n });\r\n}\r\n`,\r\n },\r\n {\r\n file: 'src/plugins/example.ts',\r\n content: `import {\r\n ICodeStruct,\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n FileType,\r\n ChunkType,\r\n IContainerInfo,\r\n COMMON_CHUNK_NAME,\r\n CLASS_DEFINE_CHUNK_NAME,\r\n DEFAULT_LINK_AFTER,\r\n} from '@alilc/lowcode-code-generator';\r\n\r\nexport interface PluginConfig {\r\n fileType: string;\r\n}\r\n\r\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (\r\n config?\r\n) => {\r\n const cfg: PluginConfig = {\r\n fileType: FileType.JSX,\r\n ...config,\r\n };\r\n\r\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\r\n const next: ICodeStruct = {\r\n ...pre,\r\n };\r\n\r\n const ir = next.ir as IContainerInfo & {\r\n methodsModule?: {\r\n type?: 'JSModule';\r\n source?: string;\r\n };\r\n };\r\n\r\n if (ir.methodsModule?.type !== 'JSModule' || !ir.methodsModule?.source) {\r\n return next;\r\n }\r\n\r\n // \u521B\u5EFA methods.jsx\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n subModule: 'methods',\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.CustomContent,\r\n content: ir.methodsModule.source,\r\n linkAfter: [],\r\n });\r\n\r\n // \u5F15\u5165\u5BF9\u5E94\u7684\u6A21\u5757\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n content: \"import __$$methodsModule from './methods';\",\r\n linkAfter: [...DEFAULT_LINK_AFTER[COMMON_CHUNK_NAME.InternalDepsImport]],\r\n });\r\n\r\n // \u5C06\u5BFC\u51FA\u7684\u4E1C\u4E1C\u90FD\u653E\u5230 class \u4E0A\u5B9E\u4F8B\u65B9\u6CD5\u90E8\u5206\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\r\n content: 'Object.assign(this, __$$methodsModule);',\r\n linkAfter: [\r\n ...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent],\r\n ],\r\n });\r\n\r\n return next;\r\n };\r\n\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n`,\r\n },\r\n {\r\n file: 'tests/basic.test.ts',\r\n content: `test('basic functions should be ok', () => {\r\n // \u8FD9\u91CC\u653E\u4E00\u4E9B\u5355\u5143\u6D4B\u8BD5\r\n expect(0).toBe(0);\r\n});\r\n`,\r\n },\r\n ];\r\n}\r\n"],
5
+ "mappings": "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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAyRX;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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",
6
+ "names": ["import_change_case", "changeCase", "short", "ContainerType", "changeCase", "_a", "_b", "file", "nm", "t", "plugins", "file", "plugins", "path", "file", "fs", "file", "resolve", "fs", "path", "fs", "path", "JSZip", "file", "path", "import_change_case", "pluginFactory", "changeCase", "import_change_case", "pluginFactory", "changeCase", "import_lowcode_types", "import_lodash", "parser", "import_generator", "import_traverse", "t", "import_lowcode_types", "parseExpression", "import_generator", "import_types", "generate", "traverse", "path", "parseExpression", "traverse", "path", "generate", "import_lowcode_types", "_", "identifier", "pluginFactory", "pluginFactory", "pluginFactory", "import_lowcode_types", "import_change_case", "pluginFactory", "changeCase", "pluginFactory", "pluginFactory", "import_lowcode_types", "pluginFactory", "pluginFactory", "import_lodash", "import_lowcode_types", "import_lodash", "_", "import_generator", "generate", "_", "parseExpression", "pluginFactory", "scope", "config", "pluginFactory", "pluginFactory", "pluginFactory", "pluginFactory", "pluginFactory", "path", "file", "getFile", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "pluginFactory", "pluginFactory", "pluginFactory", "import_change_case", "changeCase", "pluginFactory", "pluginFactory", "parser", "prettier", "parserBabel", "parserPostCss", "parserHtml", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "generateStaticFiles", "getFile", "generateStaticFiles", "template_default", "pluginFactory", "globalStyle_default", "pluginFactory", "packageJSON_default", "pluginFactory", "pluginFactory", "import_prettier", "import_parser_babel", "prettier", "parserBabel", "getContent", "pluginFactory", "template_default", "globalStyle_default", "packageJSON_default", "createIceJsProjectBuilder", "plugins", "import_change_case", "pluginFactory", "changeCase", "containerClass_default", "import_lodash", "import_lowcode_types", "createDebug", "pluginFactory", "_", "containerLifeCycle_default", "pluginFactory", "pluginFactory", "containerInitState_default", "pluginFactory", "containerInjectContext_default", "import_lowcode_types", "import_change_case", "pluginFactory", "_a", "changeCase", "wrapAsFunction", "containerInjectDataSourceEngine_default", "pluginFactory", "containerInjectUtils_default", "import_lowcode_types", "import_lodash", "import_change_case", "pluginFactory", "config", "next", "jsx_default", "_", "changeCase", "pluginFactory", "getFile", "getFile", "getFile", "getFile", "getFile", "getFile", "getFile", "getFile", "getFile", "getFile", "generateStaticFiles", "getFile", "generateStaticFiles", "template_default", "pluginFactory", "entry_default", "import_change_case", "pluginFactory", "changeCase", "appConfig_default", "pluginFactory", "buildConfig_default", "pluginFactory", "pluginFactory", "globalStyle_default", "semver", "pluginFactory", "packageJSON_default", "template_default", "appConfig_default", "buildConfig_default", "entry_default", "globalStyle_default", "packageJSON_default", "containerClass_default", "containerInitState_default", "containerInjectContext_default", "containerInjectDataSourceEngine_default", "containerInjectUtils_default", "containerLifeCycle_default", "jsx_default", "plugins", "pluginFactory", "import_lodash", "import_lowcode_types", "mergeNodeGeneratorConfig", "isPureString", "generateAttrValue", "generateAttr", "generateAttrs", "generateBasicNode", "_", "generateSimpleNode", "linkPieces", "generateNodeSchema", "handleChildren", "createNodeGenerator", "isLiteralAtomicExpr", "isSimpleStraightLiteral", "import_generator", "transformThis2Context", "generate", "transformJsExpr", "isLiteralAtomicExpr", "parseExpression", "isSimpleStraightLiteral", "transformThis2Context", "pluginFactory", "scope", "transformJsExpr", "transformThis2Context", "template_default", "pluginFactory", "pluginFactory", "import_lodash", "DEP_MAIN_BLOCKLIST", "DEFAULT_EXPORT_NAME", "groupDepsByPack", "getDependencyIdentifier", "getExportNameOfDep", "throwNewError", "buildPackageImport", "pluginFactory", "esmodule_default", "pluginFactory", "import_lowcode_types", "pluginFactory", "containerLifeCycle_default", "pluginFactory", "containerInjectDataSourceEngine_default", "pluginFactory", "containerMethod_default", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "getFile", "getFile", "getFile", "getFile", "getFile", "getFile", "getFile", "getFile", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "getFile", "file", "generateStaticFiles", "getFile", "generateStaticFiles", "template_default", "pluginFactory", "packageJSON_default", "pluginFactory", "router_default", "template_default", "packageJSON_default", "router_default", "template_default", "esmodule_default", "containerLifeCycle_default", "containerMethod_default", "containerInjectDataSourceEngine_default", "plugins", "pluginFactory", "createIceJsProjectBuilder", "plugins", "createProjectBuilder", "chalk", "JSON5", "fs", "path", "import_chalk", "changeCase", "chalk"]
7
+ }