@dckj-npm/lowcode-code-generator 1.2.23 → 1.2.24
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.
- package/CHANGELOG.md +280 -280
- package/CONTRIBUTING.md +40 -40
- package/README.md +123 -123
- package/bin/lowcode-code-generator.js +53 -53
- package/dist/cli.js.map +1 -1
- package/dist/standalone-loader.esm.js +1 -1
- package/dist/standalone-loader.esm.js.map +1 -1
- package/dist/standalone-loader.js +1 -1
- package/dist/standalone-loader.js.map +1 -1
- package/dist/standalone-worker.js.map +1 -1
- package/dist/standalone.js.map +1 -1
- package/es/index.js.map +1 -1
- package/lib/index.js.map +1 -1
- package/package.json +156 -156
- package/standalone/index.js +6 -6
- package/standalone/package.json +5 -5
- package/standalone-loader/index.js +2 -2
- package/standalone-loader/package.json +6 -6
- package/standalone-worker/index.js +6 -6
- package/standalone-worker/package.json +5 -5
- package/types/analyzer/componentAnalyzer.d.ts +2 -2
- package/types/cli/index.d.ts +2 -2
- package/types/cli/init-solution.d.ts +4 -4
- package/types/cli/run.d.ts +15 -15
- package/types/cli/solutions/example-solution.d.ts +4 -4
- package/types/config/env.d.ts +1 -1
- package/types/const/file.d.ts +2 -2
- package/types/const/generator.d.ts +58 -58
- package/types/const/index.d.ts +11 -11
- package/types/core/jsx/handlers/transformJsExpression.d.ts +5 -5
- package/types/core/jsx/handlers/transformThis2Context.d.ts +9 -9
- package/types/core/jsx/util/isLiteralAtomicExpr.d.ts +4 -4
- package/types/core/jsx/util/isSimpleStraightLiteral.d.ts +3 -3
- package/types/core/vue/handlers/transformJsExpression.d.ts +5 -5
- package/types/core/vue/handlers/transformThis2Context.d.ts +9 -9
- package/types/core/vue/util/isLiteralAtomicExpr.d.ts +4 -4
- package/types/core/vue/util/isSimpleStraightLiteral.d.ts +3 -3
- package/types/generator/ChunkBuilder.d.ts +23 -23
- package/types/generator/CodeBuilder.d.ts +17 -17
- package/types/generator/ModuleBuilder.d.ts +7 -7
- package/types/generator/ProjectBuilder.d.ts +62 -62
- package/types/index.d.ts +260 -260
- package/types/parser/SchemaParser.d.ts +25 -25
- package/types/plugins/common/esmodule.d.ts +8 -8
- package/types/plugins/common/requireUtils.d.ts +3 -3
- package/types/plugins/common/styleImport.d.ts +3 -3
- package/types/plugins/component/rax/commonDeps.d.ts +3 -3
- package/types/plugins/component/rax/const.d.ts +18 -18
- package/types/plugins/component/rax/containerClass.d.ts +3 -3
- package/types/plugins/component/rax/containerInitState.d.ts +7 -7
- package/types/plugins/component/rax/containerInjectContext.d.ts +6 -6
- package/types/plugins/component/rax/containerInjectDataSourceEngine.d.ts +12 -12
- package/types/plugins/component/rax/containerInjectUtils.d.ts +6 -6
- package/types/plugins/component/rax/containerLifeCycle.d.ts +8 -8
- package/types/plugins/component/rax/containerMethods.d.ts +6 -6
- package/types/plugins/component/rax/jsx.d.ts +8 -8
- package/types/plugins/component/react/const.d.ts +9 -9
- package/types/plugins/component/react/containerClass.d.ts +3 -3
- package/types/plugins/component/react/containerInitState.d.ts +7 -7
- package/types/plugins/component/react/containerInjectConstants.d.ts +6 -6
- package/types/plugins/component/react/containerInjectContext.d.ts +6 -6
- package/types/plugins/component/react/containerInjectDataSourceEngine.d.ts +23 -23
- package/types/plugins/component/react/containerInjectI18n.d.ts +6 -6
- package/types/plugins/component/react/containerInjectUtils.d.ts +8 -8
- package/types/plugins/component/react/containerLifeCycle.d.ts +9 -9
- package/types/plugins/component/react/containerMethod.d.ts +6 -6
- package/types/plugins/component/react/jsx.d.ts +7 -7
- package/types/plugins/component/react/reactCommonDeps.d.ts +3 -3
- package/types/plugins/component/style/css.d.ts +7 -7
- package/types/plugins/component/vue/apiImport.d.ts +23 -23
- package/types/plugins/component/vue/containerInitVariable.d.ts +7 -7
- package/types/plugins/component/vue/containerInjectDataSourceEngine.d.ts +23 -23
- package/types/plugins/component/vue/containerLifeCycle.d.ts +9 -9
- package/types/plugins/component/vue/containerMethod.d.ts +6 -6
- package/types/plugins/component/vue/containerVue.d.ts +3 -3
- package/types/plugins/component/vue/convert/convert-function.d.ts +6 -6
- package/types/plugins/component/vue/convert/convert-variable.d.ts +11 -11
- package/types/plugins/component/vue/dataSourceMap.d.ts +7 -7
- package/types/plugins/component/vue/esmodule.d.ts +8 -8
- package/types/plugins/component/vue/routerSecond.d.ts +3 -3
- package/types/plugins/component/vue/template.d.ts +7 -7
- package/types/plugins/component/vue/vueCommonDeps.d.ts +3 -3
- package/types/plugins/project/constants.d.ts +3 -3
- package/types/plugins/project/framework/icejs/index.d.ts +11 -11
- package/types/plugins/project/framework/icejs/plugins/entry.d.ts +3 -3
- package/types/plugins/project/framework/icejs/plugins/entryHtml.d.ts +3 -3
- package/types/plugins/project/framework/icejs/plugins/globalStyle.d.ts +3 -3
- package/types/plugins/project/framework/icejs/plugins/packageJSON.d.ts +26 -26
- package/types/plugins/project/framework/icejs/plugins/router.d.ts +3 -3
- package/types/plugins/project/framework/icejs/template/files/README.md.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/abc.json.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/build.json.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/editorconfig.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/eslintignore.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/eslintrc.js.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/gitignore.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/jsconfig.json.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/prettierignore.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/prettierrc.js.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/components/Footer/index.jsx.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/components/Footer/index.style.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/components/Logo/index.jsx.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/components/Logo/index.style.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/components/PageNav/index.jsx.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/index.jsx.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/src/layouts/BasicLayout/menuConfig.js.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/stylelintignore.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/stylelintrc.js.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/files/tsconfig.json.d.ts +2 -2
- package/types/plugins/project/framework/icejs/template/index.d.ts +3 -3
- package/types/plugins/project/framework/icejs/template/static-files.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/index.d.ts +11 -11
- package/types/plugins/project/framework/icejs3/plugins/appConfig.d.ts +5 -5
- package/types/plugins/project/framework/icejs3/plugins/buildConfig.d.ts +7 -7
- package/types/plugins/project/framework/icejs3/plugins/globalStyle.d.ts +3 -3
- package/types/plugins/project/framework/icejs3/plugins/layout.d.ts +3 -3
- package/types/plugins/project/framework/icejs3/plugins/packageJSON.d.ts +26 -26
- package/types/plugins/project/framework/icejs3/template/files/README.md.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/template/files/browserslistrc.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/template/files/document.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/template/files/gitignore.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/components/Footer/index.jsx.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/components/Footer/index.style.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/components/Logo/index.jsx.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/components/Logo/index.style.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/components/PageNav/index.jsx.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/index.jsx.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/template/files/src/layouts/BasicLayout/menuConfig.js.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/template/files/tsconfig.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/template/files/typings.d.ts +2 -2
- package/types/plugins/project/framework/icejs3/template/index.d.ts +3 -3
- package/types/plugins/project/framework/icejs3/template/static-files.d.ts +2 -2
- package/types/plugins/project/framework/rax/index.d.ts +12 -12
- package/types/plugins/project/framework/rax/plugins/appConfig.d.ts +4 -4
- package/types/plugins/project/framework/rax/plugins/buildConfig.d.ts +4 -4
- package/types/plugins/project/framework/rax/plugins/entry.d.ts +4 -4
- package/types/plugins/project/framework/rax/plugins/entryDocument.d.ts +7 -7
- package/types/plugins/project/framework/rax/plugins/globalStyle.d.ts +6 -6
- package/types/plugins/project/framework/rax/plugins/packageJSON.d.ts +4 -4
- package/types/plugins/project/framework/rax/template/files/.eslintignore.d.ts +2 -2
- package/types/plugins/project/framework/rax/template/files/.eslintrc.js.d.ts +2 -2
- package/types/plugins/project/framework/rax/template/files/.gitignore.d.ts +2 -2
- package/types/plugins/project/framework/rax/template/files/.prettierignore.d.ts +2 -2
- package/types/plugins/project/framework/rax/template/files/.prettierrc.js.d.ts +2 -2
- package/types/plugins/project/framework/rax/template/files/.stylelintignore.d.ts +2 -2
- package/types/plugins/project/framework/rax/template/files/.stylelintrc.js.d.ts +2 -2
- package/types/plugins/project/framework/rax/template/files/README.md.d.ts +2 -2
- package/types/plugins/project/framework/rax/template/files/jsconfig.json.d.ts +2 -2
- package/types/plugins/project/framework/rax/template/files/tsconfig.json.d.ts +2 -2
- package/types/plugins/project/framework/rax/template/index.d.ts +3 -3
- package/types/plugins/project/framework/rax/template/static-files.d.ts +2 -2
- package/types/plugins/project/framework/rax/types/RaxFrameworkOptions.d.ts +81 -81
- package/types/plugins/project/framework/vuejs3/index.d.ts +11 -11
- package/types/plugins/project/framework/vuejs3/plugins/form.d.ts +3 -3
- package/types/plugins/project/framework/vuejs3/plugins/hooks.d.ts +3 -3
- package/types/plugins/project/framework/vuejs3/plugins/main.d.ts +4 -4
- package/types/plugins/project/framework/vuejs3/plugins/packageJSON.d.ts +26 -26
- package/types/plugins/project/framework/vuejs3/plugins/router.d.ts +3 -3
- package/types/plugins/project/framework/vuejs3/template/files/css/global.scss.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/css/mixin.scss.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/css/theme.css.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/env.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/eslintignore.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/eslintrc.yml.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/gitignore.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/index.html.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/npmrc.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/postcss.config.cjs.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/prettierignore.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/prettierrc.yml.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/src/App.vue.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/src/main.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/src/utils/utils.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/src/views/baseIndexA/tabs.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/src/views/baseIndexA/welcome.vue.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/src/vite-env.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/tsconfig.json.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/tsconfig.node.json.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/files/vite.config.ts.d.ts +2 -2
- package/types/plugins/project/framework/vuejs3/template/index.d.ts +3 -3
- package/types/plugins/project/framework/vuejs3/template/static-files.d.ts +2 -2
- package/types/plugins/project/i18n.d.ts +3 -3
- package/types/plugins/project/utils.d.ts +3 -3
- package/types/polyfills/buffer.d.ts +1 -1
- package/types/postprocessor/index.d.ts +2 -2
- package/types/postprocessor/prettier/index.d.ts +8 -8
- package/types/publisher/disk/index.d.ts +13 -13
- package/types/publisher/disk/utils.d.ts +9 -9
- package/types/publisher/zip/index.d.ts +14 -14
- package/types/publisher/zip/utils.d.ts +5 -5
- package/types/solutions/icejs.d.ts +18 -18
- package/types/solutions/icejs3.d.ts +15 -15
- package/types/solutions/rax-app.d.ts +27 -27
- package/types/solutions/vuejs3.d.ts +22 -22
- package/types/standalone-loader.d.ts +17 -17
- package/types/standalone-worker.d.ts +1 -1
- package/types/standalone.d.ts +260 -260
- package/types/types/analyze.d.ts +5 -5
- package/types/types/column-type.d.ts +316 -316
- package/types/types/core.d.ts +197 -197
- package/types/types/datasource-extra-base.d.ts +32 -32
- package/types/types/datasource-page-helper.d.ts +30 -30
- package/types/types/deps.d.ts +36 -36
- package/types/types/error.d.ts +10 -10
- package/types/types/file.d.ts +14 -14
- package/types/types/index.d.ts +8 -8
- package/types/types/intermediate.d.ts +234 -234
- package/types/types/jsx.d.ts +34 -34
- package/types/types/publisher.d.ts +14 -14
- package/types/types/tab.d.ts +6 -6
- package/types/utils/OrderedSet.d.ts +9 -9
- package/types/utils/Scope.d.ts +12 -12
- package/types/utils/ScopeBindings.d.ts +20 -20
- package/types/utils/aopHelper.d.ts +2 -2
- package/types/utils/apiHandler.d.ts +4 -4
- package/types/utils/changeCase.d.ts +10 -10
- package/types/utils/columnType.d.ts +1 -1
- package/types/utils/common.d.ts +14 -14
- package/types/utils/compositeType.d.ts +3 -3
- package/types/utils/dataSource.d.ts +17 -17
- package/types/utils/debug.d.ts +2 -2
- package/types/utils/encodeJsxAttrString.d.ts +1 -1
- package/types/utils/errors.d.ts +4 -4
- package/types/utils/expressionParser.d.ts +16 -16
- package/types/utils/format.d.ts +1 -1
- package/types/utils/index.d.ts +15 -15
- package/types/utils/jsExpression.d.ts +50 -50
- package/types/utils/jsSlot.d.ts +2 -2
- package/types/utils/jsxHelpers.d.ts +5 -5
- package/types/utils/nodeToJSX.d.ts +32 -32
- package/types/utils/nodeToTemplate.d.ts +17 -17
- package/types/utils/pathHelper.d.ts +6 -6
- package/types/utils/requestHandle.d.ts +77 -77
- package/types/utils/resultHelper.d.ts +51 -51
- package/types/utils/routerHandle.d.ts +11 -11
- package/types/utils/schema.d.ts +24 -24
- package/types/utils/templateHelper.d.ts +11 -11
- package/types/utils/theme.d.ts +9 -9
- package/types/utils/validate.d.ts +8 -8
- package/types/utils/version.d.ts +1 -1
package/lib/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/parser/SchemaParser.ts", "../src/types/core.ts", "../src/types/deps.ts", "../src/types/error.ts", "../src/types/jsx.ts", "../src/const/index.ts", "../src/const/file.ts", "../src/const/generator.ts", "../src/utils/errors.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/changeCase.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/requestHandle.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/plugins/component/vue/containerInjectDataSourceEngine.ts", "../src/plugins/component/vue/convert/convert-function.ts", "../src/plugins/component/vue/containerMethod.ts", "../src/plugins/component/vue/convert/convert-variable.ts", "../src/plugins/component/vue/dataSourceMap.ts", "../src/plugins/component/vue/routerSecond.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/baseIndexA/welcome.vue.ts", "../src/plugins/project/framework/vuejs3/template/files/src/views/baseIndexA/tabs.ts", "../src/plugins/project/framework/vuejs3/template/files/src/utils/utils.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/utils/routerHandle.ts", "../src/plugins/project/framework/vuejs3/plugins/router.ts", "../src/plugins/project/framework/vuejs3/plugins/main.ts", "../src/utils/apiHandler.ts", "../src/types/column-type.ts", "../src/utils/columnType.ts", "../src/plugins/project/framework/vuejs3/plugins/form.ts", "../src/plugins/project/framework/vuejs3/plugins/hooks.ts", "../src/plugins/project/framework/vuejs3/index.ts", "../src/solutions/vuejs3.ts", "../src/plugins/common/requireUtils.ts", "../src/utils/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\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", "/**\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 ResourceListType,\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\nimport { isFormPage } from '../utils/dataSource';\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\r\n .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(\r\n subRoot.componentName === ContainerType.Component\r\n ? subRoot.fileName\r\n : changeCase.pascalCase(subRoot.fileName),\r\n ),\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'] = schemaSrc.routes\r\n ? schemaSrc.routes\r\n : 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 isFormRouter: page.state['pageType'] == 'form',\r\n };\r\n }\r\n\r\n return {\r\n path: `/${page.fileName}`,\r\n fileName: page.fileName,\r\n componentName: page.moduleName,\r\n isFormRouter: page.state['pageType'] == 'form',\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 } =>\r\n 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\n/**\r\n * \u751F\u6210router\u4FE1\u606F\r\n * @param originalSchema\r\n * @param resourceList\r\n */\r\nexport function handleRouter(\r\n originalSchema: IPublicTypeProjectSchema[],\r\n resourceList: ResourceListType[],\r\n) {\r\n if (!resourceList || resourceList.length == 0) {\r\n return '';\r\n }\r\n return resourceList\r\n .map((item) => {\r\n // \u627E\u5230\u9875\u9762\u5BF9\u5E94\u7684schema\r\n const schema = originalSchema.find((s) => s.componentsTree[0].fileName === item.slug);\r\n if (!schema) return '';\r\n const page = schema?.componentsTree[0];\r\n return {\r\n path: `/${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 || capitalizeFirstLetter(page?.fileName),\r\n isFormRouter: page?.state['pageType'] == 'form',\r\n firstPage: item.firstPage,\r\n title: item.title,\r\n };\r\n })\r\n .filter((item) => item);\r\n}\r\n\r\n/**\r\n * \u9996\u5B57\u6BCD\u5927\u5199,\u5E76\u4E14\u77ED\u6A2A\u7EBF\u53BB\u6389\r\n * @param str\r\n */\r\nfunction capitalizeFirstLetter(str: string) {\r\n if (!str) return '';\r\n return str\r\n .split('-') // \u6309\u7167\u77ED\u6A2A\u7EBF\u5206\u5272\u5B57\u7B26\u4E32\r\n .map(\r\n (\r\n word, // \u904D\u5386\u6BCF\u4E2A\u5355\u8BCD\r\n ) => word.charAt(0).toUpperCase() + word.slice(1), // \u6BCF\u4E2A\u5355\u8BCD\u9996\u5B57\u6BCD\u5927\u5199\r\n )\r\n .join('');\r\n}\r\n\r\nexport default SchemaParser;\r\n", "import {\r\n IPublicTypeCompositeArray,\r\n IPublicTypeCompositeObject,\r\n IPublicTypeJSExpression,\r\n IPublicTypeJSFunction,\r\n IPublicTypeJSONArray,\r\n IPublicTypeJSONObject,\r\n IPublicTypeJSSlot,\r\n IPublicTypeNodeDataType,\r\n IPublicTypeProjectSchema,\r\n ResultDir,\r\n ResultFile,\r\n} from '@alilc/lowcode-types';\r\n\r\nimport type { ProjectBuilderInitOptions } from '../generator/ProjectBuilder';\r\nimport { IScopeBindings } from '../utils/ScopeBindings';\r\nimport { IParseResult } from './intermediate';\r\n\r\nexport enum FileType {\r\n CSS = 'css',\r\n SCSS = 'scss',\r\n LESS = 'less',\r\n HTML = 'html',\r\n JS = 'js',\r\n MJS = 'mjs',\r\n JSX = 'jsx',\r\n TS = 'ts',\r\n MTS = 'mts',\r\n TSX = 'tsx',\r\n JSON = 'json',\r\n MD = 'md',\r\n VUE = 'vue',\r\n}\r\n\r\nexport enum ChunkType {\r\n AST = 'ast',\r\n STRING = 'string',\r\n JSON = 'json',\r\n}\r\n\r\nexport enum PluginType {\r\n COMPONENT = 'component',\r\n UTILS = 'utils',\r\n I18N = 'i18n',\r\n}\r\n\r\nexport type ChunkContent = string | any;\r\nexport type CodeGeneratorFunction<T> = (content: T) => string;\r\n\r\nexport interface ICodeChunk {\r\n type: ChunkType;\r\n fileType: string;\r\n name: string;\r\n subModule?: string;\r\n content: ChunkContent;\r\n linkAfter: string[];\r\n ext?: Record<string, unknown>;\r\n // \u591A\u6587\u4EF6\u91CD\u590D\u65F6\u4FDD\u7559zIndex\u503C\u66F4\u9AD8\u7684\u6587\u4EF6\r\n zIndex?: number;\r\n}\r\n\r\nexport interface IBaseCodeStruct {\r\n chunks: ICodeChunk[];\r\n depNames: string[];\r\n}\r\n\r\nexport interface ICodeStruct extends IBaseCodeStruct {\r\n ir: any;\r\n contextData: IContextData;\r\n}\r\n\r\n/** \u4E0A\u4E0B\u6587\u6570\u636E\uFF0C\u7528\u6765\u5728\u63D2\u4EF6\u4E4B\u95F4\u5171\u4EAB\u4E00\u4E9B\u6570\u636E */\r\nexport interface IContextData extends IProjectBuilderOptions {\r\n /**\r\n * \u5176\u4ED6\u81EA\u5B9A\u4E49\u6570\u636E\r\n * \uFF08\u4E09\u65B9\u81EA\u5B9A\u4E49\u63D2\u4EF6\u4E5F\u53EF\u4EE5\u5728\u6B64\u653E\u4E00\u4E9B\u6570\u636E\uFF0C\u5EFA\u8BAE\u8D77\u4E2A\u957F\u4E00\u70B9\u7684\u540D\u79F0\uFF0C\u7528\u81EA\u5DF1\u7684\u63D2\u4EF6\u540D\u505A\u524D\u7F00\uFF0C\u4EE5\u9632\u51B2\u7A81\uFF09\r\n */\r\n [key: string]: any;\r\n\r\n /**\r\n * \u662F\u5426\u4F7F\u7528\u4E86 Ref \u7684 API (this.$/this.$$)\r\n * */\r\n useRefApi?: boolean;\r\n}\r\n\r\nexport type BuilderComponentPlugin = (initStruct: ICodeStruct) => Promise<ICodeStruct>;\r\n\r\nexport type BuilderComponentPluginFactory<T> = (config?: T) => BuilderComponentPlugin;\r\n\r\nexport interface IChunkBuilder {\r\n run: (ir: any, initialStructure?: ICodeStruct) => Promise<{ chunks: ICodeChunk[][] }>;\r\n getPlugins: () => BuilderComponentPlugin[];\r\n addPlugin: (plugin: BuilderComponentPlugin) => void;\r\n}\r\n\r\nexport interface ICodeBuilder {\r\n link: (chunkDefinitions: ICodeChunk[]) => string;\r\n generateByType: (type: string, content: unknown) => string;\r\n}\r\n\r\nexport interface ICompiledModule {\r\n files: ResultFile[];\r\n}\r\n\r\nexport interface IModuleBuilder {\r\n generateModule: (input: unknown) => Promise<ICompiledModule>;\r\n generateModuleCode: (schema: IPublicTypeProjectSchema | string) => Promise<ResultDir>;\r\n linkCodeChunks: (chunks: Record<string, ICodeChunk[]>, fileName: string) => ResultFile[];\r\n addPlugin: (plugin: BuilderComponentPlugin) => void;\r\n}\r\n\r\n/**\r\n * \u5F15\u64CE\u5BF9\u5916\u63A5\u53E3\r\n *\r\n * @export\r\n * @interface ICodeGenerator\r\n */\r\nexport interface ICodeGenerator {\r\n /**\r\n * \u51FA\u7801\u63A5\u53E3\uFF0C\u628A Schema \u8F6C\u6362\u6210\u4EE3\u7801\u6587\u4EF6\u7CFB\u7EDF\u63CF\u8FF0\r\n *\r\n * @param {(IPublicTypeProjectSchema)} schema \u4F20\u5165\u7684 Schema\r\n * @returns {ResultDir}\r\n * @memberof ICodeGenerator\r\n */\r\n toCode: (schema: IPublicTypeProjectSchema) => Promise<ResultDir>;\r\n}\r\n\r\nexport interface ISchemaParser {\r\n validate: (schema: IPublicTypeProjectSchema) => boolean;\r\n parse: (schema: IPublicTypeProjectSchema | string) => IParseResult;\r\n}\r\n\r\nexport interface IProjectTemplate {\r\n slots: Record<string, IProjectSlot>;\r\n generateTemplate: (data: IParseResult) => ResultDir | Promise<ResultDir>;\r\n}\r\n\r\nexport interface IProjectSlot {\r\n path: string[];\r\n fileName?: string;\r\n}\r\n\r\nexport interface IProjectPlugins {\r\n [slotName: string]: BuilderComponentPlugin[];\r\n}\r\n\r\nexport interface IProjectBuilderOptions {\r\n /** \u662F\u5426\u5904\u4E8E\u4E25\u683C\u6A21\u5F0F (\u9ED8\u8BA4\uFF1A\u5426) */\r\n inStrictMode?: boolean;\r\n\r\n /**\r\n * \u662F\u5426\u8981\u5BB9\u5FCD\u5BF9 JSExpression \u6C42\u503C\u65F6\u7684\u5F02\u5E38\r\n * \u9ED8\u8BA4\uFF1Atrue\r\n * \u6CE8\uFF1A\u5982\u679C\u5BB9\u5FCD\u5F02\u5E38\uFF0C\u5219\u4F1A\u5728\u6C42\u503C\u65F6\u5305\u88F9 try-catch \u5757\uFF0C\r\n * catch \u5230\u5F02\u5E38\u65F6\u9ED8\u8BA4\u4F1A\u629B\u51FA\u4E00\u4E2A CustomEvent \u4E8B\u4EF6\u91CC\u9762\u5305\u542B\u5F02\u5E38\u4FE1\u606F\u548C\u6C42\u503C\u7684\u8868\u8FBE\u5F0F\r\n */\r\n tolerateEvalErrors?: boolean;\r\n\r\n /**\r\n * \u5BB9\u5FCD\u5F02\u5E38\u7684\u65F6\u5019\u7684\u7684\u9519\u8BEF\u5904\u7406\u8BED\u53E5\u5757\r\n * \u9ED8\u8BA4\uFF1A\u65E0\r\n * \u60A8\u53EF\u4EE5\u8BBE\u7F6E\u4E3A\u4E00\u4E2A\u8BED\u53E5\u5757\uFF0C\u6BD4\u5982\uFF1A\r\n * window.dispatchEvent(new CustomEvent('lowcode-eval-error', { error, expr }))\r\n *\r\n * \u4E00\u822C\u53EF\u4EE5\u7ED3\u5408\u57CB\u70B9\u76D1\u63A7\u6A21\u5757\u7528\u6765\u76D1\u63A7\u6C42\u503C\u5F02\u5E38\r\n *\r\n * \u5176\u4E2D\uFF1A\r\n * - error: \u5F02\u5E38\u4FE1\u606F\r\n * - expr: \u6C42\u503C\u7684\u8868\u8FBE\u5F0F\r\n */\r\n evalErrorsHandler?: string;\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 interface IProjectBuilder {\r\n generateProject: (schema: IPublicTypeProjectSchema | string | IPublicTypeProjectSchema[], resourceList: ResourceListType[]) => Promise<ResultDir>;\r\n}\r\n\r\n/** \u9879\u76EE\u7EA7\u522B\u7684\u524D\u7F6E\u5904\u7406\u5668 */\r\nexport type ProjectPreProcessor = (\r\n schema: IPublicTypeProjectSchema,\r\n) => Promise<IPublicTypeProjectSchema> | IPublicTypeProjectSchema;\r\n\r\nexport interface ProjectPostProcessorOptions {\r\n parseResult?: IParseResult;\r\n template?: IProjectTemplate;\r\n}\r\n\r\n/** \u9879\u76EE\u7EA7\u522B\u7684\u540E\u7F6E\u5904\u7406\u5668 */\r\nexport type ProjectPostProcessor = (\r\n result: ResultDir,\r\n schema: IPublicTypeProjectSchema,\r\n originalSchema: IPublicTypeProjectSchema | string,\r\n options: ProjectPostProcessorOptions,\r\n) => Promise<ResultDir> | ResultDir;\r\n\r\n/** \u6A21\u5757\u7EA7\u522B\u7684\u540E\u7F6E\u5904\u7406\u5668\u7684\u5DE5\u5382\u65B9\u6CD5 */\r\nexport type PostProcessorFactory<T> = (config?: T) => PostProcessor;\r\n\r\n/** \u6A21\u5757\u7EA7\u522B\u7684\u540E\u7F6E\u5904\u7406\u5668 */\r\nexport type PostProcessor = (content: string, fileType: string, name?: string) => string;\r\n\r\n// TODO: temp interface, need modify\r\nexport interface IPluginOptions {\r\n fileDirDepth: number;\r\n}\r\n\r\nexport type BaseGenerator<I, T, C> = (\r\n input: I,\r\n scope: IScope,\r\n config?: C,\r\n next?: BaseGenerator<I, T, C>,\r\n) => T;\r\ntype CompositeTypeGenerator<I, T> =\r\n | BaseGenerator<I, T, CompositeValueGeneratorOptions>\r\n | Array<BaseGenerator<I, T, CompositeValueGeneratorOptions>>;\r\n\r\nexport type NodeGenerator<T> = (nodeItem: IPublicTypeNodeDataType, scope: IScope) => T;\r\n\r\n// FIXME: \u5728\u65B0\u7684\u5B9E\u73B0\u4E2D\uFF0C\u6DFB\u52A0\u4E86\u7B2C\u4E00\u53C2\u6570 this: CustomHandlerSet \u4F5C\u4E3A\u4E0A\u4E0B\u6587\u3002\u7A76\u5176\u672C\u8D28\r\n// scopeBindings?: IScopeBindings;\r\n// \u8FD9\u4E2A\u7EC4\u5408\u53EA\u7528\u6765\u7528\u6765\u5904\u7406 IPublicTypeCompositeValue \u7C7B\u578B\uFF0C\u4E0D\u662F\u8FD9\u4E2A\u7C7B\u578B\u7684\u4E0D\u8981\u653E\u5728\u8FD9\u91CC\r\nexport interface HandlerSet<T> {\r\n string?: CompositeTypeGenerator<string, T>;\r\n boolean?: CompositeTypeGenerator<boolean, T>;\r\n number?: CompositeTypeGenerator<number, T>;\r\n expression?: CompositeTypeGenerator<IPublicTypeJSExpression, T>;\r\n function?: CompositeTypeGenerator<IPublicTypeJSFunction, T>;\r\n slot?: CompositeTypeGenerator<IPublicTypeJSSlot, T>;\r\n array?: CompositeTypeGenerator<IPublicTypeJSONArray | IPublicTypeCompositeArray, T>;\r\n object?: CompositeTypeGenerator<IPublicTypeJSONObject | IPublicTypeCompositeObject, T>;\r\n}\r\n\r\nexport interface CompositeValueGeneratorOptions {\r\n handlers?: HandlerSet<string>;\r\n nodeGenerator?: NodeGenerator<string>;\r\n tolerateEvalErrors?: boolean;\r\n}\r\n\r\n/**\r\n * \u4F5C\u7528\u57DF\u5B9A\u4E49\uFF0C\u7EF4\u62A4\u4F5C\u7528\u57DF\u5185\u5B9A\u4E49\uFF0C\u652F\u6301\u4F5C\u7528\u57DF\u94FE\u4E0A\u6EAF\r\n */\r\nexport interface IScope {\r\n // \u7236\u7EA7\u4F5C\u7528\u57DF\uFF08\u5982\u679C\u662F\u6839\u4F5C\u7528\u57DF\u5219\u4E3A null\uFF09\r\n readonly parent: IScope | null;\r\n\r\n // \u4F5C\u7528\u57DF\u5185\u5B9A\u4E49\u7684\u53D8\u91CF/\u51FD\u6570\u7B49 bindings\r\n readonly bindings?: IScopeBindings;\r\n\r\n // TODO: \u9700\u8981\u6709\u4E0A\u4E0B\u6587\u4FE1\u606F\u5417\uFF1F \u63CF\u8FF0\u4EC0\u4E48\u5185\u5BB9\r\n createSubScope: (ownIndentifiers: string[]) => IScope;\r\n}\r\n\r\n/**\r\n * \u9875\u9762\u53C2\u6570\r\n */\r\nexport interface ResourceListType {\r\n title: string\r\n slug: string\r\n id: string\r\n // \u662F\u5426\u662F\u4E00\u7EA7\u9875\u9762\r\n firstPage: 'true' | 'false'\r\n}\r\n", "export interface INpmPackage {\r\n package: string; // \u7EC4\u4EF6\u5305\u7684\u540D\u79F0\r\n version: string; // \u7EC4\u4EF6\u5305\u7684\u7248\u672C\r\n}\r\n\r\n/**\r\n * \u5916\u90E8\u4F9D\u8D56\u63CF\u8FF0\r\n *\r\n * @export\r\n * @interface IExternalDependency\r\n */\r\nexport interface IExternalDependency extends INpmPackage, IDependency {}\r\n\r\nexport enum InternalDependencyType {\r\n PAGE = 'pages',\r\n BLOCK = 'components',\r\n COMPONENT = 'components',\r\n UTILS = 'utils',\r\n}\r\n\r\nexport enum DependencyType {\r\n External = 'External',\r\n Internal = 'Internal',\r\n}\r\n\r\nexport interface IInternalDependency extends IDependency {\r\n type: InternalDependencyType;\r\n moduleName: string;\r\n}\r\n\r\nexport interface IDependency {\r\n destructuring: boolean; // \u7EC4\u4EF6\u662F\u5426\u662F\u89E3\u6784\u65B9\u5F0F\u65B9\u5F0F\u5BFC\u51FA\r\n exportName: string; // \u5BFC\u51FA\u547D\u540D\r\n subName?: string; // \u4E0B\u6807\u5B50\u7EC4\u4EF6\u540D\u79F0\r\n main?: string; // \u5305\u5BFC\u51FA\u7EC4\u4EF6\u5165\u53E3\u6587\u4EF6\u8DEF\u5F84 /lib/input\r\n dependencyType?: DependencyType; // \u4F9D\u8D56\u7C7B\u578B \u5185/\u5916\r\n componentName?: string; // \u5BFC\u5165\u540E\u540D\u79F0\r\n package?: string; // \u7EC4\u4EF6\u5305\r\n devMode: string; // \u6700\u5916\u5C42\u7684page\u6807\u7B7E\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", "import { IPublicTypeNodeSchema, IPublicTypeCompositeValue } from '@alilc/lowcode-types';\r\nimport { HandlerSet, BaseGenerator, NodeGenerator } from './core';\r\n\r\nexport enum PIECE_TYPE {\r\n BEFORE = 'NodeCodePieceBefore',\r\n TAG = 'NodeCodePieceTag',\r\n ATTR = 'NodeCodePieceAttr',\r\n CHILDREN = 'NodeCodePieceChildren',\r\n AFTER = 'NodeCodePieceAfter',\r\n}\r\n\r\nexport interface CodePiece {\r\n name?: string;\r\n value: string;\r\n type: PIECE_TYPE;\r\n}\r\n\r\nexport interface AttrData {\r\n attrName: string;\r\n attrValue: IPublicTypeCompositeValue;\r\n}\r\n// \u5BF9 JSX \u51FA\u7801\u7684\u7406\u89E3\uFF0C\u76EE\u524D\u5B9A\u5236\u70B9\u5305\u542B\u3010\u5305\u88C5\u3011\u3010\u6807\u7B7E\u540D\u3011\u3010\u5C5E\u6027\u3011\r\nexport type AttrPlugin = BaseGenerator<AttrData, CodePiece[], NodeGeneratorConfig>;\r\nexport type NodePlugin = BaseGenerator<IPublicTypeNodeSchema, CodePiece[], NodeGeneratorConfig>;\r\n\r\nexport interface NodeGeneratorConfig {\r\n handlers?: HandlerSet<string>;\r\n tagMapping?: (input: string) => string;\r\n attrPlugins?: AttrPlugin[];\r\n nodePlugins?: NodePlugin[];\r\n self?: NodeGenerator<string>;\r\n\r\n /**\r\n * \u662F\u5426\u8981\u5BB9\u5FCD\u5BF9 JSExpression \u6C42\u503C\u65F6\u7684\u5F02\u5E38\r\n * \u9ED8\u8BA4\uFF1Atrue\r\n * \u6CE8\uFF1A\u5982\u679C\u5BB9\u5FCD\u5F02\u5E38\uFF0C\u5219\u4F1A\u5728\u6C42\u503C\u65F6\u5305\u88F9 try-catch \u5757 -- \u901A\u8FC7 __$$eval / __$$evalArray\r\n * catch \u5230\u5F02\u5E38\u65F6\u9ED8\u8BA4\u4F1A\u629B\u51FA\u4E00\u4E2A CustomEvent \u4E8B\u4EF6\u91CC\u9762\u5305\u542B\u5F02\u5E38\u4FE1\u606F\u548C\u6C42\u503C\u7684\u8868\u8FBE\u5F0F\r\n */\r\n tolerateEvalErrors?: boolean;\r\n}\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 'form',\r\n 'hooks',\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 DataSourceMapStart: 'CommonScriptDefineDataSourceMapStart', // dataSourceMap\u5F00\u59CB\r\n DataSourceMapContent: 'CommonScriptDefineDataSourceMapContent', // dataSourceMap\u5185\u5BB9\r\n DataSourceMapEnd: 'CommonScriptDefineDataSourceMapEnd', // dataSourceMap\u7ED3\u675F\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\r\n [TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapStart]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.LetVar,\r\n ],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapContent]: [TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapStart],\r\n [TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapEnd]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapStart, TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapContent,\r\n ],\r\n\r\n [TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart]: [\r\n TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapEnd,\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// vue \u7269\u6599\u5305\r\nexport const VUE_MODULE_NAME = '@dckj-npm/lowcode-vue-materials';\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", "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/**\r\n * \u5224\u65AD\u662F\u5426\u662Fvue\u7684\u5185\u7F6E\u6307\u4EE4\r\n * @param name\r\n */\r\nexport const isValidVueDirective = (name: string) => {\r\n const directives = ['v-model', 'v-html', 'v-for', 'v-if', 'v-else', 'v-if-else', 'v-show'];\r\n return directives.includes(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\n/**\r\n * \u4EE3\u7801\u7247\u6BB5\u5206\u7EC4\r\n * @param chunks\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 // \u83B7\u53D6\u6587\u4EF6\u7C7B\u578B\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 // \u4F9D\u6B21\u6267\u884Cplugins\u83B7\u53D6\u4EE3\u7801\u7247\u6BB5chunks\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 // \u4EE3\u7801\u7247\u6BB5\u5206\u7EC4\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[] = []): { zIndex: number; content: string } {\r\n let zIndexA = 0;\r\n const chunks = chunkDefinitions || this.chunkDefinitions;\r\n if (chunks.length <= 0) {\r\n return { zIndex: 0, content: ''}\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 zIndex: chunk.zIndex || 0\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, zIndex } = unprocessedChunks[indexToRemove];\r\n const compiledContent = this.generateByType(type, content);\r\n if (compiledContent) {\r\n resultingString.push(`${compiledContent}\\n`);\r\n zIndexA = zIndex > zIndexA ? zIndex : zIndexA;\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 { zIndex: zIndexA, content: 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 // \u83B7\u53D6chunks\u7247\u6BB5\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 // \u6309\u7167\u987A\u5E8F\u6B63\u786E\u6392\u5E8F\uFF0C\u5E76\u7EC4\u88C5\u8FD4\u56DE\u4EE3\u7801\u5B57\u7B26\u4E32\r\n const { content, zIndex } = 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 file.zIndex = zIndex;\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 // \u8C03\u7528\u9884\u5904\u7406\u5668\r\n options.postProcessors.forEach((processer) => {\r\n content = processer(content, type, name);\r\n });\r\n const resultFile = createResultFile(file.name, type, content);\r\n resultFile.zIndex = file.zIndex;\r\n return resultFile;\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, zIndex } = 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 file.zIndex = zIndex;\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 { IPublicTypeProjectSchema, ResultDir, ResultFile } 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 ResourceListType,\r\n} from '../types';\r\n\r\nimport { handleRouter, SchemaParser } from '../parser/SchemaParser';\r\nimport { addDirectory, addFile, createResultDir } from '../utils/resultHelper';\r\n\r\nimport { createModuleBuilder } from './ModuleBuilder';\r\nimport { IContextData, ProjectPostProcessor, ProjectPreProcessor } 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 /** \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 generateProjectOne(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 // \u83B7\u53D6\u9759\u6001\u6587\u4EF6\r\n const projectRoot = await this.template.generateTemplate(parseResult);\r\n\r\n let buildResult: IModuleInfo[] = [];\r\n\r\n // \u83B7\u53D6\u5404\u4E2A\u63D2\u69FD\u7684\u6784\u9020\u5668\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 // parseResult.containers = componentsTree\r\n let builder: IModuleBuilder;\r\n let path: string[];\r\n let files: ResultFile[];\r\n if (containerInfo.containerType === 'Page') {\r\n //\u5982\u679C\u8FD9\u662F\u8868\u5355\u9875\u9762\r\n if (containerInfo.state && containerInfo.state.pageType == 'form') {\r\n builder = builders.form;\r\n\r\n path = this.template.slots.form.path;\r\n // files = [\r\n // {\r\n // content: `<template>\\n <div>1111</div>\\n</template>\\n\\n<script setup lang=\"ts\"></script>\\n\\n<style lang=\"scss\" scoped></style>`,\r\n // ext: 'vue',\r\n // name: 'Add',\r\n // },\r\n // {\r\n // content: ``,\r\n // ext: 'ts',\r\n // name: 'add-fields',\r\n // },\r\n // {\r\n // content: `<template>\\n <div>2222</div>\\n</template>\\n\\n<script setup lang=\"ts\"></script>\\n\\n<style lang=\"scss\" scoped></style>`,\r\n // ext: 'vue',\r\n // name: 'Detail',\r\n // },\r\n // ];\r\n files = (await builder.generateModule(containerInfo)).files;\r\n } else {\r\n //\u666E\u901A\u9875\u9762\r\n builder = builders.pages;\r\n // \u63D2\u69FD\u5B9A\u4E49\u7684\u8DEF\u5F84\r\n path = this.template.slots.pages.path;\r\n // \u83B7\u53D6\u7EC4\u88C5\u540E\u7684\u4EE3\u7801\u7247\u6BB5\r\n files = (await builder.generateModule(containerInfo)).files;\r\n }\r\n } else {\r\n builder = builders.components;\r\n path = this.template.slots.components.path;\r\n // \u83B7\u53D6\u7EC4\u88C5\u540E\u7684\u4EE3\u7801\u7247\u6BB5\r\n files = (await builder.generateModule(containerInfo)).files;\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\u751F\u6210\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\u751F\u6210\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\u751F\u6210\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\u751F\u6210\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?\u751F\u6210\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?\u751F\u6210\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 // hooks?\u751F\u6210\r\n if (parseResult.globalUtils && builders.hooks && this.template.slots.hooks) {\r\n const { files } = await builders.hooks.generateModule(parseResult.globalUtils);\r\n\r\n buildResult.push({\r\n path: this.template.slots.hooks.path,\r\n files,\r\n });\r\n }\r\n\r\n // i18n?\u751F\u6210\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\u751F\u6210\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\u751F\u6210\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\u751F\u6210\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\u751F\u6210\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 \u5904\u7406\u81EA\u5B9A\u4E49\u63D2\u69FD\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 \u9759\u6001\u6587\u4EF6\u548C\u52A8\u6001\u6587\u4EF6\u76EE\u5F55\u6811\u7ED3\u6784\u7ED3\u5408\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 \u6587\u4EF6\u683C\u5F0F\u5316\u5904\u7406\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 /**\r\n * \u751F\u6210\u6574\u4E2A\u9879\u76EE\u7ED3\u6784\r\n * @param originalSchema\r\n * @param resourceList\r\n */\r\n async generateProject(\r\n originalSchema: IPublicTypeProjectSchema | string | IPublicTypeProjectSchema[],\r\n resourceList: ResourceListType[],\r\n ): Promise<ResultDir> {\r\n if (Array.isArray(originalSchema)) {\r\n // \u4F20\u5165\u591A\u4E2Aschema\u65F6\u5904\u7406\u8DEF\u7531\u4FE1\u606F\r\n const routes = handleRouter(originalSchema, resourceList);\r\n // \u4F20\u5165\u591A\u4E2Aschema\u65F6\u5904\u7406\r\n const data = await Promise.all(\r\n originalSchema.map((schema) => {\r\n schema.routes = routes;\r\n return this.generateProjectOne(schema);\r\n }),\r\n );\r\n // \u6587\u4EF6\u5408\u5E76\r\n return mergeResultDirs(data);\r\n }\r\n return await this.generateProjectOne(originalSchema as IPublicTypeProjectSchema);\r\n }\r\n\r\n private createModuleBuilders(\r\n 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 // \u904D\u5386\u6240\u6709\u63D2\u4EF6\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 // \u83B7\u53D6\u5404\u4E2A\u63D2\u69FD\u4E3B\u6587\u4EF6\u540D\u79F0\r\n options.mainFileName = this.template.slots[pluginName].fileName;\r\n }\r\n // \u83B7\u53D6\u5404\u4E2A\u63D2\u69FD\u7684\u6784\u9020\u5668\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 /**\r\n * \u81EA\u5B9A\u4E49\u63D2\u69FD\u4EE3\u7801\u751F\u6210\r\n * @param builders\r\n * @param parseResult\r\n * @param buildResult\r\n * @private\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/**\r\n * \u5408\u5E76 ResultDir \u6570\u7EC4\r\n * @param dirs ResultDir \u6570\u7EC4\r\n * @returns \u5408\u5E76\u540E\u7684\u5355\u4E00 ResultDir\r\n */\r\nfunction mergeResultDirs(dirs: ResultDir[]): ResultDir {\r\n // \u5408\u5E76\u7684\u7ED3\u679C\r\n const result: ResultDir = { name: '.', dirs: [], files: [] };\r\n\r\n const mergeDir = (target: ResultDir, source: ResultDir) => {\r\n // \u5408\u5E76\u6587\u4EF6\uFF1A\u7528\u6587\u4EF6\u540D\u548C\u6269\u5C55\u540D\u4F5C\u4E3A\u552F\u4E00\u6807\u8BC6\r\n const fileMap: Record<string, ResultFile> = {};\r\n [...target.files, ...source.files].forEach((file) => {\r\n const key = `${file.name}.${file.ext}`;\r\n if (fileMap[key]) {\r\n // \u5982\u679C\u6587\u4EF6\u5DF2\u5B58\u5728\uFF0C\u5219\u4FDD\u7559zIndex\u5927\u7684\u90A3\u4E2A\r\n fileMap[key] = file.zIndex > fileMap[key].zIndex ? file : fileMap[key];\r\n return;\r\n }\r\n fileMap[key] = file; // \u6587\u4EF6\u540D\u76F8\u540C\u5219\u8986\u76D6\r\n });\r\n target.files = Object.values(fileMap);\r\n\r\n // \u5408\u5E76\u5B50\u76EE\u5F55\uFF1A\u7528\u5B50\u76EE\u5F55\u540D\u4F5C\u4E3A\u552F\u4E00\u6807\u8BC6\r\n const dirMap: Record<string, ResultDir> = {};\r\n target.dirs.forEach((dir) => {\r\n dirMap[dir.name] = dir;\r\n });\r\n source.dirs.forEach((dir) => {\r\n if (dirMap[dir.name]) {\r\n // \u5982\u679C\u5B50\u76EE\u5F55\u5B58\u5728\uFF0C\u9012\u5F52\u5408\u5E76\r\n mergeDir(dirMap[dir.name], dir);\r\n } else {\r\n // \u5982\u679C\u5B50\u76EE\u5F55\u4E0D\u5B58\u5728\uFF0C\u76F4\u63A5\u6DFB\u52A0\r\n dirMap[dir.name] = dir;\r\n }\r\n });\r\n target.dirs = Object.values(dirMap);\r\n };\r\n\r\n // \u904D\u5386\u6BCF\u4E2A\u6839\u76EE\u5F55\u8FDB\u884C\u5408\u5E76\r\n dirs.forEach((dir) => {\r\n mergeDir(result, dir);\r\n });\r\n\r\n return result;\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 const propName = key; // \u4E0D\u518D\u4F7F\u7528JSON.stringify\u6765\u8F6C\u4E49\u5C5E\u6027\u540D\r\n const v = generateUnknownType(value[key], scope, options);\r\n return `${propName}: ${v}`;\r\n })\r\n .join(',');\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 // \u4F7F\u7528\u5355\u5F15\u53F7\u5305\u56F4\u5B57\u7B26\u4E32\r\n const escapeString = (val: string) => {\r\n return JSON.stringify(val).slice(1, -1);\r\n };\r\n const data = escapeString(value);\r\n console.log(data);\r\n return `'${escapeString(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(\r\n value: IPublicTypeJSSlot,\r\n scope: IScope,\r\n options: CompositeValueGeneratorOptions = {},\r\n) {\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 return generateFunction(value, { isToVue: true, isBelongTemplate: true });\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, { NodePath } from '@babel/traverse';\r\nimport * as t from '@babel/types';\r\nimport {\r\n CallExpression,\r\n ExpressionStatement,\r\n Identifier,\r\n MemberExpression,\r\n StringLiteral,\r\n} from '@babel/types';\r\nimport {\r\n IPublicTypeJSExpression,\r\n IPublicTypeJSFunction,\r\n isJSExpression,\r\n isJSFunction,\r\n} from '@alilc/lowcode-types';\r\nimport { CodeGeneratorError, IScope } from '../types';\r\nimport { ParseError, transformExpressionLocalRef } from './expressionParser';\r\nimport { isJSExpressionFn } from './common';\r\nimport { lineToUppercase } from './changeCase';\r\n\r\n/**\r\n * \u89E3\u6790\u7ED9\u5B9A\u7684\u5B57\u7B26\u4E32\u5185\u5BB9\u4E3A\u51FD\u6570\u8868\u8FBE\u5F0F\u3002\r\n * @note \u4F7F\u7528babel\u8F6C\u5316\u4E3Aast\u6811\uFF0C\u518D\u5BF9\u6811\u8FDB\u884C\u5904\u7406\r\n * @param content \u8981\u89E3\u6790\u7684\u5B57\u7B26\u4E32\u5185\u5BB9\u3002\r\n * @param isToVue \u662F\u5426\u8F6C\u5316\u4E3Avue\r\n * @param isBelongTemplate \u662F\u5426\u662Ftemplate\u7684\u8868\u8FBE\u5F0F\r\n * @returns \u89E3\u6790\u6210\u529F\u7684\u51FD\u6570\u8868\u8FBE\u5F0F\u8282\u70B9\uFF0C\u5982\u679C\u89E3\u6790\u5931\u8D25\u5219\u8FD4\u56DEnull\u3002\r\n * @throws \u5982\u679C\u89E3\u6790\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF\uFF0C\u5C06\u629B\u51FAParseError\u5F02\u5E38\u3002\r\n */\r\nfunction parseFunction(\r\n content: string,\r\n isToVue?: boolean,\r\n isBelongTemplate = false,\r\n): t.FunctionExpression | null {\r\n try {\r\n const ast = parser.parse(`(${content});`, {\r\n plugins: ['jsx'],\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 // todo path.stop() \u662F\u505C\u6B62\u5411\u4E0B\u89E3\u6790\r\n // path.stop();\r\n },\r\n CallExpression(path) {\r\n if (isToVue) {\r\n // setState\u8F6C\u5316\r\n convertSetState(path, isBelongTemplate);\r\n }\r\n },\r\n MemberExpression(path) {\r\n if (isToVue) {\r\n // this.state['aaa']\u8F6C\u6362\r\n convertState(path, isBelongTemplate);\r\n }\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(\r\n methodName: string,\r\n content: string,\r\n isToVue?: boolean,\r\n isBelongTemplate?: boolean,\r\n): string {\r\n const funcNode = parseFunction(content, isToVue, isBelongTemplate);\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, isToVue?: boolean, isBelongTemplate?: boolean) {\r\n const funcNode = parseFunction(content, isToVue, isBelongTemplate);\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 * - isToVue \u662F\u5426\u8F6C\u5316\u4E3Avue\uFF08state\uFF0Cthis\u8F6C\u6362\uFF09\r\n * - isDeleteLastSemicolon \u662F\u5426\u5220\u9664\u751F\u6210\u4EE3\u7801\u6700\u540E\u7684\u4E00\u4E2A\u5206\u53F7\uFF0C\u9ED8\u8BA4\u4E3Afalse\r\n * - isBelongTemplate \u662F\u5426\u662Ftemplate\u7684\u8868\u8FBE\u5F0F\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 isToVue?: boolean;\r\n isDeleteLastSemicolon?: boolean;\r\n isBelongTemplate?: 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 isToVue: false,\r\n isDeleteLastSemicolon: false,\r\n isBelongTemplate: false,\r\n },\r\n) {\r\n function extractFunctionCalls(str: string) {\r\n const regex =\r\n /(\\w+)\\.apply\\(\\w+,\\s*Array\\.prototype\\.slice\\.call\\(arguments\\)\\.concat\\(\\[(.*?)\\]\\)/g;\r\n const matches = [];\r\n let match;\r\n\r\n while ((match = regex.exec(str)) !== null) {\r\n const functionName = match[1];\r\n const params = match[2]\r\n .replace(/\"(\\w+)\":\\s*\"([^\"]*?)\"/g, \"'$1':'$2'\")\r\n .replace(/\"(\\w+)\":\\s*(\\d+)/g, \"'$1':$2\");\r\n matches.push(`${functionName}(${params})`);\r\n }\r\n\r\n return matches;\r\n }\r\n // js\u51FD\u6570\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(\r\n config.name || '',\r\n functionSource,\r\n config.isToVue,\r\n config.isBelongTemplate,\r\n );\r\n }\r\n if (config.isBlock) {\r\n return getBodyStatements(functionSource, config.isToVue, config.isBelongTemplate);\r\n }\r\n if (config.isArrow) {\r\n return getArrowFunction(functionSource);\r\n }\r\n if (config.isBindExpr) {\r\n return `${extractFunctionCalls(functionSource)}`;\r\n }\r\n return functionSource;\r\n }\r\n // js\u8868\u8FBE\u5F0F\r\n if (isJSExpression(value)) {\r\n if (config.isToVue) {\r\n // \u5982\u679C\u662F\u8F6C\u6362\u4E3Avue\uFF0C\u5219\u53BB\u6389this.state,this.xxx\r\n return getExpressionBody(\r\n value.value,\r\n config.isToVue,\r\n config.isDeleteLastSemicolon,\r\n config.isBelongTemplate,\r\n );\r\n }\r\n return value.value;\r\n }\r\n\r\n throw new CodeGeneratorError('Not a JSFunction or JSExpression');\r\n}\r\n\r\n/**\r\n * \u5C06this.setState({a:1}) \u8F6C\u6362\u4E3A this.a.value = 1\r\n * @param path\r\n * @param isBelongTemplate \u662F\u5426\u5C5E\u4E8Etemplate\u7684\u8868\u8FBE\u5F0F\r\n */\r\nfunction convertSetState(path: NodePath<CallExpression>, isBelongTemplate?: boolean) {\r\n // \u62FF\u5230\u8282\u70B9\r\n const node = path.node;\r\n // \u5224\u65AD\u662F\u5426\u662Fthis.setState\r\n if (\r\n node.callee.type === 'MemberExpression' &&\r\n node.callee.object.type === 'ThisExpression' &&\r\n node.callee.property.name === 'setState'\r\n ) {\r\n // \u83B7\u53D6setstate\u91CC\u7684\u53C2\u6570\r\n const args = node.arguments[0].properties;\r\n // \u83B7\u53D6setstate\u91CC\u7684\u56DE\u8C03\u65B9\u6CD5\r\n const stateFunction = node.arguments[1];\r\n const expressionStatementArray: ExpressionStatement[] = [];\r\n // \u904D\u5386\u53C2\u6570\r\n args.forEach((arg: any) => {\r\n // key\u9A7C\u5CF0\u5904\u7406 todo \u5F53key\u662F\u5B57\u7B26\u4E32\u662F\u8FDB\u884C\u9A7C\u5CF0\u5904\u7406\uFF0Ckey\u662F\u8868\u8FBE\u5F0F\u6682\u4E0D\u5904\u7406\r\n if (arg.key.type == 'Identifier') {\r\n arg.key.name = lineToUppercase(arg.key.name);\r\n }\r\n if (arg.key.type == 'Literal' || arg.key.type == 'StringLiteral') {\r\n arg.key.value = lineToUppercase(arg.key.value);\r\n // \u53BB\u9664\u5355\u5F15\u53F7\r\n arg.key = t.identifier(arg.key.value);\r\n }\r\n // \u83B7\u5F97\u8D4B\u503C\u8868\u8FBE\u5F0F\r\n let left1 = t.memberExpression(t.thisExpression(), arg.key, true);\r\n if (!isBelongTemplate) {\r\n // \u4E0D\u662Ftemplate\u5219\u8981\u52A0\u4E0A.value\u8BBF\u95EE\r\n left1 = t.memberExpression(left1, t.identifier('value'));\r\n }\r\n const assignment = t.assignmentExpression('=', left1, arg.value);\r\n // \u8868\u8FBE\u58F0\u660E\u518D\u5957\u4E00\u5C42\r\n expressionStatementArray.push(t.expressionStatement(assignment));\r\n });\r\n // \u56DE\u8C03\u53C2\u6570\u5904\u7406\r\n if (stateFunction) {\r\n // \u5C06\u56DE\u8C03\u65B9\u6CD5\u4F53\u79FB\u5230setState\u5916\r\n const functionBody = stateFunction.body?.body;\r\n expressionStatementArray.push(...functionBody);\r\n }\r\n // \u83B7\u53D6\u7236\u8282\u70B9\u8DEF\u5F84\r\n const expressionStatementPath = path.parentPath;\r\n // \u7528\u7B49\u53F7\u8868\u8FBE\u5F0F\u6279\u91CF\u66FF\u6362\u7236\u8282\u70B9\u8DEF\u5F84\u7684this.setState\u8868\u8FBE\u5F0F\r\n expressionStatementPath.replaceWithMultiple(expressionStatementArray);\r\n }\r\n}\r\n\r\n/**\r\n * todo this.xxx \u8F6C\u4E3A xxx\u3002this.state['aaa'] \u8F6C\u4E3A aaa.value\r\n * @param path \u8DEF\u5F84\r\n * @param isBelongTemplate \u662F\u5426\u5C5E\u4E8Etemplate\u7684\u8868\u8FBE\u5F0F\r\n */\r\nfunction convertState(path: NodePath<MemberExpression>, isBelongTemplate?: boolean) {\r\n // todo this.xxx \u8F6C\u4E3A xxx\u3002this.state['aaa'] \u8F6C\u4E3A aaa.value\r\n const node = path.node;\r\n // \u5224\u65AD\u662F\u4E0D\u662Fthis.state['aaa'] \u683C\u5F0F\r\n if (node.object.type === 'ThisExpression' && node.property.name === 'state') {\r\n // \u83B7\u53D6\u7236\u8DEF\u5F84\r\n const parentPath = path.parentPath;\r\n // \u83B7\u53D6\u7236\u8282\u70B9\r\n const parentNode = parentPath.node as MemberExpression;\r\n // \u83B7\u53D6\u53D8\u91CF\u540D ['aaa'],\u5E76\u8FDB\u884C\u9A7C\u5CF0\u8F6C\u6362\r\n const name = lineToUppercase(\r\n (parentNode.property as StringLiteral).value || (parentNode.property as Identifier).name,\r\n );\r\n if (isBelongTemplate) {\r\n // template\u5219this.state['aaa']\u8F6C\u6362\u4E3Aaaa\r\n parentPath.replaceWith(t.identifier(name));\r\n } else {\r\n // \u66FF\u6362\u7236\u8282\u70B9\u4E3A aaa.value\r\n parentPath.replaceWith(t.memberExpression(t.identifier(name), t.identifier('value')));\r\n }\r\n } else if (node.object.type === 'ThisExpression') {\r\n // \u5982\u679C\u4EC5\u662Fthis.xxx \u683C\u5F0F\uFF0C\u5219\u66FF\u6362\u4E3Axxx\r\n path.replaceWith(node.property);\r\n }\r\n}\r\n\r\n/**\r\n * \u83B7\u53D6this.state.xxx\u91CC\u7684xxx\r\n * @param path\r\n */\r\nfunction getStateName(path: NodePath<MemberExpression>) {\r\n const node = path.node;\r\n // \u5224\u65AD\u662F\u4E0D\u662Fthis.state['aaa']\u6216\u8005 \u683C\u5F0F\r\n if (!(node.object.type === 'ThisExpression') || !(node.property.name === 'state')) {\r\n return '';\r\n }\r\n // \u83B7\u53D6\u7236\u8DEF\u5F84\r\n const parentPath = path.parentPath;\r\n // \u83B7\u53D6\u7236\u8282\u70B9\r\n const parentNode = parentPath.node as MemberExpression;\r\n // \u83B7\u53D6\u53D8\u91CF\u540D ['aaa'],\u5E76\u8FDB\u884C\u9A7C\u5CF0\u8F6C\u6362\r\n return lineToUppercase(\r\n (parentNode.property as StringLiteral).value || (parentNode.property as Identifier).name,\r\n );\r\n}\r\n// function convertState(path: NodePath<CallExpression>) {\r\n// // Grab the node\r\n// const node = path.node;\r\n//\r\n// // Check if it's a this.setState call\r\n// if (\r\n// node.callee.type === 'MemberExpression' &&\r\n// node.callee.object.type === 'ThisExpression' &&\r\n// node.callee.property.name === 'setState'\r\n// ) {\r\n// // Get the arguments passed to setState (e.g., { field: value })\r\n// const args = node.arguments[0].properties;\r\n// const expressionStatementArray: ExpressionStatement[] = [];\r\n//\r\n// // Loop through each argument in the setState\r\n// args.forEach((arg: any) => {\r\n// if (arg.key.type === 'Identifier') {\r\n// // For static keys like 'a': 1\r\n// const assignment = t.assignmentExpression(\r\n// '=',\r\n// t.memberExpression(t.thisExpression(), arg.key),\r\n// arg.value,\r\n// );\r\n// expressionStatementArray.push(t.expressionStatement(assignment));\r\n// } else if (arg.key.type === 'Literal') {\r\n// // For keys like 'a': 1\r\n// const assignment = t.assignmentExpression(\r\n// '=',\r\n// t.memberExpression(t.thisExpression(), arg.key),\r\n// arg.value,\r\n// );\r\n// expressionStatementArray.push(t.expressionStatement(assignment));\r\n// } else if (arg.key.type === 'MemberExpression') {\r\n// // Handle dynamic keys (e.g., [field]: clickValue)\r\n// const dynamicKey = arg.key; // this will be [field] part\r\n// const computedKey = t.memberExpression(t.thisExpression(), dynamicKey.object);\r\n// const assignment = t.assignmentExpression(\r\n// '=',\r\n// t.memberExpression(computedKey, dynamicKey.property),\r\n// arg.value,\r\n// );\r\n// expressionStatementArray.push(t.expressionStatement(assignment));\r\n// }\r\n// });\r\n//\r\n// // If there's a callback function, recursively handle the nested setState inside it\r\n// if (node.arguments[1] && node.arguments[1].type === 'ArrowFunctionExpression') {\r\n// const callback = node.arguments[1];\r\n// if (callback.body.body) {\r\n// callback.body.body.forEach((nestedNode: any) => {\r\n// if (\r\n// nestedNode.type === 'ExpressionStatement' &&\r\n// nestedNode.expression.callee.property.name === 'setState'\r\n// ) {\r\n// // Recursively handle nested setState calls\r\n// convertState({\r\n// node: nestedNode.expression,\r\n// parentPath: path.parentPath,\r\n// });\r\n// }\r\n// });\r\n// }\r\n// }\r\n//\r\n// // Replace the original setState call with the transformed code\r\n// const expressionStatementPath = path.parentPath;\r\n// expressionStatementPath.replaceWithMultiple(expressionStatementArray);\r\n// }\r\n// }\r\n\r\n/**\r\n * \u89E3\u6790\u7ED9\u5B9A\u7684\u5B57\u7B26\u4E32\u5185\u5BB9\u4E3Ajs\u8868\u8FBE\u5F0F\u3002\r\n * @note \u4F7F\u7528babel\u8F6C\u5316\u4E3Aast\u6811\uFF0C\u518D\u5BF9\u6811\u8FDB\u884C\u5904\u7406\r\n * @param content \u8981\u89E3\u6790\u7684\u5B57\u7B26\u4E32\u5185\u5BB9\u3002\r\n * @param isToVue\r\n * @param isBelongTemplate \u662F\u5426\u662Ftemplate\u7684\u8868\u8FBE\u5F0F\r\n * @returns \u89E3\u6790\u6210\u529F\u7684\u8868\u8FBE\u5F0F\u8282\u70B9\uFF0C\u5982\u679C\u89E3\u6790\u5931\u8D25\u5219\u8FD4\u56DEnull\u3002\r\n * @throws \u5982\u679C\u89E3\u6790\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF\uFF0C\u5C06\u629B\u51FAParseError\u5F02\u5E38\u3002\r\n */\r\nexport function parseExpression(\r\n content: string,\r\n isToVue?: boolean,\r\n isBelongTemplate?: boolean,\r\n): t.FunctionExpression | null {\r\n try {\r\n const ast = parser.parse(`(${content})`, {\r\n plugins: ['jsx'],\r\n });\r\n\r\n let resultNode: t.FunctionExpression | null = ast;\r\n traverse(ast, {\r\n MemberExpression(path) {\r\n if (isToVue) {\r\n convertState(path, isBelongTemplate);\r\n }\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\n/**\r\n * \u89E3\u6790js\u8868\u8FBE\u5F0F\u83B7\u53D6this.state.xxx \u7684xxx\r\n * @param content\r\n */\r\nexport function parseExpressionGetState(content: string): Set<string> {\r\n try {\r\n const ast = parser.parse(`(${content})`, {\r\n plugins: ['jsx'],\r\n });\r\n\r\n const refSet: Set<string> = new Set();\r\n traverse(ast, {\r\n MemberExpression(path) {\r\n refSet.add(getStateName(path));\r\n },\r\n });\r\n return refSet;\r\n } catch (e) {\r\n throw new ParseError(content, e);\r\n }\r\n}\r\n\r\n/**\r\n * \u83B7\u53D6js\u8868\u8FBE\u5F0F\u6587\u5B57\r\n * @param content\r\n * @param isToVue \u662F\u5426\u662F\u8F6C\u6362\u4E3Avue\r\n * @param isDeleteLastSemicolon \u662F\u5426\u5220\u9664\u6700\u540E\u4E00\u4E2A\u5206\u53F7\r\n * @param isBelongTemplate \u662F\u5426\u662Ftemplate\u7684\u5185\u5BB9\r\n */\r\nfunction getExpressionBody(\r\n content: string,\r\n isToVue?: boolean,\r\n isDeleteLastSemicolon?: boolean,\r\n isBelongTemplate?: boolean,\r\n) {\r\n const funcNode = parseExpression(content, isToVue, isBelongTemplate);\r\n if (funcNode) {\r\n const { code: resultCode } = generate(funcNode, { sourceMaps: false });\r\n if (resultCode) {\r\n // \u5220\u9664\u6700\u540E\u4E00\u4E2A\u5206\u53F7\r\n if (isDeleteLastSemicolon && resultCode.endsWith(';')) {\r\n return resultCode.slice(0, -1);\r\n }\r\n }\r\n return resultCode;\r\n }\r\n\r\n throw new Error('Can not find Function Statement');\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", "\r\n/**\r\n * \u9996\u5B57\u6BCD\u6539\u4E3A\u5927\u5199\uFF0C\u5176\u4ED6\u5B57\u6BCD\u5C0F\u5199\r\n * @param {string} str\r\n */\r\nexport function toFirstUpperCase(str: string): string {\r\n let name = str.toLowerCase();\r\n return name.charAt(0).toUpperCase() + name.slice(1);\r\n}\r\n\r\n/**\r\n * @description \u4E0B\u5212\u7EBF\u5B57\u7B26\u4E32\u8F6C\u9A7C\u5CF0\r\n * @param str\r\n */\r\nexport function lineToUppercase(str: string) {\r\n if (!str) {\r\n return ''\r\n }\r\n function upper(all: string,letter: string){\r\n return letter.toUpperCase();\r\n }\r\n\r\n return str.replace(/_(\\w)/g,upper);\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\n/**\r\n * \u5C06\u6587\u4EF6\u4F4D\u7F6E\u53CA\u6587\u4EF6\u63D2\u5165\u5230\u76EE\u5F55\u7684\u6811\u5F62\u7ED3\u6784\r\n * @param root\r\n * @param path\r\n * @param file\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 {\r\n DataSourceCustomExtra,\r\n ExtraInterpretDataSource,\r\n IProjectInfo,\r\n IPublicTypeFormContainerSchema,\r\n} from '../types/intermediate';\r\n\r\nexport interface DataSourceDependenciesConfig {\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\r\nexport function isFormPage(obj: Record<string, DataSourceCustomExtra>) {\r\n // \u904D\u5386\u5BF9\u8C61\uFF0C\u68C0\u67E5\u6BCF\u4E00\u9879\u7684 id \u662F\u5426\u4E0D\u4E3A\u7A7A\r\n for (let key in obj) {\r\n if (obj[key].dataSourceType && obj[key].dataSourceType == 'formPage') {\r\n return true;\r\n }\r\n }\r\n return false;\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 {\r\n IPublicTypeNodeSchema,\r\n isNodeSchema,\r\n IPublicTypeNodeDataType,\r\n IPublicTypeCompositeValue,\r\n} from '@alilc/lowcode-types';\r\nimport { isValidIdentifier, isValidVueDirective } from './validate';\r\nimport { executeFunctionStack } from './aopHelper';\r\nimport { encodeJsxStringNode } from './encodeJsxAttrString';\r\nimport { getStaticExprValue } from './common';\r\nimport { array } from 'fp-ts';\r\nimport { lineToUppercase } from './changeCase';\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\r\n .map((p) => {\r\n if (p.name === '__events') {\r\n return null;\r\n }\r\n\r\n let newValue: string;\r\n let pName: string;\r\n\r\n //\u5904\u7406\u70B9\u51FB\u4E8B\u4EF6\r\n if (p.name === 'onClick' || p.name === 'onMouseUp') {\r\n pName = `@${p.name}`;\r\n newValue = `\"${p.value}\"`;\r\n } else if (p.name === 'dataList' || p.name === 'itemArray') {\r\n //\u5904\u7406\u6570\u636E\u6E90\u7ED1\u5B9A\r\n let data;\r\n try {\r\n data = JSON.parse(p.value);\r\n } catch (error) {\r\n newValue = `\"${p.value\r\n .replace(/[\\n\\r]+/g, '')\r\n .replace(/^state\\['(.*?)'\\]\\?\\./, '$1?.')}\"`;\r\n pName = `:${p.name}`;\r\n }\r\n if (data) {\r\n newValue = `\"${JSON.stringify(data)\r\n .replace(/\"(\\w+)\":/g, '$1:')\r\n .replace(/:\"([^\"]*)\"/g, \":'$1'\")}\"`;\r\n pName = `:${p.name}`;\r\n }\r\n } else if (p.value && isPureString(p.value)) {\r\n //\u5904\u7406\u5B57\u7B26\u4E32\r\n const content = getStaticExprValue<string>(p.value);\r\n newValue = JSON.stringify(encodeJsxStringNode(content));\r\n pName = `${p.name}`;\r\n } else {\r\n newValue = `\"${p.value}\"`;\r\n pName = `:${p.name}`;\r\n }\r\n\r\n return {\r\n value: `${pName}=${lineToUppercase(newValue)}`,\r\n type: PIECE_TYPE.ATTR,\r\n };\r\n })\r\n .filter((p) => p !== null);\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) || isValidVueDirective(propName)) {\r\n pieces = pieces.concat(\r\n generateAttr(propName, props[propName] as IPublicTypeCompositeValue, scope, config),\r\n );\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 const ignoreNode = ['Navigation'];\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 //\u5FFD\u7565\u6307\u5B9A\u8282\u70B9\u751F\u6210\r\n // \u83B7\u53D6\u6807\u7B7E\u540D\r\n const tagName = (cfg?.tagMapping || _.identity)(nodeItem.componentName) as string;\r\n\r\n if (ignoreNode.includes(tagName)) {\r\n return '';\r\n }\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 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// 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 {\r\n nodePlugins: [generateVueLoopCtrl, generateConditionVueCtrl],\r\n },\r\n cfg,\r\n );\r\n\r\n return createNodeGenerator(newCfg);\r\n}\r\n\r\n/**\r\n * \u67E5\u627E\u6307\u5B9A\u8282\u70B9\r\n * @param node\r\n * @param name\r\n */\r\nfunction findNodeSchema(node: IPublicTypeNodeDataType, name: string): IPublicTypeNodeSchema | null {\r\n // \u68C0\u67E5\u5F53\u524D\u8282\u70B9\u662F\u5426\u662F\u6211\u4EEC\u8981\u627E\u7684\r\n if (node && node.componentName && node.componentName === name) {\r\n return node as IPublicTypeNodeSchema;\r\n }\r\n\r\n // \u9012\u5F52\u68C0\u67E5\u5B50\u8282\u70B9\r\n if (node.children) {\r\n if (Array.isArray(node.children)) {\r\n // \u904D\u5386\u5B50\u8282\u70B9\u6570\u7EC4\r\n for (const child of node.children) {\r\n const found = findNodeSchema(child, name);\r\n if (found) {\r\n return found; // \u627E\u5230\u540E\u7ACB\u5373\u8FD4\u56DE\r\n }\r\n }\r\n } else {\r\n // \u5904\u7406\u5355\u4E2A\u5B50\u8282\u70B9\r\n return findNodeSchema(node.children, name);\r\n }\r\n }\r\n\r\n return null; // \u672A\u627E\u5230\u65F6\u8FD4\u56DE null\r\n}\r\n\r\n/**\r\n * \u751F\u6210\u6307\u5B9A\u8282\u70B9\r\n * @param name \u6307\u5B9A\u8282\u70B9\u540D\u79F0\r\n * @param nodeItem schema\u6587\u4EF6\r\n * @param scope\r\n * @param cfg \u914D\u7F6E\r\n * @param props \u8981\u989D\u5916\u6DFB\u52A0\u7ED9\u7EC4\u4EF6\u7684\u5C5E\u6027\r\n */\r\nexport function generateByName(\r\n cfg: NodeGeneratorConfig = {},\r\n name: string,\r\n nodeItem: IPublicTypeNodeDataType,\r\n scope: IScope,\r\n props: Record<string, any>,\r\n): { code: string; node: IPublicTypeNodeSchema } {\r\n const targetNode = findNodeSchema(nodeItem, name);\r\n if (!targetNode) {\r\n return { code: '', node: {} as IPublicTypeNodeSchema };\r\n }\r\n targetNode.props = { ...targetNode.props, ...props };\r\n // \u751F\u6210\u4EE3\u7801\r\n return {\r\n code: generateNodeSchema(targetNode as IPublicTypeNodeSchema, scope, {\r\n ...cfg,\r\n }),\r\n node: targetNode,\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 });\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, reactive } from 'vue';\r\nimport { useRouter } from 'vue-router';`,\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", "import { JSONObject } from '@alilc/lowcode-datasource-types/src/value-type';\r\nimport _ from 'lodash';\r\nimport { generateFunction, parseExpressionGetState } from './jsExpression';\r\nimport { lineToUppercase } from './changeCase';\r\nimport { InterpretDataSourceConfig, JSONValue, InterpretDataSource } from '@alilc/lowcode-types';\r\nimport { DataSourceCustomExtra, ExtraInterpretDataSource } from '../types';\r\nimport { getApiName } from './apiHandler';\r\n\r\n// api\u7F13\u5B58\u524D\u7F00\r\nexport const PREFIX_API_CACHE = 'page_cache_';\r\n// \u5206\u9875\u53C2\u6570pageNum\u524D\u7F00\r\nexport const PREFIX_PAGE_NUM = '_nowPage';\r\n// \u5206\u9875\u53C2\u6570isLastPage\u524D\u7F00\r\nexport const PREFIX_IS_LAST_PAGE = '_isLastPage';\r\n// \u5206\u9875\u53C2\u6570isLastPage\u524D\u7F00\r\nexport const PREFIX_API_PARAM_NAME = 'Params';\r\n// script \u5185api\u5F15\u7528\u540E\u7F00\r\nexport const SUFFIX_API_SCRIPT = 'Request';\r\n// \u6570\u636E\u6E90\u96C6\u5408\u53D8\u91CF\u540D\r\nexport const SUFFIX_DATA_SOURCE_MAP = 'dataSourceMap';\r\n// api\u8BF7\u6C42\u65B9\u6CD5\u540D\u540E\u7F00\r\nexport const SUFFIX_API_METHOD = 'Method';\r\n// \u5168\u5C40\u8BF7\u6C42\u53C2\u6570\u540D\u5B57\r\nexport const GLOBE_API_PARAM = 'globeParam';\r\n// \u8BF7\u6C42\u7C7B\u578B\u679A\u4E3E\r\nenum REQUEST_TYPE {\r\n PAGE = 'page',\r\n SYSTEM_DICTIONARY = 'systemDictionary',\r\n}\r\nexport type TypeDataSourceType =\r\n | 'dynamicForm'\r\n | 'dataDictionary'\r\n | 'dynamicFormCache'\r\n | 'dynamicFormDetail'\r\n | 'dataLoginUserInfo';\r\n\r\n// \u8BF7\u6C42\u7C7B\u578B\u5339\u914D\r\nconst requestEndUrl: Record<\r\n TypeDataSourceType,\r\n (url: string, formName?: string, isJsExp?: boolean) => string\r\n> = {\r\n dynamicForm: (url: string, formName?: string, isJsExp?: boolean) => {\r\n if (isJsExp) {\r\n return `/${formName}/page`;\r\n } else {\r\n return `'/${formName}/page'`;\r\n }\r\n },\r\n};\r\n// \u9700\u8981\u5FFD\u7565\u7684\u8BF7\u6C42\u5934\r\nconst ignoreHeader = [\r\n {\r\n key: 'authToken',\r\n ignore: (value: any) => {\r\n return true;\r\n },\r\n },\r\n {\r\n key: 'siteCode',\r\n ignore: (value: any) => {\r\n return true;\r\n },\r\n },\r\n {\r\n key: 'dcAuthType',\r\n ignore: (value: any) => {\r\n return true;\r\n },\r\n },\r\n {\r\n key: 'Content-Type',\r\n ignore: (value: any) => {\r\n return ['application/json'].includes(value);\r\n },\r\n },\r\n];\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 if (!headers) {\r\n return '';\r\n }\r\n let endHeaders = '';\r\n for (let i = 0; i < Object.keys(headers).length; i++) {\r\n const key = Object.keys(headers)[i];\r\n // \u5FFD\u7565\u6307\u5B9Akey\r\n if (shouldIgnoreKey(key, headers[key])) {\r\n break;\r\n }\r\n if (headers[key]) {\r\n let tempHeaders = `defaultConfig.header.data['${key}'] = '${headers[key]}'`;\r\n if (isJsExpression(headers[key])) {\r\n // js\u8868\u8FBE\u5F0F\u5904\u7406\r\n tempHeaders = `defaultConfig.header.data['${key}'] = ${generateFunction(headers[key], {\r\n isToVue: true,\r\n })}`;\r\n }\r\n endHeaders += `${tempHeaders};`;\r\n }\r\n }\r\n if (endHeaders) {\r\n endHeaders =\r\n '// \u8BF7\u6C42\u5934\u5904\u7406\\n' + 'const defaultConfig = getDefaultConfig<boolean>()\\n' + endHeaders;\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 let paramsData = params\r\n ? Object.keys(params)\r\n .map((key) => {\r\n if (isJsExpression(params[key])) {\r\n // todo \u5FFD\u7565js\u8868\u8FBE\u5F0F\uFF0C\u653E\u5728script\u90A3\u8FB9\u5904\u7406\r\n return '';\r\n }\r\n return `${key}: ${params[key]}`;\r\n })\r\n .filter((item) => item)\r\n .join(',')\r\n : '';\r\n return `\r\n // \u8BF7\u6C42\u53C2\u6570\u5904\u7406\r\n data = {\r\n ${paramsData ? paramsData + ',' : ''}\r\n ...data\r\n }`;\r\n}\r\n\r\n/**\r\n * \u8BF7\u6C42\u7ED3\u679C\u5904\u7406\r\n */\r\nexport function requestAfterDataHandler(\r\n dataSourceItems: InterpretDataSourceConfig,\r\n extra: Record<string, DataSourceCustomExtra>,\r\n) {\r\n const strArray = [];\r\n if (dataSourceItems.dataHandler) {\r\n const resultDataName = lineToUppercase(dataSourceItems.id + 'Data');\r\n // \u83B7\u53D6\u8BF7\u6C42\u7ED3\u679C\r\n const resultData = `const ${resultDataName} = await ${getApiName(dataSourceItems.id)}.${\r\n dataSourceItems.id\r\n }(${getApiParamName(dataSourceItems.id)});`;\r\n const handleData = `const handleData = ${getApiHandleFunctionName(\r\n dataSourceItems.id,\r\n )}({ data: ${resultDataName}})`;\r\n strArray.push(resultData, handleData);\r\n let endData;\r\n if (!dataSourceItems.dataHandler.value.includes('requestAfter')) {\r\n // \u8C03\u7528\u5904\u7406\u51FD\u6570\u8FDB\u884C\u5904\u7406 todo requestAfter\u65B9\u6CD5\u5185\u542B\u6709\u6570\u636E\u6E90\u8D4B\u503C\uFF0C\u6545\u4E0D\u8FDB\u884C\u8D4B\u503C\r\n endData = `${lineToUppercase(getApiId(dataSourceItems.id, extra))}.value = handleData`;\r\n strArray.push(endData);\r\n }\r\n } else {\r\n // \u5904\u7406\u51FD\u6570\u5904\u7406\r\n const handleData = `const handleData = await ${getApiName(dataSourceItems.id)}.${\r\n dataSourceItems.id\r\n }(${getApiParamName(dataSourceItems.id)});`;\r\n const data = `${lineToUppercase(getApiId(dataSourceItems.id, extra))}.value = handleData`;\r\n strArray.push(handleData, data);\r\n }\r\n return strArray;\r\n}\r\n\r\n/**\r\n * \u662F\u5426\u662Fjs\u8868\u8FBE\u5F0F\r\n * @param value\r\n */\r\nexport function isJsExpression(value: any) {\r\n return _.isObject(value) && value?.type == 'JSExpression';\r\n}\r\n\r\n/**\r\n * \u662F\u5426\u5FFD\u7565\u8BE5key\r\n * @param key\r\n * @param value\r\n */\r\nfunction shouldIgnoreKey(key: string, value: JSONValue) {\r\n for (let i = 0; i < ignoreHeader.length; i++) {\r\n const headerItem = ignoreHeader[i];\r\n if (headerItem.key == key) {\r\n // \u8C03\u7528\u5FFD\u7565\u51FD\u6570\r\n return headerItem.ignore(value);\r\n }\r\n }\r\n\r\n // \u5224\u65AD key \u662F\u5426\u4EE5 'authToken-' \u5F00\u5934\uFF0C\u5E76\u540E\u9762\u8DDF\u7740\u6570\u5B57\uFF08\u52A8\u6001\u90E8\u5206\uFF09\r\n const dynamicKeyPattern = /^authToken-\\d+$/;\r\n if (dynamicKeyPattern.test(key)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * \u5C06\u7EBF\u4E0A\u5730\u5740\u8F6C\u4E3A\u51FA\u7801\u540E\u7684\u8BF7\u6C42\u5730\u5740\r\n * @param dataSourceConfig\r\n * @param extra \u989D\u5916\u53C2\u6570\r\n */\r\nexport function handleUrl(dataSourceConfig: InterpretDataSourceConfig, extra: any) {\r\n // if (!dataSourceConfig.bindPanelData) {\r\n // return dataSourceConfig.options?.uri\r\n // }\r\n let url;\r\n if (isJsExpression(dataSourceConfig.options?.uri)) {\r\n // \u5BF9url\u662Fjs\u8868\u8FBE\u5F0F\u8FDB\u884C\u5904\u7406\r\n url = generateFunction(dataSourceConfig.options?.uri, {\r\n isToVue: true,\r\n isDeleteLastSemicolon: true,\r\n });\r\n } else {\r\n url = dataSourceConfig.options?.uri as string;\r\n }\r\n const id = dataSourceConfig.id as string;\r\n const config = extra && extra[id];\r\n if (!config) {\r\n return `'${dataSourceConfig.options?.uri}'`;\r\n }\r\n const type = config.dataSourceType as TypeDataSourceType;\r\n const formName = lineToUppercase(config.code as string);\r\n\r\n return requestEndUrl[type](url, formName, isJsExpression(dataSourceConfig.options?.uri));\r\n}\r\n\r\n/**\r\n * \u5904\u7406\u5206\u9875\u8BF7\u6C42\u53C2\u6570\r\n * \u5C06\u5206\u9875\u53C2\u6570\u8F6C\u6362\u4E3Aref\uFF08pageNum\u548CisLastPage\uFF09\r\n */\r\nexport function handlePageParamToRef(data: ExtraInterpretDataSource): string[] {\r\n if (!data.extra) {\r\n return [];\r\n }\r\n const extra = data.extra;\r\n const variableArray: string[] = [];\r\n Object.keys(extra).forEach((key) => {\r\n const extraItem = extra[key];\r\n if (extraItem.pageHelperInfo) {\r\n // \u5BF9\u5E94\r\n const pageIsLastPage = `const ${lineToUppercase(key + PREFIX_IS_LAST_PAGE)} = ref(false)`;\r\n const pageNowPage = `const ${lineToUppercase(key + PREFIX_PAGE_NUM)} = ref(${\r\n extraItem.pageHelperInfo.page.value ?? 1\r\n })`;\r\n variableArray.push(pageNowPage, pageIsLastPage);\r\n }\r\n });\r\n return variableArray;\r\n}\r\n\r\n/**\r\n * \u5C06\u8BF7\u6C42\u53C2\u6570itemList\u91CC\u9762\u7684this.state.xxx \u90FD\u5305\u88F9\u8FDBreactive\u91CC\u9762\r\n * @param data\r\n */\r\nexport function handleParamToRef(data: ExtraInterpretDataSource) {\r\n const dataSourceItems: InterpretDataSourceConfig[] = (data && data.list) || [];\r\n const paramSet: Set<string> = new Set();\r\n const nameArray: string[] = [];\r\n dataSourceItems.forEach((item) => {\r\n // \u83B7\u53D6\u8BF7\u6C42\u53C2\u6570\r\n const params = item.options?.params as JSONObject;\r\n if (params) {\r\n Object.values(params).forEach((paramItem) => {\r\n if (isJsExpression(paramItem)) {\r\n // \u5C06\u53C2\u6570\u503C\u4FDD\u5B58\u8FDBset\uFF0C\u8FDB\u884C\u53BB\u91CD\r\n const nameSet = parseExpressionGetState(paramItem?.value as string);\r\n nameSet.forEach((name) => paramSet.add(name));\r\n }\r\n });\r\n }\r\n });\r\n // paramSet.forEach(item => {\r\n // if (item) {\r\n // // \u7EC4\u88C5ref\r\n // nameArray.push(`const ${item} = ref()`)\r\n // }\r\n // })\r\n const paramArray = [...paramSet];\r\n const paramStr = paramArray.filter((item) => item).map((item) => `${item}: ''`);\r\n const param = `const ${GLOBE_API_PARAM} = reactive({${paramStr.join(',')}})`;\r\n nameArray.push(param);\r\n return nameArray;\r\n}\r\n\r\n/**\r\n * \u5C06API\u8F6C\u6362\u4E3Aref\u53D8\u91CF\r\n * @param data\r\n */\r\nexport function handleApiToRef(data: ExtraInterpretDataSource): string[] {\r\n const dataSourceItems: InterpretDataSourceConfig[] = (data && data.list) || [];\r\n const variableArray: string[] = [];\r\n const extra = data.extra;\r\n dataSourceItems.forEach((item) => {\r\n let id = getApiId(item.id, extra);\r\n const data = `const ${lineToUppercase(id)} = ref()`;\r\n variableArray.push(data);\r\n });\r\n return variableArray;\r\n}\r\n\r\n/**\r\n * \u83B7\u53D6\u6570\u636E\u6E90\u7684id\r\n * @param id\r\n * @param extra\r\n */\r\nexport function getApiId(id: string, extra: Record<string, DataSourceCustomExtra>) {\r\n // \u5F00\u542F\u7F13\u5B58\u5219\u52A0\u5165\u7F13\u5B58\u524D\u7F00\r\n return extra && extra[id]?.isOpenCache ? PREFIX_API_CACHE + id : id;\r\n}\r\n\r\n/**\r\n * \u83B7\u53D6\u8BF7\u6C42\u53C2\u6570\u540D\u5B57\r\n * @param id\r\n */\r\nexport function getApiParamName(id: string) {\r\n return lineToUppercase(id) + PREFIX_API_PARAM_NAME;\r\n}\r\n\r\n/**\r\n * \u83B7\u53D6\u8BF7\u6C42\u540E\u7F6E\u5904\u7406\u65B9\u6CD5\u540D\r\n * @param id\r\n */\r\nexport function getApiHandleFunctionName(id: string) {\r\n return lineToUppercase('requestAfter' + id);\r\n}\r\n/**\r\n * \u83B7\u53D6script \u91CC\u5F15\u5165\u7684api\u540D\u79F0\r\n */\r\nexport function getApiName(apiId: string) {\r\n return apiId + SUFFIX_API_SCRIPT;\r\n}\r\n\r\n/**\r\n * \u83B7\u53D6api\u8BF7\u6C42\u65B9\u6CD5\u540D\r\n * @param id\r\n */\r\nexport function getApiRequestMethodName(id: string) {\r\n return lineToUppercase(id) + 'Method';\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/requestHandle\";\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: `import ${getApiName(ds.id)} from '@/api/${ds.id}';`,\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, VUE_MODULE_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\n/**\r\n * \u5C06\u4E0D\u540C\u5305\u7684\u4F9D\u8D56\u5206\u7EC4\r\n * @param deps\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\n/**\r\n * \u83B7\u53D6\u4F9D\u8D56\u7684\u5BFC\u51FA\u540D\u79F0\r\n * @param dep\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\n/**\r\n * \u5C06\u4F9D\u8D56\u5730\u5740\u8F6C\u6362\u4E3Avue\u7EC4\u4EF6\u5730\u5740\r\n * @param deps\r\n */\r\nfunction depConvertToVue(deps: IDependency[]) {\r\n return deps.map((dep) => {\r\n // \u5FFD\u7565\u6700\u5916\u5C42\u7684page\r\n if (!dep.devMode || dep.devMode !== 'lowCode') {\r\n dep.package = VUE_MODULE_NAME\r\n dep.main = ''\r\n }\r\n return dep\r\n })\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 let deps = cfg.filter ? cfg.filter(ir.deps) : ir.deps;\r\n // \u8F6C\u6362\u4E3Avue\u4F9D\u8D56\r\n deps = depConvertToVue(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 {\r\n handleApiToRef,\r\n handlePageParamToRef,\r\n handleParamToRef\r\n} from \"../../../utils/requestHandle\";\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 apiRefArray = handleApiToRef(dataSourceConfig)\r\n // \u6DFB\u52A0\u5206\u9875\u7EC4\u4EF6\u7684\u989D\u5916\u5206\u9875\u53C2\u6570\uFF08\u5C06pageNum\u548CisLastPage\u8F6C\u4E3Avue\u7684ref\uFF09\r\n const pageParams = handlePageParamToRef(dataSourceConfig)\r\n // \u5C06api\u7684\u8BF7\u6C42\u53C2\u6570itemList\u91CC\u7684this.state.xxx\u8F6C\u5316\u4E3Aref\u53D8\u91CF\r\n const data = handleParamToRef(dataSourceConfig)\r\n // itemList\u8F6Cref\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: `${data.join('\\n')}`,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ConstVar]],\r\n });\r\n // \u7528ref\u53D8\u91CF\u4FDD\u5B58api\u8BF7\u6C42\u7ED3\u679C\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: `${apiRefArray.join('\\n')}`,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ConstVar]],\r\n });\r\n // state\u8F6C\u6362\u4E3Aref\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: `${fields.join('\\n')}`,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ConstVar]],\r\n });\r\n // \u5206\u9875\u53C2\u6570\u8F6C\u6362\u4E3Aref\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: `${pageParams.join('\\n')}`,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ConstVar]],\r\n });\r\n // \u8DEF\u7531\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: `const router = useRouter()`,\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, ExtraInterpretDataSource,\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 {\r\n getApiRequestMethodName,\r\n isJsExpression,\r\n requestAfterDataHandler, SUFFIX_DATA_SOURCE_MAP\r\n} from '../../../utils/requestHandle';\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)\r\n .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(grammar 2024.10.29) \u6D89\u53CA\u5230react\u4E13\u6709\u8BED\u6CD5\u540E\u7EED\u9047\u5230\u518D\u5904\u7406\uFF08\u5DF2\u5904\u7406this.xxx\uFF0Cthis.setState()\uFF09\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], {\r\n isBlock: true,\r\n isToVue: true,\r\n }),\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent]],\r\n };\r\n }\r\n\r\n if (normalizeName === 'componentWillUnmount') {\r\n // TODO(grammar 2024.10.29) \u6D89\u53CA\u5230react\u4E13\u6709\u8BED\u6CD5\u540E\u7EED\u9047\u5230\u518D\u5904\u7406\uFF08\u5DF2\u5904\u7406this.xxx\uFF0Cthis.setState()\uFF09\r\n return {\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.UnMountedContent,\r\n content: generateFunction(lifeCycles[lifeCycleName], {\r\n isBlock: true,\r\n isToVue: true,\r\n }),\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.UnMountedContent]],\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 isToVue: true,\r\n }),\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.Method]],\r\n };\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 // \u8C03\u7528\u6570\u636E\u6E90\u65B9\u6CD5\r\n const dataSourceConfig: ExtraInterpretDataSource = 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: ` ${SUFFIX_DATA_SOURCE_MAP}.${getApiRequestMethodName(item.id)}();`,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent]],\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 { InterpretDataSourceConfig } 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} from '../../../types';\r\n\r\nimport { isValidContainerType } from '../../../utils/schema';\r\nimport { lineToUppercase, toFirstUpperCase } from '../../../utils/changeCase';\r\nimport {\r\n handleUrl,\r\n requestHeaderHandler,\r\n requestParamsHandler,\r\n} 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 /** \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])\r\n ? pre.ir.containers[0].dataSource\r\n : null;\r\n const dataSourceItems: InterpretDataSourceConfig[] =\r\n (dataSourceConfig && dataSourceConfig.list) || [];\r\n const extra = (dataSourceConfig && dataSourceConfig.extra) || {}\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 as string) ?? 'Post');\r\n // \u5904\u7406\u8BF7\u6C42url\r\n const url = handleUrl(ds, extra);\r\n // \u5904\u7406\u975E\u81EA\u5B9A\u4E49\u6570\u636E\u6E90\u548C\u8868\u5355\u7EC4\u4EF6\r\n // todo \u8868\u8FBE\u5F0F\u4ECEif\u62C6\u5F00\uFF0C\u4E0D\u7136\u4E0D\u597D\u5224\u7A7A\r\n const formData = dataSourceConfig.extra ? dataSourceConfig.extra[ds.id]?.columnToAttribute?.formData : ''\r\n if (\r\n dsType !== 'custom' &&\r\n !formData\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.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 import utils from '@/utils/utils'\r\n `,\r\n linkAfter: [],\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 ${requestHeaderHandler(ds.options?.headers as JSONObject)}\r\n ${requestParamsHandler(ds.options?.params as JSONObject)}\r\n return new ${method}RequestModel<PageModel<any>>(${url}, data).request()\r\n },\r\n}\r\n `,\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\r\n });\r\n } else {\r\n console.log(dataSourceConfig.extra[ds.id]['columnToAttribute']['formData']);\r\n const formId = url?.toString().split('/').pop();\r\n const formName = lineToUppercase(dataSourceConfig.extra[ds.id]['code']);\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 { GetRequestModel, PostRequestModel, PutRequestModel, 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 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 * \u83B7\u53D6\u8868\u5355\u8BE6\u60C5\r\n * @param data\r\n */\r\n ${ds.id}: (data?: QueryType) => {\r\n ${requestHeaderHandler(ds.options?.headers as JSONObject)}\r\n ${requestParamsHandler(ds.options?.params as JSONObject)}\r\n return new ${method}RequestModel<PageModel<any>>(${url}, data).request()\r\n },\r\n /**\r\n\t * \u5206\u9875\u67E5\u8BE2\u4FE1\u606F\r\n\t * @param query\r\n\t */\r\n page: (query?: QueryType) => new PostRequestModel<PageModel<any>>('/${formName}/page', query).request(),\r\n /**\r\n * \u65B0\u589E\r\n * @param data\r\n */\r\n add: (data: Partial<Record<string, string | number | Array<{}>>>) => {\r\n return new PostRequestModel<any>('/${formName}/', data as unknown as QueryType).request()\r\n },\r\n /**\r\n * \u66F4\u65B0\r\n * @param data\r\n */\r\n update: (data: Partial<Record<string, string | number | Array<{}>>>) => {\r\n return new PutRequestModel<any>('/${formName}/', data as unknown as QueryType).request()\r\n },\r\n /**\r\n\t * \u6839\u636Eid\u83B7\u53D6\u8BE6\u7EC6\u4FE1\u606F\r\n\t * @param id\r\n\t */\r\n getById: (id: string) => {\r\n return new GetRequestModel<any>(\\`/${formName}/\\${id}\\`, {}).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 {\r\n GLOBE_API_PARAM,\r\n SUFFIX_API_METHOD,\r\n SUFFIX_API_SCRIPT,\r\n SUFFIX_DATA_SOURCE_MAP\r\n} from \"../../../../utils/requestHandle\";\r\n// \u8C03\u7528api\r\nconst useApiMethod = `${SUFFIX_DATA_SOURCE_MAP}[dataSourceId + '${SUFFIX_API_METHOD}']`\r\nexport default {\r\n updateVariable: `\r\n /**\r\n * \u6570\u636E\u6E90\u7684\u70B9\u51FB\u4EA4\u4E92\u4E8B\u4EF6\uFF08\u8BF7\u4E0D\u8981\u968F\u610F\u6539\u52A8\u8BE5\u65B9\u6CD5\uFF09\r\n * @param clickValue \u4E8B\u4EF6\u4F20\u9012\u7684\u539F\u53C2\u6570\r\n * @param extra \u989D\u5916\u7684\u53C2\u6570\uFF08\u6570\u636E\u6E90\u76F8\u5173\u7684\u53C2\u6570\uFF09\r\n */\r\n function updateVariable(clickValue, extra) {\r\n const { field, dataSourceId } = extra || {}\r\n // \u5982\u679C\u6CA1\u6709field\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C\r\n if (!field) {\r\n console.log('\u6CA1\u6709field\uFF0C\u4E0D\u8FDB\u884C\u64CD\u4F5C')\r\n return\r\n }\r\n ${GLOBE_API_PARAM}[field] = clickValue\r\n ${useApiMethod}().then((data) => {\r\n this[dataSourceId + 'IsLastPage'] = data?.data?.isLastPage;\r\n this[dataSourceId + 'NowPage'] = data?.data?.pageNum\r\n })\r\n}`,\r\n goPage: `\r\n /**\r\n * \u9875\u9762\u8DF3\u8F6C\u4E8B\u4EF6\uFF08\u8BF7\u4E0D\u8981\u968F\u610F\u6539\u52A8\u8BE5\u65B9\u6CD5\uFF09\r\n * @param params \u9ED8\u8BA4\u4F20\u5165\u7684\u53C2\u6570\r\n * @param extra \u989D\u5916\u7684\u53C2\u6570\r\n */\r\n function goPage(params, extra) {\r\n const pageId = extra?.['pathId'] || params || ''\r\n if (!pageId) {\r\n // \u5982\u679C\u6CA1\u6709\u8DEF\u5F84\u7684\u60C5\u51B5\u4E0B\uFF0C\u4E0D\u8FDB\u884C\u8DF3\u8F6C\r\n return\r\n }\r\n // \u8FDB\u884C\u9875\u9762\u8DF3\u8F6C\r\n router.push(pageId);\r\n}`,\r\n pageHelperInfo: `\r\n /**\r\n * \u5206\u9875\u52A9\u624B\u4FE1\u606F\r\n * @param params\r\n * @param extra\r\n */\r\n function pageHelperInfo(params, extra) {\r\n const {\r\n pageField = 'pageNum',\r\n pageValue = 1,\r\n rowsField = 'pageSize',\r\n rowsValue = 10,\r\n dataSourceId,\r\n } = { ...(params || {}), ...(extra || {}) }\r\n return new Promise((resolve) => {\r\n ${useApiMethod}({ [pageField]: params?.page || pageValue, [rowsField]: params?.rows || rowsValue })\r\n .then((data) => {\r\n this[dataSourceId + 'IsLastPage'] = data?.data?.isLastPage;\r\n this[dataSourceId + 'NowPage'] = data?.data?.pageNum;\r\n resolve({\r\n page: data.data[pageField],\r\n rows: data.data[rowsField],\r\n total: data.data.total,\r\n isLastPage: data.data.isLastPage,\r\n });\r\n })\r\n })\r\n}`\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, ExtraInterpretDataSource,\r\n FileType,\r\n ICodeChunk,\r\n ICodeStruct,\r\n IContainerInfo,\r\n} from '../../../types';\r\nimport {isValidContainerType} from \"../../../utils/schema\";\r\nimport {InterpretDataSourceConfig} from \"@alilc/lowcode-types\";\r\nimport {\r\n getApiHandleFunctionName,\r\n getApiParamName, getApiRequestMethodName,\r\n isJsExpression,\r\n requestAfterDataHandler,\r\n} from \"../../../utils/requestHandle\";\r\nimport convertFunction from './convert/convert-function'\r\nimport convertVariable from './convert/convert-variable'\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 // \u7279\u6B8A\u5904\u7406\u7684\u51FD\u6570\r\n const convertMethod = convertFunction[methodName as keyof typeof convertFunction]\r\n if (convertMethod) {\r\n return {\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.Method,\r\n content: `${convertMethod}`,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.Method]],\r\n }\r\n }\r\n // \u6B63\u5E38\u5904\u7406\u7684\u51FD\u6570\uFF0CgenerateFunction\u5904\u7406\r\n return {\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, isToVue: true })}`,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.Method]],\r\n }});\r\n // \u6570\u636E\u6E90\u76F8\u5173\u65B9\u6CD5\r\n const dataSourceConfig: ExtraInterpretDataSource = isValidContainerType(pre.ir) ? pre.ir.dataSource : null;\r\n const dataSourceItems: InterpretDataSourceConfig[] =\r\n (dataSourceConfig && dataSourceConfig.list) || [];\r\n dataSourceItems.forEach((item) => {\r\n if (item.dataHandler && item.dataHandler.type == 'JSFunction') {\r\n // \u5904\u7406\u8BF7\u6C42\u5904\u7406\u540E\u7F6E\u51FD\u6570\r\n const functionName = getApiHandleFunctionName(item.id)\r\n const handleFunction = generateFunction(item.dataHandler, { name: functionName, isMember: true, isToVue: true })\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.Method,\r\n content: `function ${handleFunction}`,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.Method]],\r\n })\r\n }\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 {ItemList} from \"../../../../types/datasource-extra-base\";\r\nimport {lineToUppercase} from \"../../../../utils/changeCase\";\r\nimport {GLOBE_API_PARAM} from \"../../../../utils/requestHandle\";\r\n\r\nexport default {\r\n /**\r\n * \u5904\u7406\u8BF7\u6C42\u53C2\u6570\u91CC\u7684itemList\r\n * @param value\r\n */\r\n itemList: (value: string) => {\r\n if (!value) return []\r\n // \u66FF\u6362\u91CC\u9762\u7684\u5355\u5F15\u53F7\u4E3A\u53CC\u5F15\u53F7\r\n // value = value.replace(/'/g, '\"')\r\n const valueJSON: ItemList[] = parseCustomObjectArray(value)\r\n const strArray: { key: string; value: string }[] = []\r\n const ascArray: string[] = []\r\n const descArray: string[] = []\r\n valueJSON.forEach(item => {\r\n if (item.columnValue) {\r\n const valueName = `${GLOBE_API_PARAM}.${item.columnValue.split('.')[0]}`\r\n strArray.push({ key: lineToUppercase(item.columnName), value: valueName })\r\n } else if (item.orderBy) {\r\n if (item.orderBy == 'desc') {\r\n descArray.push(lineToUppercase(item.columnName))\r\n }else if (item.orderBy == 'asc') {\r\n ascArray.push(lineToUppercase(item.columnName))\r\n }\r\n }\r\n })\r\n // \u964D\u5E8F\u6392\u5E8F\u5B57\u6BB5\r\n descArray.length && strArray.push({\r\n key: 'orderByDesc',\r\n value: `'${descArray[0]}'`\r\n })\r\n // \u5347\u5E8F\u6392\u5E8F\u5B57\u6BB5\r\n ascArray.length && strArray.push({\r\n key: 'orderByAsc',\r\n value: `'${ascArray[0]}'`\r\n })\r\n return strArray\r\n }\r\n}\r\nfunction parseCustomObjectArray(str: string) {\r\n if (str == '[]') {\r\n return []\r\n }\r\n const result: Record<string, any>[] = [];\r\n\r\n // \u5339\u914D\u6BCF\u4E2A\u5BF9\u8C61\r\n const objectRegex = /{([^}]+)}/g;\r\n let match;\r\n while ((match = objectRegex.exec(str)) !== null) {\r\n const objString = match[1].trim(); // \u83B7\u53D6\u5BF9\u8C61\u5185\u5BB9\r\n const obj: Record<string, any> = {};\r\n\r\n // \u5339\u914D\u952E\u503C\u5BF9\r\n const keyValueRegex = /(\\w+)\\s*:\\s*([^,]+)(,|$)/g;\r\n let keyValueMatch;\r\n while ((keyValueMatch = keyValueRegex.exec(objString)) !== null) {\r\n const key = keyValueMatch[1].trim();\r\n let value = keyValueMatch[2].trim();\r\n\r\n // \u5982\u679C\u662F\u5B57\u7B26\u4E32\u503C\uFF0C\u53BB\u6389\u9996\u5C3E\u7684\u5355\u5F15\u53F7\r\n if (value.startsWith(\"'\") && value.endsWith(\"'\")) {\r\n value = value.slice(1, -1);\r\n }\r\n\r\n // \u5982\u679C\u662F\u7C7B\u4F3C productType.value \u7684\u53D8\u91CF\uFF0C\u5F53\u4F5C\u5B57\u7B26\u4E32\u5904\u7406\r\n if (/^\\w+\\.\\w+$/.test(value)) {\r\n value = value; // \u4FDD\u6301\u539F\u6837\r\n }\r\n\r\n obj[key] = value; // \u6DFB\u52A0\u5230\u5BF9\u8C61\u4E2D\r\n }\r\n\r\n result.push(obj);\r\n }\r\n\r\n return result;\r\n}", "import { TEMPLATE_DEFINE_CHUNK_NAME, VUE_DEFAULT_LINK_AFTER } from '../../../const';\r\n\r\nimport {\r\n BuilderComponentPlugin,\r\n BuilderComponentPluginFactory,\r\n ChunkType, ExtraInterpretDataSource,\r\n FileType,\r\n ICodeStruct,\r\n} from '../../../types';\r\nimport { isValidContainerType } from '../../../utils/schema';\r\nimport { InterpretDataSourceConfig } from '@alilc/lowcode-types';\r\nimport {\r\n getApiParamName, getApiRequestMethodName,\r\n handleParamToRef, isJsExpression,\r\n requestAfterDataHandler, SUFFIX_DATA_SOURCE_MAP\r\n} from \"../../../utils/requestHandle\";\r\nimport {generateFunction} from \"../../../utils/jsExpression\";\r\nimport convertVariable from \"./convert/convert-variable\";\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 // \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 // \u5C06\u6240\u6709api\u8BF7\u6C42\u65B9\u6CD5\u5305\u88F9\u5728dataSourceMap\u53D8\u91CF\u5185\r\n// \u5C06\u6570\u636E\u8BF7\u6C42\u5355\u72EC\u5C01\u88C5\u4E3A\u65B9\u6CD5\uFF0C\u65B9\u4FBF\u5206\u9875\u65F6\u91CD\u65B0\u51FA\u53D1\u65B9\u6CD5\r\n // \u8C03\u7528api\u7684\u5E76\u5C06\u7ED3\u679C\u8D4B\u503C\u7ED9ref\u53D8\u91CF\r\n dataSourceItems.forEach((item) => {\r\n let paramsStr = '';\r\n let paramsObject = `const ${item.id}Params = {};`;\r\n const paramName = getApiParamName(item.id);\r\n const strArray: { key: string; value: string }[] = [];\r\n // \u8BF7\u6C42\u7ED3\u679C\u5904\u7406\r\n const dataResults = requestAfterDataHandler(item, dataSourceConfig.extra)\r\n // \u5F53\u8BF7\u6C42\u53C2\u6570\u4E3Ajs\u8868\u8FBE\u5F0F\u65F6\u5904\u7406\r\n //\u5F53\u53C2\u6570\u4E0D\u4E3A\u7A7A\u7684\u65F6\u5019\r\n if (item.options && item.options.params) {\r\n const params = item.options.params;\r\n const keys = Object.keys(params);\r\n for (let i = 0; i < keys.length; i++) {\r\n const key = keys[i]\r\n if (isJsExpression(params[key])) {\r\n // \u5982\u679C\u662F\u8868\u8FBE\u5F0F\uFF0C\u5219\u8F6C\u4E3A\u5B57\u7B26\u4E32\r\n let handleValue = generateFunction(params[key], {\r\n isToVue: true,\r\n isDeleteLastSemicolon: true,\r\n })\r\n // \u5BF9itemList\u8FDB\u884C\u5355\u72EC\u5904\u7406,\u5C06itemList\u91CC\u9762\u7684\u53C2\u6570\u6539\u4E3A\r\n if (convertVariable[key as keyof typeof convertVariable]) {\r\n strArray.push(...convertVariable[key as keyof typeof convertVariable](handleValue))\r\n } else {\r\n strArray.push({\r\n key: key,\r\n value: handleValue,\r\n });\r\n }\r\n }\r\n }\r\n paramsStr = `${strArray.filter(item => item).map((item) => `${item.key}: ${item.value}`).join(',')}`;\r\n paramsObject = `const ${paramName} = { ${paramsStr ? paramsStr + ',' : ''}...params}`;\r\n } else if (item.options && !item.options.params) {\r\n //\u5F53\u53C2\u6570\u4E3A\u7A7A\u65F6\uFF0C\u8D4B\u503C\u4E00\u4E2A\u7A7A\u5BF9\u8C61\r\n paramsObject = `const ${paramName} = {...params}`;\r\n }\r\n // \u8BF7\u6C42\u53C2\u6570\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapContent,\r\n content: `\r\n ${getApiRequestMethodName(item.id)}: async (params?: any) => {\r\n ${paramsObject}\r\n ${dataResults.join('\\n')}\r\n return handleData\r\n},\r\n `,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapContent]],\r\n });\r\n\r\n });\r\n // datasourceMap\u5F00\u59CB\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapStart,\r\n content: `const ${SUFFIX_DATA_SOURCE_MAP} = {`,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapStart]],\r\n });\r\n // datasourceMap\u7ED3\u675F\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: cfg.fileType,\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapEnd,\r\n content: `}`,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapEnd]],\r\n });\r\n return next;\r\n };\r\n return plugin;\r\n};\r\n\r\nexport default pluginFactory;\r\n", "/**\r\n * @description: \u751F\u6210\u4E8C\u7EA7\u8DEF\u7531\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 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;\r\n ir.globalRouter?.routes?.filter(item => item.firstPage == 'false').forEach(route => {\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.TS,\r\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\r\n subModule: route.fileName,\r\n content: `export default [`,\r\n linkAfter: [],\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 subModule: route.fileName,\r\n content: `{\r\n path: '${route.path}',\r\n name: '${route.title}',\r\n component: () => import(\"@/views/${route.componentName}/${\r\n route.isFormRouter ? 'Manage.vue' : 'Index.vue'\r\n }\"),\r\n }`,\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\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 subModule: route.fileName,\r\n content: `]`,\r\n linkAfter: [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 { 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 '.env',\r\n '',\r\n `\r\n# .env\r\nVITE_APP_API_LOGIN=/login\r\nVITE_APP_API_LOGIN_OUT=/loginOut\r\nVITE_APP_API_BASE_URL=/api\r\n\r\nVITE_APP_API_FILE_REVIEW=http://tz.future.dct99.com:8090/\r\n#VITE_APP_COPYRIGHT=Copyright@2022 \u7248\u6743\u6240\u6709\uFF1Axxxx\r\n\r\n# oss\r\n#VITE_APP_OSS_URL=https://tz-community.oss-cn-hangzhou.aliyuncs.com\r\n#VITE_APP_API_OSS=/oss/logFile/upload\r\n#VITE_APP_OSS_SUFFIX=!tz_sy\r\n\r\n# message\r\n#VITE_APP_API_MESSAGE=/WxXcx/sendLoginCode\r\n#VITE_APP_API_CODE_LOGIN=/WxXcx/loginOrSignByMobile\r\n#VITE_APP_API_CODE_LOGIN_PARAMS_MOBILE=mobile\r\n#VITE_APP_API_CODE_LOGIN_PARAMS_CODE=smsCode\r\n\r\n# mask\r\nVITE_APP_DEFAULT_MASK='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\nnode_modules\r\n.vscode\r\n.idea\r\ndist\r\n/public\r\n.eslintrc.js\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 'yml',\r\n `\r\nenv:\r\n browser: true\r\n es2021: true\r\n node: true\r\n 'vue/setup-compiler-macros': true\r\nextends:\r\n - eslint:recommended\r\n - plugin:vue/essential\r\n - prettier\r\n - plugin:prettier/recommended\r\n - plugin:@typescript-eslint/recommended\r\nparserOptions:\r\n ecmaVersion: 2020\r\n parser: '@typescript-eslint/parser'\r\n sourceType: module\r\nparser: 'vue-eslint-parser'\r\nplugins:\r\n - vue\r\n - '@typescript-eslint'\r\nrules:\r\n # \u7F29\u8FDB tab\r\n indent:\r\n - error\r\n - tab\r\n - SwitchCase: 1\r\n # \u5B57\u7B26\u5355\u5F15\u53F7\r\n quotes:\r\n - error\r\n - single\r\n # \u5C3E\u90E8\u5206\u53F7\r\n semi:\r\n - error\r\n - never\r\n # \u652F\u6301\u5355\u4E2Atemplate\u4E2D\u591A\u4E2A\u4E00\u7EA7\u6807\u7B7E\r\n vue/no-multiple-template-root: off\r\n # \u5904\u7406v-model\u540E\u65B9\u53C2\u6570\u95EE\u9898\r\n vue/no-v-model-argument: off\r\n # \u7EC4\u4EF6\u540D\u79F0\u68C0\u67E5\r\n vue/multi-word-component-names: 0\r\n `,\r\n );\r\n\r\n return [[], file];\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: '.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\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',\r\n ext: 'json',\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: `\r\nimport { defineConfig } from 'vite'\r\nimport vue from '@vitejs/plugin-vue'\r\nimport viteCompression from 'vite-plugin-compression'\r\nimport * as path from 'path'\r\n\r\n// https://vitejs.dev/config/\r\nexport default defineConfig({\r\n base: '/expressH5/',\r\n plugins: [vue(), viteCompression()],\r\n resolve: {\r\n alias: {\r\n '@': path.resolve(__dirname, './src'),\r\n '~@': path.resolve(__dirname, './src')\r\n }\r\n },\r\n server: {\r\n // host: '127.0.0.1',\r\n host: '0.0.0.0',\r\n port: 3212,\r\n cors: true,\r\n proxy: {\r\n '/source/api': {\r\n target: 'http://localhost:9933/',\r\n changeOrigin: true,\r\n ws: true,\r\n rewrite: path => path.replace(/\\\\/api/g, '/api')\r\n }\r\n }\r\n },\r\n css: {\r\n preprocessorOptions: {\r\n less: {\r\n javascriptEnabled: true\r\n }\r\n }\r\n },\r\n // \u914D\u7F6E\u6253\u5305\u5757\u5927\u5C0F\r\n build: {\r\n chunkSizeWarningLimit: 1500\r\n },\r\n optimizeDeps: {\r\n exclude: ['@dc/vue-h5-base'],\r\n include: ['axios']\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 'global',\r\n 'scss',\r\n `\r\n* {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n}\r\n.page {\r\n // \u4E0D\u663E\u793A\u6EDA\u52A8\u6761\r\n scrollbar-width: none; /* Firefox */\r\n background: #fff;\r\n\r\n &::-webkit-scrollbar {\r\n display: none; /* Chrome Safari */\r\n }\r\n\r\n height: 100vh;\r\n width: 100vw;\r\n display: flex;\r\n flex-direction: column;\r\n overflow: hidden scroll;\r\n box-sizing: border-box;\r\n\r\n // \u5B50\u5143\u7D20\u9AD8\u5EA6\u95EE\u9898\u5904\u7406\r\n & > * {\r\n flex: 0 0 auto;\r\n }\r\n\r\n & > & {\r\n flex: 1 1 auto;\r\n }\r\n}\r\n\r\n.van-uploader {\r\n flex: 1 1 auto;\r\n}\r\n\r\n.van-search {\r\n background: #ffffff;\r\n padding: 10px 16px;\r\n border-top: 1px solid #f3f3f3;\r\n\r\n @at-root &__content--round {\r\n background: #f3f3f3;\r\n padding: 4px 16px;\r\n }\r\n}\r\n\r\n// \u7BA1\u7406\u9875\u9762\r\n.manage-page {\r\n overflow: hidden;\r\n display: flex;\r\n flex-direction: column;\r\n flex: 1 1 auto;\r\n padding-bottom: 16px;\r\n\r\n --van-tab-text-color: var(--van-text-color-3);\r\n --van-tab-active-text-color: var(--van-primary-color);\r\n --van-tabs-bottom-bar-color: var(--van-primary-color);\r\n\r\n .van-pull-refresh {\r\n flex: 1 1 auto;\r\n overflow-y: scroll;\r\n padding: 16px;\r\n }\r\n}\r\n\r\n// \u8BE6\u60C5\u9875\u9762\r\n.detail-page {\r\n flex: 1 1 auto;\r\n overflow-y: auto;\r\n font-size: 14px;\r\n font-weight: 400;\r\n color: #9b9ba3;\r\n padding-bottom: 16px;\r\n position: relative;\r\n display: flex;\r\n flex-direction: column;\r\n\r\n .detail {\r\n display: grid;\r\n grid-template-columns: max-content 1fr;\r\n box-shadow: 0 0 0.5rem 0 rgba(35, 24, 21, 0.1);\r\n grid-row-gap: 16px;\r\n column-gap: 16px;\r\n background: white;\r\n margin: 16px 16px 0 16px;\r\n padding: 16px;\r\n border-radius: 10px;\r\n\r\n @at-root &__label {\r\n color: #51515c;\r\n display: flex;\r\n align-items: center;\r\n grid-column: 1;\r\n\r\n &:before {\r\n content: '';\r\n width: 6px;\r\n height: 6px;\r\n border-radius: 3px;\r\n background: #aeaeb4;\r\n margin-right: 6px;\r\n display: inline-block;\r\n }\r\n }\r\n\r\n @at-root &__value {\r\n grid-column: 2;\r\n color: #9b9ba3;\r\n flex: 1 1 auto;\r\n text-align: right;\r\n }\r\n\r\n @at-root &__images {\r\n grid-column: 1/-1;\r\n display: grid;\r\n grid-template-columns: repeat(3, 1fr);\r\n\r\n .van-image {\r\n width: 100%;\r\n min-height: 60px;\r\n aspect-ratio: 1;\r\n }\r\n }\r\n\r\n .van-divider {\r\n grid-column: span 2;\r\n margin: 0;\r\n }\r\n }\r\n}\r\n\r\n// \u5F39\u7A97\u9875\u9762\r\n.overlay-page {\r\n width: 100vw;\r\n height: 100vh;\r\n\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: center;\r\n\r\n background: transparent;\r\n padding: 16px;\r\n\r\n\r\n .van-form {\r\n flex: 0 0 auto;\r\n overflow-y: auto;\r\n display: flex;\r\n flex-direction: column;\r\n background: white;\r\n border-radius: 10px;\r\n\r\n .van-button {\r\n margin: 15px 16px;\r\n }\r\n }\r\n\r\n .van-cell.tip {\r\n color: #d46b08;\r\n }\r\n}\r\n\r\n.card__actions {\r\n grid-column: 1 / -1;\r\n display: flex;\r\n justify-content: flex-end;\r\n align-items: center;\r\n gap: 10px;\r\n\r\n @at-root &__button {\r\n font-size: 12px;\r\n font-weight: 500;\r\n border-radius: 18px;\r\n padding: 0 8px;\r\n height: 24px;\r\n\r\n }\r\n}\r\n\r\n/*\u5360\u4F4D*/\r\n.spacer {\r\n flex: 1 1 auto;\r\n}\r\n\r\n.spacer-2 {\r\n flex: 2 1 auto;\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';\r\nimport { createResultFile } from '../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'mixin',\r\n 'scss',\r\n `\r\n//sass\u5E38\u7528\u6DF7\u5408\u5668(\u5E94\u8BE5\u5408\u7406\u4F7F\u7528)\r\n// \u5F39\u6027\u5E03\u5C40\u6DF7\u5408\u5668\r\n@mixin flexMixer($justify: center, $align: center, $flex: row) {\r\n\\t// \u7533\u660E\u4E3A\u5F39\u6027\u76D2\u5B50\r\n\\tdisplay: flex;\r\n\\t// \u6392\u5217\u65B9\u5F0F\r\n\\tflex-direction: $flex;\r\n\\t// \u4E3B\uFF08\u526F\uFF09\u8F74\u7684\u5BF9\u9F50\u65B9\u5F0F\r\n\\tjustify-content: $justify;\r\n\\t// \u4E3B\uFF08\u526F\uFF09\u8F74\u7684\u5BF9\u9F50\u65B9\u5F0F\r\n\\talign-items: $align;\r\n}\r\n// \u5B9A\u4F4D\u6DF7\u5408\u5668\r\n@mixin positionMixer($position: static, $left: auto, $top: auto, $right: auto, $bottom: auto) {\r\n\\tposition: $position;\r\n\\tleft: $left;\r\n\\ttop: $top;\r\n\\tright: $right;\r\n\\tbottom: $bottom;\r\n}\r\n// \u6D6E\u52A8\u6DF7\u5408\u5668\r\n@mixin floatMixer($float: left) {\r\n\\tfloat: $float;\r\n}\r\n// \u8BBE\u7F6E\u80CC\u666F\u6DF7\u5408\u5668\r\n@mixin bgMixer($url, $position: center center, $size: 100% 100%, $repeat: no-repeat) {\r\n\\tbackground: $url $repeat $position;\r\n\\tbackground-size: $size;\r\n}\r\n// \u5BBD\u9AD8\u6DF7\u5408\u5668\r\n@mixin widthMixer($width: 100px, $height: 100px) {\r\n\\twidth: $width;\r\n\\theight: $height;\r\n}\r\n// \u6587\u5B57\u6DF7\u5408\u5668\r\n@mixin fontMixer($fontSize: 16px, $color: #515a6e, $weight: 500, $font-familyt: Source Han Sans SC) {\r\n\\tfont-family: $font-familyt;\r\n\\tfont-size: $fontSize;\r\n\\tfont-weight: $weight;\r\n\\tcolor: $color;\r\n}\r\n\r\n// \u591A\u884C\u5B57\u4F53\u7701\u7565\u6DF7\u5408\u5668\r\n@mixin pointMixer($line: 2) {\r\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\r\n\\tword-break: break-all;\r\n\\t-webkit-line-clamp: $line;\r\n\\tline-clamp: $line;\r\n\\toverflow: hidden;\r\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\r\n\\twhite-space: normal;\r\n\\t/* autoprefixer: off */\r\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\r\n\\t/* autoprefixer: on */\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';\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';\r\nimport { createResultFile } from '../../../../../../../utils/resultHelper';\r\n\r\nexport default function getFile(): [string[], ResultFile] {\r\n const file = createResultFile(\r\n 'App',\r\n 'vue',\r\n `\r\n<template>\r\n\\t<router-view v-slot=\"{ Component }\">\r\n\\t\\t<!--\\t\\t<keep-alive>-->\r\n\\t\\t<component :is=\"Component\" />\r\n\\t\\t<!--\\t\\t</keep-alive>-->\r\n\\t</router-view>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { onMounted } from 'vue'\r\nimport { useRequestStore } from '@dc/vue-h5-base/src/store/request'\r\n\r\nlet store = useRequestStore()\r\n\r\nonMounted(() => {\r\n\\tstore.$reset()\r\n})\r\n</script>\r\n\r\n<style>\r\n.amap-logo {\r\n\\tdisplay: none;\r\n\\topacity: 0 !important;\r\n}\r\n\r\n.amap-copyright {\r\n\\topacity: 0;\r\n}\r\n</style>\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 '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\nimport '@dckj-npm/lowcode-vue-materials/style.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', 'baseIndexA'], 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\n// import home from '@/assets/images/index/home.png'\r\n// import homeActive from '@/assets/images/index/home-active.png'\r\n// import housekeeper from '@/assets/images/index/housekeeper.png'\r\n// import housekeeperActive from '@/assets/images/index/housekeeper-active.png'\r\n// import mine from '@/assets/images/index/mine.png'\r\n// import mineActive from '@/assets/images/index/mine-active.png'\r\n//\r\n// export 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\n// export 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', 'baseIndexA'], 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 'utils',\r\n 'ts',\r\n `\r\nexport default {\r\n /**\r\n * \u8DF3\u8F6C\u5230\u6307\u5B9A\u7684pathId\uFF0C\u4EC5\u9650\u9884\u89C8\u9875\u9762\r\n * @param pageId\r\n * @param isNew\r\n */\r\n gotoByPageId: (pageId: string, isNew: boolean) => {\r\n // \u83B7\u53D6\u5DF2\u6709\u7684path\u53C2\u6570\u4FE1\u606F\r\n const oldPageId = getValueFromQueryByName('pageId')\r\n if (!oldPageId) {\r\n console.error('pageId is not exist')\r\n return\r\n }\r\n // \u6DFB\u52A0\u5730\u5740\u680F\u4E2D\u7684pathId\u53C2\u6570\u4FE1\u606F\r\n const resultPath = window.location.href.replace(\\`pageId=\\${oldPageId}\\`, \\`pageId=\\${pageId}\\`)\r\n if (isNew) {\r\n window.open(resultPath)\r\n } else {\r\n window.location.href = resultPath\r\n }\r\n },\r\n /**\r\n * \u83B7\u53D6\u5730\u5740\u680F\u53C2\u6570\u503C\r\n * @param queryName \u53C2\u6570\u540D\r\n * @param defaultValue \u9ED8\u8BA4\u503C\r\n */\r\n getValueFromQueryByName: (queryName: string, defaultValue: string = '') => {\r\n return getValueFromQueryByName(queryName, defaultValue)\r\n },\r\n /**\r\n * \u83B7\u53D6cookie\u4E2D\u7684\u503C\r\n * @param cookieName\r\n * @param defaultValue\r\n */\r\n getValueFromCookieByName: (cookieName: string, defaultValue: string = '') => {\r\n const reg = new RegExp('(^| )' + cookieName + '=([^;]*)(;|$)')\r\n const arr = document.cookie.match(reg)\r\n if (arr) {\r\n return unescape(arr[2])\r\n } else {\r\n return defaultValue\r\n }\r\n },\r\n /**\r\n * \u83B7\u53D6localStorage\u4E2D\u7684\u503C\r\n * @param key\r\n * @param defaultValue\r\n */\r\n getValueFromLocalStorage: (key: string, defaultValue: string = '') => {\r\n return localStorage.getItem(key) || defaultValue\r\n },\r\n /**\r\n * \u83B7\u53D6sessionStorage\u4E2D\u7684\u503C\r\n * @param key\r\n * @param defaultValue\r\n */\r\n getValueFromSessionStorage: (key: string, defaultValue: string = '') => {\r\n return sessionStorage.getItem(key) || defaultValue\r\n }\r\n}\r\n `,\r\n );\r\n\r\n return [['src', 'utils'], 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/baseIndexA/welcome.vue';\r\nimport file22 from './files/src/views/baseIndexA/tabs';\r\nimport file23 from './files/src/utils/utils';\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 runFileGenerator(root, file23);\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 // \u8DEF\u7531\u4E8C\u7EA7\u9875\u9762\r\n routerModules: {\r\n path: ['src', 'router', 'modules']\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', 'utils'],\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 // \u4E3B\u5165\u53E3\u9996\u9875\r\n main: {\r\n path: ['src', 'views', 'baseIndexA'],\r\n fileName: 'Index',\r\n },\r\n //\u8868\u5355\u9875\u9762\r\n form: {\r\n path: ['src', 'views'],\r\n },\r\n // hooks\r\n hooks: {\r\n path: ['src', 'hooks'],\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// todo \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 axios: '^1.7.7',\r\n dayjs: '^1.11.9',\r\n 'js-base64': '^3.7.5',\r\n pinia: '^2.0.20',\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',\r\n 'vue-router': '^4.1.3',\r\n '@dckj-npm/lowcode-vue-materials': '^1.2.100',\r\n 'ant-design-vue': '^4.2.5',\r\n jsencrypt: '^3.3.2',\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 { RouterInfoItem } from \"../types\";\r\n\r\n/**\r\n * \u83B7\u53D6\u4E00\u7EA7\u8DEF\u7531\u4FE1\u606F\r\n * @param routes\r\n */\r\nexport function getRouters(routes: RouterInfoItem[]) {\r\n return routes.filter(item => item.firstPage != 'false').map(route => {\r\n return `\r\n {\r\n path: '${route.path}',\r\n name: '${route.title}',\r\n component: () => import(\"@/views/${route.componentName}/${\r\n route.isFormRouter ? 'Manage.vue' : 'Index.vue'\r\n }\"),\r\n }`\r\n })\r\n}\r\n\r\n/**\r\n * \u83B7\u53D6\u4E8C\u7EA7\u8DEF\u7531\u4FE1\u606F\r\n * @param routes\r\n */\r\nexport function getSecondRouters(routes: RouterInfoItem[]) {\r\n return routes.filter(item => item.firstPage == 'false').map(route => {\r\n return `{\r\n path: '${route.path}',\r\n name: '${route.componentName}',\r\n component: () => import(\"@/views/${route.componentName}/${\r\n route.isFormRouter ? 'Manage.vue' : 'Index.vue'\r\n }\"),\r\n }`\r\n })\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\nimport {getRouters} from \"../../../../../utils/routerHandle\";\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(\"@/views/baseIndexA/Index.vue\"),\r\n children: [\r\n ${getRouters(ir.routes).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: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport],\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 { IPublicTypeJSExpression, 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 HandlerSet,\r\n ICodeStruct,\r\n IContainerInfo,\r\n IProjectInfo,\r\n IScope,\r\n NodeGeneratorConfig,\r\n Tab,\r\n} from '../../../../../types';\r\nimport { transformJsExpr } from '../../../../../core/vue/handlers/transformJsExpression';\r\nimport { generateExpression } from '../../../../../utils/jsExpression';\r\nimport { transformThis2Context } from '../../../../../core/vue/handlers/transformThis2Context';\r\nimport { generateCompositeType } from '../../../../../utils/compositeType';\r\nimport { Scope } from '../../../../../utils/Scope';\r\nimport { createVueNodeGenerator, generateByName } from '../../../../../utils/nodeToTemplate';\r\nimport { PluginConfig } from '../../../../component/vue/template';\r\n\r\ninterface IIceJsPackageJSON extends PackageJSON {\r\n type: string;\r\n}\r\n\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 const { nodeTypeMapping } = cfg;\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 ir = next.ir.containers[0] as IContainerInfo;\r\n const scope: IScope = Scope.createRootScope();\r\n // \u751F\u6210\u5E95\u90E8\u5BFC\u822A\u680F\r\n const { code, node } = generateByName(generatorPlugins, 'Navigation', ir, scope, {\r\n 'v-model': 'active',\r\n });\r\n next.chunks.push({\r\n zIndex: code ? 1 : 0,\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n name: COMMON_CHUNK_NAME.FileMainContent,\r\n content: `\r\n<template>\r\n\t<div class=\"page\">\r\n\t\t<!--\u9996\u9875-->\r\n\t\t<router-view v-slot=\"{ Component, route }\">\r\n\t\t\t<keep-alive>\r\n\t\t\t\t<component :is=\"Component\" :key=\"route.fullPath\" />\r\n\t\t\t</keep-alive>\r\n\t\t</router-view>\r\n\r\n\t\t<!--\u5E95\u90E8\u5BFC\u822A\u680F-->\r\n ${code}\r\n\t</div>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { onMounted, ref, watchEffect } from \"vue\"\r\nimport { useRoute, useRouter } from 'vue-router'\r\nimport { Navigation } from '@dckj-npm/lowcode-vue-materials';\r\n\r\nlet router = useRouter()\r\n\r\n/**\r\n * \u5F53\u524D\u6FC0\u6D3B\u7684tab\r\n */\r\nconst active = ref(0)\r\nconst tabInfo = [\r\n ${(node.props?.itemArray as unknown as Tab[])\r\n ?.map(\r\n (item) =>\r\n `{text: '${item.text ?? ''}', icon: '${item.icon ?? ''}', pageId: '${\r\n item.pageId ?? ''\r\n }', selectedIcon: '${item.selectedIcon ?? ''}'}`,\r\n )\r\n .join(',\\n')}]\r\n\r\n/**\r\n* \u8DF3\u8F6C\u9875\u9762\r\n* @param params\r\n* @param extParams\r\n*/\r\nfunction goPage(params, ...extParams) {\r\n const { pathId } = extParams.find(obj => obj.hasOwnProperty('pathId')) || {};\r\n const pageId = params ? params : pathId;\r\n router.replace(pageId);\r\n}\r\n\r\n/**\r\n * \u4ECE\u754C\u9762\u8FDB\u5165\uFF0C\u9009\u4E2Dtab\r\n */\r\nlet route = useRoute()\r\nwatchEffect(() => {\r\n\tlet number = tabInfo.findIndex((tab) => tab.pageId == route?.path)\r\n\tif (number != -1) {\r\n\t\tactive.value = number\r\n\t}\r\n})\r\n</script>\r\n\r\n<style lang=\"scss\" scoped>\r\n</style>`,\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", "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", "export interface DynamicColumnDataType {\r\n /**\r\n * \u7F16\u7801\r\n */\r\n code: number;\r\n /**\r\n * \u540D\u79F0\r\n */\r\n name: string;\r\n /**\r\n * \u6570\u636E\u5E93\u7C7B\u578B\r\n */\r\n dbTypeName: string;\r\n}\r\n\r\n/**\r\n * \u679A\u4E3E\u7C7B\u578B\u7684\u901A\u7528\u7ED3\u6784\r\n */\r\nexport interface BaseEnumType {\r\n /**\r\n * \u679A\u4E3E\u7684\u4EE3\u7801\u503C\r\n */\r\n code: number;\r\n /**\r\n * \u679A\u4E3E\u7684\u540D\u79F0\u63CF\u8FF0\r\n */\r\n name: string;\r\n /**\r\n * \u679A\u4E3E\u7684\u6392\u5E8F\u503C\uFF08\u53EF\u9009\uFF09\r\n */\r\n ordinal?: number;\r\n}\r\n\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_TEXT: DynamicColumnDataType = {\r\n code: 1,\r\n name: '\u5355\u884C\u6587\u672C',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_TEXTAREA: DynamicColumnDataType = {\r\n code: 2,\r\n name: '\u591A\u884C\u6587\u672C',\r\n dbTypeName: 'text',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_INT: DynamicColumnDataType = {\r\n code: 3,\r\n name: '\u6574\u6570',\r\n dbTypeName: 'int',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_MONEY: DynamicColumnDataType = {\r\n code: 15,\r\n name: '\u91D1\u989D',\r\n dbTypeName: 'numeric',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_NUMBER: DynamicColumnDataType = {\r\n code: 35,\r\n name: '\u6570\u503C',\r\n dbTypeName: 'numeric',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_ID_CARD: DynamicColumnDataType = {\r\n code: 11,\r\n name: '\u8EAB\u4EFD\u8BC1',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_MOBILE: DynamicColumnDataType = {\r\n code: 12,\r\n name: '\u624B\u673A',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_EMAIL: DynamicColumnDataType = {\r\n code: 36,\r\n name: '\u90AE\u7BB1',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_DATE: DynamicColumnDataType = {\r\n code: 6,\r\n name: '\u65E5\u671F',\r\n dbTypeName: 'date',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_DATETIME: DynamicColumnDataType = {\r\n code: 7,\r\n name: '\u65E5\u671F\u65F6\u95F4',\r\n dbTypeName: 'datetime',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_LABEL: DynamicColumnDataType = {\r\n code: 10,\r\n name: '\u6587\u672C\u8BF4\u660E',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_SWITCH: DynamicColumnDataType = {\r\n code: 29,\r\n name: '\u5F00\u5173',\r\n dbTypeName: 'tinyint',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_RADIO: DynamicColumnDataType = {\r\n code: 4,\r\n name: '\u5355\u9009\u6846',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_CHECKBOX: DynamicColumnDataType = {\r\n code: 5,\r\n name: '\u590D\u9009\u6846',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_USER: DynamicColumnDataType = {\r\n code: 18,\r\n name: '\u8054\u7CFB\u4EBA',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_DEPT: DynamicColumnDataType = {\r\n code: 17,\r\n name: '\u7EC4\u7EC7\u67B6\u6784\u90E8\u95E8',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_ORGAN: DynamicColumnDataType = {\r\n code: 25,\r\n name: '\u7EC4\u7EC7\u67B6\u6784\u5355\u4F4D',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_SELECT: DynamicColumnDataType = {\r\n code: 19,\r\n name: '\u4E0B\u62C9\u6846',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_CASCADE: DynamicColumnDataType = {\r\n code: 13,\r\n name: '\u7EA7\u8054/\u5206\u7C7B',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_PICTURE: DynamicColumnDataType = {\r\n code: 14,\r\n name: '\u56FE\u7247',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_VIDEO: DynamicColumnDataType = {\r\n code: 30,\r\n name: '\u89C6\u9891',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_AUDIO: DynamicColumnDataType = {\r\n code: 37,\r\n name: '\u97F3\u9891',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_DOC: DynamicColumnDataType = {\r\n code: 34,\r\n name: '\u6587\u6863',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_ATTACHMENTS: DynamicColumnDataType = {\r\n code: 16,\r\n name: '\u9644\u4EF6',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_AUTO: DynamicColumnDataType = {\r\n code: 26,\r\n name: '\u81EA\u52A8\u751F\u6210',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_EDITOR: DynamicColumnDataType = {\r\n code: 31,\r\n name: '\u5BCC\u6587\u672C',\r\n dbTypeName: 'longtext',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_POSITIONING: DynamicColumnDataType = {\r\n code: 39,\r\n name: '\u5B9A\u4F4D',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_SIGNATURE: DynamicColumnDataType = {\r\n code: 40,\r\n name: '\u7B7E\u540D',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_GRADE: DynamicColumnDataType = {\r\n code: 41,\r\n name: '\u7B49\u7EA7',\r\n dbTypeName: 'numeric',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_BUTTON: DynamicColumnDataType = {\r\n code: 46,\r\n name: '\u6309\u94AE',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_CHILDREN_TABLE: DynamicColumnDataType = {\r\n code: 47,\r\n name: '\u5B50\u8868\u5355',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_QUOTE: DynamicColumnDataType = {\r\n code: 48,\r\n name: '\u5F15\u7528\u5B57\u6BB5',\r\n dbTypeName: 'varchar',\r\n};\r\nexport const DYNAMIC_COLUMN_DATA_TYPE_LINKAGE: DynamicColumnDataType = {\r\n code: 49,\r\n name: '\u8054\u52A8\u5B57\u6BB5',\r\n dbTypeName: 'varchar',\r\n};\r\n\r\n/**\r\n * \u5217\u7C7B\u578B\u63A5\u53E3\r\n */\r\nexport interface ColumnType {\r\n /**\r\n * \u5217\u7684\u552F\u4E00\u6807\u8BC6\u7B26\r\n */\r\n id: string;\r\n /**\r\n * \u5173\u8054\u7684\u8868 ID\r\n */\r\n fkTableId: string;\r\n /**\r\n * \u8868\u540D\r\n */\r\n tableName: string;\r\n /**\r\n * \u5217\u540D\r\n */\r\n columnName: string;\r\n /**\r\n * \u9009\u62E9\u64CD\u4F5C\u7C7B\u578B\r\n */\r\n selectActionType: number;\r\n /**\r\n * \u9009\u62E9\u64CD\u4F5C\u7C7B\u578B\u7684\u679A\u4E3E\r\n */\r\n selectActionTypeEnum: BaseEnumType;\r\n /**\r\n * \u5217\u952E\u7C7B\u578B\r\n */\r\n columnKeyType: number;\r\n /**\r\n * \u5217\u952E\u7C7B\u578B\u7684\u679A\u4E3E\r\n */\r\n columnKeyTypeEnum: BaseEnumType;\r\n /**\r\n * \u5217\u7684\u6570\u636E\u7C7B\u578B\r\n */\r\n columnType: string;\r\n /**\r\n * \u5217\u7684\u5927\u5C0F\r\n */\r\n columnSize: number;\r\n /**\r\n * \u5217\u7684\u5C0F\u6570\u4F4D\u6570\r\n */\r\n columnDecimal: number;\r\n /**\r\n * \u9ED8\u8BA4\u503C\r\n */\r\n defaultValue: string;\r\n /**\r\n * \u9ED8\u8BA4\u503C\u7C7B\u578B\r\n */\r\n defaultValueType: number;\r\n /**\r\n * \u9ED8\u8BA4\u503C\u7C7B\u578B\u7684\u679A\u4E3E\r\n */\r\n defaultValueTypeEnum: BaseEnumType;\r\n /**\r\n * \u662F\u5426\u5FC5\u586B\uFF080\uFF1A\u5426\uFF0C1\uFF1A\u662F\uFF09\r\n */\r\n isRequired: number;\r\n /**\r\n * \u662F\u5426\u5FC5\u586B\u7684\u679A\u4E3E\r\n */\r\n isRequiredEnum: BaseEnumType;\r\n /**\r\n * \u5217\u7684\u6CE8\u91CA\r\n */\r\n columnComment: string;\r\n /**\r\n * \u663E\u793A\u6DFB\u52A0\u7C7B\u578B\r\n */\r\n showAddType: number;\r\n /**\r\n * \u663E\u793A\u6DFB\u52A0\u7C7B\u578B\u7684\u679A\u4E3E\r\n */\r\n showAddTypeEnum: BaseEnumType;\r\n /**\r\n * \u663E\u793A\u66F4\u65B0\u7C7B\u578B\r\n */\r\n showUpdateType: number;\r\n /**\r\n * \u663E\u793A\u66F4\u65B0\u7C7B\u578B\u7684\u679A\u4E3E\r\n */\r\n showUpdateTypeEnum: BaseEnumType;\r\n /**\r\n * \u5217\u5728\u5217\u8868\u4E2D\u7684\u663E\u793A\u7C7B\u578B\r\n */\r\n showListType: number;\r\n /**\r\n * \u5217\u5728\u5217\u8868\u4E2D\u7684\u663E\u793A\u7C7B\u578B\u7684\u679A\u4E3E\r\n */\r\n showListTypeEnum: BaseEnumType;\r\n /**\r\n * \u5217\u5728\u89C6\u56FE\u4E2D\u7684\u663E\u793A\u7C7B\u578B\r\n */\r\n showViewType: number;\r\n /**\r\n * \u5217\u5728\u89C6\u56FE\u4E2D\u7684\u663E\u793A\u7C7B\u578B\u7684\u679A\u4E3E\r\n */\r\n showViewTypeEnum: BaseEnumType;\r\n /**\r\n * \u641C\u7D22\u7C7B\u578B\r\n */\r\n searchType: number;\r\n /**\r\n * \u641C\u7D22\u7C7B\u578B\u7684\u679A\u4E3E\r\n */\r\n searchTypeEnum: BaseEnumType;\r\n /**\r\n * \u66F4\u65B0\u7C7B\u578B\r\n */\r\n updateType: number;\r\n /**\r\n * \u66F4\u65B0\u7C7B\u578B\u7684\u679A\u4E3E\r\n */\r\n updateTypeEnum: BaseEnumType;\r\n /**\r\n * \u8BC4\u5206\u4EE3\u7801\r\n */\r\n scoreCode: number;\r\n /**\r\n * \u5B57\u6BB5\u5BBD\u5EA6\r\n */\r\n fieldWidth: number;\r\n /**\r\n * \u5B57\u6BB5\u524D\u7F00\r\n */\r\n fieldPrefix: string;\r\n /**\r\n * \u663E\u793A\u6761\u4EF6\r\n */\r\n showCondition: string;\r\n /**\r\n * \u552F\u4E00\u6027\u9A8C\u8BC1\r\n */\r\n validationUnique: number;\r\n /**\r\n * \u552F\u4E00\u6027\u9A8C\u8BC1\u7684\u679A\u4E3E\r\n */\r\n validationUniqueEnum: BaseEnumType;\r\n /**\r\n * \u663E\u793A\u6837\u5F0F\r\n */\r\n showStyle: string;\r\n /**\r\n * \u81EA\u5B9A\u4E49\u51FD\u6570\r\n */\r\n customFunction: string;\r\n /**\r\n * \u5217\u9009\u9879\u5217\u8868\r\n */\r\n columnOptionList: any[];\r\n /**\r\n * \u5C5E\u6027\u5217\u8868\r\n */\r\n propList: {\r\n /**\r\n * \u5C5E\u6027\u7684\u552F\u4E00\u6807\u8BC6\u7B26\r\n */\r\n id: string;\r\n /**\r\n * \u5C5E\u6027\u540D\u79F0\r\n */\r\n propName: string;\r\n /**\r\n * \u5C5E\u6027\u503C\r\n */\r\n propValue: string;\r\n }[];\r\n /**\r\n * \u5F15\u5BFC\u6587\u5B57\r\n */\r\n guideWords: string;\r\n /**\r\n * \u6821\u9A8C\u8868\u8FBE\u5F0F\r\n */\r\n fieldValidation: string;\r\n /**\r\n * \u6821\u9A8C\u7C7B\u578B\r\n */\r\n fieldValidationType: string;\r\n /**\r\n * \u5B57\u6BB5\u540E\u7F00\r\n */\r\n fieldSuffix: string;\r\n /**\r\n * \u5173\u8054\u5B57\u6BB5\r\n */\r\n joinColumn: string;\r\n /**\r\n * \u5173\u8054\u8868\u5355\r\n */\r\n joinTable: string;\r\n /**\r\n * \u5173\u8054\u8868\u5355\u4FE1\u606F\r\n */\r\n joinTableInfo: JoinTableInfo;\r\n /**\r\n * \u8FDE\u8868\u5B57\u6BB5\r\n */\r\n linkageColumn: string;\r\n /**\r\n * \u8FDE\u8868\u5B57\u6BB5\r\n */\r\n linkageTableColumn: string;\r\n /**\r\n * \u9009\u62E9\u64CD\u4F5C\u8C03\u7528\u7684\u63A5\u53E3\r\n */\r\n selectAction: string;\r\n /**\r\n * \u4E0B\u62C9\u6846\u9009\u62E9\u7684\u6807\u7B7E\r\n */\r\n selectActionLabel: string;\r\n /**\r\n * \u4E0B\u62C9\u6846\u663E\u793A\u7684\u6807\u7B7E\r\n */\r\n selectActionLabelArr: string[];\r\n /**\r\n * \u4E0B\u62C9\u6846\u9009\u62E9\u7684\u6807\u7B7E\r\n */\r\n selectActionValue: string;\r\n}\r\n\r\nexport interface JoinTableInfo {\r\n id: string;\r\n joinAlias: string;\r\n joinColumnList: JoinColumnList[];\r\n joinNum: number;\r\n joinSerial: number;\r\n joinTableId: string;\r\n joinTitle: string;\r\n joinType: number;\r\n mainTableId: string;\r\n relationId: string;\r\n showColumnList: [];\r\n showColumns: string;\r\n showType: number;\r\n tableComment: string;\r\n valueColumn: string;\r\n}\r\n\r\nexport interface JoinColumnList {\r\n id: string;\r\n conditionKey: string;\r\n conditionValue: string;\r\n fkJoinId: string;\r\n groupSerial: number;\r\n relation: string;\r\n valueType: number;\r\n}\r\n", "import {\r\n DYNAMIC_COLUMN_DATA_TYPE_ATTACHMENTS,\r\n DYNAMIC_COLUMN_DATA_TYPE_AUDIO,\r\n DYNAMIC_COLUMN_DATA_TYPE_AUTO,\r\n DYNAMIC_COLUMN_DATA_TYPE_CASCADE,\r\n DYNAMIC_COLUMN_DATA_TYPE_CHECKBOX,\r\n DYNAMIC_COLUMN_DATA_TYPE_CHILDREN_TABLE,\r\n DYNAMIC_COLUMN_DATA_TYPE_DATE,\r\n DYNAMIC_COLUMN_DATA_TYPE_DATETIME,\r\n DYNAMIC_COLUMN_DATA_TYPE_DEPT,\r\n DYNAMIC_COLUMN_DATA_TYPE_DOC,\r\n DYNAMIC_COLUMN_DATA_TYPE_EDITOR,\r\n DYNAMIC_COLUMN_DATA_TYPE_EMAIL,\r\n DYNAMIC_COLUMN_DATA_TYPE_GRADE,\r\n DYNAMIC_COLUMN_DATA_TYPE_ID_CARD,\r\n DYNAMIC_COLUMN_DATA_TYPE_LABEL,\r\n DYNAMIC_COLUMN_DATA_TYPE_LINKAGE,\r\n DYNAMIC_COLUMN_DATA_TYPE_MOBILE,\r\n DYNAMIC_COLUMN_DATA_TYPE_MONEY,\r\n DYNAMIC_COLUMN_DATA_TYPE_NUMBER,\r\n DYNAMIC_COLUMN_DATA_TYPE_ORGAN,\r\n DYNAMIC_COLUMN_DATA_TYPE_PICTURE,\r\n DYNAMIC_COLUMN_DATA_TYPE_POSITIONING,\r\n DYNAMIC_COLUMN_DATA_TYPE_QUOTE,\r\n DYNAMIC_COLUMN_DATA_TYPE_RADIO,\r\n DYNAMIC_COLUMN_DATA_TYPE_SELECT,\r\n DYNAMIC_COLUMN_DATA_TYPE_SWITCH,\r\n DYNAMIC_COLUMN_DATA_TYPE_TEXT,\r\n DYNAMIC_COLUMN_DATA_TYPE_TEXTAREA,\r\n DYNAMIC_COLUMN_DATA_TYPE_USER,\r\n DYNAMIC_COLUMN_DATA_TYPE_VIDEO,\r\n DYNAMIC_COLUMN_DATA_TYPE_INT,\r\n} from '../types/column-type';\r\n\r\nexport const getFieldType = (columnKeyType: number) => {\r\n switch (columnKeyType) {\r\n // \u5355\u884C\u6587\u672C \u6574\u6570 \u91D1\u989D \u6570\u503C \u8EAB\u4EFD\u8BC1\r\n case DYNAMIC_COLUMN_DATA_TYPE_TEXT.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_INT.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_MONEY.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_NUMBER.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_ID_CARD.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_MOBILE.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_EMAIL.code:\r\n return 'field';\r\n\r\n // \u591A\u884C\u6587\u672C\r\n case DYNAMIC_COLUMN_DATA_TYPE_TEXTAREA.code:\r\n return 'textarea';\r\n\r\n // \u65E5\u671F\r\n case DYNAMIC_COLUMN_DATA_TYPE_DATE.code:\r\n return 'date-picker';\r\n\r\n // \u65E5\u671F\u65F6\u95F4\r\n case DYNAMIC_COLUMN_DATA_TYPE_DATETIME.code:\r\n return 'time-picker';\r\n\r\n // \u6587\u672C\u8BF4\u660E\r\n case DYNAMIC_COLUMN_DATA_TYPE_LABEL.code:\r\n return 'text';\r\n\r\n // \u5F00\u5173\r\n case DYNAMIC_COLUMN_DATA_TYPE_SWITCH.code:\r\n return 'switch';\r\n\r\n // \u5355\u9009\u6846\r\n case DYNAMIC_COLUMN_DATA_TYPE_RADIO.code:\r\n return 'radio';\r\n\r\n // \u590D\u9009\u6846\r\n case DYNAMIC_COLUMN_DATA_TYPE_CHECKBOX.code:\r\n return 'checkbox';\r\n\r\n // \u8054\u7CFB\u4EBA \u7EC4\u7EC7\u67B6\u6784\u90E8\u95E8 \u7EC4\u7EC7\u67B6\u6784\u5355\u4F4D \u4E0B\u62C9\u6846\r\n case DYNAMIC_COLUMN_DATA_TYPE_USER.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_DEPT.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_ORGAN.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_SELECT.code:\r\n return 'picker';\r\n\r\n // \u7EA7\u8054\r\n case DYNAMIC_COLUMN_DATA_TYPE_CASCADE.code:\r\n return 'cascader';\r\n\r\n // \u56FE\u7247 \u89C6\u9891 \u97F3\u9891\r\n case DYNAMIC_COLUMN_DATA_TYPE_PICTURE.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_VIDEO.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_AUDIO.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_DOC.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_ATTACHMENTS.code:\r\n return 'uploader';\r\n\r\n //\u81EA\u52A8\u751F\u6210\r\n case DYNAMIC_COLUMN_DATA_TYPE_AUTO.code:\r\n return 'auto-complete';\r\n\r\n // \u5BCC\u6587\u672C\r\n case DYNAMIC_COLUMN_DATA_TYPE_EDITOR.code:\r\n return 'rich-text';\r\n\r\n // \u5B9A\u4F4D\r\n case DYNAMIC_COLUMN_DATA_TYPE_POSITIONING.code:\r\n return 'amap';\r\n\r\n // \u7B49\u7EA7\r\n case DYNAMIC_COLUMN_DATA_TYPE_GRADE.code:\r\n return 'rate';\r\n\r\n // \u6309\u94AE \u7B7E\u540D\r\n\r\n // \u5B50\u8868\u5355 \u5F15\u7528\u5B57\u6BB5 \u8054\u52A8\u5B57\u6BB5\r\n case DYNAMIC_COLUMN_DATA_TYPE_CHILDREN_TABLE.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_QUOTE.code:\r\n case DYNAMIC_COLUMN_DATA_TYPE_LINKAGE.code:\r\n return 'picker';\r\n default:\r\n return 'field';\r\n }\r\n};\r\n", "import { InterpretDataSourceConfig } from '@alilc/lowcode-types';\r\nimport {\r\n COMMON_CHUNK_NAME,\r\n DEFAULT_LINK_AFTER,\r\n TEMPLATE_DEFINE_CHUNK_NAME,\r\n VUE_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 IRouterInfo,\r\n ICodeChunk,\r\n IContainerInfo,\r\n IFormInfo,\r\n} from '../../../../../types';\r\nimport { isValidContainerType } from '../../../../../utils/schema';\r\nimport { getApiName } from '../../../../../utils/apiHandler';\r\nimport { getFieldType } from '../../../../../utils/columnType';\r\nimport {\r\n ColumnType,\r\n DYNAMIC_COLUMN_DATA_TYPE_AUTO,\r\n DYNAMIC_COLUMN_DATA_TYPE_BUTTON,\r\n DYNAMIC_COLUMN_DATA_TYPE_CHILDREN_TABLE,\r\n DYNAMIC_COLUMN_DATA_TYPE_DEPT,\r\n DYNAMIC_COLUMN_DATA_TYPE_LINKAGE,\r\n DYNAMIC_COLUMN_DATA_TYPE_ORGAN,\r\n DYNAMIC_COLUMN_DATA_TYPE_QUOTE,\r\n DYNAMIC_COLUMN_DATA_TYPE_USER,\r\n} from '../../../../../types/column-type';\r\nimport { camelize } from '../../../../../utils/common';\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 IFormInfo;\r\n\r\n const columnList = ir.dataSource?.extra[\r\n ir.dataSource.list[0].id\r\n ].columnToAttribute?.formData?.filter(\r\n (item: ColumnType) =>\r\n item.columnKeyType !== DYNAMIC_COLUMN_DATA_TYPE_BUTTON.code &&\r\n item.columnKeyType !== DYNAMIC_COLUMN_DATA_TYPE_AUTO.code,\r\n ) || [];\r\n console.log(columnList);\r\n //\u6839\u636Eir\u751F\u6210\u8868\u5355\u6587\u4EF6\u5939,\u5305\u62ECAdd.vue\u548Cfield.ts\uFF08\u6682\u65F6\uFF09\r\n\r\n //add-fields.ts\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.TS,\r\n name: COMMON_CHUNK_NAME.InternalDepsImport,\r\n subModule: 'add-field',\r\n content: `\r\n import { FieldProps } from '@dc/vue-h5-base/src/components/form-item/field-props'\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 subModule: 'add-field',\r\n content: `\r\n export const fields = (id?: string | undefined) => {\r\n return [\r\n ${columnList.map((field: ColumnType) => {\r\n return `\r\n {\r\n name: '${field.columnName}',\r\n label: '${field.columnComment}',\r\n type: '${getFieldType(field.columnKeyType)}',\r\n placeholder: '${field.guideWords}',\r\n show: ${field.showAddType == 0 ? false : true},\r\n required: ${field.isRequired == 0 ? false : true},\r\n rules: [\r\n {\r\n required: ${field.isRequired == 0 ? false : true},\r\n message: '${field.guideWords}',\r\n },\r\n ${\r\n field.fieldValidation\r\n ? `\r\n {\r\n pattern: '${field.fieldValidation}',\r\n message: '${field.columnComment}\u683C\u5F0F\u4E0D\u6B63\u786E'\r\n }\r\n `\r\n : ''\r\n }\r\n ],\r\n typeValue: { \r\n ${\r\n field.selectActionLabel\r\n ? `\r\n fieldNames: {\r\n label: '${field.selectActionLabel}',\r\n value: '${field.selectActionValue}'\r\n },\r\n `\r\n : ''\r\n }\r\n ${field.fieldSuffix ? `addonAfter: ${field.fieldSuffix}` : ''}\r\n ${\r\n field.columnOptionList\r\n ? `\r\n options: [${field.columnOptionList.map((item) => {\r\n console.log(JSON.stringify(item));\r\n return JSON.stringify(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 linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport],\r\n });\r\n\r\n //Add.vue\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 subModule: 'Add',\r\n content: `\r\n <template>\r\n <van-form ref=\"form\">\r\n <template v-for=\"(item, index) of addFields\">\r\n <base-form-item\r\n v-if=\"item.show\"\r\n :key=\"index\"\r\n v-model:value=\"formState[item.name]\"\r\n :label=\"item.label\"\r\n :name=\"item.name\"\r\n :placeholder=\"item.placeholder\"\r\n :required=\"true\"\r\n :rules=\"item.rules\"\r\n :type=\"item.type\"\r\n :typeValue=\"item.typeValue\"\r\n @update:extraValue=\"extraValueChange\"\r\n />\r\n </template>\r\n </van-form>\r\n <van-button round type=\"primary\" color=\"#FB663E\" @click=\"onSubmit\">\u63D0\u4EA4</van-button>\r\n </template>\r\n `,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart],\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 subModule: 'Add',\r\n content: `\r\n <script setup lang=\"ts\">\r\n import router from '@/router'\r\n import { fields } from './add-field'\r\n import { computed, onMounted, reactive, ref, defineProps, onBeforeMount } from 'vue'\r\n import BaseFormItem from '@dc/vue-h5-base/src/components/form-item/BaseFormItem.vue'\r\n import { messageMethod } from '@dc/vue-h5-base/src/utils/message-util'\r\n import { GetRequestModel, PostRequestModel } from '@dc/vue-h5-base/src/http/request-model'\r\n import { OptionProps, SelectProps, FieldProps, ExtraProps } from '@dc/vue-h5-base/src/components/form-item/field-props'\r\n import {\r\n ColumnField,\r\n handleFileList,\r\n handleLinkageFields,\r\n handleRemoteSearch,\r\n LinkageField,\r\n getDefaultValues,\r\n handleColumnOptions,\r\n FilterField,\r\n handleFilterField\r\n } from '@/sources/hooks/index'\r\n `,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart],\r\n });\r\n\r\n // dataSource\r\n const dataSourceConfig = isValidContainerType(pre.ir) ? pre.ir.dataSource : null;\r\n const dataSourceItems: InterpretDataSourceConfig[] =\r\n (dataSourceConfig && dataSourceConfig.list) || [];\r\n //\u5B9A\u4E49\u6709\u9009\u62E9\u9879\u7684\u63A7\u4EF6\u5217\u8868\r\n const selectActionTypeFieldList: ColumnType[] = ir.dataSource?.extra[\r\n ir.dataSource.list[0].id\r\n ].columnToAttribute?.formData?.filter(\r\n (field: ColumnType) =>\r\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_USER.code ||\r\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_DEPT.code ||\r\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_ORGAN.code ||\r\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_CHILDREN_TABLE.code ||\r\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_QUOTE.code ||\r\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_LINKAGE.code,\r\n ) || [];\r\n //\u5B9A\u4E49\u5F15\u7528\u5B57\u6BB5\u7684\u63A7\u4EF6\r\n const quoteFieldList: ColumnType[] = selectActionTypeFieldList.filter(\r\n (field: ColumnType) => field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_QUOTE.code,\r\n );\r\n\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 // Add.vue\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n subModule: 'Add',\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport,\r\n content: `import ${getApiName(ds.id)} from '@/api/${ds.id}';`,\r\n linkAfter: [...DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport]],\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.ConstVar,\r\n subModule: 'Add',\r\n content: `\r\nconst form = ref(null)\r\n\r\nconst props = defineProps<{\r\n id?: string\r\n}>()\r\n\r\nconst addFields = ref(fields(''))\r\nconst formState = reactive({\r\n id: props.id\r\n})\r\n `,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport],\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.OnMountedContent,\r\n subModule: 'Add',\r\n content: `\r\n ${selectActionTypeFieldList.map((field: ColumnType) => {\r\n return `\r\n// \u8BF7\u6C42\u5B57\u6BB5\u8FDC\u7A0B\u6570\u636E\r\nonBeforeMount(async () => {\r\n const fieldsItem = addFields.find(item => item.name === '${field.columnComment}')\r\n if (fieldsItem) {\r\n const typeValue = reactive<SelectProps>(fieldsItem.typeValue as SelectProps)\r\n const { data } = await new ${\r\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_CHILDREN_TABLE.code ||\r\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_QUOTE.code ||\r\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_LINKAGE.code\r\n ? 'Post'\r\n : 'Get'\r\n }RequestModel<Array<OptionProps>>('${field.selectAction}', {}).request()\r\n typeValue.isFetching = data.length >= 100\r\n typeValue.options = data ?? []\r\n // \u76F4\u63A5\u66F4\u65B0\u539F\u59CB item \u7684 typeValue\r\n fieldsItem.typeValue = typeValue\r\n }\r\n})\r\n `;\r\n })}\r\nonMounted(async () => {\r\n ${selectActionTypeFieldList\r\n .map((field: ColumnType) => {\r\n return `\r\n await get${camelize(field.columnName)}()\r\n `;\r\n })\r\n .join('')}\r\n \r\n //\u67E5\u8BE6\u60C5\u5E76\u663E\u793A\r\n if (props.id) {\r\n const { data } = await ${getApiName(ds.id)}.getById(props.id)\r\n Object.assign(formState, data)\r\n } \r\n})\r\n `,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart],\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.Method,\r\n subModule: 'Add',\r\n content: `\r\n${selectActionTypeFieldList.map((field: ColumnType) => {\r\n return `\r\n const get${camelize(field.columnName)} = async () => {\r\n const typeValue = reactive<SelectProps>(fieldsItem.typeValue as SelectProps)\r\n const { data } = await new ${\r\n field.selectActionType == 14 || field.selectActionType == 15 ? 'Post' : 'Get'\r\n }RequestModel<Array<OptionProps>>('${field.selectAction}', {}).request()\r\n\r\n typeValue.isFetching = data.length >= 100\r\n \r\n typeValue.options = data ?? []\r\n \r\n // \u76F4\u63A5\u66F4\u65B0\u539F\u59CB item \u7684 typeValue\r\n fieldsItem.typeValue = typeValue\r\n }\r\n `;\r\n})}\r\n/**\r\n * \u8868\u5355\u5B57\u6BB5\u503C\u6539\u53D8\u89E6\u53D1\r\n **/\r\nfunction extraValueChange(name: string, option: ExtraProps) {\r\n ${\r\n quoteFieldList\r\n ? `\r\n //\u5F15\u7528\u5B57\u6BB5\r\n const referenceFields: ColumnField[] = [\r\n ${quoteFieldList.map((field: ColumnType) => {\r\n return `\r\n {\r\n fieldName: '${camelize(field.columnName)}',\r\n joinTableInfoId: '${field.joinTableInfo.id}',\r\n }\r\n `;\r\n })}\r\n ]\r\n `\r\n : ''\r\n }\r\n ${\r\n quoteFieldList\r\n ? `\r\n //\u6709\u7B5B\u9009\u5173\u7CFB\u5B57\u6BB5\r\n const filterFields: FilterField[] = [\r\n ${quoteFieldList.map((field: ColumnType) => {\r\n console.log(field.joinTableInfo.joinColumnList);\r\n return `\r\n {\r\n fieldName: '${camelize(field.columnName)}',\r\n columnName: '${field.columnName}',\r\n columnKeyType: ${field.columnKeyType},\r\n selectAction: '${field.selectAction}',\r\n selectActionLabelArr: [],\r\n joinColumnList: [${field.joinTableInfo.joinColumnList\r\n .map((item) => JSON.stringify(item))\r\n .join(', \\n')}]\r\n }\r\n `;\r\n })}\r\n \r\n ]\r\n// \u5904\u7406\u7B5B\u9009\u5B57\u6BB5\r\nif(filterFields.length > 0) handleFilterField<IDynamicTbSpxx>(name, option, formState, addFields, filterFields)\r\n `\r\n : ''\r\n }\r\n\r\n }\r\n /**\r\n * \u63D0\u4EA4\u6570\u636E\r\n **/\r\n async function onSubmit () {\r\n if (props.id) {\r\n const { message } = await ${getApiName(ds.id)}.update(formState)\r\n messageMethod.success(message)\r\n } else {\r\n const { message } = await ${getApiName(ds.id)}.add(formState)\r\n messageMethod.success(message)\r\n }\r\n }\r\n `,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd],\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.ScriptEnd,\r\n subModule: 'Add',\r\n content: `\r\n </script>\r\n `,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd]],\r\n });\r\n\r\n // Manage.vue\u6587\u4EF6\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 subModule: 'Manage',\r\n content: `\r\n <template>\r\n <div class=\"page\">\r\n <div class=\"action\">\r\n <SearchBar\r\n placeholder=\"\u8BF7\u8F93\u5165\u5173\u952E\u8BCD\"\r\n :searchText=\"true\"\r\n v-model:search-value=\"searchValue\"\r\n @confirm=\"handleSearch\"\r\n @clear=\"handleSearch\"\r\n :autofocus=\"true\"\r\n >\r\n </SearchBar>\r\n <Icon type=\"add\" />\r\n </div>\r\n <van-pull-refresh :disabled=\"true\" v-model=\"refreshing\" @refresh=\"onRefresh\" v-if=\"list.length > 0\">\r\n <van-list v-model:loading=\"loading\" :finished=\"finished\" finished-text=\"\u6CA1\u6709\u66F4\u591A\u4E86\" @load=\"onLoad\">\r\n <div class=\"list\">\r\n <div class=\"list-item\" v-for=\"item in list\" :key=\"item.id\">\r\n ${\r\n columnList.length > 3\r\n ? columnList.slice(0, 3).map((item: ColumnType) => {\r\n return `\r\n <div class=\"list-item-column\" >${item.columnComment}: {{item['${item.columnName}']}}</div>\r\n `;\r\n })\r\n : columnList.map((item: ColumnType) => {\r\n return `\r\n <div class=\"list-item-column\" >${item.columnComment}: {{item['${item.columnName}']}}</div>\r\n `;\r\n })\r\n }\r\n </div>\r\n </div>\r\n </van-list>\r\n </van-pull-refresh>\r\n </div>\r\n </template>\r\n `,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart],\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 subModule: 'Manage',\r\n content: `\r\n <script setup lang=\"ts\">\r\n import { SearchBar, Icon } from '@dckj-npm/lowcode-vue-materials'\r\n import { ref, onMounted } from 'vue'\r\n `,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart],\r\n });\r\n\r\n next.chunks.push({\r\n type: ChunkType.STRING,\r\n fileType: FileType.VUE,\r\n subModule: 'Manage',\r\n name: TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport,\r\n content: `import ${getApiName(ds.id)} from '@/api/${ds.id}';`,\r\n linkAfter: [...DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport]],\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.ConstVar,\r\n subModule: 'Manage',\r\n content: `\r\n const pageNum = ref(1)\r\n let loading = ref(false)\r\n const finished = ref(false)\r\n const refreshing = ref(false)\r\n const isLastPage = ref(false)\r\n let list = ref<any[]>([])\r\n `,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport],\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.OnMountedContent,\r\n subModule: 'Manage',\r\n content: `\r\n onMounted(() => {\r\n onRefresh()\r\n })\r\n `,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart],\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.Method,\r\n subModule: 'Manage',\r\n content: `\r\n const onRefresh = async () => {\r\n // \u6E05\u7A7A\u5217\u8868\u6570\u636E\r\n finished.value = false\r\n \r\n // \u91CD\u65B0\u52A0\u8F7D\u6570\u636E\r\n // \u5C06 loading \u8BBE\u7F6E\u4E3A true\uFF0C\u8868\u793A\u5904\u4E8E\u52A0\u8F7D\u72B6\u6001\r\n loading.value = true\r\n pageNum.value = 1\r\n await onLoad()\r\n }\r\n const onLoad = async () => {\r\n if (refreshing.value) {\r\n list.value = []\r\n refreshing.value = false\r\n }\r\n // \u907F\u514D\u91CD\u590D\u52A0\u8F7D\r\n // if (loading.value || finished.value) return\r\n \r\n let { data } = await ${getApiName(\r\n ds.id,\r\n )}.page({ pageNum: pageNum.value, pageSize: 10 })\r\n console.log('data', data.list)\r\n \r\n isLastPage.value = data.isLastPage\r\n if (data.pageNum === 1) {\r\n list.value = data.list\r\n } else {\r\n list.value?.push(...data.list)\r\n }\r\n loading.value = false\r\n pageNum.value = pageNum.value + 1\r\n if (isLastPage.value || list.value.length >= data.total) {\r\n finished.value = true\r\n console.log(finished.value)\r\n }\r\n }\r\n `,\r\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd],\r\n });\r\n }\r\n });\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.ScriptEnd,\r\n subModule: 'Manage',\r\n content: `\r\n </script>\r\n `,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd]],\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.CssStyleImport,\r\n subModule: 'Manage',\r\n content: `\r\n <style lang=\"scss\">\r\n .page {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n .action {\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n }\r\n .list {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n .list-item {\r\n width: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n .list-item-column {\r\n display: flex;\r\n align-items: center;\r\n }\r\n }\r\n }\r\n }\r\n </style>\r\n `,\r\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd]],\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 IProjectInfo,\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 IProjectInfo;\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 { BasePo, BusinessPO } from '@dc/vue-h5-base/src/entity/common/base'\r\n import { ExtraProps, FieldProps, SelectProps } from '@dc/vue-h5-base/src/components/form-item/field-props'\r\n import { PostRequestModel, QueryType } from '@dc/vue-h5-base/src/http/request-model'\r\n import { OptionProps } from 'ant-design-vue/es/vc-select/Option'\r\n\t\timport { UnwrapNestedRefs } from 'vue'\r\n\t\timport { BaseUtil } from '@dc/vue-h5-base/src/utils/base-util'\r\n\t\timport { CascaderProps, UploadFile, UploadProps } from 'ant-design-vue'\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\nexport interface IColumnOption {\r\n\t/**\r\n\t * \u662F\u5426\u662F\u9ED8\u8BA4\u503C\r\n\t */\r\n\tisDefault: number\r\n\t/**\r\n\t * \u9009\u9879\u540D\u79F0\r\n\t */\r\n\toptionName: string\r\n\t/**\r\n\t * \u9009\u9879\u503C\r\n\t */\r\n\toptionValue: string | number\r\n\r\n\t[key: string]: string | number | string[]\r\n}\r\nexport interface FilterField {\r\n\tfieldName: string\r\n\tcolumnName: string\r\n\tcolumnKeyType: number\r\n\tselectAction: string\r\n\tselectActionLabelArr: string[]\r\n\tjoinColumnList: {\r\n\t\tconditionKey: string\r\n\t\tconditionValue: string\r\n\t}[]\r\n}\r\nexport interface LinkageField {\r\n\tselectAction: string\r\n\tselectActionValue: string\r\n\tselectActionLabel: string\r\n}\r\n\r\nexport function handleFilterField<T extends BusinessPO | BasePo>(\r\n\tname: string,\r\n\toption: ExtraProps,\r\n\tformState: Record<string, unknown>,\r\n\tfieldList: Array<FieldProps<T>>,\r\n\tfilterFields: FilterField[]\r\n) {\r\n\tconst relationColumns = filterFields.filter(column => column.joinColumnList.find(joinColumn => joinColumn.conditionKey === name))\r\n\tif (relationColumns.length > 0) {\r\n\t\tlet itemList: Record<string, QueryType>[] = []\r\n\t\titemList = relationColumns.map(relationColumn => {\r\n\t\t\treturn {\r\n\t\t\t\tcolumnName: relationColumn.columnName,\r\n\t\t\t\tcolumnValue: option.values ? (formState[relationColumn.fieldName] as QueryType) : ''\r\n\t\t\t}\r\n\t\t})\r\n\t\tconst field = filterFields.find(field => field.fieldName === name)\r\n\t\titemList.push({\r\n\t\t\tcolumnName: field?.columnName,\r\n\t\t\tcolumnValue: formState[field?.fieldName as string] as string\r\n\t\t})\r\n\t\trelationColumns.forEach(column => {\r\n\t\t\tconst { columnKeyType, selectAction, selectActionLabelArr } = column\r\n\t\t\tif (columnKeyType !== 47) {\r\n\t\t\t\tnew PostRequestModel<Array<IColumnOption>>(selectAction, itemList ? { itemList } : {}).request().then(({ data }) => {\r\n\t\t\t\t\tconst fieldTypeValue = fieldList.find(field => field.name === column.fieldName)?.typeValue as SelectProps\r\n\t\t\t\t\tif (fieldTypeValue) fieldTypeValue.options = data ?? []\r\n\t\t\t\t\tconst isMultipleField = selectActionLabelArr && selectActionLabelArr.length > 1\r\n\t\t\t\t\tif (isMultipleField) {\r\n\t\t\t\t\t\tdata?.forEach(item => {\r\n\t\t\t\t\t\t\tconst label: string[] = []\r\n\t\t\t\t\t\t\tselectActionLabelArr.forEach(labelName => label.push(<string>item[labelName]))\r\n\t\t\t\t\t\t\titem.label = label.join(',')\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n}\r\n\r\nexport const handleColumnOptions = <T>(data: Array<T>, selectActionType: number, selectActionLabel: string, selectActionValue: string) => {\r\n\tlet columnOptionList = []\r\n\tswitch (selectActionType) {\r\n\t\tcase 6:\r\n\t\t\t// \u90E8\u95E8\u7528\u6237\u5217\u8868\r\n\t\t\tcolumnOptionList = JSON.parse(\r\n\t\t\t\tJSON.stringify(data)\r\n\t\t\t\t\t.replace(/\"deptName\"/g, \\`\"\\${selectActionLabel}\"\\`)\r\n\t\t\t\t\t.replace(/\"deptId\"/g, \\`\"\\${selectActionValue}\"\\`)\r\n\t\t\t\t\t.replace(/\"userList\"/g, '\"options\"')\r\n\t\t\t)\r\n\t\t\tbreak\r\n\t\tcase 7:\r\n\t\t\t// \u90E8\u95E8\u7528\u6237\u6811\r\n\t\t\tcolumnOptionList = JSON.parse(\r\n\t\t\t\tJSON.stringify(flattenDeptUserTree(data as Array<any>))\r\n\t\t\t\t\t.replace(/\"deptName\"/g, \\`\"\\${selectActionLabel}\"\\`)\r\n\t\t\t\t\t.replace(/\"deptId\"/g, \\`\"\\${selectActionValue}\"\\`)\r\n\t\t\t)\r\n\t\t\tbreak\r\n\t\tcase 8:\r\n\t\t\t// \u5355\u4F4D\u90E8\u95E8\u7528\u6237\u5217\u8868\r\n\t\t\tcolumnOptionList = JSON.parse(\r\n\t\t\t\tJSON.stringify(flatten(data as Array<any>))\r\n\t\t\t\t\t.replace(/\"orgName\"/g, \\`\"\\${selectActionLabel}\"\\`)\r\n\t\t\t\t\t.replace(/\"orgId\"/g, \\`\"\\${selectActionValue}\"\\`)\r\n\t\t\t\t\t.replace(/\"deptName\"/g, \\`\"\\${selectActionLabel}\"\\`)\r\n\t\t\t\t\t.replace(/\"deptId\"/g, \\`\"\\${selectActionValue}\"\\`)\r\n\t\t\t\t\t.replace(/\"deptUserList\"/g, '\"children\"')\r\n\t\t\t\t\t.replace(/\"userList\"/g, '\"children\"')\r\n\t\t\t)\r\n\t\t\tbreak\r\n\t\tdefault:\r\n\t\t\tcolumnOptionList = data\r\n\t}\r\n\treturn columnOptionList\r\n}\r\n\t\r\n/**\r\n * \u8F6C\u5316\u6587\u4EF6\u7C7B\u578B\r\n * @param fileTypeString\r\n */\r\nexport const convertFileTypeString = (fileTypeString: string): string => {\r\n\tconst parts = fileTypeString.split('/')\r\n\tif (parts.length > 0) {\r\n\t\treturn parts.flatMap(part => part.split(',').map(type => \\`.\\${type}\\`)).join(',')\r\n\t} else {\r\n\t\treturn fileTypeString\r\n\t\t\t.split(',')\r\n\t\t\t.map(item => \\`.\\${item}\\`)\r\n\t\t\t.join(',')\r\n\t}\r\n}\r\n\t/**\r\n * \u5904\u7406\u8FDC\u7A0B\u641C\u7D22\u94A9\u5B50\u51FD\u6570\r\n * @param fieldList \u8868\u5355\u5B57\u6BB5\u5217\u8868\r\n * @param linkageFields \u6709\u5173\u8054\u5173\u7CFB\u7684\u5B57\u6BB5\r\n * @param name \u5B57\u6BB5\u540D\r\n * @param value \u503C\r\n */\r\nexport const handleRemoteSearch = async <T extends BusinessPO | BasePo>(\r\n\tfieldList: Array<FieldProps<T>>,\r\n\tlinkageFields: Record<string, LinkageField>,\r\n\tname: string,\r\n\tvalue: string\r\n) => {\r\n\tif (fieldList.length === 0) return\r\n\tconst typeValue = fieldList.find(item => item.name === name)?.typeValue as SelectProps\r\n\tconst itemField = Object.keys(linkageFields).find(item => item === name)\r\n\tif (itemField && typeValue && typeValue?.isFetching) {\r\n\t\tconst { data } = await new PostRequestModel<Array<IColumnOption>>(linkageFields[itemField as string].selectAction, {\r\n\t\t\titemList: [{ columnName: linkageFields[itemField].selectActionLabel, columnValue: value }]\r\n\t\t}).request()\r\n\t\ttypeValue.options = data\r\n\t}\r\n}\r\nexport interface ColumnField {\r\n\tfieldName: string\r\n\tjoinTableInfoId?: string\r\n\tlinkageTable?: string\r\n\tlinkageTableColumn?: string\r\n}\r\n\t/**\r\n * \u5904\u7406\u5173\u8054\u5B57\u6BB5\u94A9\u5B50\u51FD\u6570\r\n * @param referenceFields \u5F15\u7528\u5B57\u6BB5\r\n * @param linkageFields \u5173\u8054\u5B57\u6BB5\r\n * @param name \u5B57\u6BB5\u540D\r\n * @param options \u9009\u62E9\u9879\r\n * @param formState \u8868\u5355\u5B57\u6BB5\r\n */\r\nexport const handleLinkageFields = <T>(\r\n\treferenceFields: Array<ColumnField>,\r\n\tlinkageFields: Array<ColumnField>,\r\n\tname: string,\r\n\toptions: Array<OptionProps>,\r\n\tformState: UnwrapNestedRefs<Partial<T>>\r\n) => {\r\n\tconst localReference = referenceFields.filter(field => field?.fieldName === name)\r\n\r\n\tif (localReference.length > 0) {\r\n\t\tconst localLinkage = linkageFields.filter(field => field.linkageTable === localReference[0].joinTableInfoId)\r\n\t\tif (localLinkage.length > 0) {\r\n\t\t\tlocalLinkage.flatMap(item => {\r\n\t\t\t\tformState[item.fieldName as keyof UnwrapNestedRefs<Partial<T>>] = options[0][item.linkageTableColumn as string]\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n}\r\n/**\r\n * \u5904\u7406\u9644\u4EF6\u5217\u8868\u94A9\u5B50\r\n * @param formState \u8868\u5355\u6570\u636E\r\n * @param fieldList \u5B57\u6BB5\u5217\u8868\u6570\u636E\r\n */\r\nexport const handleFileList = <T extends BusinessPO | BasePo>(formState: UnwrapNestedRefs<Partial<T>>, fieldList: Array<FieldProps<T>>) => {\r\n\tconst uploadComponents = fieldList.filter(item => item.type === 'upload')\r\n\tif (uploadComponents.length > 0) {\r\n\t\tfieldList\r\n\t\t\t.filter(item => item.type === 'upload')\r\n\t\t\t.forEach(item => {\r\n\t\t\t\tconst typeValue = item.typeValue as UploadProps\r\n\t\t\t\tconst fieldValue = formState[\\`\\${item.name as string}FileList\\` as keyof UnwrapNestedRefs<Partial<T>>] as LogFile[]\r\n\t\t\t\tif (typeValue && fieldValue && fieldValue.length > 0) {\r\n\t\t\t\t\ttypeValue.fileList = []\r\n\t\t\t\t\ttypeValue.fileList =\r\n\t\t\t\t\t\t(fieldValue\r\n\t\t\t\t\t\t\t?.filter(item => item)\r\n\t\t\t\t\t\t\t.map(item => ({\r\n\t\t\t\t\t\t\t\tuid: item.id,\r\n\t\t\t\t\t\t\t\turl: BaseUtil.getUploadPath(item.uploadPath)\r\n\t\t\t\t\t\t\t})) as UploadFile<LogFile>[]) ?? []\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t}\r\n}\r\n/**\r\n * \u83B7\u53D6\u9ED8\u8BA4\u503C\u94A9\u5B50\u51FD\u6570\r\n * @param formState \u8868\u5355\u6570\u636E\r\n * @param tableId\r\n * @param id \u4E3B\u952Eid\r\n */\r\nexport const getDefaultValues = <T extends BusinessPO | BasePo>(formState: Record<string, any>, tableId: string, id?: string | undefined) => {\r\n\tdynamicRequest\r\n\t\t.getDefaultValue({\r\n\t\t\ttableId,\r\n\t\t\tid,\r\n\t\t\trecordMap: formState\r\n\t\t})\r\n\t\t.then(({ data }) => {\r\n\t\t\tdata.forEach(item => {\r\n\t\t\t\tformState[item.columnName as string] = item.columnValue\r\n\t\t\t})\r\n\t\t})\r\n}\r\nexport type PickType = 'date' | 'week' | 'month' | 'quarter' | 'year'\r\n/**\r\n * \u8BBE\u7F6E\u65E5\u671F\u9009\u62E9\u5668\u7C7B\u578B\u548C\u65E5\u671F\u683C\u5F0F\u94A9\u5B50\u51FD\u6570\r\n * @param dateFormat \u65E5\u671F\u683C\u5F0F\r\n */\r\nexport const setDatePickProps = (dateFormat?: string, showTime?: boolean) => {\r\n\tlet type: PickType = 'date'\r\n\tlet dateFormatUpper = dateFormat?.replace(/yyyy/g, 'YYYY').replace(/dd/g, 'DD') || 'YYYY-MM-DD'\r\n\tif (showTime) dateFormatUpper = dateFormat?.replace(/yyyy/g, 'YYYY').replace(/dd/g, 'DD') || 'YYYY-MM-DD HH:mm'\r\n\tif (dateFormat) {\r\n\t\tconst formatLowerCase = dateFormat.toLowerCase()\r\n\t\tif (formatLowerCase.includes('w') || formatLowerCase.includes('ww')) {\r\n\t\t\ttype = 'week'\r\n\t\t} else if (formatLowerCase.includes('q')) {\r\n\t\t\ttype = 'quarter'\r\n\t\t} else if (!formatLowerCase.includes('dd')) {\r\n\t\t\ttype = 'month'\r\n\t\t\tif (!formatLowerCase.includes('mm')) {\r\n\t\t\t\ttype = 'year'\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn {\r\n\t\tpickType: type,\r\n\t\tformat: dateFormatUpper,\r\n\t\tvalueFormat: dateFormatUpper\r\n\t}\r\n}\r\n\r\n `,\r\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport],\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\nimport main from './plugins/main';\r\nimport form from './plugins/form';\r\nimport hooks from './plugins/hooks';\r\n\r\nexport default {\r\n template,\r\n plugins: {\r\n packageJSON,\r\n router,\r\n main,\r\n form,\r\n hooks,\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 dataSourceMap from '../plugins/component/vue/dataSourceMap';\r\nimport routerSecond from '../plugins/component/vue/routerSecond';\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 pages: [\r\n template({\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 vueCommonDeps(),\r\n esmodule({ fileType: 'vue' }),\r\n containerVue(),\r\n apiImport(),\r\n containerInitVariable(),\r\n dataSourceMap(),\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 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 main: [vuejs3.plugins.main()],\r\n form: [vuejs3.plugins.form()],\r\n hooks: [vuejs3.plugins.hooks()],\r\n routerModules: [routerSecond()]\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 dataSourceMap,\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"],
|
|
4
|
+
"sourcesContent": ["/**\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\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\n * \uFF08\u5373\u7528 export { xxx } from 'xx' \u7684\u65B9\u5F0F\uFF0C\u4E0D\u8981\u76F4\u63A5 export * from 'xxx')\n * \u800C\u4E14\u6240\u6709\u5BFC\u51FA\u7684 API \u52A1\u5FC5\u5728 tests/public \u4E2D\u7F16\u5199\u5355\u5143\u6D4B\u8BD5\n */\nimport { createProjectBuilder } from './generator/ProjectBuilder';\nimport { createModuleBuilder } from './generator/ModuleBuilder';\nimport { createDiskPublisher } from './publisher/disk';\nimport { createZipPublisher } from './publisher/zip';\nimport createIceJsProjectBuilder, { plugins as icejsPlugins } from './solutions/icejs';\nimport createIceJs3ProjectBuilder, { plugins as icejs3Plugins } from './solutions/icejs3';\nimport createRaxAppProjectBuilder, { plugins as raxPlugins } from './solutions/rax-app';\nimport createDcSolutionProjectBuilder, { plugins as vuejs3Plugins } from './solutions/vuejs3';\n\n// \u5F15\u5165\u8BF4\u660E\nimport { REACT_CHUNK_NAME } from './plugins/component/react/const';\nimport { COMMON_CHUNK_NAME, CLASS_DEFINE_CHUNK_NAME, DEFAULT_LINK_AFTER, TEMPLATE_DEFINE_CHUNK_NAME, VUE_DEFAULT_LINK_AFTER } from './const/generator';\n\n// \u5F15\u5165\u901A\u7528\u63D2\u4EF6\u7EC4\nimport esmodule from './plugins/common/esmodule';\nimport requireUtils from './plugins/common/requireUtils';\nimport styleImport from './plugins/common/styleImport';\n\nimport css from './plugins/component/style/css';\nimport constants from './plugins/project/constants';\nimport i18n from './plugins/project/i18n';\nimport utils from './plugins/project/utils';\nimport prettier from './postprocessor/prettier';\n\n// \u5F15\u5165\u5168\u5C40\u5E38\u7528\u5DE5\u5177\nimport * as globalUtils from './utils';\n\nimport * as CONSTANTS from './const';\n\n// \u5F15\u5165\u5185\u7F6E\u89E3\u51B3\u65B9\u6848\u6A21\u5757\nimport icejs from './plugins/project/framework/icejs';\nimport icejs3 from './plugins/project/framework/icejs3';\nimport rax from './plugins/project/framework/rax';\nimport vuejs3 from './plugins/project/framework/vuejs3';\n\nexport default {\n createProjectBuilder,\n createModuleBuilder,\n solutions: {\n icejs: createIceJsProjectBuilder,\n icejs3: createIceJs3ProjectBuilder,\n rax: createRaxAppProjectBuilder,\n vuejs3: createDcSolutionProjectBuilder\n },\n solutionParts: {\n icejs,\n icejs3,\n rax,\n vuejs3\n },\n publishers: {\n disk: createDiskPublisher,\n zip: createZipPublisher,\n },\n plugins: {\n common: {\n\n /**\n * \u5904\u7406 ES Module\n * @deprecated please use esModule\n */\n esmodule,\n esModule: esmodule,\n requireUtils,\n styleImport,\n },\n style: {\n css,\n },\n project: {\n constants,\n i18n,\n utils,\n },\n icejs: {\n ...icejsPlugins,\n },\n icejs3: {\n ...icejs3Plugins,\n },\n rax: {\n ...raxPlugins,\n },\n vuejs3: {\n ...vuejs3Plugins\n },\n\n /**\n * @deprecated please use icejs\n */\n react: {\n ...icejsPlugins,\n },\n },\n postprocessor: {\n prettier,\n },\n utils: globalUtils,\n chunkNames: {\n COMMON_CHUNK_NAME,\n CLASS_DEFINE_CHUNK_NAME,\n REACT_CHUNK_NAME,\n TEMPLATE_DEFINE_CHUNK_NAME\n },\n defaultLinkAfter: {\n COMMON_DEFAULT_LINK_AFTER: DEFAULT_LINK_AFTER,\n VUE_DEFAULT_LINK_AFTER: VUE_DEFAULT_LINK_AFTER\n },\n constants: CONSTANTS,\n};\n\n// \u4E00\u4E9B\u7C7B\u578B\u5B9A\u4E49\nexport * from './types';\n\n// \u4E00\u4E9B\u5E38\u91CF\u5B9A\u4E49\nexport * from './const';\n\n// \u4E00\u4E9B\u5DE5\u5177\u51FD\u6570\nexport * from './analyzer/componentAnalyzer';\nexport * from './parser/SchemaParser';\nexport * from './generator/ChunkBuilder';\nexport * from './generator/CodeBuilder';\nexport * from './generator/ModuleBuilder';\nexport * from './generator/ProjectBuilder';\n", "/**\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\n * \u672C\u89E3\u6790\u5668\u9762\u5411\u7684\u662F\u6807\u51C6 schema \u534F\u8BAE\u3002\n */\nimport changeCase from 'change-case';\nimport {\n IPublicTypeUtilItem,\n IPublicTypeNodeDataType,\n IPublicTypeNodeSchema,\n IPublicTypeContainerSchema,\n IPublicTypeProjectSchema,\n IPublicTypePropsMap,\n IPublicTypeNodeData,\n IPublicTypeNpmInfo,\n} from '@alilc/lowcode-types';\nimport {\n IPageMeta,\n CodeGeneratorError,\n CompatibilityError,\n DependencyType,\n IContainerInfo,\n IDependency,\n IExternalDependency,\n IInternalDependency,\n InternalDependencyType,\n IParseResult,\n ISchemaParser,\n INpmPackage,\n IRouterInfo,\n ResourceListType,\n} from '../types';\n\nimport { SUPPORT_SCHEMA_VERSION_LIST } from '../const';\n\nimport { getErrorMessage } from '../utils/errors';\nimport { handleSubNodes, isValidContainerType, ContainerType } from '../utils/schema';\nimport { uniqueArray } from '../utils/common';\nimport { componentAnalyzer } from '../analyzer/componentAnalyzer';\nimport { ensureValidClassName } from '../utils/validate';\nimport type { ProjectRemark } from '../types/intermediate';\nimport { isFormPage } from '../utils/dataSource';\n\nconst defaultContainer: IContainerInfo = {\n containerType: 'Component',\n componentName: 'Component',\n moduleName: 'Index',\n fileName: 'Index',\n css: '',\n props: {},\n};\n\nfunction getRootComponentName(typeName: string, maps: Record<string, IExternalDependency>): string {\n if (maps[typeName]) {\n const rec = maps[typeName];\n if (rec.destructuring) {\n return rec.componentName || typeName;\n }\n\n const peerName = Object.keys(maps).find((depName: string) => {\n const depInfo = maps[depName];\n return (\n depName !== typeName &&\n !depInfo.destructuring &&\n depInfo.package === rec.package &&\n depInfo.version === rec.version &&\n depInfo.main === rec.main &&\n depInfo.exportName === rec.exportName &&\n depInfo.subName === rec.subName\n );\n });\n\n return peerName || typeName;\n }\n return typeName;\n}\n\nfunction processChildren(schema: IPublicTypeNodeSchema): void {\n if (schema.props) {\n if (Array.isArray(schema.props)) {\n // FIXME: is array type props description\n } else {\n const nodeProps = schema.props as IPublicTypePropsMap;\n if (nodeProps.children) {\n if (!schema.children) {\n // eslint-disable-next-line no-param-reassign\n schema.children = nodeProps.children as IPublicTypeNodeDataType;\n } else {\n let _children: IPublicTypeNodeData[] = [];\n\n if (Array.isArray(schema.children)) {\n _children = _children.concat(schema.children);\n } else {\n _children.push(schema.children);\n }\n\n if (Array.isArray(nodeProps.children)) {\n _children = _children.concat(nodeProps.children as IPublicTypeNodeData[]);\n } else {\n _children.push(nodeProps.children as IPublicTypeNodeData);\n }\n\n // eslint-disable-next-line no-param-reassign\n schema.children = _children;\n }\n delete nodeProps.children;\n }\n }\n }\n}\n\nfunction getInternalDep(internalDeps: Record<string, IInternalDependency>, depName: string) {\n const dep = internalDeps[depName];\n return dep && dep.type !== InternalDependencyType.PAGE ? dep : null;\n}\n\nexport class SchemaParser implements ISchemaParser {\n validate(schema: IPublicTypeProjectSchema): boolean {\n if (SUPPORT_SCHEMA_VERSION_LIST.indexOf(schema.version) < 0) {\n throw new CompatibilityError(`Not support schema with version [${schema.version}]`);\n }\n\n return true;\n }\n\n parse(schemaSrc: IPublicTypeProjectSchema | string): IParseResult {\n // TODO: collect utils depends in JSExpression\n const compDeps: Record<string, IExternalDependency> = {};\n const internalDeps: Record<string, IInternalDependency> = {};\n let utilsDeps: IExternalDependency[] = [];\n\n const schema = this.decodeSchema(schemaSrc);\n\n // \u89E3\u6790\u4E09\u65B9\u7EC4\u4EF6\u4F9D\u8D56\n schema.componentsMap.forEach((info: any) => {\n if (info.componentName) {\n compDeps[info.componentName] = {\n ...info,\n dependencyType: DependencyType.External,\n componentName: info.componentName,\n exportName: info.exportName ?? info.componentName,\n version: info.version || '*',\n destructuring: info.destructuring ?? false,\n };\n }\n });\n\n let containers: IContainerInfo[];\n // Test if this is a lowcode component without container\n if (schema.componentsTree.length > 0) {\n const firstRoot: IPublicTypeContainerSchema = schema\n .componentsTree[0] as IPublicTypeContainerSchema;\n\n if (!firstRoot.fileName && !isValidContainerType(firstRoot)) {\n // \u6574\u4E2A schema \u63CF\u8FF0\u4E00\u4E2A\u5BB9\u5668\uFF0C\u4E14\u65E0\u6839\u8282\u70B9\u5B9A\u4E49\n const container: IContainerInfo = {\n ...firstRoot,\n ...defaultContainer,\n props: firstRoot.props || defaultContainer.props,\n css: firstRoot.css || defaultContainer.css,\n moduleName: (firstRoot as IContainerInfo).moduleName || defaultContainer.moduleName,\n children: schema.componentsTree as IPublicTypeNodeSchema[],\n };\n containers = [container];\n } else {\n // \u666E\u901A\u5E26 1 \u5230\u591A\u4E2A\u5BB9\u5668\u7684 schema\n containers = schema.componentsTree.map((n) => {\n const subRoot = n as IPublicTypeContainerSchema;\n const container: IContainerInfo = {\n ...subRoot,\n componentName: getRootComponentName(subRoot.componentName, compDeps),\n containerType: subRoot.componentName,\n moduleName: ensureValidClassName(\n subRoot.componentName === ContainerType.Component\n ? subRoot.fileName\n : changeCase.pascalCase(subRoot.fileName),\n ),\n };\n return container;\n });\n }\n } else {\n throw new CodeGeneratorError(\"Can't find anything to generate.\");\n }\n\n // \u5206\u6790\u5F15\u7528\u80FD\u529B\u7684\u4F9D\u8D56\n containers = containers.map((con) => ({\n ...con,\n analyzeResult: componentAnalyzer(con as IPublicTypeContainerSchema),\n }));\n\n // \u5EFA\u7ACB\u6240\u6709\u5BB9\u5668\u7684\u5185\u90E8\u4F9D\u8D56\u7D22\u5F15\n containers.forEach((container) => {\n let type;\n switch (container.containerType) {\n case 'Page':\n type = InternalDependencyType.PAGE;\n break;\n case 'Block':\n type = InternalDependencyType.BLOCK;\n break;\n default:\n type = InternalDependencyType.COMPONENT;\n break;\n }\n\n const dep: IInternalDependency = {\n type,\n moduleName: container.moduleName,\n destructuring: false,\n exportName: container.moduleName,\n dependencyType: DependencyType.Internal,\n };\n\n internalDeps[dep.moduleName] = dep;\n });\n\n const containersDeps = ([] as IDependency[]).concat(...containers.map((c) => c.deps || []));\n // TODO: \u4E0D\u5E94\u8BE5\u5728\u51FA\u7801\u90E8\u5206\u89E3\u51B3\uFF1F\n // \u5904\u7406 children \u5199\u5728\u4E86 props \u91CC\u7684\u60C5\u51B5\n containers.forEach((container) => {\n if (container.children) {\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n handleSubNodes<void>(\n container.children,\n {\n node: (i: IPublicTypeNodeSchema) => processChildren(i),\n },\n {\n rerun: true,\n },\n );\n }\n });\n\n containers.forEach((container) => {\n const depNames = this.getComponentNames(container);\n // eslint-disable-next-line no-param-reassign\n container.deps = uniqueArray<string>(depNames, (i: string) => i)\n .map((depName) => getInternalDep(internalDeps, depName) || compDeps[depName])\n .filter(Boolean);\n // container.deps = Object.keys(compDeps).map((depName) => compDeps[depName]);\n });\n\n // \u5206\u6790\u8DEF\u7531\u914D\u7F6E\n const routes: IRouterInfo['routes'] = schemaSrc.routes\n ? schemaSrc.routes\n : containers\n .filter((container) => container.containerType === 'Page')\n .map((page) => {\n const { meta } = page;\n if (meta) {\n return {\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\n fileName: page.fileName,\n componentName: page.moduleName,\n isFormRouter: page.state['pageType'] == 'form',\n };\n }\n\n return {\n path: `/${page.fileName}`,\n fileName: page.fileName,\n componentName: page.moduleName,\n isFormRouter: page.state['pageType'] == 'form',\n };\n });\n\n const routerDeps = routes\n .map((r) => internalDeps[r.componentName] || compDeps[r.componentName])\n .filter((dep) => !!dep);\n\n // \u5206\u6790 Utils \u4F9D\u8D56\n let utils: IPublicTypeUtilItem[];\n if (schema.utils) {\n utils = schema.utils;\n utilsDeps = schema.utils\n .filter(\n (u): u is { name: string; type: 'npm' | 'tnpm'; content: IPublicTypeNpmInfo } =>\n u.type !== 'function',\n )\n .map(\n (u): IExternalDependency => ({\n ...u.content,\n componentName: u.name,\n version: u.content.version || '*',\n destructuring: u.content.destructuring ?? false,\n exportName: u.content.exportName ?? u.name,\n }),\n );\n } else {\n utils = [];\n }\n\n // \u5206\u6790\u9879\u76EE npm \u4F9D\u8D56\n let npms: INpmPackage[] = [];\n containers.forEach((con) => {\n const p = (con.deps || [])\n .map((dep) => {\n return dep.dependencyType === DependencyType.External ? dep : null;\n })\n .filter((dep) => dep !== null);\n const npmInfos: INpmPackage[] = p.filter(Boolean).map((i) => ({\n package: (i as IExternalDependency).package,\n version: (i as IExternalDependency).version,\n }));\n npms.push(...npmInfos);\n });\n\n npms.push(\n ...utilsDeps.map((utilsDep) => ({\n package: utilsDep.package,\n version: utilsDep.version,\n })),\n );\n\n npms = uniqueArray<INpmPackage>(npms, (i) => i.package).filter(Boolean);\n\n return {\n containers,\n globalUtils: {\n utils,\n deps: utilsDeps,\n },\n globalI18n: schema.i18n,\n globalRouter: {\n routes,\n deps: routerDeps,\n },\n project: {\n css: schema.css,\n constants: schema.constants,\n config: schema.config || {},\n meta: schema.meta || {},\n i18n: schema.i18n,\n containersDeps,\n utilsDeps,\n packages: npms || [],\n dataSourcesTypes: this.collectDataSourcesTypes(schema),\n projectRemark: this.getProjectRemark(containers),\n },\n };\n }\n\n getProjectRemark(containers: IContainerInfo[]): ProjectRemark {\n return {\n isSingleComponent: containers.length === 1 && containers[0].containerType === 'Component',\n };\n }\n\n getComponentNames(children: IPublicTypeNodeDataType): string[] {\n return handleSubNodes<string>(\n children,\n {\n node: (i: IPublicTypeNodeSchema) => i.componentName,\n },\n {\n rerun: true,\n },\n );\n }\n\n decodeSchema(schemaSrc: string | IPublicTypeProjectSchema): IPublicTypeProjectSchema {\n let schema: IPublicTypeProjectSchema;\n if (typeof schemaSrc === 'string') {\n try {\n schema = JSON.parse(schemaSrc);\n } catch (error) {\n throw new CodeGeneratorError(\n `Parse schema failed: ${getErrorMessage(error) || 'unknown reason'}`,\n );\n }\n } else {\n schema = schemaSrc;\n }\n return schema;\n }\n\n private collectDataSourcesTypes(schema: IPublicTypeProjectSchema): string[] {\n const dataSourcesTypes = new Set<string>();\n\n // \u6570\u636E\u6E90\u7684\u9ED8\u8BA4\u7C7B\u578B\u4E3A fetch\n const defaultDataSourceType = 'fetch';\n\n // \u6536\u96C6\u5E94\u7528\u7EA7\u522B\u7684\u6570\u636E\u6E90\n schema.dataSource?.list?.forEach((ds) => {\n dataSourcesTypes.add(ds.type || defaultDataSourceType);\n });\n\n // \u6536\u96C6\u5BB9\u5668\u7EA7\u522B\u7684\u6570\u636E\u6E90\uFF08\u9875\u9762/\u7EC4\u4EF6/\u533A\u5757\uFF09\n schema.componentsTree.forEach((rootNode) => {\n rootNode.dataSource?.list?.forEach((ds) => {\n dataSourcesTypes.add(ds.type || defaultDataSourceType);\n });\n });\n\n return Array.from(dataSourcesTypes.values());\n }\n}\n\n/**\n * \u751F\u6210router\u4FE1\u606F\n * @param originalSchema\n * @param resourceList\n */\nexport function handleRouter(\n originalSchema: IPublicTypeProjectSchema[],\n resourceList: ResourceListType[],\n) {\n if (!resourceList || resourceList.length == 0) {\n return '';\n }\n return resourceList\n .map((item) => {\n // \u627E\u5230\u9875\u9762\u5BF9\u5E94\u7684schema\n const schema = originalSchema.find((s) => s.componentsTree[0].fileName === item.slug);\n if (!schema) return '';\n const page = schema?.componentsTree[0];\n return {\n path: `/${page?.fileName}`, // \u5982\u679C\u65E0\u6CD5\u627E\u5230\u9875\u9762\u8DEF\u7531\u4FE1\u606F\uFF0C\u5219\u7528 fileName \u505A\u515C\u5E95\n fileName: page?.fileName,\n componentName: page?.moduleName || capitalizeFirstLetter(page?.fileName),\n isFormRouter: page?.state['pageType'] == 'form',\n firstPage: item.firstPage,\n title: item.title,\n };\n })\n .filter((item) => item);\n}\n\n/**\n * \u9996\u5B57\u6BCD\u5927\u5199,\u5E76\u4E14\u77ED\u6A2A\u7EBF\u53BB\u6389\n * @param str\n */\nfunction capitalizeFirstLetter(str: string) {\n if (!str) return '';\n return str\n .split('-') // \u6309\u7167\u77ED\u6A2A\u7EBF\u5206\u5272\u5B57\u7B26\u4E32\n .map(\n (\n word, // \u904D\u5386\u6BCF\u4E2A\u5355\u8BCD\n ) => word.charAt(0).toUpperCase() + word.slice(1), // \u6BCF\u4E2A\u5355\u8BCD\u9996\u5B57\u6BCD\u5927\u5199\n )\n .join('');\n}\n\nexport default SchemaParser;\n", "import {\n IPublicTypeCompositeArray,\n IPublicTypeCompositeObject,\n IPublicTypeJSExpression,\n IPublicTypeJSFunction,\n IPublicTypeJSONArray,\n IPublicTypeJSONObject,\n IPublicTypeJSSlot,\n IPublicTypeNodeDataType,\n IPublicTypeProjectSchema,\n ResultDir,\n ResultFile,\n} from '@alilc/lowcode-types';\n\nimport type { ProjectBuilderInitOptions } from '../generator/ProjectBuilder';\nimport { IScopeBindings } from '../utils/ScopeBindings';\nimport { IParseResult } from './intermediate';\n\nexport enum FileType {\n CSS = 'css',\n SCSS = 'scss',\n LESS = 'less',\n HTML = 'html',\n JS = 'js',\n MJS = 'mjs',\n JSX = 'jsx',\n TS = 'ts',\n MTS = 'mts',\n TSX = 'tsx',\n JSON = 'json',\n MD = 'md',\n VUE = 'vue',\n}\n\nexport enum ChunkType {\n AST = 'ast',\n STRING = 'string',\n JSON = 'json',\n}\n\nexport enum PluginType {\n COMPONENT = 'component',\n UTILS = 'utils',\n I18N = 'i18n',\n}\n\nexport type ChunkContent = string | any;\nexport type CodeGeneratorFunction<T> = (content: T) => string;\n\nexport interface ICodeChunk {\n type: ChunkType;\n fileType: string;\n name: string;\n subModule?: string;\n content: ChunkContent;\n linkAfter: string[];\n ext?: Record<string, unknown>;\n // \u591A\u6587\u4EF6\u91CD\u590D\u65F6\u4FDD\u7559zIndex\u503C\u66F4\u9AD8\u7684\u6587\u4EF6\n zIndex?: number;\n}\n\nexport interface IBaseCodeStruct {\n chunks: ICodeChunk[];\n depNames: string[];\n}\n\nexport interface ICodeStruct extends IBaseCodeStruct {\n ir: any;\n contextData: IContextData;\n}\n\n/** \u4E0A\u4E0B\u6587\u6570\u636E\uFF0C\u7528\u6765\u5728\u63D2\u4EF6\u4E4B\u95F4\u5171\u4EAB\u4E00\u4E9B\u6570\u636E */\nexport interface IContextData extends IProjectBuilderOptions {\n /**\n * \u5176\u4ED6\u81EA\u5B9A\u4E49\u6570\u636E\n * \uFF08\u4E09\u65B9\u81EA\u5B9A\u4E49\u63D2\u4EF6\u4E5F\u53EF\u4EE5\u5728\u6B64\u653E\u4E00\u4E9B\u6570\u636E\uFF0C\u5EFA\u8BAE\u8D77\u4E2A\u957F\u4E00\u70B9\u7684\u540D\u79F0\uFF0C\u7528\u81EA\u5DF1\u7684\u63D2\u4EF6\u540D\u505A\u524D\u7F00\uFF0C\u4EE5\u9632\u51B2\u7A81\uFF09\n */\n [key: string]: any;\n\n /**\n * \u662F\u5426\u4F7F\u7528\u4E86 Ref \u7684 API (this.$/this.$$)\n * */\n useRefApi?: boolean;\n}\n\nexport type BuilderComponentPlugin = (initStruct: ICodeStruct) => Promise<ICodeStruct>;\n\nexport type BuilderComponentPluginFactory<T> = (config?: T) => BuilderComponentPlugin;\n\nexport interface IChunkBuilder {\n run: (ir: any, initialStructure?: ICodeStruct) => Promise<{ chunks: ICodeChunk[][] }>;\n getPlugins: () => BuilderComponentPlugin[];\n addPlugin: (plugin: BuilderComponentPlugin) => void;\n}\n\nexport interface ICodeBuilder {\n link: (chunkDefinitions: ICodeChunk[]) => string;\n generateByType: (type: string, content: unknown) => string;\n}\n\nexport interface ICompiledModule {\n files: ResultFile[];\n}\n\nexport interface IModuleBuilder {\n generateModule: (input: unknown) => Promise<ICompiledModule>;\n generateModuleCode: (schema: IPublicTypeProjectSchema | string) => Promise<ResultDir>;\n linkCodeChunks: (chunks: Record<string, ICodeChunk[]>, fileName: string) => ResultFile[];\n addPlugin: (plugin: BuilderComponentPlugin) => void;\n}\n\n/**\n * \u5F15\u64CE\u5BF9\u5916\u63A5\u53E3\n *\n * @export\n * @interface ICodeGenerator\n */\nexport interface ICodeGenerator {\n /**\n * \u51FA\u7801\u63A5\u53E3\uFF0C\u628A Schema \u8F6C\u6362\u6210\u4EE3\u7801\u6587\u4EF6\u7CFB\u7EDF\u63CF\u8FF0\n *\n * @param {(IPublicTypeProjectSchema)} schema \u4F20\u5165\u7684 Schema\n * @returns {ResultDir}\n * @memberof ICodeGenerator\n */\n toCode: (schema: IPublicTypeProjectSchema) => Promise<ResultDir>;\n}\n\nexport interface ISchemaParser {\n validate: (schema: IPublicTypeProjectSchema) => boolean;\n parse: (schema: IPublicTypeProjectSchema | string) => IParseResult;\n}\n\nexport interface IProjectTemplate {\n slots: Record<string, IProjectSlot>;\n generateTemplate: (data: IParseResult) => ResultDir | Promise<ResultDir>;\n}\n\nexport interface IProjectSlot {\n path: string[];\n fileName?: string;\n}\n\nexport interface IProjectPlugins {\n [slotName: string]: BuilderComponentPlugin[];\n}\n\nexport interface IProjectBuilderOptions {\n /** \u662F\u5426\u5904\u4E8E\u4E25\u683C\u6A21\u5F0F (\u9ED8\u8BA4\uFF1A\u5426) */\n inStrictMode?: boolean;\n\n /**\n * \u662F\u5426\u8981\u5BB9\u5FCD\u5BF9 JSExpression \u6C42\u503C\u65F6\u7684\u5F02\u5E38\n * \u9ED8\u8BA4\uFF1Atrue\n * \u6CE8\uFF1A\u5982\u679C\u5BB9\u5FCD\u5F02\u5E38\uFF0C\u5219\u4F1A\u5728\u6C42\u503C\u65F6\u5305\u88F9 try-catch \u5757\uFF0C\n * catch \u5230\u5F02\u5E38\u65F6\u9ED8\u8BA4\u4F1A\u629B\u51FA\u4E00\u4E2A CustomEvent \u4E8B\u4EF6\u91CC\u9762\u5305\u542B\u5F02\u5E38\u4FE1\u606F\u548C\u6C42\u503C\u7684\u8868\u8FBE\u5F0F\n */\n tolerateEvalErrors?: boolean;\n\n /**\n * \u5BB9\u5FCD\u5F02\u5E38\u7684\u65F6\u5019\u7684\u7684\u9519\u8BEF\u5904\u7406\u8BED\u53E5\u5757\n * \u9ED8\u8BA4\uFF1A\u65E0\n * \u60A8\u53EF\u4EE5\u8BBE\u7F6E\u4E3A\u4E00\u4E2A\u8BED\u53E5\u5757\uFF0C\u6BD4\u5982\uFF1A\n * window.dispatchEvent(new CustomEvent('lowcode-eval-error', { error, expr }))\n *\n * \u4E00\u822C\u53EF\u4EE5\u7ED3\u5408\u57CB\u70B9\u76D1\u63A7\u6A21\u5757\u7528\u6765\u76D1\u63A7\u6C42\u503C\u5F02\u5E38\n *\n * \u5176\u4E2D\uFF1A\n * - error: \u5F02\u5E38\u4FE1\u606F\n * - expr: \u6C42\u503C\u7684\u8868\u8FBE\u5F0F\n */\n evalErrorsHandler?: string;\n\n /**\n * Hook which is used to customize original options, we can reorder/add/remove plugins/processors\n * of the existing solution.\n */\n customizeBuilderOptions?(originalOptions: ProjectBuilderInitOptions): ProjectBuilderInitOptions;\n}\n\nexport interface IProjectBuilder {\n generateProject: (schema: IPublicTypeProjectSchema | string | IPublicTypeProjectSchema[], resourceList: ResourceListType[]) => Promise<ResultDir>;\n}\n\n/** \u9879\u76EE\u7EA7\u522B\u7684\u524D\u7F6E\u5904\u7406\u5668 */\nexport type ProjectPreProcessor = (\n schema: IPublicTypeProjectSchema,\n) => Promise<IPublicTypeProjectSchema> | IPublicTypeProjectSchema;\n\nexport interface ProjectPostProcessorOptions {\n parseResult?: IParseResult;\n template?: IProjectTemplate;\n}\n\n/** \u9879\u76EE\u7EA7\u522B\u7684\u540E\u7F6E\u5904\u7406\u5668 */\nexport type ProjectPostProcessor = (\n result: ResultDir,\n schema: IPublicTypeProjectSchema,\n originalSchema: IPublicTypeProjectSchema | string,\n options: ProjectPostProcessorOptions,\n) => Promise<ResultDir> | ResultDir;\n\n/** \u6A21\u5757\u7EA7\u522B\u7684\u540E\u7F6E\u5904\u7406\u5668\u7684\u5DE5\u5382\u65B9\u6CD5 */\nexport type PostProcessorFactory<T> = (config?: T) => PostProcessor;\n\n/** \u6A21\u5757\u7EA7\u522B\u7684\u540E\u7F6E\u5904\u7406\u5668 */\nexport type PostProcessor = (content: string, fileType: string, name?: string) => string;\n\n// TODO: temp interface, need modify\nexport interface IPluginOptions {\n fileDirDepth: number;\n}\n\nexport type BaseGenerator<I, T, C> = (\n input: I,\n scope: IScope,\n config?: C,\n next?: BaseGenerator<I, T, C>,\n) => T;\ntype CompositeTypeGenerator<I, T> =\n | BaseGenerator<I, T, CompositeValueGeneratorOptions>\n | Array<BaseGenerator<I, T, CompositeValueGeneratorOptions>>;\n\nexport type NodeGenerator<T> = (nodeItem: IPublicTypeNodeDataType, scope: IScope) => T;\n\n// FIXME: \u5728\u65B0\u7684\u5B9E\u73B0\u4E2D\uFF0C\u6DFB\u52A0\u4E86\u7B2C\u4E00\u53C2\u6570 this: CustomHandlerSet \u4F5C\u4E3A\u4E0A\u4E0B\u6587\u3002\u7A76\u5176\u672C\u8D28\n// scopeBindings?: IScopeBindings;\n// \u8FD9\u4E2A\u7EC4\u5408\u53EA\u7528\u6765\u7528\u6765\u5904\u7406 IPublicTypeCompositeValue \u7C7B\u578B\uFF0C\u4E0D\u662F\u8FD9\u4E2A\u7C7B\u578B\u7684\u4E0D\u8981\u653E\u5728\u8FD9\u91CC\nexport interface HandlerSet<T> {\n string?: CompositeTypeGenerator<string, T>;\n boolean?: CompositeTypeGenerator<boolean, T>;\n number?: CompositeTypeGenerator<number, T>;\n expression?: CompositeTypeGenerator<IPublicTypeJSExpression, T>;\n function?: CompositeTypeGenerator<IPublicTypeJSFunction, T>;\n slot?: CompositeTypeGenerator<IPublicTypeJSSlot, T>;\n array?: CompositeTypeGenerator<IPublicTypeJSONArray | IPublicTypeCompositeArray, T>;\n object?: CompositeTypeGenerator<IPublicTypeJSONObject | IPublicTypeCompositeObject, T>;\n}\n\nexport interface CompositeValueGeneratorOptions {\n handlers?: HandlerSet<string>;\n nodeGenerator?: NodeGenerator<string>;\n tolerateEvalErrors?: boolean;\n}\n\n/**\n * \u4F5C\u7528\u57DF\u5B9A\u4E49\uFF0C\u7EF4\u62A4\u4F5C\u7528\u57DF\u5185\u5B9A\u4E49\uFF0C\u652F\u6301\u4F5C\u7528\u57DF\u94FE\u4E0A\u6EAF\n */\nexport interface IScope {\n // \u7236\u7EA7\u4F5C\u7528\u57DF\uFF08\u5982\u679C\u662F\u6839\u4F5C\u7528\u57DF\u5219\u4E3A null\uFF09\n readonly parent: IScope | null;\n\n // \u4F5C\u7528\u57DF\u5185\u5B9A\u4E49\u7684\u53D8\u91CF/\u51FD\u6570\u7B49 bindings\n readonly bindings?: IScopeBindings;\n\n // TODO: \u9700\u8981\u6709\u4E0A\u4E0B\u6587\u4FE1\u606F\u5417\uFF1F \u63CF\u8FF0\u4EC0\u4E48\u5185\u5BB9\n createSubScope: (ownIndentifiers: string[]) => IScope;\n}\n\n/**\n * \u9875\u9762\u53C2\u6570\n */\nexport interface ResourceListType {\n title: string\n slug: string\n id: string\n // \u662F\u5426\u662F\u4E00\u7EA7\u9875\u9762\n firstPage: 'true' | 'false'\n}\n", "export interface INpmPackage {\n package: string; // \u7EC4\u4EF6\u5305\u7684\u540D\u79F0\n version: string; // \u7EC4\u4EF6\u5305\u7684\u7248\u672C\n}\n\n/**\n * \u5916\u90E8\u4F9D\u8D56\u63CF\u8FF0\n *\n * @export\n * @interface IExternalDependency\n */\nexport interface IExternalDependency extends INpmPackage, IDependency {}\n\nexport enum InternalDependencyType {\n PAGE = 'pages',\n BLOCK = 'components',\n COMPONENT = 'components',\n UTILS = 'utils',\n}\n\nexport enum DependencyType {\n External = 'External',\n Internal = 'Internal',\n}\n\nexport interface IInternalDependency extends IDependency {\n type: InternalDependencyType;\n moduleName: string;\n}\n\nexport interface IDependency {\n destructuring: boolean; // \u7EC4\u4EF6\u662F\u5426\u662F\u89E3\u6784\u65B9\u5F0F\u65B9\u5F0F\u5BFC\u51FA\n exportName: string; // \u5BFC\u51FA\u547D\u540D\n subName?: string; // \u4E0B\u6807\u5B50\u7EC4\u4EF6\u540D\u79F0\n main?: string; // \u5305\u5BFC\u51FA\u7EC4\u4EF6\u5165\u53E3\u6587\u4EF6\u8DEF\u5F84 /lib/input\n dependencyType?: DependencyType; // \u4F9D\u8D56\u7C7B\u578B \u5185/\u5916\n componentName?: string; // \u5BFC\u5165\u540E\u540D\u79F0\n package?: string; // \u7EC4\u4EF6\u5305\n devMode: string; // \u6700\u5916\u5C42\u7684page\u6807\u7B7E\n}", "/* eslint-disable @typescript-eslint/no-useless-constructor */\nexport class CodeGeneratorError extends Error {\n readonly detail?: unknown;\n\n constructor(message: string, detail?: unknown) {\n super(message);\n this.name = this.constructor.name;\n this.detail = detail;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nexport class ComponentValidationError extends CodeGeneratorError {}\n\nexport class CompatibilityError extends CodeGeneratorError {}\n\nexport class PublisherError extends CodeGeneratorError {}\n", "import { IPublicTypeNodeSchema, IPublicTypeCompositeValue } from '@alilc/lowcode-types';\nimport { HandlerSet, BaseGenerator, NodeGenerator } from './core';\n\nexport enum PIECE_TYPE {\n BEFORE = 'NodeCodePieceBefore',\n TAG = 'NodeCodePieceTag',\n ATTR = 'NodeCodePieceAttr',\n CHILDREN = 'NodeCodePieceChildren',\n AFTER = 'NodeCodePieceAfter',\n}\n\nexport interface CodePiece {\n name?: string;\n value: string;\n type: PIECE_TYPE;\n}\n\nexport interface AttrData {\n attrName: string;\n attrValue: IPublicTypeCompositeValue;\n}\n// \u5BF9 JSX \u51FA\u7801\u7684\u7406\u89E3\uFF0C\u76EE\u524D\u5B9A\u5236\u70B9\u5305\u542B\u3010\u5305\u88C5\u3011\u3010\u6807\u7B7E\u540D\u3011\u3010\u5C5E\u6027\u3011\nexport type AttrPlugin = BaseGenerator<AttrData, CodePiece[], NodeGeneratorConfig>;\nexport type NodePlugin = BaseGenerator<IPublicTypeNodeSchema, CodePiece[], NodeGeneratorConfig>;\n\nexport interface NodeGeneratorConfig {\n handlers?: HandlerSet<string>;\n tagMapping?: (input: string) => string;\n attrPlugins?: AttrPlugin[];\n nodePlugins?: NodePlugin[];\n self?: NodeGenerator<string>;\n\n /**\n * \u662F\u5426\u8981\u5BB9\u5FCD\u5BF9 JSExpression \u6C42\u503C\u65F6\u7684\u5F02\u5E38\n * \u9ED8\u8BA4\uFF1Atrue\n * \u6CE8\uFF1A\u5982\u679C\u5BB9\u5FCD\u5F02\u5E38\uFF0C\u5219\u4F1A\u5728\u6C42\u503C\u65F6\u5305\u88F9 try-catch \u5757 -- \u901A\u8FC7 __$$eval / __$$evalArray\n * catch \u5230\u5F02\u5E38\u65F6\u9ED8\u8BA4\u4F1A\u629B\u51FA\u4E00\u4E2A CustomEvent \u4E8B\u4EF6\u91CC\u9762\u5305\u542B\u5F02\u5E38\u4FE1\u606F\u548C\u6C42\u503C\u7684\u8868\u8FBE\u5F0F\n */\n tolerateEvalErrors?: boolean;\n}\n", "export const NATIVE_ELE_PKG = 'native';\n\nexport const CONTAINER_TYPE = {\n COMPONENT: 'Component',\n BLOCK: 'Block',\n PAGE: 'Page',\n};\n\nexport const SUPPORT_SCHEMA_VERSION_LIST = ['0.0.1', '1.0.0'];\n\n// built-in slot names which have been handled in ProjectBuilder\nexport const BUILTIN_SLOT_NAMES = [\n 'pages',\n 'components',\n 'router',\n 'entry',\n 'appConfig',\n 'buildConfig',\n 'constants',\n 'utils',\n 'i18n',\n 'globalStyle',\n 'htmlEntry',\n 'packageJSON',\n 'demo',\n 'form',\n 'hooks',\n];\n\nexport const isBuiltinSlotName = function (name: string) {\n return BUILTIN_SLOT_NAMES.includes(name);\n};\n\nexport * from './file';\nexport * from './generator';\n", "import { FileType } from '../types/core';\n\nexport const FILE_TYPE_FAMILY = [[FileType.TSX, FileType.TS, FileType.JSX, FileType.JS]];\n", "export const COMMON_CHUNK_NAME = {\n ExternalDepsImport: 'CommonExternalDependencyImport',\n InternalDepsImport: 'CommonInternalDependencyImport',\n ImportAliasDefine: 'CommonImportAliasDefine',\n FileVarDefine: 'CommonFileScopeVarDefine',\n FileUtilDefine: 'CommonFileScopeMethodDefine',\n FileMainContent: 'CommonFileMainContent',\n FileExport: 'CommonFileExport',\n StyleDepsImport: 'CommonStyleDepsImport',\n StyleCssContent: 'CommonStyleCssContent',\n HtmlContent: 'CommonHtmlContent',\n CustomContent: 'CommonCustomContent',\n};\n\nexport const CLASS_DEFINE_CHUNK_NAME = {\n Start: 'CommonClassDefineStart',\n ConstructorStart: 'CommonClassDefineConstructorStart',\n ConstructorContent: 'CommonClassDefineConstructorContent',\n ConstructorEnd: 'CommonClassDefineConstructorEnd',\n StaticVar: 'CommonClassDefineStaticVar',\n StaticMethod: 'CommonClassDefineStaticMethod',\n InsVar: 'CommonClassDefineInsVar',\n InsVarMethod: 'CommonClassDefineInsVarMethod',\n InsMethod: 'CommonClassDefineInsMethod',\n InsPrivateMethod: 'CommonClassDefineInsPrivateMethod',\n End: 'CommonClassDefineEnd',\n};\n\n// vue\u6A21\u677F\u7ED3\u6784\nexport const TEMPLATE_DEFINE_CHUNK_NAME = {\n TemplateStart: 'CommonTemplateDefineStart', // template\u5F00\u59CB\n TemplateDom: 'CommonTemplateDefineDom', // \u9875\u9762\u7ED3\u6784\n TemplateEnd: 'CommonTemplateDefineEnd', // template\u7ED3\u675F\n ScriptStart: 'CommonScriptDefineStart', // script\u5F00\u59CB\n ExternalDepsImport: 'CommonExternalDependencyImport', // \u5916\u90E8\u4F9D\u8D56\u5BFC\u5165\n InternalDepsImport: 'CommonInternalDependencyImport', // \u5185\u90E8\u4F9D\u8D56\u5BFC\u5165\n ConstVar: 'CommonScriptDefineConstVar', // const\u53D8\u91CF\u5B9A\u4E49\n LetVar: 'CommonScriptDefineLetVar', // let\u53D8\u91CF\u5B9A\u4E49\n DataSourceMapStart: 'CommonScriptDefineDataSourceMapStart', // dataSourceMap\u5F00\u59CB\n DataSourceMapContent: 'CommonScriptDefineDataSourceMapContent', // dataSourceMap\u5185\u5BB9\n DataSourceMapEnd: 'CommonScriptDefineDataSourceMapEnd', // dataSourceMap\u7ED3\u675F\n OnMountedStart: 'CommonScriptDefineOnMountedStart', // mounted\u751F\u547D\u5468\u671F\u5F00\u59CB\n OnMountedContent: 'CommonScriptDefineOnMountedContent', // mounted\u751F\u547D\u5468\u671F\u5185\u5BB9\n OnMountedEnd: 'CommonScriptDefineOnMountedEnd', // mounted\u751F\u547D\u5468\u671F\u7ED3\u675F\n UnMountedStart: 'CommonScriptDefineUnMountedStart', // unmounted\u751F\u547D\u5468\u671F\u5F00\u59CB\n UnMountedContent: 'CommonScriptDefineUnMountedContent', // unmounted\u751F\u547D\u5468\u671F\u5185\u5BB9\n UnMountedEnd: 'CommonScriptDefineUnMountedEnd', // unmounted\u751F\u547D\u5468\u671F\u7ED3\u675F\n Method: 'CommonScriptDefineMethod', // \u65B9\u6CD5\u5B9A\u4E49\n ScriptEnd: 'CommonScriptDefineEnd', // script\u7ED3\u675F\n CssStyleStart: 'CommonCssStyleDefineStart', // css\u6837\u5F0F\u5F00\u59CB\n CssStyleImport: 'CommonCssStyleDefineImport', // \u6837\u5F0F\u5BFC\u5165\n CssStyleEnd: 'CommonCssStyleDefineEnd', // css\u6837\u5F0F\u7ED3\u675F\n};\n\nexport const DEFAULT_LINK_AFTER = {\n [COMMON_CHUNK_NAME.ExternalDepsImport]: [],\n [COMMON_CHUNK_NAME.InternalDepsImport]: [COMMON_CHUNK_NAME.ExternalDepsImport],\n [COMMON_CHUNK_NAME.ImportAliasDefine]: [\n COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport,\n ],\n [COMMON_CHUNK_NAME.FileVarDefine]: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n ],\n [COMMON_CHUNK_NAME.FileUtilDefine]: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n ],\n [CLASS_DEFINE_CHUNK_NAME.Start]: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n ],\n [CLASS_DEFINE_CHUNK_NAME.ConstructorStart]: [\n CLASS_DEFINE_CHUNK_NAME.Start,\n CLASS_DEFINE_CHUNK_NAME.StaticVar,\n CLASS_DEFINE_CHUNK_NAME.StaticMethod,\n CLASS_DEFINE_CHUNK_NAME.InsVar,\n CLASS_DEFINE_CHUNK_NAME.InsVarMethod,\n ],\n [CLASS_DEFINE_CHUNK_NAME.ConstructorContent]: [CLASS_DEFINE_CHUNK_NAME.ConstructorStart],\n [CLASS_DEFINE_CHUNK_NAME.ConstructorEnd]: [\n CLASS_DEFINE_CHUNK_NAME.ConstructorStart,\n CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\n ],\n [CLASS_DEFINE_CHUNK_NAME.StaticVar]: [CLASS_DEFINE_CHUNK_NAME.Start],\n [CLASS_DEFINE_CHUNK_NAME.StaticMethod]: [\n CLASS_DEFINE_CHUNK_NAME.Start, CLASS_DEFINE_CHUNK_NAME.StaticVar,\n ],\n [CLASS_DEFINE_CHUNK_NAME.InsVar]: [\n CLASS_DEFINE_CHUNK_NAME.Start,\n CLASS_DEFINE_CHUNK_NAME.StaticVar,\n CLASS_DEFINE_CHUNK_NAME.StaticMethod,\n ],\n [CLASS_DEFINE_CHUNK_NAME.InsVarMethod]: [\n CLASS_DEFINE_CHUNK_NAME.Start,\n CLASS_DEFINE_CHUNK_NAME.StaticVar,\n CLASS_DEFINE_CHUNK_NAME.StaticMethod,\n CLASS_DEFINE_CHUNK_NAME.InsVar,\n ],\n [CLASS_DEFINE_CHUNK_NAME.InsMethod]: [\n CLASS_DEFINE_CHUNK_NAME.Start,\n CLASS_DEFINE_CHUNK_NAME.StaticVar,\n CLASS_DEFINE_CHUNK_NAME.StaticMethod,\n CLASS_DEFINE_CHUNK_NAME.InsVar,\n CLASS_DEFINE_CHUNK_NAME.InsVarMethod,\n CLASS_DEFINE_CHUNK_NAME.ConstructorEnd,\n ],\n [CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod]: [\n CLASS_DEFINE_CHUNK_NAME.Start,\n CLASS_DEFINE_CHUNK_NAME.StaticVar,\n CLASS_DEFINE_CHUNK_NAME.StaticMethod,\n CLASS_DEFINE_CHUNK_NAME.InsVar,\n CLASS_DEFINE_CHUNK_NAME.InsVarMethod,\n CLASS_DEFINE_CHUNK_NAME.InsMethod,\n CLASS_DEFINE_CHUNK_NAME.ConstructorEnd,\n ],\n [CLASS_DEFINE_CHUNK_NAME.End]: [\n CLASS_DEFINE_CHUNK_NAME.Start,\n CLASS_DEFINE_CHUNK_NAME.StaticVar,\n CLASS_DEFINE_CHUNK_NAME.StaticMethod,\n CLASS_DEFINE_CHUNK_NAME.InsVar,\n CLASS_DEFINE_CHUNK_NAME.InsVarMethod,\n CLASS_DEFINE_CHUNK_NAME.InsMethod,\n CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\n CLASS_DEFINE_CHUNK_NAME.ConstructorEnd,\n ],\n [COMMON_CHUNK_NAME.FileMainContent]: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n CLASS_DEFINE_CHUNK_NAME.End,\n ],\n [COMMON_CHUNK_NAME.FileExport]: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n CLASS_DEFINE_CHUNK_NAME.End,\n COMMON_CHUNK_NAME.FileMainContent,\n ],\n [COMMON_CHUNK_NAME.StyleDepsImport]: [],\n [COMMON_CHUNK_NAME.StyleCssContent]: [COMMON_CHUNK_NAME.StyleDepsImport],\n [COMMON_CHUNK_NAME.HtmlContent]: [],\n};\n\n// VUE\u4EE3\u7801\u5757\u63D2\u5165\u987A\u5E8F\nexport const VUE_DEFAULT_LINK_AFTER = {\n [TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart]: [],\n [TEMPLATE_DEFINE_CHUNK_NAME.TemplateDom]: [TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart],\n [TEMPLATE_DEFINE_CHUNK_NAME.TemplateEnd]: [\n TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart, TEMPLATE_DEFINE_CHUNK_NAME.TemplateDom\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart]: [\n TEMPLATE_DEFINE_CHUNK_NAME.TemplateEnd,\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport]: [\n TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart,\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport]: [\n TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart,\n TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.ConstVar]: [\n TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport,\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.LetVar]: [TEMPLATE_DEFINE_CHUNK_NAME.ConstVar],\n\n [TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapStart]: [\n TEMPLATE_DEFINE_CHUNK_NAME.LetVar,\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapContent]: [TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapStart],\n [TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapEnd]: [\n TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapStart, TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapContent,\n ],\n\n [TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart]: [\n TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapEnd,\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent]: [TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart],\n [TEMPLATE_DEFINE_CHUNK_NAME.OnMountedEnd]: [\n TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart, TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent,\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.UnMountedStart]: [\n TEMPLATE_DEFINE_CHUNK_NAME.OnMountedEnd,\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.UnMountedContent]: [\n TEMPLATE_DEFINE_CHUNK_NAME.UnMountedStart,\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd]: [\n TEMPLATE_DEFINE_CHUNK_NAME.UnMountedStart,\n TEMPLATE_DEFINE_CHUNK_NAME.UnMountedContent,\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.Method]: [\n TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd,\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd]: [\n TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart, TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd, TEMPLATE_DEFINE_CHUNK_NAME.Method,\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.CssStyleStart]: [\n TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd,\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.CssStyleImport]: [\n TEMPLATE_DEFINE_CHUNK_NAME.CssStyleStart,\n ],\n [TEMPLATE_DEFINE_CHUNK_NAME.CssStyleEnd]: [TEMPLATE_DEFINE_CHUNK_NAME.CssStyleStart, TEMPLATE_DEFINE_CHUNK_NAME.CssStyleImport]\n};\n\nexport const COMMON_SUB_MODULE_NAME = 'index';\n// vue \u7269\u6599\u5305\nexport const VUE_MODULE_NAME = '@dckj-npm/lowcode-vue-materials';\n", "/**\n * \u83B7\u53D6\u9519\u8BEF\u4FE1\u606F\n */\nexport function getErrorMessage(error: unknown): string | null {\n if (!error) {\n return null;\n }\n\n if (error instanceof Error) {\n return error.message;\n }\n\n if (typeof error === 'string') {\n return error;\n }\n\n if (typeof error === 'object' && error !== null) {\n return (\n getErrorMessage((error as { message: string }).message) ||\n getErrorMessage((error as { errorMessage: string }).errorMessage) ||\n getErrorMessage((error as { detail: string }).detail)\n );\n }\n\n return null;\n}\n", "import * as _ from 'lodash';\nimport {\n IPublicTypeJSExpression,\n IPublicTypeNodeData,\n IPublicTypeNodeSchema,\n isJSExpression,\n isJSSlot,\n isDOMText,\n IPublicTypeContainerSchema,\n IPublicTypeNpmInfo,\n IPublicTypeCompositeValue,\n isNodeSchema,\n isJSFunction,\n} from '@alilc/lowcode-types';\nimport { CodeGeneratorError } from '../types/error';\nimport { isJSExpressionFn } from './common';\n\nexport function isContainerSchema(x: any): x is IPublicTypeContainerSchema {\n return (\n typeof x === 'object' &&\n x &&\n typeof x.componentName === 'string' &&\n typeof x.fileName === 'string'\n );\n}\n\nexport function isNpmInfo(x: any): x is IPublicTypeNpmInfo {\n return typeof x === 'object' && x && typeof x.package === 'string';\n}\n\nconst noop = () => undefined;\n\nconst handleChildrenDefaultOptions = {\n rerun: false,\n};\n\nconst DEFAULT_MAX_DEPTH = 100000;\n\n/**\n * \u904D\u5386\u5E76\u5904\u7406\u6240\u6709\u7684\u5B50\u8282\u70B9\n * @param children\n * @param handlers\n * @param options\n * @returns\n */\nexport function handleSubNodes<T>(\n children: IPublicTypeNodeSchema['children'],\n handlers: {\n string?: (i: string) => T;\n expression?: (i: IPublicTypeJSExpression) => T;\n node?: (i: IPublicTypeNodeSchema) => T;\n },\n options?: {\n rerun?: boolean;\n maxDepth?: number; // \u9632\u6B62\u51FA\u73B0\u6B7B\u5FAA\u73AF\u65E0\u7A77\u9012\u5F52\n },\n): T[] {\n const opt = {\n ...handleChildrenDefaultOptions,\n ...(options || {}),\n };\n const maxDepth = opt.maxDepth ?? DEFAULT_MAX_DEPTH;\n if (maxDepth <= 0) {\n throw new Error('handleSubNodes maxDepth reached');\n }\n\n if (Array.isArray(children)) {\n const list: IPublicTypeNodeData[] = children as IPublicTypeNodeData[];\n return list\n .map((child) => handleSubNodes(child, handlers, { ...opt, maxDepth: maxDepth - 1 }))\n .reduce((p, c) => p.concat(c), []);\n }\n\n let result: T | undefined;\n const childrenRes: T[] = [];\n if (children === null || children === undefined) {\n return [];\n } else if (isDOMText(children)) {\n const handler = handlers.string || noop;\n result = handler(children);\n } else if (isJSExpression(children)) {\n const handler = handlers.expression || noop;\n result = handler(children);\n } else if (isJSSlot(children)) {\n return handleSubNodes(children.value, handlers, { ...opt, maxDepth: maxDepth - 1 });\n } else if (isNodeSchema(children)) {\n const handler = handlers.node || noop;\n const child = children as IPublicTypeNodeSchema;\n result = handler(child);\n\n if (child.children) {\n const childRes = handleSubNodes(child.children, handlers, opt);\n childrenRes.push(...childRes);\n }\n\n if (child.props) {\n if (Array.isArray(child.props)) {\n child.props.forEach(({ value }) => {\n const childRes = handleCompositeValueInProps(value);\n childrenRes.push(...childRes);\n });\n } else {\n Object.values(child.props).forEach((value) => {\n const childRes = handleCompositeValueInProps(value as IPublicTypeCompositeValue);\n childrenRes.push(...childRes);\n });\n }\n }\n } else {\n throw new CodeGeneratorError('handleSubNodes got invalid NodeData', children);\n }\n\n if (result !== undefined) {\n childrenRes.unshift(result);\n }\n\n return childrenRes;\n\n function handleCompositeValueInProps(value: IPublicTypeCompositeValue): T[] {\n if (isJSSlot(value)) {\n return handleSubNodes(value.value, handlers, { ...opt, maxDepth: maxDepth - 1 });\n }\n\n // CompositeArray\n if (Array.isArray(value)) {\n return _.flatMap(value, (v) => handleCompositeValueInProps(v));\n }\n\n // IPublicTypeCompositeObject\n if (\n !isJSExpression(value) &&\n !isJSExpressionFn(value) &&\n !isJSFunction(value) &&\n typeof value === 'object' &&\n value !== null\n ) {\n return _.flatMap(Object.values(value), (v) => handleCompositeValueInProps(v));\n }\n\n return [];\n }\n}\n\nexport function isValidContainerType(schema: IPublicTypeNodeSchema) {\n return [\n 'Page',\n 'Component',\n 'Block',\n ].includes(schema.componentName);\n}\n\nexport const enum ContainerType {\n Page = 'Page',\n Component = 'Component',\n Block = 'Block',\n}", "import type { IPublicTypeJSExpression, IPublicTypeJSFunction } from '@alilc/lowcode-types';\nimport changeCase from 'change-case';\nimport short from 'short-uuid';\nimport { DependencyType, IDependency, IExternalDependency, IInternalDependency } from '../types';\n\n// Doc: https://www.npmjs.com/package/change-case\n\nexport function camel2dash(input: string): string {\n return changeCase.paramCase(input);\n}\n\n/**\n * \u8F6C\u4E3A\u9A7C\u5CF0\n */\nexport function camelize(str: string): string {\n return changeCase.camelCase(str);\n}\n\nexport function generateID(): string {\n return short.generate();\n}\n\nexport function upperCaseFirst(inputValue: string): string {\n return changeCase.upperCaseFirst(inputValue);\n}\n\nexport function uniqueArray<T>(arr: T[], by: (i: T) => string) {\n const map: Record<string, T> = {};\n arr.forEach((item) => {\n map[by(item)] = item;\n });\n // FIXME: Babel \u7F16\u8BD1\u5B58\u5728\u95EE\u9898\uFF0C\u6682\u65F6\u66FF\u6362\u5B9E\u73B0\n // const uniqueKeys = [...new Set<string>(Object.keys(map))];\n const uniqueKeys = Array.from(new Set<string>(Object.keys(map)));\n const uniqueItems = uniqueKeys.map((key) => map[key]);\n return uniqueItems;\n}\n\nexport function getStaticExprValue<T>(expr: string): T {\n // TODO: \u9700\u8981\u5B89\u5168\u6027\u68C0\u67E5\n // eslint-disable-next-line no-new-func\n return Function(`\"use strict\";return (${expr})`)();\n}\n\nexport function isJSExpressionFn(data: any): data is IPublicTypeJSFunction {\n return data?.type === 'JSExpression' && data?.extType === 'function';\n}\n\nexport function isInternalDependency(\n dependency: IDependency,\n): dependency is IInternalDependency {\n return dependency.dependencyType === DependencyType.Internal;\n}\n\nexport function isExternalDependency(\n dependency: IDependency,\n): dependency is IExternalDependency {\n return dependency.dependencyType === DependencyType.External;\n}", "import type { IPublicTypeNodeSchema, IPublicTypeCompositeObject } from '@alilc/lowcode-types';\nimport type { TComponentAnalyzer } from '../types';\n\nimport { handleSubNodes } from '../utils/schema';\n\nexport const componentAnalyzer: TComponentAnalyzer = (container) => {\n let hasRefAttr = false;\n const nodeValidator = (n: IPublicTypeNodeSchema) => {\n if (n.props) {\n const props = n.props as IPublicTypeCompositeObject;\n if (props.ref) {\n hasRefAttr = true;\n }\n }\n };\n\n nodeValidator(container);\n\n if (!hasRefAttr && container.children) {\n // eslint-disable-next-line @typescript-eslint/no-invalid-void-type\n handleSubNodes<void>(\n container.children,\n {\n node: nodeValidator,\n },\n {\n rerun: true,\n },\n );\n }\n\n return {\n isUsingRef: hasRefAttr,\n };\n};\n", "export const isValidIdentifier = (name: string) => {\n return /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/.test(name);\n};\n\nexport const isValidComponentName = (name: string) => {\n return /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF.]*$/.test(name);\n};\n\nexport const ensureValidClassName = (name: string) => {\n if (!isValidIdentifier(name)) {\n return `$${name.replace(/[^_$a-zA-Z0-9]/g, '')}`;\n }\n return name;\n};\n/**\n * \u5224\u65AD\u662F\u5426\u662Fvue\u7684\u5185\u7F6E\u6307\u4EE4\n * @param name\n */\nexport const isValidVueDirective = (name: string) => {\n const directives = ['v-model', 'v-html', 'v-for', 'v-if', 'v-else', 'v-if-else', 'v-show'];\n return directives.includes(name);\n};\n", "import { ResultFile, ResultDir } from '@alilc/lowcode-types';\nimport nm from 'nanomatch';\n\nimport { CodeGeneratorError } from '../types/error';\nimport { FlattenFile } from '../types/file';\n\nexport function createResultFile(name: string, ext = 'jsx', content = ''): ResultFile {\n return {\n name,\n ext,\n content,\n };\n}\n\nexport function createResultDir(name: string): ResultDir {\n return {\n name,\n dirs: [],\n files: [],\n };\n}\n\nexport function addDirectory(target: ResultDir, dir: ResultDir): void {\n if (target.dirs.findIndex((d) => d.name === dir.name) < 0) {\n target.dirs.push(dir);\n } else {\n throw new CodeGeneratorError(\n `Adding same directory to one directory: ${dir.name} -> ${target.name}`,\n );\n }\n}\n\nexport function addFile(target: ResultDir, file: ResultFile): void {\n if (target.files.findIndex((f) => f.name === file.name && f.ext === file.ext) < 0) {\n target.files.push(file);\n } else {\n throw new CodeGeneratorError(\n `Adding same file to one directory: ${file.name} -> ${target.name}`,\n );\n }\n}\n\nexport function flattenResult(dir: ResultDir, cwd = ''): FlattenFile[] {\n if (!dir.files.length && !dir.dirs.length) {\n return [];\n }\n\n return [\n ...dir.files.map(\n (file): FlattenFile => ({\n pathName: joinPath(cwd, `${file.name}${file.ext ? `.${file.ext}` : ''}`),\n content: file.content,\n }),\n ),\n ].concat(...dir.dirs.map((subDir) => flattenResult(subDir, joinPath(cwd, subDir.name))));\n}\n\nexport type GlobOptions = {\n /** \u662F\u5426\u67E5\u627E \".xxx\" \u6587\u4EF6, \u9ED8\u8BA4: \u5426 */\n dot?: boolean;\n};\n\n/**\n * \u67E5\u627E\u6587\u4EF6\n * @param result \u51FA\u7801\u7ED3\u679C\n * @param fileGlobExpr \u6587\u4EF6\u540D\u5339\u914D\u8868\u8FBE\u5F0F\n * @param resultDirPath \u51FA\u7801\u7ED3\u679C\u7684\u8DEF\u5F84\uFF08\u9ED8\u8BA4\u662F '.'\uFF09\n * @returns \u5339\u914D\u7684\u7B2C\u4E00\u4E2A\u6587\u4EF6\u6216 null \uFF08\u627E\u4E0D\u5230\uFF09\n */\nexport function findFile(\n result: ResultDir,\n fileGlobExpr: string,\n options: GlobOptions = {},\n resultDirPath = getResultNameOrDefault(result, ''),\n): ResultFile | null {\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\n const files = scanFiles(result, resultDirPath, maxDepth);\n\n for (let [filePath, file] of files) {\n if (nm.isMatch(filePath, fileGlobExpr, options)) {\n return file;\n }\n }\n\n return null;\n}\n\n/**\n * \u4F7F\u7528 glob \u8BED\u6CD5\u67E5\u627E\u591A\u4E2A\u6587\u4EF6\n * @param result \u51FA\u7801\u7ED3\u679C\n * @param fileGlobExpr \u6587\u4EF6\u540D\u5339\u914D\u8868\u8FBE\u5F0F\n * @param resultDirPath \u51FA\u7801\u7ED3\u679C\u7684\u8DEF\u5F84\uFF08\u9ED8\u8BA4\u662F '.'\uFF09\n * @returns \u627E\u5230\u7684\u6587\u4EF6\u5217\u8868\u7684\u8FED\u4EE3\u5668 [ [\u6587\u4EF6\u8DEF\u5F84, \u6587\u4EF6\u4FE1\u606F], ... ]\n */\nexport function* globFiles(\n result: ResultDir,\n fileGlobExpr: string,\n options: GlobOptions = {},\n resultDirPath = getResultNameOrDefault(result, ''),\n): IterableIterator<[string, ResultFile]> {\n const files = scanFiles(result, resultDirPath);\n\n for (let [filePath, file] of files) {\n if (nm.isMatch(filePath, fileGlobExpr, options)) {\n yield [filePath, file];\n }\n }\n}\n\n/**\n * \u904D\u5386\u6240\u6709\u7684\u6587\u4EF6\n */\nexport function* scanFiles(\n result: ResultDir,\n resultDirPath = getResultNameOrDefault(result, ''),\n maxDepth = 10000,\n): IterableIterator<[string, ResultFile]> {\n for (let file of result.files) {\n const fileName = getFileNameWithExt(file);\n yield [joinPath(resultDirPath, fileName), file];\n }\n\n for (let subDir of result.dirs) {\n yield* scanFiles(subDir, joinPath(resultDirPath, subDir.name), maxDepth - 1);\n }\n}\n\nexport function getFileNameWithExt(file: ResultFile) {\n return `${file.name}${file.ext ? `.${file.ext}` : ''}`;\n}\n\nfunction getResultNameOrDefault(result: ResultDir, defaultDir = '/') {\n return result.name && result.name !== '.' ? result.name : defaultDir;\n}\n\nfunction joinPath(...pathParts: string[]): string {\n return pathParts\n .filter((x) => x !== '' && x !== '.')\n .join('/')\n .replace(/\\\\+/g, '/')\n .replace(/\\/+/g, '/');\n}\n\nexport function* scanDirs(\n result: ResultDir,\n resultDirPath = getResultNameOrDefault(result, ''),\n maxDepth = 10000,\n): IterableIterator<[string, ResultDir]> {\n yield [resultDirPath, result];\n\n for (let subDir of result.dirs) {\n yield* scanDirs(subDir, joinPath(resultDirPath, subDir.name), maxDepth - 1);\n }\n}\n\nexport function* globDirs(\n result: ResultDir,\n dirGlobExpr: string,\n options: GlobOptions = {},\n resultDirPath = getResultNameOrDefault(result, ''),\n): IterableIterator<[string, ResultDir]> {\n const dirs = scanDirs(result, resultDirPath);\n\n for (let [dirPath, dir] of dirs) {\n if (nm.isMatch(dirPath, dirGlobExpr, options)) {\n yield [dirPath, dir];\n }\n }\n}\n\nexport function findDir(\n result: ResultDir,\n dirGlobExpr: string,\n options: GlobOptions = {},\n resultDirPath = getResultNameOrDefault(result, ''),\n): ResultDir | null {\n const dirs = scanDirs(result, resultDirPath);\n\n for (let [dirPath, dir] of dirs) {\n if (nm.isMatch(dirPath, dirGlobExpr, options)) {\n return dir;\n }\n }\n\n return null;\n}\n\n/**\n * \u4ECE\u7ED3\u679C\u4E2D\u79FB\u9664\u4E00\u4E9B\u6587\u4EF6\n * @param result \u51FA\u7801\u7ED3\u679C\u76EE\u5F55\n * @param filePathGlobExpr \u8981\u79FB\u9664\u7684\u6587\u4EF6\u8DEF\u5F84\uFF08glob \u8868\u8FBE\u5F0F\uFF09\n * @param globOptions glob \u53C2\u6570\n * @returns \u79FB\u9664\u4E86\u591A\u5C11\u6587\u4EF6\n */\nexport function removeFilesFromResult(\n result: ResultDir,\n filePathGlobExpr: string,\n globOptions: GlobOptions = {},\n): number {\n let removedCount = 0;\n const [dirPath, fileName] = splitPath(filePathGlobExpr);\n\n const dirs = dirPath ? globDirs(result, dirPath) : [['', result] as const];\n for (let [, dir] of dirs) {\n const files = globFiles(dir, fileName, globOptions, '.');\n for (let [, file] of files) {\n dir.files.splice(dir.files.indexOf(file), 1);\n removedCount += 1;\n }\n }\n\n return removedCount;\n}\n\n/**\n * \u4ECE\u7ED3\u679C\u4E2D\u79FB\u9664\u4E00\u4E9B\u76EE\u5F55\n * @param result \u51FA\u7801\u7ED3\u679C\u76EE\u5F55\n * @param dirPathGlobExpr \u8981\u79FB\u9664\u7684\u76EE\u5F55\u8DEF\u5F84\uFF08glob \u8868\u8FBE\u5F0F\uFF09\n * @param globOptions glob \u53C2\u6570\n * @returns \u79FB\u9664\u4E86\u591A\u5C11\u6587\u4EF6\n */\nexport function removeDirsFromResult(\n result: ResultDir,\n dirPathGlobExpr: string,\n globOptions: GlobOptions = {},\n): number {\n let removedCount = 0;\n const [dirPath, fileName] = splitPath(dirPathGlobExpr);\n\n const dirs = dirPath ? globDirs(result, dirPath) : [['', result] as const];\n for (let [, dir] of dirs) {\n const foundDirs = globDirs(dir, fileName, globOptions, '.');\n for (let [, foundDir] of foundDirs) {\n dir.dirs.splice(dir.dirs.indexOf(foundDir), 1);\n removedCount += 1;\n }\n }\n\n return removedCount;\n}\n\n/**\n * \u5C06\u6587\u4EF6\u8DEF\u5F84\u62C6\u5206\u4E3A\u76EE\u5F55\u8DEF\u5F84\u548C\u6587\u4EF6\u540D\n * @param filePath\n * @returns [fileDirPath, fileName]\n */\nfunction splitPath(filePath: string) {\n const parts = filePath.split('/');\n const fileName = parts.pop() || '';\n return [joinPath(...parts), fileName];\n}\n", "import { BuilderComponentPlugin, IChunkBuilder, ICodeChunk, ICodeStruct, FileType } from '../types';\n\nimport { COMMON_SUB_MODULE_NAME } from '../const/generator';\nimport { FILE_TYPE_FAMILY } from '../const/file';\n\ninterface ChunkGroupInfo {\n chunk: ICodeChunk;\n familyIdx?: number;\n}\n\nfunction whichFamily(type: FileType): [number, FileType[]] | undefined {\n const idx = FILE_TYPE_FAMILY.findIndex((family) => family.indexOf(type) >= 0);\n if (idx < 0) {\n return undefined;\n }\n return [idx, FILE_TYPE_FAMILY[idx]];\n}\n\n/**\n * \u4EE3\u7801\u7247\u6BB5\u5206\u7EC4\n * @param chunks\n */\nexport const groupChunks = (chunks: ICodeChunk[]): ICodeChunk[][] => {\n const tmp: Record<string, Record<number, number>> = {};\n const col = chunks.reduce((chunksSet: Record<string, ChunkGroupInfo[]>, chunk) => {\n const fileKey = chunk.subModule || COMMON_SUB_MODULE_NAME;\n if (!chunksSet[fileKey]) {\n // eslint-disable-next-line no-param-reassign\n chunksSet[fileKey] = [];\n }\n // \u83B7\u53D6\u6587\u4EF6\u7C7B\u578B\n const res = whichFamily(chunk.fileType as FileType);\n const info: ChunkGroupInfo = {\n chunk,\n };\n if (res) {\n const [familyIdx, family] = res;\n const rank = family.indexOf(chunk.fileType as FileType);\n if (tmp[fileKey]) {\n if (tmp[fileKey][familyIdx] !== undefined) {\n if (tmp[fileKey][familyIdx] > rank) {\n tmp[fileKey][familyIdx] = rank;\n }\n } else {\n tmp[fileKey][familyIdx] = rank;\n }\n } else {\n tmp[fileKey] = {};\n tmp[fileKey][familyIdx] = rank;\n }\n info.familyIdx = familyIdx;\n }\n\n chunksSet[fileKey].push(info);\n return chunksSet;\n }, {});\n\n const result: ICodeChunk[][] = [];\n Object.keys(col).forEach((key) => {\n const byType: Record<string, ICodeChunk[]> = {};\n col[key].forEach((info) => {\n let t: string = info.chunk.fileType;\n if (info.familyIdx !== undefined) {\n t = FILE_TYPE_FAMILY[info.familyIdx][tmp[key][info.familyIdx]];\n // eslint-disable-next-line no-param-reassign\n info.chunk.fileType = t;\n }\n if (!byType[t]) {\n byType[t] = [];\n }\n byType[t].push(info.chunk);\n });\n result.push(...Object.keys(byType).map((t) => byType[t]));\n });\n\n return result;\n};\n\n/**\n * \u4EE3\u7801\u7247\u6BB5\u6784\u5EFA\u5668\n *\n * @export\n * @class ChunkBuilder\n * @template T\n */\nexport class ChunkBuilder implements IChunkBuilder {\n private plugins: BuilderComponentPlugin[];\n\n constructor(plugins: BuilderComponentPlugin[] = []) {\n this.plugins = plugins;\n }\n\n async run(\n ir: unknown,\n initialStructure: ICodeStruct = {\n ir,\n chunks: [],\n depNames: [],\n contextData: {},\n },\n ) {\n const structure = initialStructure;\n\n // \u4F9D\u6B21\u6267\u884Cplugins\u83B7\u53D6\u4EE3\u7801\u7247\u6BB5chunks\n const finalStructure: ICodeStruct = await this.plugins.reduce(\n async (previousPluginOperation: Promise<ICodeStruct>, plugin) => {\n const modifiedStructure = await previousPluginOperation;\n return plugin(modifiedStructure);\n },\n Promise.resolve(structure),\n );\n\n // \u4EE3\u7801\u7247\u6BB5\u5206\u7EC4\n const chunks = groupChunks(finalStructure.chunks);\n\n return {\n chunks,\n };\n }\n\n getPlugins() {\n return this.plugins;\n }\n\n addPlugin(plugin: BuilderComponentPlugin) {\n this.plugins.push(plugin);\n }\n}\n\nexport default ChunkBuilder;\n", "import {\n ChunkContent,\n ChunkType,\n CodeGeneratorError,\n CodeGeneratorFunction,\n ICodeBuilder,\n ICodeChunk,\n} from '../types';\n\nexport class CodeBuilder implements ICodeBuilder {\n private chunkDefinitions: ICodeChunk[] = [];\n\n private generators: { [key: string]: CodeGeneratorFunction<ChunkContent> } = {\n [ChunkType.STRING]: (str: string) => str, // no-op for string chunks\n [ChunkType.JSON]: (json: Record<string, unknown>) => JSON.stringify(json), // stringify json to string\n };\n\n constructor(chunkDefinitions: ICodeChunk[] = []) {\n this.chunkDefinitions = chunkDefinitions;\n }\n\n /**\n * Links all chunks together based on their requirements. Returns an array\n * of ordered chunk names which need to be compiled and glued together.\n */\n link(chunkDefinitions: ICodeChunk[] = []): { zIndex: number; content: string } {\n let zIndexA = 0;\n const chunks = chunkDefinitions || this.chunkDefinitions;\n if (chunks.length <= 0) {\n return { zIndex: 0, content: ''}\n }\n\n const unprocessedChunks = chunks.map((chunk) => {\n return {\n name: chunk.name,\n type: chunk.type,\n content: chunk.content,\n linkAfter: this.cleanupInvalidChunks(chunk.linkAfter, chunks),\n zIndex: chunk.zIndex || 0\n };\n });\n\n const resultingString: string[] = [];\n\n while (unprocessedChunks.length > 0) {\n let indexToRemove = 0;\n for (let index = 0; index < unprocessedChunks.length; index++) {\n if (unprocessedChunks[index].linkAfter.length <= 0) {\n indexToRemove = index;\n break;\n }\n }\n\n if (unprocessedChunks[indexToRemove].linkAfter.length > 0) {\n throw new CodeGeneratorError(\n 'Operation aborted. Reason: cyclic dependency between chunks.',\n );\n }\n\n const { type, content, name, zIndex } = unprocessedChunks[indexToRemove];\n const compiledContent = this.generateByType(type, content);\n if (compiledContent) {\n resultingString.push(`${compiledContent}\\n`);\n zIndexA = zIndex > zIndexA ? zIndex : zIndexA;\n }\n\n unprocessedChunks.splice(indexToRemove, 1);\n if (!unprocessedChunks.some((ch) => ch.name === name)) {\n unprocessedChunks.forEach(\n // remove the processed chunk from all the linkAfter arrays from the remaining chunks\n (ch) => {\n // eslint-disable-next-line no-param-reassign\n ch.linkAfter = ch.linkAfter.filter((after) => after !== name);\n },\n );\n }\n }\n\n return { zIndex: zIndexA, content: resultingString.join('\\n')};\n }\n\n generateByType(type: string, content: unknown): string {\n if (!content) {\n return '';\n }\n if (Array.isArray(content)) {\n return content.map((contentItem) => this.generateByType(type, contentItem)).join('\\n');\n }\n\n if (!this.generators[type]) {\n throw new Error(\n `Attempted to generate unknown type ${type}. Please register a generator for this type in builder/index.ts`,\n );\n }\n\n return this.generators[type](content);\n }\n\n // remove invalid chunks (which did not end up being created) from the linkAfter fields\n // one use-case is when you want to remove the import plugin\n private cleanupInvalidChunks(linkAfter: string[], chunks: ICodeChunk[]) {\n return linkAfter.filter((chunkName) => chunks.some((chunk) => chunk.name === chunkName));\n }\n}\n\nexport default CodeBuilder;\n", "import { IPublicTypeProjectSchema, ResultFile, ResultDir } from '@alilc/lowcode-types';\n\nimport {\n BuilderComponentPlugin,\n CodeGeneratorError,\n ICodeChunk,\n ICompiledModule,\n IContextData,\n IModuleBuilder,\n IParseResult,\n ISchemaParser,\n PostProcessor,\n} from '../types';\n\nimport { COMMON_SUB_MODULE_NAME } from '../const/generator';\n\nimport { SchemaParser } from '../parser/SchemaParser';\nimport { ChunkBuilder } from './ChunkBuilder';\nimport { CodeBuilder } from './CodeBuilder';\nimport { createResultFile, createResultDir, addFile } from '../utils/resultHelper';\n\nexport function createModuleBuilder(\n options: {\n plugins: BuilderComponentPlugin[];\n postProcessors: PostProcessor[];\n mainFileName?: string;\n contextData?: IContextData;\n } = {\n plugins: [],\n postProcessors: [],\n },\n): IModuleBuilder {\n const chunkGenerator = new ChunkBuilder(options.plugins);\n const linker = new CodeBuilder();\n\n const generateModule = async (input: unknown): Promise<ICompiledModule> => {\n const moduleMainName = options.mainFileName || COMMON_SUB_MODULE_NAME;\n if (chunkGenerator.getPlugins().length <= 0) {\n throw new CodeGeneratorError(\n 'No plugins found. Component generation cannot work without any plugins!',\n );\n }\n\n let files: ResultFile[] = [];\n // \u83B7\u53D6chunks\u7247\u6BB5\n const { chunks } = await chunkGenerator.run(input, {\n ir: input,\n chunks: [],\n depNames: [],\n contextData: options.contextData || {},\n });\n\n chunks.forEach((fileChunkList) => {\n // \u6309\u7167\u987A\u5E8F\u6B63\u786E\u6392\u5E8F\uFF0C\u5E76\u7EC4\u88C5\u8FD4\u56DE\u4EE3\u7801\u5B57\u7B26\u4E32\n const { content, zIndex } = linker.link(fileChunkList);\n const file = createResultFile(\n fileChunkList[0].subModule || moduleMainName,\n fileChunkList[0].fileType,\n content,\n );\n file.zIndex = zIndex;\n files.push(file);\n });\n\n if (options.postProcessors.length > 0) {\n files = files.map((file) => {\n let { content, ext: type, name } = file;\n // \u8C03\u7528\u9884\u5904\u7406\u5668\n options.postProcessors.forEach((processer) => {\n content = processer(content, type, name);\n });\n const resultFile = createResultFile(file.name, type, content);\n resultFile.zIndex = file.zIndex;\n return resultFile;\n });\n }\n\n return {\n files,\n };\n };\n\n const generateModuleCode = async (schema: IPublicTypeProjectSchema | string): Promise<ResultDir> => {\n // Init\n const schemaParser: ISchemaParser = new SchemaParser();\n const parseResult: IParseResult = schemaParser.parse(schema);\n\n const containerInfo = parseResult.containers[0];\n const { files } = await generateModule(containerInfo);\n\n const dir = createResultDir(containerInfo.moduleName);\n files.forEach((file) => addFile(dir, file));\n\n return dir;\n };\n\n const linkCodeChunks = (chunks: Record<string, ICodeChunk[]>, fileName: string) => {\n const files: ResultFile[] = [];\n\n Object.keys(chunks).forEach((fileKey) => {\n const fileChunkList = chunks[fileKey];\n const { content, zIndex } = linker.link(fileChunkList);\n const file = createResultFile(\n fileChunkList[0].subModule || fileName,\n fileChunkList[0].fileType,\n content\n );\n file.zIndex = zIndex;\n files.push(file);\n });\n\n return files;\n };\n\n return {\n generateModule,\n generateModuleCode,\n linkCodeChunks,\n addPlugin: chunkGenerator.addPlugin.bind(chunkGenerator),\n };\n}\n", "import { IPublicTypeProjectSchema, ResultDir, ResultFile } from '@alilc/lowcode-types';\n\nimport {\n IModuleBuilder,\n IParseResult,\n IProjectBuilder,\n IProjectPlugins,\n IProjectTemplate,\n ISchemaParser,\n PostProcessor,\n ResourceListType,\n} from '../types';\n\nimport { handleRouter, SchemaParser } from '../parser/SchemaParser';\nimport { addDirectory, addFile, createResultDir } from '../utils/resultHelper';\n\nimport { createModuleBuilder } from './ModuleBuilder';\nimport { IContextData, ProjectPostProcessor, ProjectPreProcessor } from '../types/core';\nimport { CodeGeneratorError } from '../types/error';\nimport { isBuiltinSlotName } from '../const';\n\ninterface IModuleInfo {\n moduleName?: string;\n path: string[];\n files: ResultFile[];\n}\n\nexport interface ProjectBuilderInitOptions {\n /** \u9879\u76EE\u6A21\u677F */\n template: IProjectTemplate;\n\n /** \u9879\u76EE\u63D2\u4EF6 */\n plugins: IProjectPlugins;\n\n /** \u6A21\u5757\u540E\u7F6E\u5904\u7406\u5668 */\n postProcessors: PostProcessor[];\n\n /** Schema \u89E3\u6790\u5668 */\n schemaParser?: ISchemaParser;\n\n /** \u9879\u76EE\u7EA7\u522B\u7684\u524D\u7F6E\u5904\u7406\u5668 */\n projectPreProcessors?: ProjectPreProcessor[];\n\n /** \u9879\u76EE\u7EA7\u522B\u7684\u540E\u7F6E\u5904\u7406\u5668 */\n projectPostProcessors?: ProjectPostProcessor[];\n\n /** \u662F\u5426\u5904\u4E8E\u4E25\u683C\u6A21\u5F0F */\n inStrictMode?: boolean;\n\n /** \u4E00\u4E9B\u989D\u5916\u7684\u4E0A\u4E0B\u6587\u6570\u636E */\n extraContextData?: Record<string, unknown>;\n\n /**\n * Hook which is used to customize original options, we can reorder/add/remove plugins/processors\n * of the existing solution.\n */\n customizeBuilderOptions?(originalOptions: ProjectBuilderInitOptions): ProjectBuilderInitOptions;\n}\n\nexport class ProjectBuilder implements IProjectBuilder {\n /** \u9879\u76EE\u6A21\u677F */\n private template: IProjectTemplate;\n\n /** \u9879\u76EE\u63D2\u4EF6 */\n private plugins: IProjectPlugins;\n\n /** \u6A21\u5757\u540E\u7F6E\u5904\u7406\u5668 */\n private postProcessors: PostProcessor[];\n\n /** Schema \u89E3\u6790\u5668 */\n private schemaParser: ISchemaParser;\n\n /** \u9879\u76EE\u7EA7\u522B\u7684\u524D\u7F6E\u5904\u7406\u5668 */\n private projectPreProcessors: ProjectPreProcessor[];\n\n /** \u9879\u76EE\u7EA7\u522B\u7684\u540E\u7F6E\u5904\u7406\u5668 */\n private projectPostProcessors: ProjectPostProcessor[];\n\n /** \u662F\u5426\u5904\u4E8E\u4E25\u683C\u6A21\u5F0F */\n readonly inStrictMode: boolean;\n\n /** \u4E00\u4E9B\u989D\u5916\u7684\u4E0A\u4E0B\u6587\u6570\u636E */\n readonly extraContextData: IContextData;\n\n constructor(builderOptions: ProjectBuilderInitOptions) {\n let customBuilderOptions = builderOptions;\n if (typeof builderOptions.customizeBuilderOptions === 'function') {\n customBuilderOptions = builderOptions.customizeBuilderOptions(builderOptions);\n }\n const {\n template,\n plugins,\n postProcessors,\n schemaParser = new SchemaParser(),\n projectPreProcessors = [],\n projectPostProcessors = [],\n inStrictMode = false,\n extraContextData = {},\n } = customBuilderOptions;\n this.template = template;\n this.plugins = plugins;\n this.postProcessors = postProcessors;\n this.schemaParser = schemaParser;\n this.projectPreProcessors = projectPreProcessors;\n this.projectPostProcessors = projectPostProcessors;\n this.inStrictMode = inStrictMode;\n this.extraContextData = extraContextData;\n }\n\n async generateProjectOne(originalSchema: IPublicTypeProjectSchema | string): Promise<ResultDir> {\n // Init\n const { schemaParser } = this;\n\n let schema: IPublicTypeProjectSchema =\n typeof originalSchema === 'string' ? JSON.parse(originalSchema) : originalSchema;\n\n // Parse / Format\n // Preprocess\n for (const preProcessor of this.projectPreProcessors) {\n // eslint-disable-next-line no-await-in-loop\n schema = await preProcessor(schema);\n }\n\n // Validate\n if (!schemaParser.validate(schema)) {\n throw new CodeGeneratorError('Schema is invalid');\n }\n\n // Collect Deps\n // Parse JSExpression\n const parseResult: IParseResult = schemaParser.parse(schema);\n\n // \u83B7\u53D6\u9759\u6001\u6587\u4EF6\n const projectRoot = await this.template.generateTemplate(parseResult);\n\n let buildResult: IModuleInfo[] = [];\n\n // \u83B7\u53D6\u5404\u4E2A\u63D2\u69FD\u7684\u6784\u9020\u5668\n const builders = this.createModuleBuilders({\n extraContextData: {\n projectRemark: parseResult?.project?.projectRemark,\n template: this.template,\n },\n });\n // Generator Code module\n // components\n // pages\n const containerBuildResult: IModuleInfo[] = await Promise.all<IModuleInfo>(\n parseResult.containers.map(async (containerInfo) => {\n // parseResult.containers = componentsTree\n let builder: IModuleBuilder;\n let path: string[];\n let files: ResultFile[];\n if (containerInfo.containerType === 'Page') {\n //\u5982\u679C\u8FD9\u662F\u8868\u5355\u9875\u9762\n if (containerInfo.state && containerInfo.state.pageType == 'form') {\n builder = builders.form;\n\n path = this.template.slots.form.path;\n // files = [\n // {\n // content: `<template>\\n <div>1111</div>\\n</template>\\n\\n<script setup lang=\"ts\"></script>\\n\\n<style lang=\"scss\" scoped></style>`,\n // ext: 'vue',\n // name: 'Add',\n // },\n // {\n // content: ``,\n // ext: 'ts',\n // name: 'add-fields',\n // },\n // {\n // content: `<template>\\n <div>2222</div>\\n</template>\\n\\n<script setup lang=\"ts\"></script>\\n\\n<style lang=\"scss\" scoped></style>`,\n // ext: 'vue',\n // name: 'Detail',\n // },\n // ];\n files = (await builder.generateModule(containerInfo)).files;\n } else {\n //\u666E\u901A\u9875\u9762\n builder = builders.pages;\n // \u63D2\u69FD\u5B9A\u4E49\u7684\u8DEF\u5F84\n path = this.template.slots.pages.path;\n // \u83B7\u53D6\u7EC4\u88C5\u540E\u7684\u4EE3\u7801\u7247\u6BB5\n files = (await builder.generateModule(containerInfo)).files;\n }\n } else {\n builder = builders.components;\n path = this.template.slots.components.path;\n // \u83B7\u53D6\u7EC4\u88C5\u540E\u7684\u4EE3\u7801\u7247\u6BB5\n files = (await builder.generateModule(containerInfo)).files;\n }\n\n // const { files } = await builder.generateModule(containerInfo);\n\n return {\n moduleName: containerInfo.moduleName,\n path,\n files,\n };\n }),\n );\n buildResult = buildResult.concat(containerBuildResult);\n\n // router\u751F\u6210\n if (parseResult.globalRouter && builders.router) {\n const { files } = await builders.router.generateModule(parseResult.globalRouter);\n\n buildResult.push({\n path: this.template.slots.router.path,\n files,\n });\n }\n\n // entry\u751F\u6210\n if (parseResult.project && builders.entry) {\n const { files } = await builders.entry.generateModule(parseResult.project);\n\n buildResult.push({\n path: this.template.slots.entry.path,\n files,\n });\n }\n\n // appConfig\u751F\u6210\n if (builders.appConfig) {\n const { files } = await builders.appConfig.generateModule(parseResult);\n\n buildResult.push({\n path: this.template.slots.appConfig.path,\n files,\n });\n }\n\n // buildConfig\u751F\u6210\n if (builders.buildConfig) {\n const { files } = await builders.buildConfig.generateModule(parseResult);\n\n buildResult.push({\n path: this.template.slots.buildConfig.path,\n files,\n });\n }\n\n // constants?\u751F\u6210\n if (parseResult.project && builders.constants && this.template.slots.constants) {\n const { files } = await builders.constants.generateModule(parseResult.project);\n\n buildResult.push({\n path: this.template.slots.constants.path,\n files,\n });\n }\n\n // utils?\u751F\u6210\n if (parseResult.globalUtils && builders.utils && this.template.slots.utils) {\n const { files } = await builders.utils.generateModule(parseResult.globalUtils);\n\n buildResult.push({\n path: this.template.slots.utils.path,\n files,\n });\n }\n\n // hooks?\u751F\u6210\n if (parseResult.globalUtils && builders.hooks && this.template.slots.hooks) {\n const { files } = await builders.hooks.generateModule(parseResult.globalUtils);\n\n buildResult.push({\n path: this.template.slots.hooks.path,\n files,\n });\n }\n\n // i18n?\u751F\u6210\n if (builders.i18n && this.template.slots.i18n) {\n const { files } = await builders.i18n.generateModule(parseResult.project);\n\n buildResult.push({\n path: this.template.slots.i18n.path,\n files,\n });\n }\n\n // globalStyle\u751F\u6210\n if (parseResult.project && builders.globalStyle) {\n const { files } = await builders.globalStyle.generateModule(parseResult.project);\n\n buildResult.push({\n path: this.template.slots.globalStyle.path,\n files,\n });\n }\n\n // htmlEntry\u751F\u6210\n if (parseResult.project && builders.htmlEntry) {\n const { files } = await builders.htmlEntry.generateModule(parseResult.project);\n\n buildResult.push({\n path: this.template.slots.htmlEntry.path,\n files,\n });\n }\n\n // packageJSON\u751F\u6210\n if (parseResult.project && builders.packageJSON) {\n const { files } = await builders.packageJSON.generateModule(parseResult.project);\n\n buildResult.push({\n path: this.template.slots.packageJSON.path,\n files,\n });\n }\n\n // demo\u751F\u6210\n if (parseResult.project && builders.demo) {\n const { files } = await builders.demo.generateModule(parseResult.project);\n buildResult.push({\n path: this.template.slots.demo.path,\n files,\n });\n }\n\n // handle extra slots \u5904\u7406\u81EA\u5B9A\u4E49\u63D2\u69FD\n await this.generateExtraSlots(builders, parseResult, buildResult);\n\n // Post Process\n const isSingleComponent = parseResult?.project?.projectRemark?.isSingleComponent;\n // Combine Modules \u9759\u6001\u6587\u4EF6\u548C\u52A8\u6001\u6587\u4EF6\u76EE\u5F55\u6811\u7ED3\u6784\u7ED3\u5408\n buildResult.forEach((moduleInfo) => {\n let targetDir = getDirFromRoot(projectRoot, moduleInfo.path);\n // if project only contain single component, skip creation of directory.\n if (moduleInfo.moduleName && !isSingleComponent) {\n const dir = createResultDir(moduleInfo.moduleName);\n addDirectory(targetDir, dir);\n targetDir = dir;\n }\n moduleInfo.files.forEach((file) => addFile(targetDir, file));\n });\n\n // post-processors \u6587\u4EF6\u683C\u5F0F\u5316\u5904\u7406\n let finalResult = projectRoot;\n for (const projectPostProcessor of this.projectPostProcessors) {\n // eslint-disable-next-line no-await-in-loop\n finalResult = await projectPostProcessor(finalResult, schema, originalSchema, {\n template: this.template,\n parseResult,\n });\n }\n\n return finalResult;\n }\n\n /**\n * \u751F\u6210\u6574\u4E2A\u9879\u76EE\u7ED3\u6784\n * @param originalSchema\n * @param resourceList\n */\n async generateProject(\n originalSchema: IPublicTypeProjectSchema | string | IPublicTypeProjectSchema[],\n resourceList: ResourceListType[],\n ): Promise<ResultDir> {\n if (Array.isArray(originalSchema)) {\n // \u4F20\u5165\u591A\u4E2Aschema\u65F6\u5904\u7406\u8DEF\u7531\u4FE1\u606F\n const routes = handleRouter(originalSchema, resourceList);\n // \u4F20\u5165\u591A\u4E2Aschema\u65F6\u5904\u7406\n const data = await Promise.all(\n originalSchema.map((schema) => {\n schema.routes = routes;\n return this.generateProjectOne(schema);\n }),\n );\n // \u6587\u4EF6\u5408\u5E76\n return mergeResultDirs(data);\n }\n return await this.generateProjectOne(originalSchema as IPublicTypeProjectSchema);\n }\n\n private createModuleBuilders(\n extraContextData: Record<string, unknown> = {},\n ): Record<string, IModuleBuilder> {\n const builders: Record<string, IModuleBuilder> = {};\n\n Object.keys(this.plugins).forEach((pluginName) => {\n // \u904D\u5386\u6240\u6709\u63D2\u4EF6\n if (this.plugins[pluginName].length > 0) {\n const options: { mainFileName?: string } = {};\n if (this.template.slots[pluginName] && this.template.slots[pluginName].fileName) {\n // \u83B7\u53D6\u5404\u4E2A\u63D2\u69FD\u4E3B\u6587\u4EF6\u540D\u79F0\n options.mainFileName = this.template.slots[pluginName].fileName;\n }\n // \u83B7\u53D6\u5404\u4E2A\u63D2\u69FD\u7684\u6784\u9020\u5668\n builders[pluginName] = createModuleBuilder({\n plugins: this.plugins[pluginName],\n postProcessors: this.postProcessors,\n contextData: {\n // template: this.template,\n inStrictMode: this.inStrictMode,\n tolerateEvalErrors: true,\n evalErrorsHandler: '',\n ...this.extraContextData,\n ...extraContextData,\n },\n ...options,\n });\n }\n });\n\n return builders;\n }\n\n /**\n * \u81EA\u5B9A\u4E49\u63D2\u69FD\u4EE3\u7801\u751F\u6210\n * @param builders\n * @param parseResult\n * @param buildResult\n * @private\n */\n private async generateExtraSlots(\n builders: Record<string, IModuleBuilder>,\n parseResult: IParseResult,\n buildResult: IModuleInfo[],\n ) {\n for (const slotName in this.template.slots) {\n if (!isBuiltinSlotName(slotName)) {\n const { files } = await builders[slotName].generateModule(parseResult);\n buildResult.push({\n path: this.template.slots[slotName].path,\n files,\n });\n }\n }\n }\n}\n\nexport function createProjectBuilder(initOptions: ProjectBuilderInitOptions): IProjectBuilder {\n return new ProjectBuilder(initOptions);\n}\n\nfunction getDirFromRoot(root: ResultDir, path: string[]): ResultDir {\n let current: ResultDir = root;\n path.forEach((p) => {\n const exist = current.dirs.find((d) => d.name === p);\n if (exist) {\n current = exist;\n } else {\n const newDir = createResultDir(p);\n addDirectory(current, newDir);\n current = newDir;\n }\n });\n\n return current;\n}\n/**\n * \u5408\u5E76 ResultDir \u6570\u7EC4\n * @param dirs ResultDir \u6570\u7EC4\n * @returns \u5408\u5E76\u540E\u7684\u5355\u4E00 ResultDir\n */\nfunction mergeResultDirs(dirs: ResultDir[]): ResultDir {\n // \u5408\u5E76\u7684\u7ED3\u679C\n const result: ResultDir = { name: '.', dirs: [], files: [] };\n\n const mergeDir = (target: ResultDir, source: ResultDir) => {\n // \u5408\u5E76\u6587\u4EF6\uFF1A\u7528\u6587\u4EF6\u540D\u548C\u6269\u5C55\u540D\u4F5C\u4E3A\u552F\u4E00\u6807\u8BC6\n const fileMap: Record<string, ResultFile> = {};\n [...target.files, ...source.files].forEach((file) => {\n const key = `${file.name}.${file.ext}`;\n if (fileMap[key]) {\n // \u5982\u679C\u6587\u4EF6\u5DF2\u5B58\u5728\uFF0C\u5219\u4FDD\u7559zIndex\u5927\u7684\u90A3\u4E2A\n fileMap[key] = file.zIndex > fileMap[key].zIndex ? file : fileMap[key];\n return;\n }\n fileMap[key] = file; // \u6587\u4EF6\u540D\u76F8\u540C\u5219\u8986\u76D6\n });\n target.files = Object.values(fileMap);\n\n // \u5408\u5E76\u5B50\u76EE\u5F55\uFF1A\u7528\u5B50\u76EE\u5F55\u540D\u4F5C\u4E3A\u552F\u4E00\u6807\u8BC6\n const dirMap: Record<string, ResultDir> = {};\n target.dirs.forEach((dir) => {\n dirMap[dir.name] = dir;\n });\n source.dirs.forEach((dir) => {\n if (dirMap[dir.name]) {\n // \u5982\u679C\u5B50\u76EE\u5F55\u5B58\u5728\uFF0C\u9012\u5F52\u5408\u5E76\n mergeDir(dirMap[dir.name], dir);\n } else {\n // \u5982\u679C\u5B50\u76EE\u5F55\u4E0D\u5B58\u5728\uFF0C\u76F4\u63A5\u6DFB\u52A0\n dirMap[dir.name] = dir;\n }\n });\n target.dirs = Object.values(dirMap);\n };\n\n // \u904D\u5386\u6BCF\u4E2A\u6839\u76EE\u5F55\u8FDB\u884C\u5408\u5E76\n dirs.forEach((dir) => {\n mergeDir(result, dir);\n });\n\n return result;\n}\n", "import * as defaultFs from 'fs';\n\nimport { ResultDir } from '@alilc/lowcode-types';\nimport { PublisherFactory, IPublisher, IPublisherFactoryParams, PublisherError } from '../../types';\nimport { getErrorMessage } from '../../utils/errors';\nimport { writeFolder, IFileSystem } from './utils';\n\nexport interface IDiskFactoryParams extends IPublisherFactoryParams {\n outputPath?: string;\n projectSlug?: string;\n createProjectFolder?: boolean;\n fs?: IFileSystem;\n}\n\nexport interface IDiskPublisher extends IPublisher<IDiskFactoryParams, string> {\n getOutputPath: () => string;\n setOutputPath: (path: string) => void;\n}\n\nexport const createDiskPublisher: PublisherFactory<IDiskFactoryParams, IDiskPublisher> = (\n params: IDiskFactoryParams = {},\n): IDiskPublisher => {\n let { project, outputPath = './' } = params;\n const { fs = defaultFs } = params;\n\n const getProject = (): ResultDir => {\n if (!project) {\n throw new PublisherError('MissingProject');\n }\n return project;\n };\n const setProject = (projectToSet: ResultDir): void => {\n project = projectToSet;\n };\n\n const getOutputPath = (): string => {\n return outputPath;\n };\n const setOutputPath = (path: string): void => {\n outputPath = path;\n };\n\n const publish = async (options: IDiskFactoryParams = {}) => {\n const projectToPublish = options.project || project;\n if (!projectToPublish) {\n throw new PublisherError('MissingProject');\n }\n\n const projectOutputPath = options.outputPath || outputPath;\n const overrideProjectSlug = options.projectSlug || params.projectSlug;\n const createProjectFolder = options.createProjectFolder ?? params.createProjectFolder;\n\n if (overrideProjectSlug) {\n projectToPublish.name = overrideProjectSlug;\n }\n\n try {\n await writeFolder(projectToPublish, projectOutputPath, createProjectFolder, fs);\n return { success: true, payload: projectOutputPath };\n } catch (error) {\n throw new PublisherError(getErrorMessage(error) || 'UnknownError');\n }\n };\n\n return {\n publish,\n getProject,\n setProject,\n getOutputPath,\n setOutputPath,\n };\n};\n", "import * as systemFs from 'fs';\nimport { join } from 'path';\nimport { ResultDir, ResultFile } from '@alilc/lowcode-types';\n\nexport interface IFileSystem {\n existsSync: typeof systemFs.existsSync;\n mkdir: typeof systemFs.mkdir;\n writeFile: typeof systemFs.writeFile;\n}\n\nexport const writeFolder = async (\n folder: ResultDir,\n currentPath: string,\n createProjectFolder = true,\n fs: IFileSystem = systemFs,\n): Promise<void> => {\n const { name, files, dirs } = folder;\n\n const folderPath = createProjectFolder ? join(currentPath, name) : currentPath;\n\n if (!fs.existsSync(folderPath)) {\n await createDirectory(folderPath, fs);\n }\n\n const promises = [\n writeFilesToFolder(folderPath, files, fs),\n writeSubFoldersToFolder(folderPath, dirs, fs),\n ];\n\n await Promise.all(promises);\n};\n\nconst writeFilesToFolder = async (\n folderPath: string,\n files: ResultFile[],\n fs: IFileSystem,\n): Promise<void> => {\n const promises = files.map((file) => {\n const fileName = file.ext ? `${file.name}.${file.ext}` : file.name;\n const filePath = join(folderPath, fileName);\n return writeContentToFile(filePath, file.content, 'utf8', fs);\n });\n\n await Promise.all(promises);\n};\n\nconst writeSubFoldersToFolder = async (\n folderPath: string,\n subFolders: ResultDir[],\n fs: IFileSystem,\n): Promise<void> => {\n const promises = subFolders.map((subFolder) => {\n return writeFolder(subFolder, folderPath, true, fs);\n });\n\n await Promise.all(promises);\n};\n\nconst createDirectory = (pathToDir: string, fs: IFileSystem): Promise<void> => {\n return new Promise((resolve, reject) => {\n fs.mkdir(pathToDir, { recursive: true }, (err) => {\n err ? reject(err) : resolve();\n });\n });\n};\n\nconst writeContentToFile = (\n filePath: string,\n fileContent: string,\n encoding = 'utf8',\n fs: IFileSystem,\n): Promise<void> => {\n return new Promise((resolve, reject) => {\n fs.writeFile(filePath, fileContent, { encoding: encoding as BufferEncoding }, (err) => {\n err ? reject(err) : resolve();\n });\n });\n};\n", "import JSZip from 'jszip';\nimport { ResultDir, ResultFile } from '@alilc/lowcode-types';\nimport type { ZipBuffer } from './index';\n\nexport const isNodeProcess = (): boolean => {\n return (\n typeof process === 'object' &&\n typeof process.versions === 'object' &&\n typeof process.versions.node !== 'undefined'\n );\n};\n\nexport const writeZipToDisk = (\n zipFolderPath: string,\n content: ZipBuffer,\n zipName: string,\n): void => {\n if (!isNodeProcess()) {\n throw new Error('ZipPublisher: writeZipToDisk is only available in NodeJS');\n }\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const fs = require('fs');\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const path = require('path');\n\n if (!fs.existsSync(zipFolderPath)) {\n fs.mkdirSync(zipFolderPath, { recursive: true });\n }\n\n const zipPath = path.join(zipFolderPath, `${zipName}.zip`);\n\n const writeStream = fs.createWriteStream(zipPath);\n writeStream.write(content);\n writeStream.end();\n};\n\nexport const generateProjectZip = async (project: ResultDir): Promise<ZipBuffer> => {\n let zip = new JSZip();\n zip = writeFolderToZip(project, zip, true);\n const zipType = isNodeProcess() ? 'nodebuffer' : 'blob';\n return zip.generateAsync({ type: zipType });\n};\n\nconst writeFolderToZip = (folder: ResultDir, parentFolder: JSZip, ignoreFolder = false) => {\n const zipFolder = ignoreFolder ? parentFolder : parentFolder.folder(folder.name);\n if (zipFolder !== null) {\n folder.files.forEach((file: ResultFile) => {\n // const options = file.contentEncoding === 'base64' ? { base64: true } : {};\n const options = {};\n const fileName = file.ext ? `${file.name}.${file.ext}` : file.name;\n zipFolder.file(fileName, file.content, options);\n });\n\n folder.dirs.forEach((subFolder: ResultDir) => {\n writeFolderToZip(subFolder, zipFolder);\n });\n }\n\n return parentFolder;\n};\n", "import { ResultDir } from '@alilc/lowcode-types';\nimport { PublisherFactory, IPublisher, IPublisherFactoryParams, PublisherError } from '../../types';\nimport { getErrorMessage } from '../../utils/errors';\nimport { isNodeProcess, writeZipToDisk, generateProjectZip } from './utils';\nimport { saveAs } from 'file-saver';\n\nexport type ZipBuffer = Buffer | Blob;\n\ndeclare type ZipPublisherResponse = string | ZipBuffer;\n\nexport interface ZipFactoryParams extends IPublisherFactoryParams {\n outputPath?: string;\n projectSlug?: string;\n}\n\nexport interface ZipPublisher extends IPublisher<ZipFactoryParams, ZipPublisherResponse> {\n getOutputPath: () => string | undefined;\n setOutputPath: (path: string) => void;\n}\n\nexport const createZipPublisher: PublisherFactory<ZipFactoryParams, ZipPublisher> = (\n params: ZipFactoryParams = {},\n): ZipPublisher => {\n let { project, outputPath } = params;\n\n const getProject = () => project;\n const setProject = (projectToSet: ResultDir) => {\n project = projectToSet;\n };\n\n const getOutputPath = () => outputPath;\n const setOutputPath = (path: string) => {\n outputPath = path;\n };\n\n const publish = async (options: ZipFactoryParams = {}) => {\n const projectToPublish = options.project || project;\n if (!projectToPublish) {\n throw new PublisherError('MissingProject');\n }\n\n const zipName = options.projectSlug || params.projectSlug || projectToPublish.name;\n\n try {\n const zipContent = await generateProjectZip(projectToPublish);\n\n if (isNodeProcess()) {\n // If not output path is provided on the node side, zip is not written to disk\n const projectOutputPath = options.outputPath || outputPath;\n if (projectOutputPath) {\n await writeZipToDisk(projectOutputPath, zipContent, zipName);\n }\n } else {\n // the browser end does not require a path\n // auto download zip files\n saveAs(zipContent as Blob, `${zipName}.zip`);\n }\n\n return { success: true, payload: zipContent };\n } catch (error) {\n throw new PublisherError(getErrorMessage(error) || 'UnknownError');\n }\n };\n\n return {\n publish,\n getProject,\n setProject,\n getOutputPath,\n setOutputPath,\n };\n};\n", "import { flatMap, camelCase, get } from 'lodash';\nimport { COMMON_CHUNK_NAME } from '../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n CodeGeneratorError,\n DependencyType,\n FileType,\n ICodeChunk,\n ICodeStruct,\n IDependency,\n IExternalDependency,\n IInternalDependency,\n IWithDependency,\n} from '../../types';\n\nimport { isValidIdentifier } from '../../utils/validate';\n\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\nconst DEP_MAIN_BLOCKLIST = ['lib', 'lib/index', 'es', 'es/index', 'main'];\nconst DEFAULT_EXPORT_NAME = '__default__';\n\nfunction groupDepsByPack(deps: IDependency[]): Record<string, IDependency[]> {\n const depMap: Record<string, IDependency[]> = {};\n\n const addDep = (pkg: string, dep: IDependency) => {\n if (!depMap[pkg]) {\n depMap[pkg] = [];\n }\n depMap[pkg].push(dep);\n };\n\n deps.forEach((dep) => {\n if (dep.dependencyType === DependencyType.Internal) {\n addDep(`${(dep as IInternalDependency).moduleName}${dep.main ? `/${dep.main}` : ''}`, dep);\n } else {\n let depMain = '';\n // TODO: \u90E8\u5206\u7C7B\u578B\u7684 main \u6682\u65F6\u8BA4\u4E3A\u6CA1\u7528\n if (dep.main && DEP_MAIN_BLOCKLIST.indexOf(dep.main) < 0) {\n depMain = dep.main;\n }\n if (depMain.substring(0, 1) === '/') {\n depMain = depMain.substring(1);\n }\n addDep(`${(dep as IExternalDependency).package}${depMain ? `/${depMain}` : ''}`, dep);\n }\n });\n\n return depMap;\n}\n\ninterface IDependencyItem {\n exportName: string;\n aliasName?: string;\n isDefault?: boolean;\n subName?: string;\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\n source: IDependency;\n}\n\ninterface IExportItem {\n exportName: string;\n aliasNames: string[];\n isDefault?: boolean;\n needOriginExport: boolean;\n}\n\nfunction getDependencyIdentifier(info: IDependencyItem): string {\n return info.aliasName || info.exportName;\n}\n\nfunction getExportNameOfDep(dep: IDependency): string {\n if (dep.destructuring) {\n return (\n dep.exportName ||\n dep.componentName ||\n throwNewError('destructuring dependency must have exportName or componentName')\n );\n }\n\n if (!dep.subName) {\n return (\n dep.componentName ||\n dep.exportName ||\n throwNewError('dependency item must have componentName or exportName')\n );\n }\n\n return (\n dep.exportName ||\n `__$${camelCase(\n get(dep, 'moduleName') ||\n get(dep, 'package') ||\n throwNewError('dep.moduleName or dep.package is undefined'),\n )}_default`\n );\n}\n\nfunction throwNewError(msg: string): never {\n throw new Error(msg);\n}\n\nfunction buildPackageImport(\n pkg: string,\n deps: IDependency[],\n targetFileType: string,\n useAliasName: boolean,\n): ICodeChunk[] {\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\n if (!pkg || pkg === 'undefined' || pkg === 'null') {\n // TODO: \u8981\u4E0D\u8981\u52A0\u4E2A warning\uFF1F\n return [];\n }\n\n const chunks: ICodeChunk[] = [];\n\n const exportItems: Record<string, IExportItem> = {};\n const defaultExportNames: string[] = [];\n\n const depsInfo: IDependencyItem[] = deps.map((dep) => {\n const info: IDependencyItem = {\n exportName: getExportNameOfDep(dep),\n isDefault: !dep.destructuring,\n subName: dep.subName || undefined,\n nodeIdentifier: dep.componentName || undefined,\n source: dep,\n };\n\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\n if (info.isDefault) {\n if (defaultExportNames.indexOf(info.exportName) < 0) {\n defaultExportNames.push(info.exportName);\n }\n }\n\n if (!info.subName) {\n if (info.nodeIdentifier === info.exportName) {\n info.nodeIdentifier = undefined;\n }\n\n if (info.isDefault) {\n info.aliasName = info.nodeIdentifier || info.exportName;\n info.exportName = DEFAULT_EXPORT_NAME;\n }\n\n if (info.nodeIdentifier) {\n info.aliasName = info.nodeIdentifier;\n info.nodeIdentifier = undefined;\n }\n } else {\n if (info.isDefault) {\n info.aliasName = info.exportName;\n info.exportName = DEFAULT_EXPORT_NAME;\n }\n\n if (info.nodeIdentifier === `${info.exportName}.${info.subName}`) {\n info.nodeIdentifier = undefined;\n }\n }\n\n return info;\n });\n\n // \u5EFA\u7ACB export \u9879\u76EE\u7684\u5217\u8868\n depsInfo.forEach((info) => {\n if (!exportItems[info.exportName]) {\n exportItems[info.exportName] = {\n exportName: info.exportName,\n isDefault: info.isDefault,\n aliasNames: [],\n needOriginExport: false,\n };\n }\n\n if (!info.nodeIdentifier && !info.aliasName) {\n exportItems[info.exportName].needOriginExport = true;\n }\n });\n\n // \u5EFA\u7ACB\u522B\u540D\u5B57\u5178\n depsInfo.forEach((info) => {\n if (info.aliasName) {\n const { aliasNames } = exportItems[info.exportName];\n if (aliasNames.indexOf(info.aliasName) < 0) {\n aliasNames.push(info.aliasName);\n }\n }\n });\n\n // fix: \u7236\u7EC4\u4EF6ImportAliasDefine, \u4E0E\u5B50\u7EC4\u4EF6import\u7684\u7236\u7EC4\u4EF6\u51B2\u7A81\u60C5\u51B5\n depsInfo.forEach((info) => {\n if (info.nodeIdentifier) {\n const exportItem = exportItems[info.exportName];\n if (!exportItem.needOriginExport && exportItem.aliasNames.length > 0) {\n // eslint-disable-next-line no-param-reassign\n info.aliasName = exportItem.aliasNames[0];\n }\n }\n });\n\n // \u53D1\u73B0 nodeIdentifier \u4E0E exportName \u6216\u8005 aliasName \u51B2\u7A81\u7684\u573A\u666F\n const nodeIdentifiers = depsInfo.map((info) => info.nodeIdentifier).filter(Boolean);\n const conflictInfos = flatMap(Object.keys(exportItems), (exportName) => {\n const exportItem = exportItems[exportName];\n const usedNames = [\n ...exportItem.aliasNames,\n ...(exportItem.needOriginExport || exportItem.aliasNames.length <= 0 ? [exportName] : []),\n ];\n const conflictNames = usedNames.filter((n) => nodeIdentifiers.indexOf(n) >= 0);\n if (conflictNames.length > 0) {\n return [\n ...(conflictNames.indexOf(exportName) >= 0 ? [[exportName, true, exportItem]] : []),\n ...conflictNames.filter((n) => n !== exportName).map((n) => [n, false, exportItem]),\n ];\n }\n return [];\n });\n\n const conflictExports = conflictInfos.filter((c) => c[1]).map((c) => c[0] as string);\n const conflictAlias = conflictInfos.filter((c) => !c[1]).map((c) => c[0] as string);\n\n const solutions: Record<string, string> = {};\n\n depsInfo.forEach((info) => {\n if (info.aliasName && conflictAlias.indexOf(info.aliasName) >= 0) {\n // find solution\n let solution = solutions[info.aliasName];\n if (!solution) {\n solution = `${info.aliasName}Alias`;\n const conflictItem = (conflictInfos.find((c) => c[0] === info.aliasName) ||\n [])[2] as IExportItem;\n conflictItem.aliasNames = conflictItem.aliasNames.filter((a) => a !== info.aliasName);\n conflictItem.aliasNames.push(solution);\n solutions[info.aliasName] = solution;\n }\n // eslint-disable-next-line no-param-reassign\n info.aliasName = solution;\n }\n\n if (conflictExports.indexOf(info.exportName) >= 0) {\n // find solution\n let solution = solutions[info.exportName];\n if (!solution) {\n solution = `${info.exportName}Export`;\n const conflictItem = (conflictInfos.find((c) => c[0] === info.exportName) ||\n [])[2] as IExportItem;\n conflictItem.aliasNames.push(solution);\n conflictItem.needOriginExport = false;\n solutions[info.exportName] = solution;\n }\n // eslint-disable-next-line no-param-reassign\n info.aliasName = solution;\n }\n });\n\n // \u5224\u65AD\u662F\u5426\u6240\u6709\u4F9D\u8D56\u90FD\u6709\u5408\u6CD5\u7684 Identifier\n depsInfo.forEach((info) => {\n const name = info.aliasName || info.exportName;\n if (!isValidIdentifier(name)) {\n throw new CodeGeneratorError(`Invalid Identifier [${name}]`);\n }\n if (info.nodeIdentifier && !isValidIdentifier(info.nodeIdentifier)) {\n throw new CodeGeneratorError(`Invalid Identifier [${info.nodeIdentifier}]`);\n }\n });\n\n const aliasDefineStatements: Record<string, string> = {};\n if (useAliasName) {\n Object.keys(exportItems).forEach((exportName) => {\n const aliasList = exportItems[exportName]?.aliasNames || [];\n if (aliasList.length > 0) {\n const srcName = exportItems[exportName].needOriginExport ? exportName : aliasList[0];\n const aliasNameList = exportItems[exportName].needOriginExport\n ? aliasList\n : aliasList.slice(1);\n aliasNameList.forEach((a) => {\n if (!aliasDefineStatements[a]) {\n aliasDefineStatements[a] = `const ${a} = ${srcName};`;\n }\n });\n }\n });\n }\n\n function getDefaultExportName(info: IDependencyItem): string {\n if (info.isDefault) {\n return defaultExportNames[0];\n }\n return info.exportName;\n }\n\n depsInfo.forEach((info) => {\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\n if (info.nodeIdentifier) {\n // \u524D\u63D0\uFF0C\u5B58\u5728 nodeIdentifier \u4E00\u5B9A\u662F\u6709 subName \u7684\uFF0C\u4E0D\u7136\u524D\u9762\u4F1A\u4F18\u5316\u6389\n const ownerName = getDependencyIdentifier(info);\n\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: COMMON_CHUNK_NAME.ImportAliasDefine,\n content: useAliasName ? `const ${info.nodeIdentifier} = ${ownerName}.${info.subName};` : '',\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport],\n ext: {\n originalName: `${getDefaultExportName(info)}.${info.subName}`,\n aliasName: info.nodeIdentifier,\n dependency: info.source,\n },\n });\n } else if (info.aliasName) {\n // default \u65B9\u5F0F\u7684\u5BFC\u5165\u4F1A\u751F\u6210\u5355\u72ECde import \u8BED\u53E5\uFF0C\u65E0\u9700\u751F\u6210\u8D4B\u503C\u8BED\u53E5\n if (info.isDefault && defaultExportNames.find((n) => n === info.aliasName)) {\n delete aliasDefineStatements[info.aliasName];\n return;\n }\n\n let contentStatement = '';\n if (aliasDefineStatements[info.aliasName]) {\n contentStatement = aliasDefineStatements[info.aliasName];\n delete aliasDefineStatements[info.aliasName];\n }\n\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: COMMON_CHUNK_NAME.ImportAliasDefine,\n content: contentStatement,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport],\n ext: {\n originalName: getDefaultExportName(info),\n aliasName: info.aliasName,\n dependency: info.source,\n },\n });\n }\n });\n\n // \u53EF\u80FD\u4F1A\u5269\u4F59\u4E00\u4E9B\u5B58\u5728\u4E8C\u6B21\u8F6C\u6362\u7684\u5B9A\u4E49\n Object.keys(aliasDefineStatements).forEach((a) => {\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: COMMON_CHUNK_NAME.ImportAliasDefine,\n content: aliasDefineStatements[a],\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport],\n });\n });\n\n const exportItemList = Object.keys(exportItems).map((k) => exportItems[k]);\n const defaultExport = exportItemList.filter((item) => item.isDefault);\n const otherExports = exportItemList.filter((item) => !item.isDefault);\n\n const statementL = ['import'];\n if (defaultExport.length > 0) {\n if (useAliasName) {\n statementL.push(defaultExportNames[0]);\n } else {\n statementL.push(defaultExport[0].aliasNames[0]);\n }\n if (otherExports.length > 0) {\n statementL.push(', ');\n }\n }\n if (otherExports.length > 0) {\n const items = otherExports.map((item) => {\n return !useAliasName || item.needOriginExport || item.aliasNames.length <= 0\n ? item.exportName\n : `${item.exportName} as ${item.aliasNames[0]}`;\n });\n statementL.push(`{ ${items.join(', ')} }`);\n }\n statementL.push('from');\n\n const getInternalDependencyModuleId = () => `@/${(deps[0] as IInternalDependency).type}/${pkg}`;\n\n if (deps[0].dependencyType === DependencyType.Internal) {\n // TODO: Internal Deps path use project slot setting\n statementL.push(`'${getInternalDependencyModuleId()}';`);\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: statementL.join(' '),\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n } else {\n statementL.push(`'${pkg}';`);\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: statementL.join(' '),\n linkAfter: [],\n });\n }\n\n // \u5904\u7406\u4E0B\u4E00\u4E9B\u989D\u5916\u7684 default \u65B9\u5F0F\u7684\u5BFC\u5165\n if (defaultExportNames.length > 1) {\n if (deps[0].dependencyType === DependencyType.Internal) {\n defaultExportNames.slice(1).forEach((exportName) => {\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: `import ${exportName} from '${getInternalDependencyModuleId()}';`,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n });\n } else {\n defaultExportNames.slice(1).forEach((exportName) => {\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: `import ${exportName} from '${pkg}';`,\n linkAfter: [],\n });\n\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: COMMON_CHUNK_NAME.ImportAliasDefine,\n content: '',\n linkAfter: [],\n ext: {\n aliasName: exportName,\n originalName: exportName,\n dependency: {\n package: pkg,\n componentName: exportName,\n },\n },\n });\n });\n }\n }\n\n return chunks;\n}\n\nexport interface PluginConfig {\n fileType?: string; // \u5BFC\u51FA\u7684\u6587\u4EF6\u7C7B\u578B\n useAliasName?: boolean; // \u662F\u5426\u4F7F\u7528 componentName \u91CD\u547D\u540D\u7EC4\u4EF6 identifier\n filter?: (deps: IDependency[]) => IDependency[]; // \u652F\u6301\u8FC7\u6EE4\u80FD\u529B\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?: PluginConfig) => {\n const cfg = {\n fileType: FileType.JS,\n useAliasName: true,\n ...(config || {}),\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IWithDependency;\n\n if (ir && ir.deps && ir.deps.length > 0) {\n const deps = cfg.filter ? cfg.filter(ir.deps) : ir.deps;\n const packs = groupDepsByPack(deps);\n\n Object.keys(packs).forEach((pkg) => {\n const chunks = buildPackageImport(pkg, packs[pkg], cfg.fileType, cfg.useAliasName);\n next.chunks.push(...chunks);\n });\n }\n\n return next;\n };\n\n return plugin;\n};\n\nexport default pluginFactory;\n", "import changeCase from 'change-case';\nimport {\n FileType,\n BuilderComponentPluginFactory,\n BuilderComponentPlugin,\n ICodeStruct,\n IWithDependency,\n ChunkType,\n} from '../../types';\n\nimport { COMMON_CHUNK_NAME } from '../../const/generator';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IWithDependency;\n const { chunks } = next;\n\n if (ir && ir.deps && ir.deps.length > 0) {\n let lowcodeMaterialsStyleAdded = false;\n let fusionUIStyleAdded = false;\n let nextStyleAddedMap: Record<string, boolean> = {};\n ir.deps.forEach((dep: any) => {\n if (dep.package === '@alifd/next' && !nextStyleAddedMap[dep.exportName]) {\n chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: `import '@alifd/next/lib/${changeCase.paramCase(dep.exportName)}/style';`,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n nextStyleAddedMap[dep.exportName] = true;\n } else if (dep.package === '@alilc/lowcode-materials' && !lowcodeMaterialsStyleAdded) {\n chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: 'import \\'@alilc/lowcode-materials/lib/style\\';',\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n lowcodeMaterialsStyleAdded = true;\n } else if (dep.package === '@alifd/fusion-ui' && !fusionUIStyleAdded) {\n chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: 'import \\'@alifd/fusion-ui/lib/style\\';',\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n fusionUIStyleAdded = true;\n }\n });\n }\n\n return next;\n };\n\n return plugin;\n};\n\nexport default pluginFactory;\n", "import changeCase from 'change-case';\nimport {\n COMMON_CHUNK_NAME,\n CLASS_DEFINE_CHUNK_NAME,\n DEFAULT_LINK_AFTER,\n} from '../../../const/generator';\nimport { REACT_CHUNK_NAME } from './const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\nimport { ensureValidClassName } from '../../../utils/validate';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n\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\n const componentClassName = ensureValidClassName(\n `${changeCase.pascalCase(ir.moduleName)}$$${ir.containerType}`,\n );\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: CLASS_DEFINE_CHUNK_NAME.Start,\n content: `class ${componentClassName} extends React.Component {`,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n ],\n });\n\n if (ir.containerType === 'Component') {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\n content: `static displayName = '${ir.moduleName}';`,\n linkAfter: [\n CLASS_DEFINE_CHUNK_NAME.Start,\n ],\n });\n }\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: CLASS_DEFINE_CHUNK_NAME.End,\n content: '}',\n linkAfter: [\n ...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.End],\n REACT_CHUNK_NAME.ClassRenderEnd,\n REACT_CHUNK_NAME.ClassDidMountEnd,\n ],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorStart,\n content: 'constructor(props, context) { super(props); ',\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorStart]],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorEnd,\n content: '}',\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorEnd]],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: REACT_CHUNK_NAME.ClassDidMountStart,\n content: 'componentDidMount() {',\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.End]],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: REACT_CHUNK_NAME.ClassDidMountEnd,\n content: '}',\n linkAfter: [REACT_CHUNK_NAME.ClassDidMountContent, REACT_CHUNK_NAME.ClassDidMountStart],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: REACT_CHUNK_NAME.ClassRenderStart,\n content: 'render() {',\n linkAfter: [\n ...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.End],\n REACT_CHUNK_NAME.ClassDidMountEnd,\n ],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: REACT_CHUNK_NAME.ClassRenderEnd,\n content: '}',\n linkAfter: [\n REACT_CHUNK_NAME.ClassRenderStart,\n REACT_CHUNK_NAME.ClassRenderPre,\n REACT_CHUNK_NAME.ClassRenderJSX,\n ],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.FileExport,\n content: `export default ${componentClassName};`,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n CLASS_DEFINE_CHUNK_NAME.End,\n ],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "export const REACT_CHUNK_NAME = {\n ClassRenderStart: 'ReactComponentClassRenderStart',\n ClassRenderPre: 'ReactComponentClassRenderPre',\n ClassRenderEnd: 'ReactComponentClassRenderEnd',\n ClassRenderJSX: 'ReactComponentClassRenderJSX',\n ClassDidMountStart: 'ReactComponentClassDidMountStart',\n ClassDidMountEnd: 'ReactComponentClassDidMountEnd',\n ClassDidMountContent: 'ReactComponentClassDidMountContent',\n};\n", "import {\n IPublicTypeCompositeArray,\n IPublicTypeCompositeValue,\n IPublicTypeCompositeObject,\n IPublicTypeJSFunction,\n IPublicTypeJSExpression,\n isJSExpression,\n isJSFunction,\n isJSSlot,\n IPublicTypeJSSlot,\n} from '@alilc/lowcode-types';\nimport _ from 'lodash';\n\nimport { IScope, CompositeValueGeneratorOptions, CodeGeneratorError } from '../types';\nimport { generateExpression, generateFunction } from './jsExpression';\nimport { generateJsSlot } from './jsSlot';\nimport { executeFunctionStack } from './aopHelper';\nimport { parseExpressionGetKeywords } from './expressionParser';\nimport { isJSExpressionFn } from './common';\n\ninterface ILegaoVariable {\n type: 'variable';\n value: string;\n variable: string;\n}\n\nfunction isVariable(v: any): v is ILegaoVariable {\n if (_.isObject(v) && (v as ILegaoVariable).type === 'variable') {\n return true;\n }\n return false;\n}\n\ninterface DataSource {\n type: 'DataSource';\n id: string;\n}\n\n/**\n * \u5224\u65AD\u662F\u5426\u662F\u6570\u636E\u6E90\u7C7B\u578B\n */\nfunction isDataSource(v: unknown): v is DataSource {\n return typeof v === 'object' && v != null && (v as Partial<DataSource>).type === 'DataSource';\n}\n\nfunction generateArray(\n value: IPublicTypeCompositeArray,\n scope: IScope,\n options: CompositeValueGeneratorOptions = {},\n): string {\n const body = value.map((v) => generateUnknownType(v, scope, options)).join(',');\n return `[${body}]`;\n}\n\nfunction generateObject(\n value: IPublicTypeCompositeObject,\n scope: IScope,\n options: CompositeValueGeneratorOptions = {},\n): string {\n if (value.type === 'i18n') {\n // params \u53EF\u80FD\u4F1A\u7ED1\u5B9A\u53D8\u91CF\uFF0C\u8FD9\u91CC\u9700\u8981\u5904\u7406\u4E0B\n if (value.params && typeof value.params === 'object') {\n return `this._i18nText(${generateUnknownType(_.omit(value, 'type'), scope, options)})`;\n }\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...\n }\n\n const body = Object.keys(value)\n .map((key) => {\n // const propName = JSON.stringify(key);\n // const v = generateUnknownType(value[key], scope, options);\n // return `${propName}: ${v}`;\n const propName = key; // \u4E0D\u518D\u4F7F\u7528JSON.stringify\u6765\u8F6C\u4E49\u5C5E\u6027\u540D\n const v = generateUnknownType(value[key], scope, options);\n return `${propName}: ${v}`;\n })\n .join(',');\n\n return `{${body}}`;\n}\n\nfunction generateString(value: string): string {\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\n // return JSON.stringify(value);\n\n // \u4F7F\u7528\u5355\u5F15\u53F7\u5305\u56F4\u5B57\u7B26\u4E32\n const escapeString = (val: string) => {\n return JSON.stringify(val).slice(1, -1);\n };\n const data = escapeString(value);\n console.log(data);\n return `'${escapeString(value)}'`;\n}\n\nfunction generateNumber(value: number): string {\n return String(value);\n}\n\nfunction generateBool(value: boolean): string {\n return value ? 'true' : 'false';\n}\n\nfunction genFunction(value: IPublicTypeJSFunction): string {\n const globalVars = parseExpressionGetKeywords(value.value);\n\n if (globalVars.includes('arguments')) {\n return generateFunction(value, { isBindExpr: true });\n }\n\n return generateFunction(value, { isArrow: true });\n}\n\nfunction genJsSlot(\n value: IPublicTypeJSSlot,\n scope: IScope,\n options: CompositeValueGeneratorOptions = {},\n) {\n if (options.nodeGenerator) {\n return generateJsSlot(value, scope, options.nodeGenerator);\n }\n return '';\n}\n\nfunction generateUnknownType(\n value: IPublicTypeCompositeValue,\n scope: IScope,\n options: CompositeValueGeneratorOptions = {},\n): string {\n if (_.isUndefined(value)) {\n return 'undefined';\n }\n\n if (_.isNull(value)) {\n return 'null';\n }\n\n if (_.isArray(value)) {\n if (options.handlers?.array) {\n return executeFunctionStack(value, scope, options.handlers.array, generateArray, options);\n }\n return generateArray(value, scope, options);\n }\n\n // FIXME: \u8FD9\u4E2A\u662F\u4E34\u65F6\u65B9\u6848\n // \u5728\u9047\u5230 type variable \u79C1\u6709\u7C7B\u578B\u65F6\uFF0C\u8F6C\u6362\u4E3A JSExpression\n if (isVariable(value)) {\n const transValue: IPublicTypeJSExpression = {\n type: 'JSExpression',\n value: value.variable,\n };\n\n if (options.handlers?.expression) {\n const expression = executeFunctionStack(\n transValue,\n scope,\n options.handlers.expression,\n generateExpression,\n options,\n );\n return expression || 'undefined';\n }\n return generateExpression(transValue, scope);\n }\n\n if (isJSExpression(value)) {\n if (options.handlers?.expression) {\n return executeFunctionStack(\n value,\n scope,\n options.handlers.expression,\n generateExpression,\n options,\n );\n }\n // return generateExpression(value, scope);\n return generateFunction(value, { isToVue: true, isBelongTemplate: true });\n }\n\n if (isJSFunction(value) || isJSExpressionFn(value)) {\n if (options.handlers?.function) {\n return executeFunctionStack(value, scope, options.handlers.function, genFunction, options);\n }\n return genFunction(value);\n }\n\n if (isJSSlot(value)) {\n if (options.handlers?.slot) {\n return executeFunctionStack(value, scope, options.handlers.slot, genJsSlot, options);\n }\n return genJsSlot(value, scope, options);\n }\n\n if (isDataSource(value)) {\n return generateUnknownType(\n {\n type: 'JSExpression',\n value: `this.dataSourceMap[${JSON.stringify(value.id)}]`,\n },\n scope,\n options,\n );\n }\n\n if (_.isObject(value)) {\n if (options.handlers?.object) {\n return executeFunctionStack(value, scope, options.handlers.object, generateObject, options);\n }\n return generateObject(value as IPublicTypeCompositeObject, scope, options);\n }\n\n if (_.isString(value)) {\n if (options.handlers?.string) {\n return executeFunctionStack(value, scope, options.handlers.string, generateString, options);\n }\n return generateString(value);\n }\n\n if (_.isNumber(value)) {\n if (options.handlers?.number) {\n return executeFunctionStack(value, scope, options.handlers.number, generateNumber, options);\n }\n return generateNumber(value);\n }\n\n if (_.isBoolean(value)) {\n if (options.handlers?.boolean) {\n return executeFunctionStack(value, scope, options.handlers.boolean, generateBool, options);\n }\n return generateBool(value);\n }\n\n throw new CodeGeneratorError('Meet unknown composite value type');\n}\n\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\n// \u8FD9\u4E00\u5C42\u5148\u4E0D\u53BB\u6389\uFF0C\u505A\u5197\u4F59\uFF0C\u65B9\u4FBF\u540E\u7EED\u91CD\u6784\nexport function generateCompositeType(\n value: IPublicTypeCompositeValue,\n scope: IScope,\n options: CompositeValueGeneratorOptions = {},\n): string {\n const result = generateUnknownType(value, scope, options);\n return result;\n}\n", "import * as parser from '@babel/parser';\nimport generate from '@babel/generator';\nimport traverse, { NodePath } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport {\n CallExpression,\n ExpressionStatement,\n Identifier,\n MemberExpression,\n StringLiteral,\n} from '@babel/types';\nimport {\n IPublicTypeJSExpression,\n IPublicTypeJSFunction,\n isJSExpression,\n isJSFunction,\n} from '@alilc/lowcode-types';\nimport { CodeGeneratorError, IScope } from '../types';\nimport { ParseError, transformExpressionLocalRef } from './expressionParser';\nimport { isJSExpressionFn } from './common';\nimport { lineToUppercase } from './changeCase';\n\n/**\n * \u89E3\u6790\u7ED9\u5B9A\u7684\u5B57\u7B26\u4E32\u5185\u5BB9\u4E3A\u51FD\u6570\u8868\u8FBE\u5F0F\u3002\n * @note \u4F7F\u7528babel\u8F6C\u5316\u4E3Aast\u6811\uFF0C\u518D\u5BF9\u6811\u8FDB\u884C\u5904\u7406\n * @param content \u8981\u89E3\u6790\u7684\u5B57\u7B26\u4E32\u5185\u5BB9\u3002\n * @param isToVue \u662F\u5426\u8F6C\u5316\u4E3Avue\n * @param isBelongTemplate \u662F\u5426\u662Ftemplate\u7684\u8868\u8FBE\u5F0F\n * @returns \u89E3\u6790\u6210\u529F\u7684\u51FD\u6570\u8868\u8FBE\u5F0F\u8282\u70B9\uFF0C\u5982\u679C\u89E3\u6790\u5931\u8D25\u5219\u8FD4\u56DEnull\u3002\n * @throws \u5982\u679C\u89E3\u6790\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF\uFF0C\u5C06\u629B\u51FAParseError\u5F02\u5E38\u3002\n */\nfunction parseFunction(\n content: string,\n isToVue?: boolean,\n isBelongTemplate = false,\n): t.FunctionExpression | null {\n try {\n const ast = parser.parse(`(${content});`, {\n plugins: ['jsx'],\n });\n\n let resultNode: t.FunctionExpression | null = null;\n traverse(ast, {\n FunctionExpression(path) {\n resultNode = path.node;\n // todo path.stop() \u662F\u505C\u6B62\u5411\u4E0B\u89E3\u6790\n // path.stop();\n },\n CallExpression(path) {\n if (isToVue) {\n // setState\u8F6C\u5316\n convertSetState(path, isBelongTemplate);\n }\n },\n MemberExpression(path) {\n if (isToVue) {\n // this.state['aaa']\u8F6C\u6362\n convertState(path, isBelongTemplate);\n }\n },\n });\n return resultNode;\n } catch (e) {\n throw new ParseError(content, e);\n }\n}\n\nfunction transformFuncExpr2MethodMember(\n methodName: string,\n content: string,\n isToVue?: boolean,\n isBelongTemplate?: boolean,\n): string {\n const funcNode = parseFunction(content, isToVue, isBelongTemplate);\n if (funcNode) {\n const targetNode = t.classMethod(\n 'method',\n (methodName && t.identifier(methodName)) || funcNode.id || t.identifier('notDefineName'),\n funcNode.params,\n funcNode.body,\n undefined,\n undefined,\n undefined,\n funcNode.async || undefined,\n );\n\n const { code: resultCode } = generate(targetNode, { sourceMaps: false });\n return resultCode;\n }\n\n throw new Error('Can not find Function Statement');\n}\n\nfunction getArrowFunction(content: string) {\n const funcNode = parseFunction(content);\n if (funcNode) {\n const targetNode = t.arrowFunctionExpression(\n funcNode.params,\n funcNode.body,\n funcNode.async || undefined,\n );\n\n const { code: resultCode } = generate(targetNode, { sourceMaps: false });\n return resultCode;\n }\n\n throw new Error('Can not find Function Statement');\n}\n\nfunction getBodyStatements(content: string, isToVue?: boolean, isBelongTemplate?: boolean) {\n const funcNode = parseFunction(content, isToVue, isBelongTemplate);\n if (funcNode) {\n const statements: t.Statement[] = funcNode.body.body;\n\n const targetNode = t.program(statements, undefined, 'module', undefined);\n\n const { code: resultCode } = generate(targetNode, { sourceMaps: false });\n return resultCode;\n }\n\n throw new Error('Can not find Function Statement');\n}\n\n/**\n * \u662F\u5426\u662F\u5E7F\u4E49\u4E0A\u7684 JSFunction\n * @param value\n * @returns\n */\nexport function isBroadJSFunction(value: unknown): boolean {\n return isJSExpressionFn(value) || isJSFunction(value);\n}\n\nexport function generateExpression(value: any, scope: IScope): string {\n if (isJSExpression(value)) {\n const exprVal = (value as IPublicTypeJSExpression).value.trim();\n if (!exprVal) {\n return 'null';\n }\n\n const afterProcessWithLocals = transformExpressionLocalRef(exprVal, scope);\n return afterProcessWithLocals;\n }\n\n throw new CodeGeneratorError('Not a JSExpression');\n}\n\nfunction getFunctionSource(cfg: IPublicTypeJSFunction): string {\n return cfg.source || cfg.value || cfg.compiled;\n}\n\n/**\n * \u751F\u6210\u51FD\u6570\u4EE3\u7801\n *\n * @param value \u51FD\u6570\u6216\u8868\u8FBE\u5F0F\n * @param config \u914D\u7F6E\u5BF9\u8C61\uFF0C\u5305\u542B\u4EE5\u4E0B\u5C5E\u6027\uFF1A\n * - name: \u51FD\u6570\u540D\u79F0\uFF0C\u53EF\u9009\n * - isMember: \u662F\u5426\u4E3A\u6210\u5458\u51FD\u6570\uFF0C\u9ED8\u8BA4\u4E3Afalse\n * - isBlock: \u662F\u5426\u4E3A\u5757\u7EA7\u51FD\u6570\uFF0C\u9ED8\u8BA4\u4E3Afalse\n * - isArrow: \u662F\u5426\u4E3A\u7BAD\u5934\u51FD\u6570\uFF0C\u9ED8\u8BA4\u4E3Afalse\n * - isBindExpr: \u662F\u5426\u4E3A\u7ED1\u5B9A\u8868\u8FBE\u5F0F\uFF0C\u9ED8\u8BA4\u4E3Afalse\n * - isToVue \u662F\u5426\u8F6C\u5316\u4E3Avue\uFF08state\uFF0Cthis\u8F6C\u6362\uFF09\n * - isDeleteLastSemicolon \u662F\u5426\u5220\u9664\u751F\u6210\u4EE3\u7801\u6700\u540E\u7684\u4E00\u4E2A\u5206\u53F7\uFF0C\u9ED8\u8BA4\u4E3Afalse\n * - isBelongTemplate \u662F\u5426\u662Ftemplate\u7684\u8868\u8FBE\u5F0F\n * @returns \u8FD4\u56DE\u751F\u6210\u7684\u51FD\u6570\u4EE3\u7801\n * @throws \u5F53 value \u4E0D\u662F JSFunction \u6216 JSExpression \u65F6\u629B\u51FA CodeGeneratorError\n */\nexport function generateFunction(\n value: any,\n config: {\n name?: string;\n isMember?: boolean;\n isBlock?: boolean;\n isArrow?: boolean;\n isBindExpr?: boolean;\n isToVue?: boolean;\n isDeleteLastSemicolon?: boolean;\n isBelongTemplate?: boolean;\n } = {\n name: undefined,\n isMember: false,\n isBlock: false,\n isArrow: false,\n isBindExpr: false,\n isToVue: false,\n isDeleteLastSemicolon: false,\n isBelongTemplate: false,\n },\n) {\n function extractFunctionCalls(str: string) {\n const regex =\n /(\\w+)\\.apply\\(\\w+,\\s*Array\\.prototype\\.slice\\.call\\(arguments\\)\\.concat\\(\\[(.*?)\\]\\)/g;\n const matches = [];\n let match;\n\n while ((match = regex.exec(str)) !== null) {\n const functionName = match[1];\n const params = match[2]\n .replace(/\"(\\w+)\":\\s*\"([^\"]*?)\"/g, \"'$1':'$2'\")\n .replace(/\"(\\w+)\":\\s*(\\d+)/g, \"'$1':$2\");\n matches.push(`${functionName}(${params})`);\n }\n\n return matches;\n }\n // js\u51FD\u6570\n if (isBroadJSFunction(value)) {\n const functionCfg = value as IPublicTypeJSFunction;\n const functionSource = getFunctionSource(functionCfg);\n if (config.isMember) {\n return transformFuncExpr2MethodMember(\n config.name || '',\n functionSource,\n config.isToVue,\n config.isBelongTemplate,\n );\n }\n if (config.isBlock) {\n return getBodyStatements(functionSource, config.isToVue, config.isBelongTemplate);\n }\n if (config.isArrow) {\n return getArrowFunction(functionSource);\n }\n if (config.isBindExpr) {\n return `${extractFunctionCalls(functionSource)}`;\n }\n return functionSource;\n }\n // js\u8868\u8FBE\u5F0F\n if (isJSExpression(value)) {\n if (config.isToVue) {\n // \u5982\u679C\u662F\u8F6C\u6362\u4E3Avue\uFF0C\u5219\u53BB\u6389this.state,this.xxx\n return getExpressionBody(\n value.value,\n config.isToVue,\n config.isDeleteLastSemicolon,\n config.isBelongTemplate,\n );\n }\n return value.value;\n }\n\n throw new CodeGeneratorError('Not a JSFunction or JSExpression');\n}\n\n/**\n * \u5C06this.setState({a:1}) \u8F6C\u6362\u4E3A this.a.value = 1\n * @param path\n * @param isBelongTemplate \u662F\u5426\u5C5E\u4E8Etemplate\u7684\u8868\u8FBE\u5F0F\n */\nfunction convertSetState(path: NodePath<CallExpression>, isBelongTemplate?: boolean) {\n // \u62FF\u5230\u8282\u70B9\n const node = path.node;\n // \u5224\u65AD\u662F\u5426\u662Fthis.setState\n if (\n node.callee.type === 'MemberExpression' &&\n node.callee.object.type === 'ThisExpression' &&\n node.callee.property.name === 'setState'\n ) {\n // \u83B7\u53D6setstate\u91CC\u7684\u53C2\u6570\n const args = node.arguments[0].properties;\n // \u83B7\u53D6setstate\u91CC\u7684\u56DE\u8C03\u65B9\u6CD5\n const stateFunction = node.arguments[1];\n const expressionStatementArray: ExpressionStatement[] = [];\n // \u904D\u5386\u53C2\u6570\n args.forEach((arg: any) => {\n // key\u9A7C\u5CF0\u5904\u7406 todo \u5F53key\u662F\u5B57\u7B26\u4E32\u662F\u8FDB\u884C\u9A7C\u5CF0\u5904\u7406\uFF0Ckey\u662F\u8868\u8FBE\u5F0F\u6682\u4E0D\u5904\u7406\n if (arg.key.type == 'Identifier') {\n arg.key.name = lineToUppercase(arg.key.name);\n }\n if (arg.key.type == 'Literal' || arg.key.type == 'StringLiteral') {\n arg.key.value = lineToUppercase(arg.key.value);\n // \u53BB\u9664\u5355\u5F15\u53F7\n arg.key = t.identifier(arg.key.value);\n }\n // \u83B7\u5F97\u8D4B\u503C\u8868\u8FBE\u5F0F\n let left1 = t.memberExpression(t.thisExpression(), arg.key, true);\n if (!isBelongTemplate) {\n // \u4E0D\u662Ftemplate\u5219\u8981\u52A0\u4E0A.value\u8BBF\u95EE\n left1 = t.memberExpression(left1, t.identifier('value'));\n }\n const assignment = t.assignmentExpression('=', left1, arg.value);\n // \u8868\u8FBE\u58F0\u660E\u518D\u5957\u4E00\u5C42\n expressionStatementArray.push(t.expressionStatement(assignment));\n });\n // \u56DE\u8C03\u53C2\u6570\u5904\u7406\n if (stateFunction) {\n // \u5C06\u56DE\u8C03\u65B9\u6CD5\u4F53\u79FB\u5230setState\u5916\n const functionBody = stateFunction.body?.body;\n expressionStatementArray.push(...functionBody);\n }\n // \u83B7\u53D6\u7236\u8282\u70B9\u8DEF\u5F84\n const expressionStatementPath = path.parentPath;\n // \u7528\u7B49\u53F7\u8868\u8FBE\u5F0F\u6279\u91CF\u66FF\u6362\u7236\u8282\u70B9\u8DEF\u5F84\u7684this.setState\u8868\u8FBE\u5F0F\n expressionStatementPath.replaceWithMultiple(expressionStatementArray);\n }\n}\n\n/**\n * todo this.xxx \u8F6C\u4E3A xxx\u3002this.state['aaa'] \u8F6C\u4E3A aaa.value\n * @param path \u8DEF\u5F84\n * @param isBelongTemplate \u662F\u5426\u5C5E\u4E8Etemplate\u7684\u8868\u8FBE\u5F0F\n */\nfunction convertState(path: NodePath<MemberExpression>, isBelongTemplate?: boolean) {\n // todo this.xxx \u8F6C\u4E3A xxx\u3002this.state['aaa'] \u8F6C\u4E3A aaa.value\n const node = path.node;\n // \u5224\u65AD\u662F\u4E0D\u662Fthis.state['aaa'] \u683C\u5F0F\n if (node.object.type === 'ThisExpression' && node.property.name === 'state') {\n // \u83B7\u53D6\u7236\u8DEF\u5F84\n const parentPath = path.parentPath;\n // \u83B7\u53D6\u7236\u8282\u70B9\n const parentNode = parentPath.node as MemberExpression;\n // \u83B7\u53D6\u53D8\u91CF\u540D ['aaa'],\u5E76\u8FDB\u884C\u9A7C\u5CF0\u8F6C\u6362\n const name = lineToUppercase(\n (parentNode.property as StringLiteral).value || (parentNode.property as Identifier).name,\n );\n if (isBelongTemplate) {\n // template\u5219this.state['aaa']\u8F6C\u6362\u4E3Aaaa\n parentPath.replaceWith(t.identifier(name));\n } else {\n // \u66FF\u6362\u7236\u8282\u70B9\u4E3A aaa.value\n parentPath.replaceWith(t.memberExpression(t.identifier(name), t.identifier('value')));\n }\n } else if (node.object.type === 'ThisExpression') {\n // \u5982\u679C\u4EC5\u662Fthis.xxx \u683C\u5F0F\uFF0C\u5219\u66FF\u6362\u4E3Axxx\n path.replaceWith(node.property);\n }\n}\n\n/**\n * \u83B7\u53D6this.state.xxx\u91CC\u7684xxx\n * @param path\n */\nfunction getStateName(path: NodePath<MemberExpression>) {\n const node = path.node;\n // \u5224\u65AD\u662F\u4E0D\u662Fthis.state['aaa']\u6216\u8005 \u683C\u5F0F\n if (!(node.object.type === 'ThisExpression') || !(node.property.name === 'state')) {\n return '';\n }\n // \u83B7\u53D6\u7236\u8DEF\u5F84\n const parentPath = path.parentPath;\n // \u83B7\u53D6\u7236\u8282\u70B9\n const parentNode = parentPath.node as MemberExpression;\n // \u83B7\u53D6\u53D8\u91CF\u540D ['aaa'],\u5E76\u8FDB\u884C\u9A7C\u5CF0\u8F6C\u6362\n return lineToUppercase(\n (parentNode.property as StringLiteral).value || (parentNode.property as Identifier).name,\n );\n}\n// function convertState(path: NodePath<CallExpression>) {\n// // Grab the node\n// const node = path.node;\n//\n// // Check if it's a this.setState call\n// if (\n// node.callee.type === 'MemberExpression' &&\n// node.callee.object.type === 'ThisExpression' &&\n// node.callee.property.name === 'setState'\n// ) {\n// // Get the arguments passed to setState (e.g., { field: value })\n// const args = node.arguments[0].properties;\n// const expressionStatementArray: ExpressionStatement[] = [];\n//\n// // Loop through each argument in the setState\n// args.forEach((arg: any) => {\n// if (arg.key.type === 'Identifier') {\n// // For static keys like 'a': 1\n// const assignment = t.assignmentExpression(\n// '=',\n// t.memberExpression(t.thisExpression(), arg.key),\n// arg.value,\n// );\n// expressionStatementArray.push(t.expressionStatement(assignment));\n// } else if (arg.key.type === 'Literal') {\n// // For keys like 'a': 1\n// const assignment = t.assignmentExpression(\n// '=',\n// t.memberExpression(t.thisExpression(), arg.key),\n// arg.value,\n// );\n// expressionStatementArray.push(t.expressionStatement(assignment));\n// } else if (arg.key.type === 'MemberExpression') {\n// // Handle dynamic keys (e.g., [field]: clickValue)\n// const dynamicKey = arg.key; // this will be [field] part\n// const computedKey = t.memberExpression(t.thisExpression(), dynamicKey.object);\n// const assignment = t.assignmentExpression(\n// '=',\n// t.memberExpression(computedKey, dynamicKey.property),\n// arg.value,\n// );\n// expressionStatementArray.push(t.expressionStatement(assignment));\n// }\n// });\n//\n// // If there's a callback function, recursively handle the nested setState inside it\n// if (node.arguments[1] && node.arguments[1].type === 'ArrowFunctionExpression') {\n// const callback = node.arguments[1];\n// if (callback.body.body) {\n// callback.body.body.forEach((nestedNode: any) => {\n// if (\n// nestedNode.type === 'ExpressionStatement' &&\n// nestedNode.expression.callee.property.name === 'setState'\n// ) {\n// // Recursively handle nested setState calls\n// convertState({\n// node: nestedNode.expression,\n// parentPath: path.parentPath,\n// });\n// }\n// });\n// }\n// }\n//\n// // Replace the original setState call with the transformed code\n// const expressionStatementPath = path.parentPath;\n// expressionStatementPath.replaceWithMultiple(expressionStatementArray);\n// }\n// }\n\n/**\n * \u89E3\u6790\u7ED9\u5B9A\u7684\u5B57\u7B26\u4E32\u5185\u5BB9\u4E3Ajs\u8868\u8FBE\u5F0F\u3002\n * @note \u4F7F\u7528babel\u8F6C\u5316\u4E3Aast\u6811\uFF0C\u518D\u5BF9\u6811\u8FDB\u884C\u5904\u7406\n * @param content \u8981\u89E3\u6790\u7684\u5B57\u7B26\u4E32\u5185\u5BB9\u3002\n * @param isToVue\n * @param isBelongTemplate \u662F\u5426\u662Ftemplate\u7684\u8868\u8FBE\u5F0F\n * @returns \u89E3\u6790\u6210\u529F\u7684\u8868\u8FBE\u5F0F\u8282\u70B9\uFF0C\u5982\u679C\u89E3\u6790\u5931\u8D25\u5219\u8FD4\u56DEnull\u3002\n * @throws \u5982\u679C\u89E3\u6790\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF\uFF0C\u5C06\u629B\u51FAParseError\u5F02\u5E38\u3002\n */\nexport function parseExpression(\n content: string,\n isToVue?: boolean,\n isBelongTemplate?: boolean,\n): t.FunctionExpression | null {\n try {\n const ast = parser.parse(`(${content})`, {\n plugins: ['jsx'],\n });\n\n let resultNode: t.FunctionExpression | null = ast;\n traverse(ast, {\n MemberExpression(path) {\n if (isToVue) {\n convertState(path, isBelongTemplate);\n }\n },\n });\n return resultNode;\n } catch (e) {\n throw new ParseError(content, e);\n }\n}\n\n/**\n * \u89E3\u6790js\u8868\u8FBE\u5F0F\u83B7\u53D6this.state.xxx \u7684xxx\n * @param content\n */\nexport function parseExpressionGetState(content: string): Set<string> {\n try {\n const ast = parser.parse(`(${content})`, {\n plugins: ['jsx'],\n });\n\n const refSet: Set<string> = new Set();\n traverse(ast, {\n MemberExpression(path) {\n refSet.add(getStateName(path));\n },\n });\n return refSet;\n } catch (e) {\n throw new ParseError(content, e);\n }\n}\n\n/**\n * \u83B7\u53D6js\u8868\u8FBE\u5F0F\u6587\u5B57\n * @param content\n * @param isToVue \u662F\u5426\u662F\u8F6C\u6362\u4E3Avue\n * @param isDeleteLastSemicolon \u662F\u5426\u5220\u9664\u6700\u540E\u4E00\u4E2A\u5206\u53F7\n * @param isBelongTemplate \u662F\u5426\u662Ftemplate\u7684\u5185\u5BB9\n */\nfunction getExpressionBody(\n content: string,\n isToVue?: boolean,\n isDeleteLastSemicolon?: boolean,\n isBelongTemplate?: boolean,\n) {\n const funcNode = parseExpression(content, isToVue, isBelongTemplate);\n if (funcNode) {\n const { code: resultCode } = generate(funcNode, { sourceMaps: false });\n if (resultCode) {\n // \u5220\u9664\u6700\u540E\u4E00\u4E2A\u5206\u53F7\n if (isDeleteLastSemicolon && resultCode.endsWith(';')) {\n return resultCode.slice(0, -1);\n }\n }\n return resultCode;\n }\n\n throw new Error('Can not find Function Statement');\n}\n", "import * as parser from '@babel/parser';\nimport generate from '@babel/generator';\nimport traverse, { NodePath } from '@babel/traverse';\nimport * as t from '@babel/types';\nimport { isIdentifier, Node } from '@babel/types';\n\nimport { OrderedSet } from './OrderedSet';\nimport { IScope } from '../types';\n\nexport class ParseError extends Error {\n readonly expr: string | t.Expression;\n\n readonly detail: unknown;\n\n constructor(expr: string | t.Expression, detail: unknown) {\n super(`Failed to parse expression \"${typeof expr === 'string' ? expr : generate(expr)}\"`);\n this.expr = expr;\n this.detail = detail;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\nconst MAYBE_EXPRESSIONS: {\n [k in Node['type']]?: {\n // fields: Array<keyof (Node & { type: k })>\n fields: string[] | ((node: Node) => string[]);\n };\n} = {\n ArrayExpression: { fields: ['elements'] },\n AssignmentExpression: { fields: ['left', 'right'] },\n BinaryExpression: { fields: ['left', 'right'] },\n CallExpression: { fields: ['arguments', 'callee'] },\n ConditionalExpression: { fields: ['test', 'consequent', 'alternate'] },\n DoWhileStatement: { fields: ['test'] },\n ExpressionStatement: { fields: ['expression'] },\n ForInStatement: { fields: ['right'] },\n ForStatement: { fields: ['init', 'test', 'update'] },\n IfStatement: { fields: ['test'] },\n LogicalExpression: { fields: ['left', 'right'] },\n MemberExpression: {\n fields: (node) => {\n return node.type === 'MemberExpression' && node.computed\n ? ['object', 'property']\n : ['object'];\n },\n },\n NewExpression: { fields: ['callee', 'arguments'] },\n ObjectMethod: {\n fields: (node) => {\n return node.type === 'ObjectMethod' && node.computed ? ['key'] : [];\n },\n },\n ObjectProperty: {\n fields: (node) => {\n return node.type === 'ObjectProperty' && node.computed ? ['key', 'value'] : ['value'];\n },\n },\n ReturnStatement: { fields: ['argument'] },\n SequenceExpression: { fields: ['expressions'] },\n ParenthesizedExpression: { fields: ['expression'] },\n SwitchCase: { fields: ['test'] },\n SwitchStatement: { fields: ['discriminant'] },\n ThrowStatement: { fields: ['argument'] },\n UnaryExpression: { fields: ['argument'] },\n UpdateExpression: { fields: ['argument'] },\n VariableDeclarator: { fields: ['init'] },\n WhileStatement: { fields: ['test'] },\n WithStatement: { fields: ['object'] },\n AssignmentPattern: { fields: ['right'] },\n ArrowFunctionExpression: { fields: ['body'] },\n ClassExpression: { fields: ['superClass'] },\n ClassDeclaration: { fields: ['superClass'] },\n ExportDefaultDeclaration: { fields: ['declaration'] },\n ForOfStatement: { fields: ['right'] },\n ClassMethod: {\n fields: (node) => {\n return node.type === 'ClassMethod' && node.computed ? ['key'] : [];\n },\n },\n SpreadElement: { fields: ['argument'] },\n TaggedTemplateExpression: { fields: ['tag'] },\n TemplateLiteral: { fields: ['expressions'] },\n YieldExpression: { fields: ['argument'] },\n AwaitExpression: { fields: ['argument'] },\n OptionalMemberExpression: {\n fields: (node) => {\n return node.type === 'OptionalMemberExpression' && node.computed\n ? ['object', 'property']\n : ['object'];\n },\n },\n OptionalCallExpression: { fields: ['callee', 'arguments'] },\n JSXSpreadAttribute: { fields: ['argument'] },\n BindExpression: { fields: ['object', 'callee'] },\n ClassProperty: {\n fields: (node) => {\n return node.type === 'ClassProperty' && node.computed ? ['key', 'value'] : ['value'];\n },\n },\n PipelineTopicExpression: { fields: ['expression'] },\n PipelineBareFunction: { fields: ['callee'] },\n ClassPrivateProperty: { fields: ['value'] },\n Decorator: { fields: ['expression'] },\n TupleExpression: { fields: ['elements'] },\n TSDeclareMethod: {\n fields: (node) => {\n return node.type === 'TSDeclareMethod' && node.computed ? ['key'] : [];\n },\n },\n TSPropertySignature: {\n fields: (node) => {\n return node.type === 'TSPropertySignature' && node.computed\n ? ['key', 'initializer']\n : ['initializer'];\n },\n },\n\n TSMethodSignature: {\n fields: (node) => {\n return node.type === 'TSMethodSignature' && node.computed ? ['key'] : [];\n },\n },\n TSAsExpression: { fields: ['expression'] },\n TSTypeAssertion: { fields: ['expression'] },\n TSEnumDeclaration: { fields: ['initializer'] },\n TSEnumMember: { fields: ['initializer'] },\n TSNonNullExpression: { fields: ['expression'] },\n TSExportAssignment: { fields: ['expression'] },\n};\n\nexport interface ParseExpressionGetGlobalVariablesOptions {\n filter?: (varName: string) => boolean;\n}\n\nconst CROSS_THIS_SCOPE_TYPE_NODE: {\n [k in Node['type']]?: boolean;\n} = {\n ArrowFunctionExpression: false, // \u7BAD\u5934\u51FD\u6570\u4E0D\u8DE8\u8D8A this \u7684 scope\n FunctionExpression: true,\n FunctionDeclaration: true,\n // FunctionTypeAnnotation: false, // \u8FD9\u662F TS \u5B9A\u4E49\n // FunctionTypeParam: false, // \u8FD9\u662F TS \u5B9A\u4E49\n ClassDeclaration: true,\n ClassExpression: true,\n ClassBody: true,\n ClassImplements: true,\n ClassMethod: true,\n ClassPrivateMethod: true,\n ClassProperty: true,\n ClassPrivateProperty: true,\n DeclareClass: true,\n};\n\nconst JS_KEYWORDS = ['arguments', 'this', 'super'];\n\nexport function parseExpressionGetKeywords(expr: string | null | undefined): string[] {\n if (!expr) {\n return [];\n }\n\n try {\n const keywordVars = new OrderedSet<string>();\n\n const ast = parser.parse(`!(${expr});`, {\n plugins: [\n 'jsx',\n ],\n });\n\n const addIdentifierIfNeeded = (x: Node | null | undefined) => {\n if (typeof x === 'object' && isIdentifier(x) && JS_KEYWORDS.includes(x.name)) {\n keywordVars.add(x.name);\n }\n };\n\n traverse(ast, {\n enter(path) {\n const { node } = path;\n const expressionFields = MAYBE_EXPRESSIONS[node.type]?.fields;\n if (expressionFields) {\n (typeof expressionFields === 'function'\n ? expressionFields(node)\n : expressionFields\n ).forEach((fieldName) => {\n const fieldValue = node[fieldName as keyof typeof node];\n if (typeof fieldValue === 'object') {\n if (Array.isArray(fieldValue)) {\n fieldValue.forEach((item: any) => {\n addIdentifierIfNeeded(item);\n });\n } else {\n addIdentifierIfNeeded(fieldValue as any);\n }\n }\n });\n }\n },\n });\n\n return keywordVars.toArray().filter(Boolean);\n } catch (e) {\n throw new ParseError(expr, e);\n }\n}\n\nexport function parseExpressionGetGlobalVariables(\n expr: string | null | undefined,\n { filter = () => true }: ParseExpressionGetGlobalVariablesOptions = {},\n): string[] {\n if (!expr) {\n return [];\n }\n\n try {\n const undeclaredVars = new OrderedSet<string>();\n\n const ast = parser.parse(`!(${expr});`);\n\n const addUndeclaredIdentifierIfNeeded = (\n x: Node | null | undefined,\n path: NodePath<Node>,\n ) => {\n if (typeof x === 'object' && isIdentifier(x) && !path.scope.hasBinding(x.name)) {\n undeclaredVars.add(x.name);\n }\n };\n\n traverse(ast, {\n enter(path) {\n const { node } = path;\n const expressionFields = MAYBE_EXPRESSIONS[node.type]?.fields;\n if (expressionFields) {\n (typeof expressionFields === 'function'\n ? expressionFields(node)\n : expressionFields\n ).forEach((fieldName) => {\n const fieldValue = node[fieldName as keyof typeof node];\n if (typeof fieldValue === 'object') {\n if (Array.isArray(fieldValue)) {\n fieldValue.forEach((item: any) => {\n addUndeclaredIdentifierIfNeeded(item, path);\n });\n } else {\n addUndeclaredIdentifierIfNeeded(fieldValue as any, path);\n }\n }\n });\n }\n },\n });\n\n return undeclaredVars.toArray().filter(filter);\n } catch (e) {\n throw new ParseError(expr, e);\n }\n}\n\nexport function parseExpressionConvertThis2Context(\n expr: string | t.Expression,\n contextName = '__$$context',\n localVariables: string[] = [],\n): string {\n if (!expr) {\n return expr;\n }\n\n try {\n const exprAst = typeof expr === 'string' ? parser.parseExpression(expr) : expr;\n const exprWrapAst = t.expressionStatement(exprAst);\n const fileAst = t.file(t.program([exprWrapAst]));\n\n const localVariablesSet = new Set(localVariables);\n\n let thisScopeLevel = CROSS_THIS_SCOPE_TYPE_NODE[exprAst.type] ? -1 : 0;\n traverse(fileAst, {\n enter(path) {\n if (CROSS_THIS_SCOPE_TYPE_NODE[path.node.type]) {\n thisScopeLevel++;\n }\n },\n exit(path) {\n if (CROSS_THIS_SCOPE_TYPE_NODE[path.node.type]) {\n thisScopeLevel--;\n }\n },\n MemberExpression(path) {\n if (!path.isMemberExpression()) {\n return;\n }\n\n const obj = path.get('object');\n if (!obj.isThisExpression()) {\n return;\n }\n\n // \u5904\u7406\u5C40\u90E8\u53D8\u91CF\n if (!path.node.computed) {\n const prop = path.get('property');\n if (prop.isIdentifier() && localVariablesSet.has(prop.node.name)) {\n path.replaceWith(t.identifier(prop.node.name));\n return;\n }\n }\n\n // \u66FF\u6362 this (\u53EA\u5728\u9876\u5C42\u66FF\u6362)\n if (thisScopeLevel <= 0) {\n obj.replaceWith(t.identifier(contextName));\n }\n },\n ThisExpression(path) {\n if (!path.isThisExpression()) {\n return;\n }\n\n // MemberExpression \u4E2D\u7684 this.xxx \u5DF2\u7ECF\u5904\u7406\u8FC7\u4E86\n if (path.parent.type === 'MemberExpression') {\n return;\n }\n\n if (thisScopeLevel <= 0) {\n path.replaceWith(t.identifier(contextName));\n }\n },\n });\n\n const { code } = generate(exprWrapAst.expression, { sourceMaps: false });\n return code;\n } catch (e) {\n throw new ParseError(expr, e);\n }\n}\n\nexport function parseExpression(expr: string) {\n try {\n return parser.parseExpression(expr);\n } catch (e) {\n throw new ParseError(expr, e);\n }\n}\n\nexport function transformExpressionLocalRef(expr: string, scope: IScope) {\n if (!expr) {\n return expr;\n }\n\n if (!scope) {\n throw new Error('transform expression without scope');\n }\n\n try {\n const exprAst = typeof expr === 'string' ? parser.parseExpression(expr) : expr;\n const exprWrapAst = t.expressionStatement(exprAst);\n const fileAst = t.file(t.program([exprWrapAst]));\n\n traverse(fileAst, {\n MemberExpression(path) {\n if (!path.isMemberExpression()) {\n return;\n }\n\n const obj = path.get('object');\n if (!obj.isThisExpression()) {\n return;\n }\n\n // \u67E5\u770B\u662F\u5426\u5B58\u5728\u5F15\u7528 local \u503C\n const prop = path.get('property');\n let memberName = '';\n if (!path.node.computed && prop.isIdentifier()) {\n memberName = prop.node.name;\n } else if (path.node.computed && prop.isStringLiteral()) {\n memberName = prop.node.value;\n }\n if (memberName && scope.bindings && scope.bindings.hasBinding(memberName)) {\n path.replaceWith(t.identifier(memberName));\n }\n },\n });\n\n const { code } = generate(exprWrapAst.expression, { sourceMaps: false });\n return code;\n } catch (e) {\n throw new ParseError(expr, e);\n // throw e;\n }\n}\n", "export class OrderedSet<T> {\n private _set = new Set<T>();\n private _arr: T[] = [];\n\n constructor(items?: T[]) {\n if (items) {\n this._set = new Set(items);\n this._arr = items.slice(0);\n }\n }\n\n add(item: T) {\n if (!this._set.has(item)) {\n this._set.add(item);\n this._arr.push(item);\n }\n }\n\n delete(item: T) {\n if (this._set.has(item)) {\n this._set.delete(item);\n this._arr.splice(this._arr.indexOf(item), 1);\n }\n }\n\n has(item: T) {\n return this._set.has(item);\n }\n\n toArray() {\n return this._arr.slice(0);\n }\n}\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\n/**\n * @description \u4E0B\u5212\u7EBF\u5B57\u7B26\u4E32\u8F6C\u9A7C\u5CF0\n * @param str\n */\nexport function lineToUppercase(str: string) {\n if (!str) {\n return ''\n }\n function upper(all: string,letter: string){\n return letter.toUpperCase();\n }\n\n return str.replace(/_(\\w)/g,upper);\n}\n", "import { IPublicTypeJSSlot, isJSSlot, IPublicTypeNodeData } from '@alilc/lowcode-types';\nimport { CodeGeneratorError, NodeGenerator, IScope } from '../types';\nimport { unwrapJsExprQuoteInJsx } from './jsxHelpers';\n\nfunction generateSingleLineComment(commentText: string): string {\n return `/* ${commentText.split('\\n').join(' ').replace(/\\*\\//g, '*-/')}*/`;\n}\n\nexport function generateJsSlot(slot: any, scope: IScope, generator: NodeGenerator<string>): string {\n if (isJSSlot(slot)) {\n const { title, params, value } = slot as IPublicTypeJSSlot;\n\n // slot \u4E5F\u662F\u5206\u6709\u53C2\u6570\u548C\u65E0\u53C2\u6570\u7684\n // - \u6709\u53C2\u6570\u7684 slot \u5C31\u662F\u7C7B\u4F3C\u4E00\u4E2A render \u51FD\u6570\uFF0C\u9700\u8981\u521B\u5EFA\u5B50\u4F5C\u7528\u57DF\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\n const slotScope = params ? scope.createSubScope(params || []) : scope;\n const contentExpr = !value\n ? 'null'\n : generateNodeDataOrArrayForJsSlot(value, generator, slotScope);\n if (params) {\n return [\n title && generateSingleLineComment(title),\n '(',\n (params || []).join(', '),\n ') => ((__$$context) => (',\n contentExpr,\n '))(',\n ` __$$createChildContext(__$$context, { ${(params || []).join(', ')} }`,\n '))',\n ]\n .filter(Boolean)\n .join('');\n }\n\n return contentExpr || '[]';\n }\n\n throw new CodeGeneratorError('Not a JSSlot');\n}\n\nfunction generateNodeDataOrArrayForJsSlot(\n value: IPublicTypeNodeData | IPublicTypeNodeData[],\n generator: NodeGenerator<string>,\n scope: IScope,\n) {\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return '[]';\n }\n\n if (value.length === 1) {\n return unwrapJsExprQuoteInJsx(generator(value, scope)) || 'null';\n }\n\n return `[\\n${\n value\n .map((v) => {\n if (typeof v === 'string') {\n return JSON.stringify(v);\n }\n\n return unwrapJsExprQuoteInJsx(generator(v, scope)) || 'null';\n })\n .join(',\\n') || 'null'\n }\\n]`;\n }\n\n return unwrapJsExprQuoteInJsx(generator(value, scope)) || 'null';\n}\n", "/**\n * \u53BB\u6389 JS \u8868\u8FBE\u5F0F\u7684 \"{...}\" \u7684\u5C01\u88C5, \u5982:\n * {<xxx />} => <xxx />\n */\nexport function unwrapJsExprQuoteInJsx(jsxExpr: string): string {\n if (jsxExpr.length >= 2 && jsxExpr[0] === '{' && jsxExpr[jsxExpr.length - 1] === '}') {\n return jsxExpr.slice(1, jsxExpr.length - 1);\n }\n\n return jsxExpr;\n}\n", "import { BaseGenerator, IScope } from '../types/core';\n\nexport function executeFunctionStack<I, T, C>(\n input: I,\n scope: IScope,\n funcs: BaseGenerator<I, T, C> | Array<BaseGenerator<I, T, C>>,\n baseFunc: BaseGenerator<I, T, C>,\n config?: C,\n): T {\n const funcList: Array<BaseGenerator<I, T, C>> = [];\n if (Array.isArray(funcs)) {\n funcList.push(...funcs);\n } else {\n funcList.push(funcs);\n }\n\n let next: BaseGenerator<I, T, C> = baseFunc;\n while (funcList.length > 0) {\n const func = funcList.pop();\n if (func) {\n const warppedFunc = ((nextFunc) => (i: I, s: IScope, cfg?: C) => func(i, s, cfg, nextFunc))(next);\n next = warppedFunc;\n }\n }\n\n return next(input, scope, config);\n}\n", "import { IScope } from '../types/core';\nimport { IScopeBindings, ScopeBindings } from './ScopeBindings';\n\nexport class Scope implements IScope {\n /**\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\n */\n static createRootScope(): IScope {\n return new Scope();\n }\n\n bindings?: IScopeBindings;\n\n constructor(public readonly parent: IScope | null = null) {\n this.bindings = undefined;\n }\n\n createSubScope(ownIdentifiers: string[]): IScope {\n const originalScopeBindings = this.bindings;\n const newScopeBindings = new ScopeBindings(originalScopeBindings);\n ownIdentifiers.forEach((identifier) => {\n newScopeBindings.addBinding(identifier);\n });\n const newScope = new Scope(this);\n newScope.bindings = newScopeBindings;\n return newScope;\n }\n}\n", "import { OrderedSet } from './OrderedSet';\n\nexport interface IScopeBindings {\n readonly parent: IScopeBindings | null;\n\n hasBinding: (varName: string) => boolean;\n hasOwnBinding: (varName: string) => boolean;\n\n addBinding: (varName: string) => void;\n removeBinding: (varName: string) => void;\n\n getAllBindings: () => string[];\n getAllOwnedBindings: () => string[];\n}\n\nexport class ScopeBindings implements IScopeBindings {\n readonly parent: IScopeBindings | null;\n\n private _bindings = new OrderedSet<string>();\n\n constructor(p: IScopeBindings | null = null) {\n this.parent = p;\n }\n\n hasBinding(varName: string): boolean {\n return this._bindings.has(varName) || !!this.parent?.hasBinding(varName);\n }\n\n hasOwnBinding(varName: string): boolean {\n return this._bindings.has(varName);\n }\n\n addBinding(varName: string): void {\n this._bindings.add(varName);\n }\n\n removeBinding(varName: string): void {\n this._bindings.delete(varName);\n }\n\n getAllBindings(): string[] {\n const allBindings = new OrderedSet(this._bindings.toArray());\n\n for (let { parent } = this; parent; parent = parent?.parent) {\n parent.getAllOwnedBindings().forEach((varName) => {\n allBindings.add(varName);\n });\n }\n\n return allBindings.toArray();\n }\n\n getAllOwnedBindings(): string[] {\n return this._bindings.toArray();\n }\n}\n", "import { CLASS_DEFINE_CHUNK_NAME, DEFAULT_LINK_AFTER } from '../../../const/generator';\n\nimport { generateCompositeType } from '../../../utils/compositeType';\nimport { Scope } from '../../../utils/Scope';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\n\nexport interface PluginConfig {\n fileType?: string;\n implementType: 'inConstructor' | 'insMember' | 'hooks';\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig & { fileType: string } = {\n fileType: FileType.JSX,\n implementType: 'inConstructor',\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n const scope = Scope.createRootScope();\n\n const state = ir.state || {};\n const fields = Object.keys(state).map<string>((stateName) => {\n const value = generateCompositeType(state[stateName], scope);\n return `${stateName}: ${value},`;\n });\n\n if (cfg.implementType === 'inConstructor') {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\n content: `this.state = { ${fields.join('')} };`,\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],\n });\n } else if (cfg.implementType === 'insMember') {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\n content: `state = { ${fields.join('')} };`,\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]],\n });\n }\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { CLASS_DEFINE_CHUNK_NAME } from '../../../const/generator';\n\nimport { Scope } from '../../../utils/Scope';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\nimport { DEFAULT_LINK_AFTER } from '../../../const';\n\nexport interface PluginConfig {\n fileType: string;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig = {\n fileType: FileType.JSX,\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n const scope = Scope.createRootScope();\n\n const { inStrictMode } = next.contextData;\n if (!inStrictMode) {\n // \u975E\u4E25\u683C\u6A21\u5F0F\u4E0B\uFF0C\u4E0A\u4E0B\u6587\u5C31\u662F\u81EA\u5DF1\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\n content: `\n _context = this;\n `,\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\n });\n } else {\n // \u4E25\u683C\u6A21\u5F0F\u4E0B\u7684\u4E0A\u4E0B\u6587\u53EA\u4FDD\u7559\u534F\u8BAE\u4E2D\u89C4\u5B9A\u7684\u90A3\u4E9B\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\n content: `\n _context = this._createContext();\n `,\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\n content: `\n _createContext() {\n const self = this;\n const context = {\n get state() { return self.state; },\n setState(newState, callback) { self.setState(newState, callback); },\n get dataSourceMap() { return self._dataSourceEngine.dataSourceMap || {}; },\n async reloadDataSource() { await self._dataSourceEngine.reloadDataSource(); },\n get utils() { return self.utils; },\n get page() { return context; },\n get component() { return context; },\n get props() { return self.props; },\n get constants() { return self.constants; },\n get $() { return self.$ },\n get $$() { return self.$$ },\n ...this._methods,\n };\n \n return context;\n }\n `,\n linkAfter: DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod],\n });\n }\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { IContextData } from '../types';\n\nfunction relativePath(from: string[], to: string[]): string[] {\n const length = Math.min(from.length, to.length);\n let samePartsLength = length;\n for (let i = 0; i < length; i++) {\n if (from[i] !== to[i]) {\n samePartsLength = i;\n break;\n }\n }\n if (samePartsLength === 0) {\n return to;\n }\n let outputParts = [];\n for (let i = samePartsLength; i < from.length; i++) {\n outputParts.push('..');\n }\n outputParts = [...outputParts, ...to.slice(samePartsLength)];\n if (outputParts[0] !== '..') {\n outputParts.unshift('.');\n }\n return outputParts;\n}\n\nexport function getSlotRelativePath(options: {\n contextData: IContextData;\n from: string;\n to: string;\n}) {\n const { contextData, from, to } = options;\n const isSingleComponent = contextData?.extraContextData?.projectRemark?.isSingleComponent;\n const template = contextData?.extraContextData?.template;\n let toPath = template.slots[to].path;\n toPath = [...toPath, template.slots[to].fileName!];\n let fromPath = template.slots[from].path;\n if (!isSingleComponent && ['components', 'pages'].indexOf(from) !== -1) {\n fromPath = [...fromPath, 'pageName'];\n }\n return relativePath(fromPath, toPath).join('/');\n}", "import {\n CLASS_DEFINE_CHUNK_NAME,\n COMMON_CHUNK_NAME,\n DEFAULT_LINK_AFTER,\n} from '../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\nimport { getSlotRelativePath } from '../../../utils/pathHelper';\n\nexport interface PluginConfig {\n fileType?: string;\n\n /** prefer using class property to define utils */\n preferClassProperty?: boolean;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig & { fileType: string } = {\n fileType: FileType.JSX,\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n next.contextData.useRefApi = true;\n const useRef = !!ir.analyzeResult?.isUsingRef;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: `\n import utils${useRef ? ', { RefsManager }' : ''} from '${getSlotRelativePath({ contextData: next.contextData, from: 'components', to: 'utils' })}';\n `,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n\n if (cfg.preferClassProperty) {\n // mode: class property\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\n content: 'utils = utils;',\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]],\n });\n } else {\n // mode: assign in constructor\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\n content: 'this.utils = utils;',\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.ConstructorStart],\n });\n }\n\n if (useRef) {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\n content: 'this._refsManager = new RefsManager();',\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\n content: `\n $ = (refName) => {\n return this._refsManager.get(refName);\n }\n `,\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\n content: `\n $$ = (refName) => {\n return this._refsManager.getAll(refName);\n }\n `,\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\n });\n } else {\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\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\n content: ' $ = () => null; ',\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\n content: ' $$ = () => []; ',\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\n });\n }\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "/* eslint-disable @typescript-eslint/indent */\n\nimport {\n IPublicTypeCompositeValue,\n IPublicTypeJSExpression,\n InterpretDataSourceConfig,\n isJSExpression,\n isJSFunction,\n} from '@alilc/lowcode-types';\nimport changeCase from 'change-case';\n\nimport {\n CLASS_DEFINE_CHUNK_NAME,\n COMMON_CHUNK_NAME,\n DEFAULT_LINK_AFTER,\n} from '../../../const/generator';\nimport { Scope } from '../../../utils/Scope';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IScope,\n} from '../../../types';\n\nimport { generateCompositeType } from '../../../utils/compositeType';\nimport { parseExpressionConvertThis2Context } from '../../../utils/expressionParser';\nimport { isValidContainerType } from '../../../utils/schema';\nimport { REACT_CHUNK_NAME } from './const';\nimport { isJSExpressionFn } from '../../../utils/common';\n\nexport interface PluginConfig {\n fileType?: string;\n\n /**\n * \u6570\u636E\u6E90\u914D\u7F6E\n */\n datasourceConfig?: {\n\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\n engineVersion?: string;\n\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\n enginePackage?: string;\n\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\n handlersVersion?: {\n [key: string]: string;\n };\n\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\n handlersPackages?: {\n [key: string]: string;\n };\n };\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg = {\n ...config,\n fileType: config?.fileType || FileType.JSX,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const scope = Scope.createRootScope();\n const dataSourceConfig = isValidContainerType(pre.ir) ? pre.ir.dataSource : null;\n const dataSourceItems: InterpretDataSourceConfig[] =\n (dataSourceConfig && dataSourceConfig.list) || [];\n const dataSourceEngineOptions = { runtimeConfig: true };\n if (dataSourceItems.length > 0) {\n const requestHandlersMap: Record<string, IPublicTypeJSExpression> = {};\n\n dataSourceItems.forEach((ds) => {\n const dsType = ds.type || 'fetch';\n if (!(dsType in requestHandlersMap) && dsType !== 'custom') {\n const handlerFactoryName = `__$$create${changeCase.pascal(dsType)}RequestHandler`;\n\n requestHandlersMap[dsType] = {\n type: 'JSExpression',\n value:\n handlerFactoryName + (dsType === 'urlParams' ? '(window.location.search)' : '()'),\n };\n\n const handlerFactoryExportName = `create${changeCase.pascal(dsType)}Handler`;\n const handlerPkgName =\n cfg.datasourceConfig?.handlersPackages?.[dsType] ||\n `@alilc/lowcode-datasource-${changeCase.kebab(dsType)}-handler`;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: `\n import { ${handlerFactoryExportName} as ${handlerFactoryName} } from '${handlerPkgName}';\n `,\n linkAfter: [],\n });\n }\n });\n\n Object.assign(dataSourceEngineOptions, { requestHandlersMap });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: `\n import { create as __$$createDataSourceEngine } from '@alilc/lowcode-datasource-engine/runtime';\n `,\n linkAfter: [],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\n content: `\n _dataSourceConfig = this._defineDataSourceConfig();\n _dataSourceEngine = __$$createDataSourceEngine(\n this._dataSourceConfig,\n this,\n ${generateCompositeType(dataSourceEngineOptions, scope)}\n );\n\n get dataSourceMap() {\n return this._dataSourceEngine.dataSourceMap || {};\n }\n\n reloadDataSource = async () => {\n await this._dataSourceEngine.reloadDataSource();\n }\n\n `,\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]],\n });\n\n next.chunks.unshift({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: REACT_CHUNK_NAME.ClassDidMountContent,\n content: `\n this._dataSourceEngine.reloadDataSource();\n `,\n linkAfter: [REACT_CHUNK_NAME.ClassDidMountStart],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\n content: `\n _defineDataSourceConfig() {\n const _this = this;\n return (${generateCompositeType(\n {\n ...dataSourceConfig,\n list: [\n ...dataSourceItems.map((item) => ({\n ...item,\n isInit: wrapAsFunction(item.isInit, scope),\n options: wrapAsFunction(item.options, scope),\n })),\n ],\n },\n scope,\n {\n handlers: {\n function: (jsFunc) => parseExpressionConvertThis2Context(jsFunc.value, '_this'),\n expression: (jsExpr) => parseExpressionConvertThis2Context(jsExpr.value, '_this'),\n },\n },\n )});\n }\n `,\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\n });\n }\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n\nfunction wrapAsFunction(value: IPublicTypeCompositeValue, scope: IScope): IPublicTypeCompositeValue {\n if (isJSExpression(value) || isJSFunction(value) || isJSExpressionFn(value)) {\n return {\n type: 'JSExpression',\n value: `function(){ return ((${value.value}))}.bind(this)`,\n };\n }\n\n return {\n type: 'JSExpression',\n value: `function(){return((${generateCompositeType(value, scope)}))}.bind(this)`,\n };\n}\n", "import {\n CLASS_DEFINE_CHUNK_NAME,\n COMMON_CHUNK_NAME,\n DEFAULT_LINK_AFTER,\n} from '../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n} from '../../../types';\n\nexport interface PluginConfig {\n fileType: string;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig = {\n fileType: FileType.JSX,\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: \"import __$$constants from '../../constants';\",\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\n content: `\n get constants() {\n return __$$constants || {};\n }\n `,\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import {\n CLASS_DEFINE_CHUNK_NAME,\n COMMON_CHUNK_NAME,\n DEFAULT_LINK_AFTER,\n} from '../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n} from '../../../types';\nimport { getSlotRelativePath } from '../../../utils/pathHelper';\n\nexport interface PluginConfig {\n fileType: string;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig = {\n fileType: FileType.JSX,\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: `\n import * as __$$i18n from '${getSlotRelativePath({ contextData: next.contextData, from: 'components', to: 'i18n' })}';\n `,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\n content: `\n __$$i18n._inject2(this);\n `,\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { CLASS_DEFINE_CHUNK_NAME, DEFAULT_LINK_AFTER } from '../../../const/generator';\nimport { REACT_CHUNK_NAME } from './const';\n\nimport { generateFunction } from '../../../utils/jsExpression';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeChunk,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\nimport { isJSFunction, isJSExpression } from '@alilc/lowcode-types';\nimport { isJSExpressionFn } from '../../../utils/common';\n\nexport interface PluginConfig {\n fileType?: string;\n exportNameMapping?: Record<string, string>;\n normalizeNameMapping?: Record<string, string>;\n exclude?: string[];\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg = {\n fileType: FileType.JSX,\n exportNameMapping: {},\n normalizeNameMapping: {},\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n\n if (ir.lifeCycles) {\n const { lifeCycles } = ir;\n const chunks = Object.keys(lifeCycles).map<ICodeChunk | null>((lifeCycleName) => {\n // \u8FC7\u6EE4\u6389\u975E\u6CD5\u6570\u636E\uFF08\u6709\u4E9B\u573A\u666F\u4E0B\u4F1A\u8BEF\u4F20\u5165\u7A7A\u5B57\u7B26\u4E32\u6216 null)\n if (\n !isJSFunction(lifeCycles[lifeCycleName]) &&\n !isJSExpressionFn(lifeCycles[lifeCycleName]) &&\n !isJSExpression(lifeCycles[lifeCycleName])\n ) {\n return null;\n }\n\n let normalizeName;\n // constructor\u4F1A\u53D6\u5230\u5BF9\u8C61\u7684\u6784\u9020\u51FD\u6570\n if (lifeCycleName === 'constructor') {\n normalizeName = lifeCycleName;\n } else {\n normalizeName = cfg.normalizeNameMapping[lifeCycleName] || lifeCycleName;\n }\n\n if (cfg?.exclude?.includes(normalizeName)) {\n return null;\n }\n\n const exportName = cfg.exportNameMapping[lifeCycleName] || lifeCycleName;\n if (normalizeName === 'constructor') {\n return {\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\n content: generateFunction(lifeCycles[lifeCycleName], { isBlock: true }),\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorStart]],\n };\n }\n\n if (normalizeName === 'componentDidMount') {\n return {\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: REACT_CHUNK_NAME.ClassDidMountContent,\n content: generateFunction(lifeCycles[lifeCycleName], { isBlock: true }),\n linkAfter: [REACT_CHUNK_NAME.ClassDidMountStart],\n };\n }\n\n if (normalizeName === 'render') {\n return {\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: REACT_CHUNK_NAME.ClassRenderPre,\n content: generateFunction(lifeCycles[lifeCycleName], { isBlock: true }),\n linkAfter: [REACT_CHUNK_NAME.ClassRenderStart],\n };\n }\n\n return {\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\n content: generateFunction(lifeCycles[lifeCycleName], {\n name: exportName,\n isMember: true,\n }),\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\n };\n }).filter((i) => !!i);\n\n next.chunks.push(...chunks.filter((x): x is ICodeChunk => x !== null));\n }\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { CLASS_DEFINE_CHUNK_NAME, DEFAULT_LINK_AFTER } from '../../../const/generator';\n\nimport { generateFunction } from '../../../utils/jsExpression';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeChunk,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\nimport { isValidIdentifier } from '../../../utils/validate';\n\nexport interface PluginConfig {\n fileType: string;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig = {\n fileType: FileType.JSX,\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n const { inStrictMode } = next.contextData;\n\n if (!ir.methods) {\n return next;\n }\n\n // \u5C06\u8FD9\u4E9B methods \u90FD\u5B9A\u4E49\u5230 class \u4E0A\n const { methods } = ir;\n const chunks = Object.keys(methods).map<ICodeChunk>((methodName) => ({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsMethod,\n content: generateFunction(methods[methodName], { name: methodName, isMember: true }),\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsMethod]],\n }));\n next.chunks.push(...chunks);\n\n // \u4E25\u683C\u6A21\u5F0F\u4E0B\u9700\u8981\u5C06\u8FD9\u4E9B\u65B9\u6CD5\u90FD\u6302\u5230\u4E0A\u4E0B\u6587\u4E2D\n if (inStrictMode) {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\n content: Object.keys(ir.methods)\n .map((methodName) =>\n isValidIdentifier(methodName) ? `.${methodName}` : `[${JSON.stringify(methodName)}]`,\n )\n .map((method) => `this._context${method} = this${method};`)\n .join('\\n'),\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],\n });\n }\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import _ from 'lodash';\nimport { pipe } from 'fp-ts/function';\nimport { IPublicTypeNodeSchema, isNodeSchema, IPublicTypeNodeDataType, IPublicTypeCompositeValue } from '@alilc/lowcode-types';\n\nimport {\n IScope,\n CodeGeneratorError,\n PIECE_TYPE,\n CodePiece,\n NodeGenerator,\n NodeGeneratorConfig,\n NodePlugin,\n AttrData,\n} from '../types';\n\nimport { generateCompositeType } from './compositeType';\nimport { getStaticExprValue } from './common';\nimport { executeFunctionStack } from './aopHelper';\nimport { encodeJsxStringNode } from './encodeJsxAttrString';\nimport { unwrapJsExprQuoteInJsx } from './jsxHelpers';\nimport { transformThis2Context } from '../core/jsx/handlers/transformThis2Context';\nimport { isValidIdentifier } from './validate';\n\nfunction mergeNodeGeneratorConfig(\n cfg1: NodeGeneratorConfig,\n cfg2: NodeGeneratorConfig = {},\n): NodeGeneratorConfig {\n const resCfg: NodeGeneratorConfig = {};\n if (cfg1.handlers || cfg2.handlers) {\n resCfg.handlers = {\n ...(cfg1.handlers || {}),\n ...(cfg2.handlers || {}),\n };\n }\n\n if (cfg1.tagMapping || cfg2.tagMapping) {\n resCfg.tagMapping = cfg2.tagMapping || cfg1.tagMapping;\n }\n\n if (cfg1.attrPlugins || cfg2.attrPlugins) {\n resCfg.attrPlugins = [];\n resCfg.attrPlugins.push(...(cfg2.attrPlugins || []));\n resCfg.attrPlugins.push(...(cfg1.attrPlugins || []));\n }\n\n if (cfg1.nodePlugins || cfg2.nodePlugins) {\n resCfg.nodePlugins = [];\n resCfg.nodePlugins.push(...(cfg2.nodePlugins || []));\n resCfg.nodePlugins.push(...(cfg1.nodePlugins || []));\n }\n\n return resCfg;\n}\n\nexport function isPureString(v: string) {\n // FIXME: \u76EE\u524D\u7684\u65B9\u5F0F\u4E0D\u591F\u4E25\u8C28\n return (v[0] === \"'\" && v[v.length - 1] === \"'\") || (v[0] === '\"' && v[v.length - 1] === '\"');\n}\n\nfunction generateAttrValue(\n attrData: { attrName: string; attrValue: IPublicTypeCompositeValue },\n scope: IScope,\n config?: NodeGeneratorConfig,\n): CodePiece[] {\n const valueStr = generateCompositeType(attrData.attrValue, scope, {\n handlers: config?.handlers,\n nodeGenerator: config?.self,\n });\n return [\n {\n type: PIECE_TYPE.ATTR,\n name: attrData.attrName,\n value: valueStr,\n },\n ];\n}\n\nfunction generateAttr(\n attrName: string,\n attrValue: IPublicTypeCompositeValue,\n scope: IScope,\n config?: NodeGeneratorConfig,\n): CodePiece[] {\n let pieces: CodePiece[];\n if (config?.attrPlugins) {\n pieces = executeFunctionStack<AttrData, CodePiece[], NodeGeneratorConfig>(\n { attrName, attrValue },\n scope,\n config.attrPlugins,\n generateAttrValue,\n config,\n );\n } else {\n pieces = generateAttrValue({ attrName, attrValue }, scope, config);\n }\n\n pieces = pieces.map((p) => {\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\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\n let newValue: string;\n if (p.value && isPureString(p.value)) {\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\n const content = getStaticExprValue<string>(p.value);\n newValue = JSON.stringify(encodeJsxStringNode(content));\n } else {\n newValue = `{${p.value}}`;\n }\n\n return {\n value: `${p.name}=${newValue}`,\n type: PIECE_TYPE.ATTR,\n };\n });\n\n return pieces;\n}\n\nfunction generateAttrs(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n): CodePiece[] {\n const { props } = nodeItem;\n\n let pieces: CodePiece[] = [];\n\n if (props) {\n if (!Array.isArray(props)) {\n Object.keys(props).forEach((propName: string) => {\n if (isValidIdentifier(propName)) {\n pieces = pieces.concat(generateAttr(propName, props[propName] as IPublicTypeCompositeValue, scope, config));\n }\n });\n } else {\n props.forEach((prop) => {\n if (prop.name && isValidIdentifier(prop.name) && !prop.spread) {\n pieces = pieces.concat(generateAttr(prop.name, prop.value, scope, config));\n }\n\n // TODO: \u5904\u7406 spread \u573A\u666F\uFF08<Xxx {...(something)}/>)\n // \u8FD9\u79CD\u5728 schema \u91CC\u9762\u600E\u4E48\u63CF\u8FF0\n });\n }\n }\n\n return pieces;\n}\n\nfunction generateBasicNode(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n): CodePiece[] {\n const pieces: CodePiece[] = [];\n const tagName = (config?.tagMapping || _.identity)(nodeItem.componentName);\n\n pieces.push({\n value: tagName || '', // FIXME: type detection error\n type: PIECE_TYPE.TAG,\n });\n\n return pieces;\n}\n\nfunction generateSimpleNode(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n): CodePiece[] {\n const basicParts = generateBasicNode(nodeItem, scope, config) || [];\n const attrParts = generateAttrs(nodeItem, scope, config) || [];\n const childrenParts: CodePiece[] = [];\n if (nodeItem.children && config?.self) {\n const childrenStr = config.self(nodeItem.children, scope);\n\n childrenParts.push({\n type: PIECE_TYPE.CHILDREN,\n value: childrenStr,\n });\n }\n\n return [...basicParts, ...attrParts, ...childrenParts];\n}\n\nfunction linkPieces(pieces: CodePiece[]): string {\n const tagsPieces = pieces.filter((p) => p.type === PIECE_TYPE.TAG);\n if (tagsPieces.length !== 1) {\n throw new CodeGeneratorError('Only one tag definition required', tagsPieces);\n }\n const tagName = tagsPieces[0].value;\n\n const beforeParts = pieces\n .filter((p) => p.type === PIECE_TYPE.BEFORE)\n .map((p) => p.value)\n .join('');\n\n const afterParts = pieces\n .filter((p) => p.type === PIECE_TYPE.AFTER)\n .map((p) => p.value)\n .join('');\n\n const childrenParts = pieces\n .filter((p) => p.type === PIECE_TYPE.CHILDREN)\n .map((p) => p.value)\n .join('');\n\n let attrsParts = pieces\n .filter((p) => p.type === PIECE_TYPE.ATTR)\n .map((p) => p.value)\n .join(' ');\n\n attrsParts = attrsParts ? ` ${attrsParts}` : '';\n\n if (childrenParts) {\n return `${beforeParts}<${tagName}${attrsParts}>${childrenParts}</${tagName}>${afterParts}`;\n }\n\n return `${beforeParts}<${tagName}${attrsParts} />${afterParts}`;\n}\n\nfunction generateNodeSchema(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n): string {\n const pieces: CodePiece[] = [];\n if (config?.nodePlugins) {\n const res = executeFunctionStack<IPublicTypeNodeSchema, CodePiece[], NodeGeneratorConfig>(\n nodeItem,\n scope,\n config.nodePlugins,\n generateSimpleNode,\n config,\n );\n pieces.push(...res);\n } else {\n pieces.push(...generateSimpleNode(nodeItem, scope, config));\n }\n\n return linkPieces(pieces);\n}\n\n// TODO: \u751F\u6210\u6587\u6863\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\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\n// export function createSubContext() {}\n\n/**\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\n * @type NodePlugin Extended\n *\n * @export\n * @param {IPublicTypeNodeSchema} nodeItem \u5F53\u524D UI \u8282\u70B9\n * @returns {CodePiece[]} \u5B9E\u73B0\u529F\u80FD\u7684\u76F8\u5173\u4EE3\u7801\u7247\u6BB5\n */\nexport function generateReactLoopCtrl(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n next?: NodePlugin,\n): CodePiece[] {\n if (nodeItem.loop) {\n const tolerateEvalErrors = config?.tolerateEvalErrors ?? true;\n\n const loopItemName = nodeItem.loopArgs?.[0] || 'item';\n const loopIndexName = nodeItem.loopArgs?.[1] || 'index';\n\n // \u65B0\u5EFA\u4F5C\u7528\u57DF\n const subScope = scope.createSubScope([loopItemName, loopIndexName]);\n const pieces: CodePiece[] = next ? next(nodeItem, subScope, config) : [];\n\n // \u751F\u6210\u5FAA\u73AF\u53D8\u91CF\u8868\u8FBE\u5F0F\n const loopDataExpr = pipe(\n nodeItem.loop,\n // \u5C06 JSExpression \u8F6C\u6362\u4E3A JS \u8868\u8FBE\u5F0F\u4EE3\u7801:\n (expr) => generateCompositeType(expr, scope, {\n handlers: config?.handlers,\n tolerateEvalErrors: false, // \u8FD9\u4E2A\u5185\u90E8\u4E0D\u9700\u8981\u5305 try catch, \u4E0B\u9762\u4F1A\u7EDF\u4E00\u52A0\u7684\n }),\n // \u5C06 this.xxx \u8F6C\u6362\u4E3A __$$context.xxx:\n (expr) => transformThis2Context(expr, scope, { ignoreRootScope: true }),\n // \u5982\u679C\u8981\u5BB9\u5FCD\u9519\u8BEF\uFF0C\u5219\u5305\u4E00\u5C42 try catch (\u57FA\u4E8E\u52A9\u624B\u51FD\u6570 __$$evalArray)\n (expr) => (tolerateEvalErrors ? `__$$evalArray(() => (${expr}))` : expr),\n );\n\n pieces.unshift({\n value: `(${loopDataExpr}).map((${loopItemName}, ${loopIndexName}) => ((__$$context) => (`,\n type: PIECE_TYPE.BEFORE,\n });\n\n pieces.push({\n value: `))(__$$createChildContext(__$$context, { ${loopItemName}, ${loopIndexName} })))`,\n type: PIECE_TYPE.AFTER,\n });\n\n return pieces;\n }\n\n return next ? next(nodeItem, scope, config) : [];\n}\n\n/**\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\n * @type NodePlugin\n *\n * @export\n * @param {IPublicTypeNodeSchema} nodeItem \u5F53\u524D UI \u8282\u70B9\n * @returns {CodePiece[]} \u5B9E\u73B0\u529F\u80FD\u7684\u76F8\u5173\u4EE3\u7801\u7247\u6BB5\n */\nexport function generateConditionReactCtrl(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n next?: NodePlugin,\n): CodePiece[] {\n const pieces: CodePiece[] = next ? next(nodeItem, scope, config) : [];\n\n if (nodeItem.condition != null && nodeItem.condition !== true) {\n const value = generateCompositeType(nodeItem.condition, scope, {\n handlers: config?.handlers,\n });\n\n pieces.unshift({\n value: `!!(${value}) && (`,\n type: PIECE_TYPE.BEFORE,\n });\n\n pieces.push({\n value: ')',\n type: PIECE_TYPE.AFTER,\n });\n }\n\n return pieces;\n}\n\n/**\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\n * @type NodePlugin\n *\n * @export\n * @param {IPublicTypeNodeSchema} nodeItem \u5F53\u524D UI \u8282\u70B9\n * @returns {CodePiece[]} \u5B9E\u73B0\u529F\u80FD\u7684\u76F8\u5173\u4EE3\u7801\u7247\u6BB5\n */\nexport function generateReactExprInJS(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n next?: NodePlugin,\n): CodePiece[] {\n const pieces: CodePiece[] = next ? next(nodeItem, scope, config) : [];\n\n if ((nodeItem.condition != null && nodeItem.condition !== true) || nodeItem.loop != null) {\n pieces.unshift({\n value: '{',\n type: PIECE_TYPE.BEFORE,\n });\n\n pieces.push({\n value: '}',\n type: PIECE_TYPE.AFTER,\n });\n }\n\n return pieces;\n}\n\nconst handleChildren = (v: string[]) => v.join('');\n\nexport function createNodeGenerator(cfg: NodeGeneratorConfig = {}): NodeGenerator<string> {\n const generateNode = (nodeItem: IPublicTypeNodeDataType, scope: IScope): string => {\n if (_.isArray(nodeItem)) {\n const resList = nodeItem.map((n) => generateNode(n, scope));\n return handleChildren(resList);\n }\n\n if (isNodeSchema(nodeItem)) {\n return generateNodeSchema(nodeItem, scope, {\n ...cfg,\n self: generateNode,\n });\n }\n\n const valueStr = generateCompositeType(nodeItem, scope, {\n handlers: cfg.handlers,\n nodeGenerator: generateNode,\n });\n\n if (isPureString(valueStr)) {\n return encodeJsxStringNode(getStaticExprValue<string>(valueStr));\n }\n\n return `{${valueStr}}`;\n };\n\n return (nodeItem: IPublicTypeNodeDataType, scope: IScope) => unwrapJsExprQuoteInJsx(generateNode(nodeItem, scope));\n}\n\nconst defaultReactGeneratorConfig: NodeGeneratorConfig = {\n nodePlugins: [generateReactExprInJS, generateReactLoopCtrl, generateConditionReactCtrl],\n};\n\nexport function createReactNodeGenerator(cfg?: NodeGeneratorConfig): NodeGenerator<string> {\n const newCfg = mergeNodeGeneratorConfig(defaultReactGeneratorConfig, cfg);\n\n return createNodeGenerator(newCfg);\n}\n", "import _ from 'lodash';\n// import { encode } from 'html-entities';\n\nconst SPECIAL_CHARS = '\\n\\r\\'\"<>&';\nconst SPECIAL_CHARS_REG = new RegExp(\n `[${SPECIAL_CHARS.split('')\n .map((c) => `\\\\x${_.padStart(c.charCodeAt(0).toString(16), 2, '0')}`)\n .join('')}]`,\n 'g',\n);\n\nexport function encodeJsxStringNode(str: string): string {\n return str.replace(SPECIAL_CHARS_REG, (c) => `&#${c.charCodeAt(0)};`);\n}\n\n// export function encodeJsxStringNode(str: string): string {\n// return encode(str);\n// }\n", "import { Expression } from '@babel/types';\nimport generate from '@babel/generator';\nimport { IScope } from '../../../types';\nimport { parseExpressionConvertThis2Context } from '../../../utils/expressionParser';\n\n/**\n * \u5C06\u6240\u6709\u7684 this.xxx \u66FF\u6362\u4E3A __$$context.xxx\n * @param expr\n */\nexport function transformThis2Context(\n expr: string | Expression,\n scope: IScope,\n { ignoreRootScope = false } = {},\n): string {\n if (ignoreRootScope && scope.parent == null) {\n return typeof expr === 'string' ? expr : generate(expr).code;\n }\n\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\n // return expr\n // .replace(/\\bthis\\.item\\./g, () => 'item.')\n // .replace(/\\bthis\\.index\\./g, () => 'index.')\n // .replace(/\\bthis\\./g, () => '__$$context.');\n return parseExpressionConvertThis2Context(\n expr,\n '__$$context',\n scope.bindings?.getAllBindings() || [],\n );\n}\n", "/**\n * \u5224\u65AD\u662F\u5426\u662F\u539F\u5B50\u7C7B\u578B\u7684\u8868\u8FBE\u5F0F\n */\nexport function isLiteralAtomicExpr(expr: string): boolean {\n return (\n expr === 'null' ||\n expr === 'undefined' ||\n expr === 'true' ||\n expr === 'false' ||\n /^-?\\d+(\\.\\d+)?$/.test(expr)\n );\n}\n", "import { Expression } from '@babel/types';\n\n/** \u5224\u65AD\u662F\u975E\u662F\u4E00\u4E9B\u7B80\u5355\u76F4\u63A5\u7684\u5B57\u9762\u503C */\nexport function isSimpleStraightLiteral(expr: Expression): boolean {\n switch (expr.type) {\n case 'BigIntLiteral':\n case 'BooleanLiteral':\n case 'DecimalLiteral':\n case 'NullLiteral':\n case 'NumericLiteral':\n case 'RegExpLiteral':\n case 'StringLiteral':\n return true;\n default:\n return false;\n }\n}\n", "import { IScope } from '../../../types';\nimport { parseExpression } from '../../../utils/expressionParser';\nimport { isLiteralAtomicExpr } from '../util/isLiteralAtomicExpr';\nimport { isSimpleStraightLiteral } from '../util/isSimpleStraightLiteral';\nimport { transformThis2Context } from './transformThis2Context';\n\nexport function transformJsExpr(\n expr: string,\n scope: IScope,\n { dontWrapEval = false, dontTransformThis2ContextAtRootScope = false } = {},\n) {\n if (!expr) {\n return 'undefined';\n }\n\n if (isLiteralAtomicExpr(expr)) {\n return expr;\n }\n\n const exprAst = parseExpression(expr);\n\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\n if (isSimpleStraightLiteral(exprAst)) {\n return expr;\n }\n\n if (dontWrapEval) {\n return transformThis2Context(exprAst, scope, {\n ignoreRootScope: dontTransformThis2ContextAtRootScope,\n });\n }\n\n switch (exprAst.type) {\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\n case 'ArrowFunctionExpression':\n case 'FunctionExpression':\n return transformThis2Context(exprAst, scope, {\n ignoreRootScope: dontTransformThis2ContextAtRootScope,\n });\n\n default:\n break;\n }\n\n // \u5176\u4ED6\u7684\u90FD\u9700\u8981\u5305\u4E00\u5C42\n return `__$$eval(() => (${transformThis2Context(exprAst, scope, {\n ignoreRootScope: dontTransformThis2ContextAtRootScope,\n })}))`;\n}\n", "import {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n HandlerSet,\n ICodeStruct,\n IContainerInfo,\n IScope,\n NodeGeneratorConfig,\n PIECE_TYPE,\n} from '../../../types';\n\nimport { REACT_CHUNK_NAME } from './const';\nimport { COMMON_CHUNK_NAME } from '../../../const/generator';\n\nimport { createReactNodeGenerator } from '../../../utils/nodeToJSX';\nimport { Scope } from '../../../utils/Scope';\nimport { IPublicTypeJSExpression } from '@alilc/lowcode-types';\nimport { generateExpression } from '../../../utils/jsExpression';\nimport { transformJsExpr } from '../../../core/jsx/handlers/transformJsExpression';\nimport { transformThis2Context } from '../../../core/jsx/handlers/transformThis2Context';\nimport { generateCompositeType } from '../../../utils/compositeType';\n\nexport interface PluginConfig {\n fileType?: string;\n nodeTypeMapping?: Record<string, string>;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg = {\n fileType: FileType.JSX,\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n nodeTypeMapping: {} as Record<string, string>,\n ...config,\n };\n\n const { nodeTypeMapping } = cfg;\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const { tolerateEvalErrors = true, evalErrorsHandler = '' } = next.contextData;\n\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\n // \u4E0E Rax \u6240\u4E0D\u540C\u7684\u662F\uFF0C\u8FD9\u91CC\u4E0D\u4F1A\u5C06\u6700\u9876\u5C42\u7684 this \u8F6C\u6362\u6389\n const customHandlers: HandlerSet<string> = {\n expression(input: IPublicTypeJSExpression, scope: IScope, config) {\n return transformJsExpr(generateExpression(input, scope), scope, {\n dontWrapEval: !(config?.tolerateEvalErrors ?? tolerateEvalErrors),\n dontTransformThis2ContextAtRootScope: true,\n });\n },\n function(input, scope: IScope) {\n return transformThis2Context(\n generateCompositeType(\n {\n type: 'JSFunction',\n value: input.value || 'function () {}',\n },\n Scope.createRootScope(),\n ),\n scope,\n { ignoreRootScope: true },\n );\n },\n };\n\n const generatorPlugins: NodeGeneratorConfig = {\n handlers: customHandlers,\n tagMapping: (v) => nodeTypeMapping[v] || v,\n tolerateEvalErrors,\n };\n\n if (next.contextData.useRefApi) {\n generatorPlugins.attrPlugins = [\n (attrData, scope, pluginCfg, nextFunc) => {\n if (attrData.attrName === 'ref') {\n return [\n {\n name: attrData.attrName,\n value: `this._refsManager.linkRef('${attrData.attrValue}')`,\n type: PIECE_TYPE.ATTR,\n },\n ];\n }\n\n return nextFunc ? nextFunc(attrData, scope, pluginCfg) : [];\n },\n ];\n }\n\n const generator = createReactNodeGenerator(generatorPlugins);\n\n const ir = next.ir as IContainerInfo;\n const scope: IScope = Scope.createRootScope();\n const jsxContent = generator(ir, scope);\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: REACT_CHUNK_NAME.ClassRenderJSX,\n content: `\n const __$$context = this._context || this;\n const { state } = __$$context;\n return ${jsxContent};\n `,\n linkAfter: [REACT_CHUNK_NAME.ClassRenderStart, REACT_CHUNK_NAME.ClassRenderPre],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: COMMON_CHUNK_NAME.CustomContent,\n content: [\n tolerateEvalErrors &&\n `\n function __$$eval(expr) {\n try {\n return expr();\n } catch (error) {\n ${evalErrorsHandler}\n }\n }\n\n function __$$evalArray(expr) {\n const res = __$$eval(expr);\n return Array.isArray(res) ? res : [];\n }\n `,\n `\n function __$$createChildContext(oldContext, ext) {\n const childContext = {\n ...oldContext,\n ...ext,\n };\n childContext.__proto__ = oldContext;\n return childContext;\n }\n `,\n ]\n .filter(Boolean)\n .join('\\n'),\n linkAfter: [COMMON_CHUNK_NAME.FileExport],\n });\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { COMMON_CHUNK_NAME } from '../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n} from '../../../types';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: `\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\n// \u4F8B\u5916\uFF1Areact \u6846\u67B6\u7684\u5BFC\u51FA\u540D\u548C\u5404\u79CD\u7EC4\u4EF6\u540D\u9664\u5916\u3002\nimport React from \\'react\\';`,\n linkAfter: [],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { COMMON_CHUNK_NAME } from '../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\n\nexport interface PluginConfig {\n fileType: string;\n moduleFileType: string;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig = {\n fileType: FileType.CSS,\n moduleFileType: FileType.JSX,\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: COMMON_CHUNK_NAME.StyleCssContent,\n content: ir.css,\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.moduleFileType,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: `import './index.${cfg.fileType}';`,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { COMMON_CHUNK_NAME } from '../../const/generator';\nimport { generateCompositeType } from '../../utils/compositeType';\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IProjectInfo,\n} from '../../types';\nimport { Scope } from '../../utils/Scope';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IProjectInfo;\n const scope = Scope.createRootScope();\n const constantStr = generateCompositeType(ir.constants || {}, scope);\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.FileVarDefine,\n content: `\n const __$$constants = (${constantStr});\n `,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n ],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.FileExport,\n content: `\n export default __$$constants;\n `,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n COMMON_CHUNK_NAME.FileMainContent,\n ],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { COMMON_CHUNK_NAME } from '../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IProjectInfo,\n} from '../../types';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IProjectInfo;\n const i18nStr = ir.i18n ? JSON.stringify(ir.i18n, null, 2) : '{}';\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.FileMainContent,\n content: `\n const i18nConfig = ${i18nStr};\n\n let locale = typeof navigator === 'object' && typeof navigator.language === 'string' ? navigator.language : 'zh-CN';\n\n const getLocale = () => locale;\n\n const setLocale = (target) => {\n locale = target;\n };\n\n const isEmptyVariables = variables => (\n Array.isArray(variables) && variables.length === 0\n || typeof variables === 'object' && (!variables || Object.keys(variables).length === 0)\n );\n\n // \u6309\u4F4E\u4EE3\u7801\u89C4\u8303\u91CC\u9762\u7684\u8981\u6C42\u8FDB\u884C\u53D8\u91CF\u66FF\u6362\n const format = (msg, variables) => (\n typeof msg === 'string'\n ? msg.replace(/\\\\\\$?\\\\{(\\\\w+)\\\\}/g, (match, key) => variables?.[key] ?? '')\n : msg\n );\n\n const i18nFormat = ({ id, defaultMessage, fallback }, variables) => {\n const msg = i18nConfig[locale]?.[id] ?? i18nConfig[locale.replace('-', '_')]?.[id] ?? defaultMessage;\n if (msg == null) {\n console.warn('[i18n]: unknown message id: %o (locale=%o)', id, locale);\n return fallback === undefined ? \\`\\${id}\\` : fallback;\n }\n\n return format(msg, variables);\n }\n\n const i18n = (id, params) => {\n return i18nFormat({ id }, params);\n };\n\n // \u5C06\u56FD\u9645\u5316\u7684\u4E00\u4E9B\u65B9\u6CD5\u6CE8\u5165\u5230\u76EE\u6807\u5BF9\u8C61&\u4E0A\u4E0B\u6587\u4E2D\n const _inject2 = (target) => {\n target.i18n = i18n;\n target.getLocale = getLocale;\n target.setLocale = (locale) => {\n setLocale(locale);\n target.forceUpdate();\n };\n target._i18nText = (t) => {\n // \u4F18\u5148\u53D6\u76F4\u63A5\u4F20\u8FC7\u6765\u7684\u8BED\u6599\n const localMsg = t[locale] ?? t[String(locale).replace('-', '_')]\n if (localMsg != null) {\n return format(localMsg, t.params);\n }\n\n // \u5176\u6B21\u7528\u9879\u76EE\u7EA7\u522B\u7684\n const projectMsg = i18nFormat({ id: t.key, fallback: null }, t.params);\n if (projectMsg != null) {\n return projectMsg;\n }\n\n // \u515C\u5E95\u7528 use \u6307\u5B9A\u7684\u6216\u9ED8\u8BA4\u8BED\u8A00\u7684\n return format(t[t.use || \"zh-CN\"] ?? t.en_US, t.params);\n }\n\n // \u6CE8\u5165\u5230\u4E0A\u4E0B\u6587\u4E2D\u53BB\n if (target._context && target._context !== target) {\n Object.assign(target._context, {\n i18n,\n getLocale, setLocale: target.setLocale\n });\n }\n }\n `,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n ],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.FileExport,\n content: `\n export {\n getLocale,\n setLocale,\n i18n,\n i18nFormat,\n _inject2,\n };\n `,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n COMMON_CHUNK_NAME.FileMainContent,\n ],\n });\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { COMMON_CHUNK_NAME, DEFAULT_LINK_AFTER } from '../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IUtilInfo,\n} from '../../types';\n\nconst pluginFactory: BuilderComponentPluginFactory<string> = (baseFramework?: string) => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const framework = baseFramework || 'react';\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IUtilInfo;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: `\n import { createRef } from '${framework}';\n `,\n linkAfter: [],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.FileUtilDefine,\n content: `\n export class RefsManager {\n constructor() {\n this.refInsStore = {};\n }\n\n clearNullRefs() {\n Object.keys(this.refInsStore).forEach((refName) => {\n const filteredInsList = this.refInsStore[refName].filter(insRef => !!insRef.current);\n if (filteredInsList.length > 0) {\n this.refInsStore[refName] = filteredInsList;\n } else {\n delete this.refInsStore[refName];\n }\n });\n }\n\n get(refName) {\n this.clearNullRefs();\n if (this.refInsStore[refName] && this.refInsStore[refName].length > 0) {\n return this.refInsStore[refName][0].current;\n }\n\n return null;\n }\n\n getAll(refName) {\n this.clearNullRefs();\n if (this.refInsStore[refName] && this.refInsStore[refName].length > 0) {\n return this.refInsStore[refName].map(i => i.current);\n }\n\n return [];\n }\n\n linkRef(refName) {\n const refIns = createRef();\n this.refInsStore[refName] = this.refInsStore[refName] || [];\n this.refInsStore[refName].push(refIns);\n return refIns;\n }\n }\n `,\n linkAfter: [...DEFAULT_LINK_AFTER[COMMON_CHUNK_NAME.FileUtilDefine]],\n });\n\n if (ir.utils) {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.FileExport,\n content: `\n export default {\n `,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n COMMON_CHUNK_NAME.FileMainContent,\n ],\n });\n\n ir.utils.forEach((util) => {\n if (util.type === 'function') {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.FileVarDefine,\n content: `\n const ${util.name} = ${util.content.value};\n `,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n ],\n });\n }\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.FileExport,\n content: `${util.name},`,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n COMMON_CHUNK_NAME.FileMainContent,\n ],\n });\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.FileExport,\n content: `\n };\n `,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n COMMON_CHUNK_NAME.FileMainContent,\n ],\n });\n }\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { ResultDir, ResultFile } from '@alilc/lowcode-types';\nimport { createResultDir, addDirectory, addFile } from './resultHelper';\n\ntype FuncFileGenerator = () => [string[], ResultFile];\n\n/**\n * \u5C06\u6587\u4EF6\u4F4D\u7F6E\u53CA\u6587\u4EF6\u63D2\u5165\u5230\u76EE\u5F55\u7684\u6811\u5F62\u7ED3\u6784\n * @param root\n * @param path\n * @param file\n */\nexport function insertFile(root: ResultDir, path: string[], file: ResultFile) {\n let current: ResultDir = root;\n path.forEach((pathNode) => {\n const dir = current.dirs.find((d) => d.name === pathNode);\n if (dir) {\n current = dir;\n } else {\n const newDir = createResultDir(pathNode);\n addDirectory(current, newDir);\n current = newDir;\n }\n });\n\n addFile(current, file);\n}\n\nexport function runFileGenerator(root: ResultDir, fun: FuncFileGenerator) {\n try {\n const result = fun();\n const [path, file] = result;\n insertFile(root, path, file);\n } catch (error) {\n throw new Error(`Error: ${typeof fun}`);\n }\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n [],\n {\n name: 'abc',\n ext: 'json',\n content: `\n{\n \"type\": \"ice-app\",\n \"builder\": \"@ali/builder-ice-app\"\n}\n `,\n },\n ];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n [],\n {\n name: 'build',\n ext: 'json',\n content: `\n{\n \"entry\": \"src/app.js\",\n \"plugins\": [\n [\n \"build-plugin-fusion\",\n {\n \"themePackage\": \"@alifd/theme-design-pro\"\n }\n ],\n [\n \"build-plugin-moment-locales\",\n {\n \"locales\": [\n \"zh-cn\"\n ]\n }\n ]\n ]\n}\n `,\n },\n ];\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 '.editorconfig',\n '',\n `\n# http://editorconfig.org\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = 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 `\n# \u5FFD\u7565\u76EE\u5F55\nbuild/\ntests/\ndemo/\n.ice/\n\n# node \u8986\u76D6\u7387\u6587\u4EF6\ncoverage/\n\n# \u5FFD\u7565\u6587\u4EF6\n**/*-min.js\n**/*.min.js\n\npackage-lock.json\nyarn.lock\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 'js',\n `\nconst { eslint } = require('@ice/spec');\n\nmodule.exports = eslint;\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 '.gitignore',\n '',\n `\n# See https://help.github.com/ignore-files/ for more about ignoring files.\n\n# dependencies\nnode_modules/\n\n# production\nbuild/\ndist/\ntmp/\nlib/\n\n# misc\n.idea/\n.happypack\n.DS_Store\n*.swp\n*.dia~\n.ice\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nindex.module.scss.d.ts\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 'jsconfig',\n 'json',\n `\n{\n \"compilerOptions\": {\n \"baseUrl\": \".\",\n \"jsx\": \"react\",\n \"paths\": {\n \"@/*\": [\"./src/*\"],\n \"ice\": [\".ice/index.ts\"],\n \"ice/*\": [\".ice/pages/*\"]\n }\n }\n}\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 '.prettierignore',\n '',\n `\nbuild/\ntests/\ndemo/\n.ice/\ncoverage/\n**/*-min.js\n**/*.min.js\npackage-lock.json\nyarn.lock\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 '.prettierrc',\n 'js',\n `\nconst { prettier } = require('@ice/spec');\n\nmodule.exports = prettier;\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 'README',\n 'md',\n `\n## Scaffold Lite\n\n> \u8F7B\u91CF\u7EA7\u6A21\u677F\uFF0C\u4F7F\u7528 JavaScript\uFF0C\u4EC5\u5305\u542B\u57FA\u7840\u7684 Layout\u3002\n\n## \u4F7F\u7528\n\n\\`\\`\\`bash\n# \u5B89\u88C5\u4F9D\u8D56\n$ npm install\n\n# \u542F\u52A8\u670D\u52A1\n$ npm start # visit http://localhost:3333\n\\`\\`\\`\n\n[More docs](https://ice.work/docs/guide/about).\n\n## \u76EE\u5F55\n\n\\`\\`\\`md\n\u251C\u2500\u2500 build/ # \u6784\u5EFA\u4EA7\u7269\n\u251C\u2500\u2500 mock/ # \u672C\u5730\u6A21\u62DF\u6570\u636E\n\u2502 \u251C\u2500\u2500 index.[j,t]s\n\u251C\u2500\u2500 public/\n\u2502 \u251C\u2500\u2500 index.html # \u5E94\u7528\u5165\u53E3 HTML\n\u2502 \u2514\u2500\u2500 favicon.png # Favicon\n\u251C\u2500\u2500 src/ # \u6E90\u7801\u8DEF\u5F84\n\u2502 \u251C\u2500\u2500 components/ # \u81EA\u5B9A\u4E49\u4E1A\u52A1\u7EC4\u4EF6\n\u2502 \u2502 \u2514\u2500\u2500 Guide/\n\u2502 \u2502 \u251C\u2500\u2500 index.[j,t]sx\n\u2502 \u2502 \u251C\u2500\u2500 index.module.scss\n\u2502 \u251C\u2500\u2500 layouts/ # \u5E03\u5C40\u7EC4\u4EF6\n\u2502 \u2502 \u2514\u2500\u2500 BasicLayout/\n\u2502 \u2502 \u251C\u2500\u2500 index.[j,t]sx\n\u2502 \u2502 \u2514\u2500\u2500 index.module.scss\n\u2502 \u251C\u2500\u2500 pages/ # \u9875\u9762\n\u2502 \u2502 \u2514\u2500\u2500 Home/ # home \u9875\u9762\uFF0C\u7EA6\u5B9A\u8DEF\u7531\u8F6C\u6210\u5C0F\u5199\n\u2502 \u2502 \u251C\u2500\u2500 components/ # \u9875\u9762\u7EA7\u81EA\u5B9A\u4E49\u4E1A\u52A1\u7EC4\u4EF6\n\u2502 \u2502 \u251C\u2500\u2500 models.[j,t]sx # \u9875\u9762\u7EA7\u6570\u636E\u72B6\u6001\n\u2502 \u2502 \u251C\u2500\u2500 index.[j,t]sx # \u9875\u9762\u5165\u53E3\n\u2502 \u2502 \u2514\u2500\u2500 index.module.scss # \u9875\u9762\u6837\u5F0F\u6587\u4EF6\n\u2502 \u251C\u2500\u2500 configs/ # [\u53EF\u9009] \u914D\u7F6E\u6587\u4EF6\n\u2502 \u2502 \u2514\u2500\u2500 menu.[j,t]s # [\u53EF\u9009] \u83DC\u5355\u914D\u7F6E\n\u2502 \u251C\u2500\u2500 models/ # [\u53EF\u9009] \u5E94\u7528\u7EA7\u6570\u636E\u72B6\u6001\n\u2502 \u2502 \u2514\u2500\u2500 user.[j,t]s\n\u2502 \u251C\u2500\u2500 utils/ # [\u53EF\u9009] \u5DE5\u5177\u5E93\n\u2502 \u251C\u2500\u2500 global.scss # \u5168\u5C40\u6837\u5F0F\n\u2502 \u251C\u2500\u2500 routes.[j,t]s # \u8DEF\u7531\u914D\u7F6E\n\u2502 \u2514\u2500\u2500 app.[j,t]s[x] # \u5E94\u7528\u5165\u53E3\u811A\u672C\n\u251C\u2500\u2500 build.json # \u5DE5\u7A0B\u914D\u7F6E\n\u251C\u2500\u2500 README.md\n\u251C\u2500\u2500 package.json\n\u251C\u2500\u2500 .editorconfig\n\u251C\u2500\u2500 .eslintignore\n\u251C\u2500\u2500 .eslintrc.[j,t]s\n\u251C\u2500\u2500 .gitignore\n\u251C\u2500\u2500 .stylelintignore\n\u251C\u2500\u2500 .stylelintrc.[j,t]s\n\u251C\u2500\u2500 .gitignore\n\u2514\u2500\u2500 [j,t]sconfig.json\n\\`\\`\\`\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 'index',\n 'jsx',\n `\nimport React from 'react';\nimport styles from './index.module.scss';\n\nexport default function Footer() {\n return (\n <p className={styles.footer}>\n <span className={styles.logo}>Alibaba Fusion</span>\n <br />\n <span className={styles.copyright}>\u00A9 2019-\u73B0\u5728 Alibaba Fusion & ICE</span>\n </p>\n );\n}\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout', 'components', 'Footer'], 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 'index',\n 'module.scss',\n `\n.footer {\n line-height: 20px;\n text-align: center;\n}\n\n.logo {\n font-weight: bold;\n font-size: 16px;\n}\n\n.copyright {\n font-size: 12px;\n}\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout', 'components', 'Footer'], 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 'index',\n 'jsx',\n `\nimport React from 'react';\nimport { Link } from 'ice';\nimport styles from './index.module.scss';\n\nexport default function Logo({ image, text, url }) {\n return (\n <div className=\"logo\">\n <Link to={url || '/'} className={styles.logo}>\n {image && <img src={image} alt=\"logo\" />}\n <span>{text}</span>\n </Link>\n </div>\n );\n}\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout', 'components', 'Logo'], 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 'index',\n 'module.scss',\n `\n.logo{\n display: flex;\n align-items: center;\n justify-content: center;\n color: $color-text1-1;\n font-weight: bold;\n font-size: 14px;\n line-height: 22px;\n\n &:visited, &:link {\n color: $color-text1-1;\n }\n\n img {\n height: 24px;\n margin-right: 10px;\n }\n}\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout', 'components', 'Logo'], 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 'index',\n 'jsx',\n `\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link, withRouter } from 'ice';\nimport { Nav } from '@alifd/next';\nimport { asideMenuConfig } from '../../menuConfig';\n\nconst { SubNav } = Nav;\nconst NavItem = Nav.Item;\n\nfunction getNavMenuItems(menusData) {\n if (!menusData) {\n return [];\n }\n\n return menusData\n .filter(item => item.name && !item.hideInMenu)\n .map((item, index) => getSubMenuOrItem(item, index));\n}\n\nfunction getSubMenuOrItem(item, index) {\n if (item.children && item.children.some(child => child.name)) {\n const childrenItems = getNavMenuItems(item.children);\n\n if (childrenItems && childrenItems.length > 0) {\n const subNav = (\n <SubNav key={index} icon={item.icon} label={item.name}>\n {childrenItems}\n </SubNav>\n );\n return subNav;\n }\n\n return null;\n }\n\n const navItem = (\n <NavItem key={item.path} icon={item.icon}>\n <Link to={item.path}>{item.name}</Link>\n </NavItem>\n );\n return navItem;\n}\n\nconst Navigation = (props, context) => {\n const { location } = props;\n const { pathname } = location;\n const { isCollapse } = context;\n return (\n <Nav\n type=\"primary\"\n selectedKeys={[pathname]}\n defaultSelectedKeys={[pathname]}\n embeddable\n openMode=\"single\"\n iconOnly={isCollapse}\n hasArrow={false}\n mode={isCollapse ? 'popup' : 'inline'}\n >\n {getNavMenuItems(asideMenuConfig)}\n </Nav>\n );\n};\n\nNavigation.contextTypes = {\n isCollapse: PropTypes.bool,\n};\nconst PageNav = withRouter(Navigation);\nexport default PageNav;\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout', 'components', 'PageNav'], 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 'index',\n 'jsx',\n `\nimport React, { useState } from 'react';\nimport { Shell, ConfigProvider } from '@alifd/next';\nimport PageNav from './components/PageNav';\nimport Logo from './components/Logo';\nimport Footer from './components/Footer';\n\n(function() {\n const throttle = function(type, name, obj = window) {\n let running = false;\n\n const func = () => {\n if (running) {\n return;\n }\n\n running = true;\n requestAnimationFrame(() => {\n obj.dispatchEvent(new CustomEvent(name));\n running = false;\n });\n };\n\n obj.addEventListener(type, func);\n };\n\n throttle('resize', 'optimizedResize');\n})();\n\nexport default function BasicLayout({ children }) {\n const getDevice = width => {\n const isPhone =\n typeof navigator !== 'undefined' && navigator && navigator.userAgent.match(/phone/gi);\n\n if (width < 680 || isPhone) {\n return 'phone';\n }\n if (width < 1280 && width > 680) {\n return 'tablet';\n }\n return 'desktop';\n };\n\n const [device, setDevice] = useState(getDevice(NaN));\n window.addEventListener('optimizedResize', e => {\n setDevice(getDevice(e && e.target && e.target.innerWidth));\n });\n return (\n <ConfigProvider device={device}>\n <Shell\n type=\"dark\"\n style={{\n minHeight: '100vh',\n }}\n >\n <Shell.Branding>\n <Logo\n image=\"https://img.alicdn.com/tfs/TB1.ZBecq67gK0jSZFHXXa9jVXa-904-826.png\"\n text=\"Logo\"\n />\n </Shell.Branding>\n <Shell.Navigation\n direction=\"hoz\"\n style={{\n marginRight: 10,\n }}\n ></Shell.Navigation>\n <Shell.Action></Shell.Action>\n <Shell.Navigation>\n <PageNav />\n </Shell.Navigation>\n\n <Shell.Content>{children}</Shell.Content>\n <Shell.Footer>\n <Footer />\n </Shell.Footer>\n </Shell>\n </ConfigProvider>\n );\n}\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout'], 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 'menuConfig',\n 'js',\n `\nconst headerMenuConfig = [];\nconst asideMenuConfig = [\n {\n name: 'Dashboard',\n path: '/',\n icon: 'smile',\n },\n];\nexport { headerMenuConfig, asideMenuConfig };\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout'], 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 '.stylelintignore',\n '',\n `\n# \u5FFD\u7565\u76EE\u5F55\nbuild/\ntests/\ndemo/\n\n# node \u8986\u76D6\u7387\u6587\u4EF6\ncoverage/\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 '.stylelintrc',\n 'js',\n `\nconst { stylelint } = require('@ice/spec');\n\nmodule.exports = stylelint;\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 'tsconfig',\n 'json',\n `\n{\n \"compileOnSave\": false,\n \"buildOnSave\": false,\n \"compilerOptions\": {\n \"baseUrl\": \".\",\n \"outDir\": \"build\",\n \"module\": \"esnext\",\n \"target\": \"es6\",\n \"jsx\": \"react\",\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 \"ice\": [\".ice/index.ts\"],\n \"ice/*\": [\".ice/pages/*\"]\n }\n },\n \"include\": [\"src/*\", \".ice\"],\n \"exclude\": [\"node_modules\", \"build\", \"public\"]\n}\n `,\n );\n\n return [[], file];\n}\n", "import { ResultDir } from '@alilc/lowcode-types';\n\nimport { createResultDir } from '../../../../../utils/resultHelper';\nimport { runFileGenerator } from '../../../../../utils/templateHelper';\n\nimport file12 from './files/abc.json';\nimport file11 from './files/build.json';\nimport file10 from './files/editorconfig';\nimport file9 from './files/eslintignore';\nimport file8 from './files/eslintrc.js';\nimport file7 from './files/gitignore';\nimport file6 from './files/jsconfig.json';\nimport file5 from './files/prettierignore';\nimport file4 from './files/prettierrc.js';\nimport file13 from './files/README.md';\nimport file16 from './files/src/layouts/BasicLayout/components/Footer/index.jsx';\nimport file17 from './files/src/layouts/BasicLayout/components/Footer/index.style';\nimport file18 from './files/src/layouts/BasicLayout/components/Logo/index.jsx';\nimport file19 from './files/src/layouts/BasicLayout/components/Logo/index.style';\nimport file20 from './files/src/layouts/BasicLayout/components/PageNav/index.jsx';\nimport file14 from './files/src/layouts/BasicLayout/index.jsx';\nimport file15 from './files/src/layouts/BasicLayout/menuConfig.js';\nimport file3 from './files/stylelintignore';\nimport file2 from './files/stylelintrc.js';\nimport file1 from './files/tsconfig.json';\n\nexport function generateStaticFiles(root = createResultDir('.')): ResultDir {\n runFileGenerator(root, file1);\n runFileGenerator(root, file2);\n runFileGenerator(root, file3);\n runFileGenerator(root, file4);\n runFileGenerator(root, file5);\n runFileGenerator(root, file6);\n runFileGenerator(root, file7);\n runFileGenerator(root, file8);\n runFileGenerator(root, file9);\n runFileGenerator(root, file10);\n runFileGenerator(root, file11);\n runFileGenerator(root, file12);\n runFileGenerator(root, file13);\n runFileGenerator(root, file14);\n runFileGenerator(root, file15);\n runFileGenerator(root, file16);\n runFileGenerator(root, file17);\n runFileGenerator(root, file18);\n runFileGenerator(root, file19);\n runFileGenerator(root, file20);\n\n return root;\n}\n", "import { ResultDir } from '@alilc/lowcode-types';\nimport { IProjectTemplate } from '../../../../../types';\nimport { generateStaticFiles } from './static-files';\n\nconst icejsTemplate: IProjectTemplate = {\n slots: {\n components: {\n path: ['src', 'components'],\n },\n pages: {\n path: ['src', 'pages'],\n },\n router: {\n path: ['src'],\n fileName: 'routes',\n },\n entry: {\n path: ['src'],\n fileName: 'app',\n },\n constants: {\n path: ['src'],\n fileName: 'constants',\n },\n utils: {\n path: ['src'],\n fileName: 'utils',\n },\n i18n: {\n path: ['src'],\n fileName: 'i18n',\n },\n globalStyle: {\n path: ['src'],\n fileName: 'global',\n },\n htmlEntry: {\n path: ['public'],\n fileName: 'index',\n },\n packageJSON: {\n path: [],\n fileName: 'package',\n },\n },\n\n generateTemplate(): ResultDir {\n return generateStaticFiles();\n },\n};\n\nexport default icejsTemplate;\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n} from '../../../../../types';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: `\n import { createApp } from 'ice';\n `,\n linkAfter: [],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.FileMainContent,\n content: `\n const appConfig = {\n app: {\n rootId: 'app',\n },\n router: {\n type: 'hash',\n },\n };\n createApp(appConfig);\n `,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n ],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IProjectInfo,\n} from '../../../../../types';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IProjectInfo;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.HTML,\n name: COMMON_CHUNK_NAME.HtmlContent,\n content: `\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"utf-8\" />\n <meta http-equiv=\"x-ua-compatible\" content=\"ie=edge,chrome=1\" />\n <meta name=\"viewport\" content=\"width=device-width\" />\n <title>${ir?.meta?.name || 'Ice App'}</title>\n </head>\n <body>\n <div id=\"app\"></div>\n </body>\n </html>\n `,\n linkAfter: [],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IProjectInfo,\n} from '../../../../../types';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IProjectInfo;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.SCSS,\n name: COMMON_CHUNK_NAME.StyleDepsImport,\n content: `\n // \u5F15\u5165\u9ED8\u8BA4\u5168\u5C40\u6837\u5F0F\n @import '@alifd/next/reset.scss';\n `,\n linkAfter: [],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.SCSS,\n name: COMMON_CHUNK_NAME.StyleCssContent,\n content: `\n body {\n -webkit-font-smoothing: antialiased;\n }\n `,\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.SCSS,\n name: COMMON_CHUNK_NAME.StyleCssContent,\n content: ir.css || '',\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import changeCase from 'change-case';\nimport type {\n DataSourceCustomExtra,\n ExtraInterpretDataSource,\n IProjectInfo,\n IPublicTypeFormContainerSchema,\n} from '../types/intermediate';\n\nexport interface DataSourceDependenciesConfig {\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\n engineVersion?: string;\n\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\n enginePackage?: string;\n\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\n handlersVersion?: {\n [key: string]: string;\n };\n\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\n handlersPackages?: {\n [key: string]: string;\n };\n}\n\nexport function buildDataSourceDependencies(\n ir: IProjectInfo,\n cfg: DataSourceDependenciesConfig = {},\n): Record<string, string> {\n return {\n // \u6570\u636E\u6E90\u5F15\u64CE\u7684\u4F9D\u8D56\u5305\n [cfg.enginePackage || '@alilc/lowcode-datasource-engine']: cfg.engineVersion || '^1.0.0',\n\n // \u5404\u79CD\u6570\u636E\u6E90\u7684 handlers \u7684\u4F9D\u8D56\u5305\n ...(ir.dataSourcesTypes || []).reduce(\n (acc, dsType) => ({\n ...acc,\n [getDataSourceHandlerPackageName(dsType)]: cfg.handlersVersion?.[dsType] || '^1.0.0',\n }),\n {},\n ),\n };\n\n function getDataSourceHandlerPackageName(dsType: string) {\n return (\n cfg.handlersPackages?.[dsType] ||\n `@alilc/lowcode-datasource-${changeCase.kebab(dsType)}-handler`\n );\n }\n}\n\nexport function isFormPage(obj: Record<string, DataSourceCustomExtra>) {\n // \u904D\u5386\u5BF9\u8C61\uFF0C\u68C0\u67E5\u6BCF\u4E00\u9879\u7684 id \u662F\u5426\u4E0D\u4E3A\u7A7A\n for (let key in obj) {\n if (obj[key].dataSourceType && obj[key].dataSourceType == 'formPage') {\n return true;\n }\n }\n return false;\n}\n", "import { PackageJSON } from '@alilc/lowcode-types';\n\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IProjectInfo,\n} from '../../../../../types';\nimport { buildDataSourceDependencies } from '../../../../../utils/dataSource';\n\ninterface IIceJsPackageJSON extends PackageJSON {\n ideMode: {\n name: string;\n };\n iceworks: {\n type: string;\n adapter: string;\n };\n originTemplate: string;\n}\n\nexport type IceJsPackageJsonPluginConfig = {\n /**\n * \u6570\u636E\u6E90\u914D\u7F6E\n */\n datasourceConfig?: {\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\n engineVersion?: string;\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\n enginePackage?: string;\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\n handlersVersion?: {\n [key: string]: string;\n };\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\n handlersPackages?: {\n [key: string]: string;\n };\n };\n /** \u5305\u540D */\n packageName?: string;\n /** \u7248\u672C */\n packageVersion?: string;\n};\n\nconst pluginFactory: BuilderComponentPluginFactory<IceJsPackageJsonPluginConfig> = (cfg) => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IProjectInfo;\n\n const packageJson: IIceJsPackageJSON = {\n name: cfg?.packageName || 'icejs-demo-app',\n version: cfg?.packageVersion || '0.1.5',\n description: '\u8F7B\u91CF\u7EA7\u6A21\u677F\uFF0C\u4F7F\u7528 JavaScript\uFF0C\u4EC5\u5305\u542B\u57FA\u7840\u7684 Layout\u3002',\n dependencies: {\n moment: '^2.24.0',\n react: '^16.4.1',\n 'react-dom': '^16.4.1',\n 'react-router': '^5.2.1',\n '@alifd/theme-design-pro': '^0.x',\n 'intl-messageformat': '^9.3.6',\n '@ice/store': '^1.4.3',\n '@loadable/component': '^5.15.2',\n\n // \u6570\u636E\u6E90\u76F8\u5173\u7684\u4F9D\u8D56:\n ...buildDataSourceDependencies(ir, cfg?.datasourceConfig),\n },\n devDependencies: {\n '@ice/spec': '^1.0.0',\n 'build-plugin-fusion': '^0.1.0',\n 'build-plugin-moment-locales': '^0.1.0',\n eslint: '^6.0.1',\n 'ice.js': '^1.0.0',\n stylelint: '^13.2.0',\n },\n scripts: {\n start: 'icejs start',\n build: 'icejs build',\n lint: 'npm run eslint && npm run stylelint',\n eslint: 'eslint --cache --ext .js,.jsx ./',\n stylelint: 'stylelint ./**/*.scss',\n },\n ideMode: {\n name: 'ice-react',\n },\n iceworks: {\n type: 'react',\n adapter: 'adapter-react-v3',\n },\n engines: {\n node: '>=8.0.0',\n },\n repository: {\n type: 'git',\n url: 'http://gitlab.xxx.com/msd/leak-scan/tree/master',\n },\n private: true,\n originTemplate: '@alifd/scaffold-lite-js',\n };\n\n ir.packages.forEach((packageInfo) => {\n packageJson.dependencies[packageInfo.package] = packageInfo.version;\n });\n\n next.chunks.push({\n type: ChunkType.JSON,\n fileType: FileType.JSON,\n name: COMMON_CHUNK_NAME.FileMainContent,\n content: packageJson,\n linkAfter: [],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IRouterInfo,\n} from '../../../../../types';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IRouterInfo;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: `\n import BasicLayout from '@/layouts/BasicLayout';\n `,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.FileVarDefine,\n content: `\n const routerConfig = [\n {\n path: '/',\n component: BasicLayout,\n children: [\n ${ir.routes\n .map(\n (route) => `\n {\n path: '${route.path}',\n component: ${route.componentName},\n }\n `,\n )\n .join(',')}\n ],\n },\n ];\n `,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n ],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.FileExport,\n content: `\n export default routerConfig;\n `,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.FileUtilDefine,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileMainContent,\n ],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import template from './template';\nimport entry from './plugins/entry';\nimport entryHtml from './plugins/entryHtml';\nimport globalStyle from './plugins/globalStyle';\nimport packageJSON from './plugins/packageJSON';\nimport router from './plugins/router';\n\nexport default {\n template,\n plugins: {\n entry,\n entryHtml,\n globalStyle,\n packageJSON,\n router,\n },\n};\n", "import prettier from 'prettier';\nimport parserBabel from 'prettier/parser-babel';\nimport parserPostCss from 'prettier/parser-postcss';\nimport parserHtml from 'prettier/parser-html';\n\nimport { PostProcessor, PostProcessorFactory } from '../../types';\n\nconst PARSERS = ['css', 'scss', 'less', 'json', 'html', 'vue'];\n\nexport interface ProcessorConfig {\n customFileTypeParser: Record<string, string>;\n plugins?: prettier.Plugin[];\n}\n\nconst factory: PostProcessorFactory<ProcessorConfig> = (config?: ProcessorConfig) => {\n const cfg: ProcessorConfig = {\n customFileTypeParser: {},\n ...config,\n };\n\n const codePrettier: PostProcessor = (content: string, fileType: string) => {\n let parser: prettier.BuiltInParserName | any;\n if (fileType === 'js' || fileType === 'jsx' || fileType === 'ts' || fileType === 'tsx') {\n parser = 'babel-ts';\n } else if (fileType === 'json') {\n parser = 'json-stringify';\n } else if (PARSERS.indexOf(fileType) >= 0) {\n parser = fileType;\n } else if (cfg.customFileTypeParser[fileType]) {\n parser = cfg.customFileTypeParser[fileType];\n } else {\n return content;\n }\n\n return prettier.format(content, {\n parser,\n plugins: [parserBabel, parserPostCss, parserHtml, ...(cfg.plugins || [])],\n singleQuote: true,\n jsxSingleQuote: false,\n });\n };\n\n return codePrettier;\n};\n\nexport default factory;\n", "import { IProjectBuilder, IProjectBuilderOptions } from '../types';\n\nimport { createProjectBuilder } from '../generator/ProjectBuilder';\n\nimport esmodule from '../plugins/common/esmodule';\nimport styleImport from '../plugins/common/styleImport';\nimport containerClass from '../plugins/component/react/containerClass';\nimport containerInitState from '../plugins/component/react/containerInitState';\nimport containerInjectContext from '../plugins/component/react/containerInjectContext';\nimport containerInjectUtils from '../plugins/component/react/containerInjectUtils';\nimport containerInjectDataSourceEngine from '../plugins/component/react/containerInjectDataSourceEngine';\nimport containerInjectConstants from '../plugins/component/react/containerInjectConstants';\nimport containerInjectI18n from '../plugins/component/react/containerInjectI18n';\nimport containerLifeCycle from '../plugins/component/react/containerLifeCycle';\nimport containerMethod from '../plugins/component/react/containerMethod';\nimport jsx from '../plugins/component/react/jsx';\nimport reactCommonDeps from '../plugins/component/react/reactCommonDeps';\nimport css from '../plugins/component/style/css';\nimport constants from '../plugins/project/constants';\nimport i18n from '../plugins/project/i18n';\nimport utils from '../plugins/project/utils';\n\nimport icejs from '../plugins/project/framework/icejs';\n\nimport { prettier } from '../postprocessor';\n\nexport type IceJsProjectBuilderOptions = IProjectBuilderOptions;\n\nexport default function createIceJsProjectBuilder(\n options?: IceJsProjectBuilderOptions,\n): IProjectBuilder {\n return createProjectBuilder({\n inStrictMode: options?.inStrictMode,\n extraContextData: { ...options },\n template: icejs.template,\n plugins: {\n components: [\n reactCommonDeps(),\n esmodule({\n fileType: 'jsx',\n }),\n styleImport(),\n containerClass(),\n containerInjectContext(),\n containerInjectUtils(),\n containerInjectDataSourceEngine(),\n containerInjectI18n(),\n containerInjectConstants(),\n containerInitState(),\n containerLifeCycle(),\n containerMethod(),\n jsx({\n nodeTypeMapping: {\n Div: 'div',\n Component: 'div',\n Page: 'div',\n Block: 'div',\n },\n }),\n css(),\n ],\n pages: [\n reactCommonDeps(),\n esmodule({\n fileType: 'jsx',\n }),\n styleImport(),\n containerClass(),\n containerInjectContext(),\n containerInjectUtils(),\n containerInjectDataSourceEngine(),\n containerInjectI18n(),\n containerInjectConstants(),\n containerInitState(),\n containerLifeCycle(),\n containerMethod(),\n jsx({\n nodeTypeMapping: {\n Div: 'div',\n Component: 'div',\n Page: 'div',\n Block: 'div',\n // Box: 'div',\n },\n }),\n css(),\n ],\n router: [esmodule(), icejs.plugins.router()],\n entry: [icejs.plugins.entry()],\n constants: [constants()],\n utils: [esmodule(), utils('react')],\n i18n: [i18n()],\n globalStyle: [icejs.plugins.globalStyle()],\n htmlEntry: [icejs.plugins.entryHtml()],\n packageJSON: [icejs.plugins.packageJSON()],\n },\n postProcessors: [prettier()],\n customizeBuilderOptions: options?.customizeBuilderOptions,\n });\n}\n\nexport const plugins = {\n containerClass,\n containerInjectContext,\n containerInjectUtils,\n containerInjectDataSourceEngine,\n containerInjectI18n,\n containerInjectConstants,\n containerInitState,\n containerLifeCycle,\n containerMethod,\n jsx,\n commonDeps: reactCommonDeps,\n\n /** @deprecated Please use commonDeps */\n reactCommonDeps,\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 '.gitignore',\n '',\n `\n# See https://help.github.com/ignore-files/ for more about ignoring files.\n\n# dependencies\nnode_modules/\n\n# production\nbuild/\ndist/\ntmp/\nlib/\n\n# misc\n.idea/\n.happypack\n.DS_Store\n*.swp\n*.dia~\n.ice\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nindex.module.scss.d.ts\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 'README',\n 'md',\n 'This project is generated by lowcode-code-generator & lowcode-solution-icejs3.',\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 '.browserslistrc',\n '',\n `defaults\nios_saf 9\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 'typings.d',\n 'ts',\n `/// <reference types=\"@ice/app/types\" />\n\nexport {};\ndeclare global {\n interface Window {\n g_config: Record<string, any>;\n }\n}\n `,\n );\n\n return [['src'], file];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\nimport { createResultFile } from '../../../../../../utils/resultHelper';\n\n/* eslint-disable max-len */\nexport default function getFile(): [string[], ResultFile] {\n const file = createResultFile(\n 'document',\n 'tsx',\n `import React from 'react';\nimport { Meta, Title, Links, Main, Scripts } from 'ice';\n\nexport default function Document() {\n return (\n <html>\n <head>\n <meta charSet=\"utf-8\" />\n <meta name=\"description\" content=\"ice.js 3 lite scaffold\" />\n <link rel=\"icon\" href=\"/favicon.ico\" />\n <link rel=\"stylesheet\" href=\"//alifd.alicdn.com/npm/@alifd/next/1.21.16/next.min.css\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\" />\n <Meta />\n <Title />\n <Links />\n </head>\n <body>\n <Main />\n <script crossOrigin=\"anonymous\" src=\"//g.alicdn.com/code/lib/react/18.2.0/umd/react.development.js\" />\n <script crossOrigin=\"anonymous\" src=\"//g.alicdn.com/code/lib/react-dom/18.2.0/umd/react-dom.development.js\" />\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\" />\n <script crossOrigin=\"anonymous\" src=\"//g.alicdn.com/code/lib/alifd__next/1.26.22/next.min.js\" />\n <script crossOrigin=\"anonymous\" src=\"//g.alicdn.com/code/lib/prop-types/15.7.2/prop-types.js\" />\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\" />\n <Scripts />\n </body>\n </html>\n );\n}`,\n );\n\n return [['src'], 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 'index',\n 'jsx',\n `\nimport React from 'react';\nimport styles from './index.module.scss';\n\nexport default function Footer() {\n return (\n <p className={styles.footer}>\n <span className={styles.logo}>Alibaba Fusion</span>\n <br />\n <span className={styles.copyright}>\u00A9 2019-\u73B0\u5728 Alibaba Fusion & ICE</span>\n </p>\n );\n}\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout', 'components', 'Footer'], 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 'index',\n 'module.scss',\n `\n.footer {\n line-height: 20px;\n text-align: center;\n}\n\n.logo {\n font-weight: bold;\n font-size: 16px;\n}\n\n.copyright {\n font-size: 12px;\n}\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout', 'components', 'Footer'], 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 'index',\n 'jsx',\n `\nimport React from 'react';\nimport { Link } from 'ice';\nimport styles from './index.module.scss';\n\nexport default function Logo({ image, text, url }) {\n return (\n <div className=\"logo\">\n <Link to={url || '/'} className={styles.logo}>\n {image && <img src={image} alt=\"logo\" />}\n <span>{text}</span>\n </Link>\n </div>\n );\n}\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout', 'components', 'Logo'], 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 'index',\n 'module.scss',\n `\n.logo{\n display: flex;\n align-items: center;\n justify-content: center;\n color: #FF7300;\n font-weight: bold;\n font-size: 14px;\n line-height: 22px;\n\n &:visited, &:link {\n color: #FF7300;\n }\n\n img {\n height: 24px;\n margin-right: 10px;\n }\n}\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout', 'components', 'Logo'], 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 'index',\n 'jsx',\n `import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link, useLocation } from 'ice';\nimport { Nav } from '@alifd/next';\nimport { asideMenuConfig } from '../../menuConfig';\n\nconst { SubNav } = Nav;\nconst NavItem = Nav.Item;\n\nfunction getNavMenuItems(menusData) {\n if (!menusData) {\n return [];\n }\n\n return menusData\n .filter(item => item.name && !item.hideInMenu)\n .map((item, index) => getSubMenuOrItem(item, index));\n}\n\nfunction getSubMenuOrItem(item, index) {\n if (item.children && item.children.some(child => child.name)) {\n const childrenItems = getNavMenuItems(item.children);\n\n if (childrenItems && childrenItems.length > 0) {\n const subNav = (\n <SubNav key={index} icon={item.icon} label={item.name}>\n {childrenItems}\n </SubNav>\n );\n return subNav;\n }\n\n return null;\n }\n\n const navItem = (\n <NavItem key={item.path} icon={item.icon}>\n <Link to={item.path}>{item.name}</Link>\n </NavItem>\n );\n return navItem;\n}\n\nconst Navigation = (props, context) => {\n const location = useLocation();\n const { pathname } = location;\n const { isCollapse } = context;\n return (\n <Nav\n type=\"primary\"\n selectedKeys={[pathname]}\n defaultSelectedKeys={[pathname]}\n embeddable\n openMode=\"single\"\n iconOnly={isCollapse}\n hasArrow={false}\n mode={isCollapse ? 'popup' : 'inline'}\n >\n {getNavMenuItems(asideMenuConfig)}\n </Nav>\n );\n};\n\nNavigation.contextTypes = {\n isCollapse: PropTypes.bool,\n};\nexport default Navigation;\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout', 'components', 'PageNav'], 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 'index',\n 'jsx',\n `\nimport React, { useState } from 'react';\nimport { Shell, ConfigProvider } from '@alifd/next';\nimport PageNav from './components/PageNav';\nimport Logo from './components/Logo';\nimport Footer from './components/Footer';\n\n(function() {\n const throttle = function(type, name, obj = window) {\n let running = false;\n\n const func = () => {\n if (running) {\n return;\n }\n\n running = true;\n requestAnimationFrame(() => {\n obj.dispatchEvent(new CustomEvent(name));\n running = false;\n });\n };\n\n obj.addEventListener(type, func);\n };\n\n throttle('resize', 'optimizedResize');\n})();\n\nexport default function BasicLayout({ children }) {\n const getDevice = width => {\n const isPhone =\n typeof navigator !== 'undefined' && navigator && navigator.userAgent.match(/phone/gi);\n\n if (width < 680 || isPhone) {\n return 'phone';\n }\n if (width < 1280 && width > 680) {\n return 'tablet';\n }\n return 'desktop';\n };\n\n const [device, setDevice] = useState(getDevice(NaN));\n window.addEventListener('optimizedResize', e => {\n setDevice(getDevice(e && e.target && e.target.innerWidth));\n });\n return (\n <ConfigProvider device={device}>\n <Shell\n type=\"dark\"\n style={{\n minHeight: '100vh',\n }}\n >\n <Shell.Branding>\n <Logo\n image=\"https://img.alicdn.com/tfs/TB1.ZBecq67gK0jSZFHXXa9jVXa-904-826.png\"\n text=\"Logo\"\n />\n </Shell.Branding>\n <Shell.Navigation\n direction=\"hoz\"\n style={{\n marginRight: 10,\n }}\n ></Shell.Navigation>\n <Shell.Action></Shell.Action>\n <Shell.Navigation>\n <PageNav />\n </Shell.Navigation>\n\n <Shell.Content>{children}</Shell.Content>\n <Shell.Footer>\n <Footer />\n </Shell.Footer>\n </Shell>\n </ConfigProvider>\n );\n}\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout'], 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 'menuConfig',\n 'js',\n `\nconst headerMenuConfig = [];\nconst asideMenuConfig = [\n {\n name: 'Dashboard',\n path: '/',\n icon: 'smile',\n },\n];\nexport { headerMenuConfig, asideMenuConfig };\n `,\n );\n\n return [['src', 'layouts', 'BasicLayout'], file];\n}\n", "import { ResultDir } from '@alilc/lowcode-types';\nimport { createResultDir } from '../../../../../utils/resultHelper';\nimport { runFileGenerator } from '../../../../../utils/templateHelper';\n\nimport file1 from './files/gitignore';\nimport file2 from './files/README.md';\nimport file3 from './files/browserslistrc';\nimport file4 from './files/typings';\nimport file5 from './files/document';\nimport file6 from './files/src/layouts/BasicLayout/components/Footer/index.jsx';\nimport file7 from './files/src/layouts/BasicLayout/components/Footer/index.style';\nimport file8 from './files/src/layouts/BasicLayout/components/Logo/index.jsx';\nimport file9 from './files/src/layouts/BasicLayout/components/Logo/index.style';\nimport file10 from './files/src/layouts/BasicLayout/components/PageNav/index.jsx';\nimport file11 from './files/src/layouts/BasicLayout/index.jsx';\nimport file12 from './files/src/layouts/BasicLayout/menuConfig.js';\n\nexport function generateStaticFiles(root = createResultDir('.')): ResultDir {\n runFileGenerator(root, file1);\n runFileGenerator(root, file2);\n runFileGenerator(root, file3);\n runFileGenerator(root, file4);\n runFileGenerator(root, file5);\n runFileGenerator(root, file6);\n runFileGenerator(root, file7);\n runFileGenerator(root, file8);\n runFileGenerator(root, file9);\n runFileGenerator(root, file10);\n runFileGenerator(root, file11);\n runFileGenerator(root, file12);\n\n return root;\n}\n", "import { IProjectTemplate } from '../../../../../types';\nimport { generateStaticFiles } from './static-files';\n\nconst icejs3Template: IProjectTemplate = {\n slots: {\n components: {\n path: ['src', 'components'],\n fileName: 'index',\n },\n pages: {\n path: ['src', 'pages'],\n fileName: 'index',\n },\n entry: {\n path: ['src'],\n fileName: 'app',\n },\n constants: {\n path: ['src'],\n fileName: 'constants',\n },\n utils: {\n path: ['src'],\n fileName: 'utils',\n },\n i18n: {\n path: ['src'],\n fileName: 'i18n',\n },\n globalStyle: {\n path: ['src'],\n fileName: 'global',\n },\n packageJSON: {\n path: [],\n fileName: 'package',\n },\n appConfig: {\n path: ['src'],\n fileName: 'app',\n },\n buildConfig: {\n path: [],\n fileName: 'ice.config',\n },\n layout: {\n path: ['src', 'pages'],\n fileName: 'layout',\n },\n },\n\n generateTemplate() {\n return generateStaticFiles();\n },\n};\n\nexport default icejs3Template;\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IProjectInfo,\n} from '../../../../../types';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IProjectInfo;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.SCSS,\n name: COMMON_CHUNK_NAME.StyleDepsImport,\n content: `\n // \u5F15\u5165\u9ED8\u8BA4\u5168\u5C40\u6837\u5F0F\n @import '@alifd/next/reset.scss';\n `,\n linkAfter: [],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.SCSS,\n name: COMMON_CHUNK_NAME.StyleCssContent,\n content: `\n body {\n -webkit-font-smoothing: antialiased;\n }\n `,\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.SCSS,\n name: COMMON_CHUNK_NAME.StyleCssContent,\n content: ir.css || '',\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { PackageJSON } from '@alilc/lowcode-types';\n\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IProjectInfo,\n} from '../../../../../types';\nimport { buildDataSourceDependencies } from '../../../../../utils/dataSource';\n\ninterface IIceJs3PackageJSON extends PackageJSON {\n originTemplate: string;\n}\n\nexport type IceJs3PackageJsonPluginConfig = {\n\n /**\n * \u6570\u636E\u6E90\u914D\u7F6E\n */\n datasourceConfig?: {\n\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\n engineVersion?: string;\n\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\n enginePackage?: string;\n\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\n handlersVersion?: {\n [key: string]: string;\n };\n\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\n handlersPackages?: {\n [key: string]: string;\n };\n };\n\n /** \u5305\u540D */\n packageName?: string;\n\n /** \u7248\u672C */\n packageVersion?: string;\n};\n\nconst pluginFactory: BuilderComponentPluginFactory<IceJs3PackageJsonPluginConfig> = (cfg) => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IProjectInfo;\n\n const packageJson: IIceJs3PackageJSON = {\n name: cfg?.packageName || 'icejs3-demo-app',\n version: cfg?.packageVersion || '0.1.5',\n description: 'icejs 3 \u8F7B\u91CF\u7EA7\u6A21\u677F\uFF0C\u4F7F\u7528 JavaScript\uFF0C\u4EC5\u5305\u542B\u57FA\u7840\u7684 Layout\u3002',\n dependencies: {\n moment: '^2.24.0',\n react: '^18.2.0',\n 'react-dom': '^18.2.0',\n 'react-router': '^6.9.0',\n 'react-router-dom': '^6.9.0',\n 'intl-messageformat': '^9.3.6',\n '@alifd/next': '1.26.15',\n '@ice/runtime': '~1.1.0',\n // \u6570\u636E\u6E90\u76F8\u5173\u7684\u4F9D\u8D56:\n ...buildDataSourceDependencies(ir, cfg?.datasourceConfig),\n },\n devDependencies: {\n '@ice/app': '~3.1.0',\n '@types/react': '^18.0.0',\n '@types/react-dom': '^18.0.0',\n '@types/node': '^18.11.17',\n '@ice/plugin-fusion': '^1.0.1',\n '@ice/plugin-moment-locales': '^1.0.0',\n eslint: '^6.0.1',\n stylelint: '^13.2.0',\n },\n scripts: {\n start: 'ice start',\n build: 'ice build',\n lint: 'npm run eslint && npm run stylelint',\n eslint: 'eslint --cache --ext .js,.jsx ./',\n stylelint: 'stylelint ./**/*.scss',\n },\n engines: {\n node: '>=14.0.0',\n },\n repository: {\n type: 'git',\n url: 'http://gitlab.xxx.com/msd/leak-scan/tree/master',\n },\n private: true,\n originTemplate: '@alifd/scaffold-lite-js',\n };\n\n ir.packages.forEach((packageInfo) => {\n packageJson.dependencies[packageInfo.package] = packageInfo.version;\n });\n\n next.chunks.push({\n type: ChunkType.JSON,\n fileType: FileType.JSON,\n name: COMMON_CHUNK_NAME.FileMainContent,\n content: packageJson,\n linkAfter: [],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n} from '../../../../../types';\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.FileMainContent,\n content: `\n import { Outlet } from 'ice';\n import BasicLayout from '@/layouts/BasicLayout';\n\n export default function Layout() {\n return (\n <BasicLayout>\n <Outlet />\n </BasicLayout>\n );;\n }\n `,\n linkAfter: [],\n });\n\n return next;\n };\n\n return plugin;\n};\n\nexport default pluginFactory;\n", "import {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n} from '../../../../../types';\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nexport interface AppConfigPluginConfig {\n\n}\n\nfunction getContent() {\n return `import { defineAppConfig } from 'ice';\n\n// App config, see https://v3.ice.work/docs/guide/basic/app\nexport default defineAppConfig(() => ({\n // Set your configs here.\n app: {\n rootId: 'App',\n },\n router: {\n type: 'browser',\n basename: '/',\n },\n}));`;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<AppConfigPluginConfig> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n name: COMMON_CHUNK_NAME.FileMainContent,\n content: getContent(),\n linkAfter: [],\n });\n\n return next;\n };\n\n return plugin;\n};\n\nexport default pluginFactory;\n", "import prettier from 'prettier';\nimport parserBabel from 'prettier/parser-babel';\n\nexport function format(content: string, options = {}) {\n return prettier.format(content, {\n parser: 'babel',\n plugins: [parserBabel],\n singleQuote: true,\n jsxSingleQuote: false,\n ...options,\n });\n}\n", "/**\n * \u83B7\u53D6\u4E3B\u9898\u4FE1\u606F\n * @param theme theme \u5F62\u5982 @alife/theme-97 \u6216\u8005 @alife/theme-97@^1.0.0\n */\n\nexport interface ThemeInfo {\n name: string;\n version?: string;\n}\n\nexport function getThemeInfo(theme: string): ThemeInfo {\n const sepIdx = theme.indexOf('@', 1);\n if (sepIdx === -1) {\n return { name: theme };\n }\n return {\n name: theme.slice(0, sepIdx),\n version: theme.slice(sepIdx + 1),\n };\n}", "import {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n} from '../../../../../types';\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\nimport { format } from '../../../../../utils/format';\nimport { getThemeInfo } from '../../../../../utils/theme';\n\nexport interface BuildConfigPluginConfig {\n\n /** \u5305\u540D */\n themePackage?: string;\n}\n\nfunction getContent(cfg?: BuildConfigPluginConfig, routesContent?: string) {\n return `\nimport { join } from 'path';\nimport { defineConfig } from '@ice/app';\nimport _ from 'lodash';\nimport fusion from '@ice/plugin-fusion';\nimport locales from '@ice/plugin-moment-locales';\nimport type { Plugin } from '@ice/app/esm/types';\n\ninterface PluginOptions {\n id: string;\n}\n\nconst plugin: Plugin<PluginOptions> = (options) => ({\n // name \u53EF\u9009\uFF0C\u63D2\u4EF6\u540D\u79F0\n name: 'plugin-name',\n // setup \u5FC5\u9009\uFF0C\u7528\u4E8E\u5B9A\u5236\u5DE5\u7A0B\u6784\u5EFA\u914D\u7F6E\n setup: ({ onGetConfig, modifyUserConfig }) => {\n modifyUserConfig('codeSplitting', 'page');\n\n onGetConfig((config) => {\n config.entry = {\n web: join(process.cwd(), '.ice/entry.client.tsx'),\n };\n\n config.cssFilename = '[name].css';\n\n config.configureWebpack = config.configureWebpack || [];\n config.configureWebpack?.push((webpackConfig) => {\n if (webpackConfig.output) {\n webpackConfig.output.filename = '[name].js';\n webpackConfig.output.chunkFilename = '[name].js';\n }\n return webpackConfig;\n });\n\n config.swcOptions = _.merge(config.swcOptions, {\n compilationConfig: {\n jsc: {\n transform: {\n react: {\n runtime: 'classic',\n },\n },\n },\n }\n });\n\n // \u89E3\u51B3 webpack publicPath \u95EE\u9898\n config.transforms = config.transforms || [];\n config.transforms.push((source: string, id: string) => {\n if (id.includes('.ice/entry.client.tsx')) {\n let code = \\`\n if (!__webpack_public_path__?.startsWith('http') && document.currentScript) {\n // @ts-ignore\n __webpack_public_path__ = document.currentScript.src.replace(/^(.*\\\\\\\\/)[^/]+$/, '$1');\n window.__ICE_ASSETS_MANIFEST__ = window.__ICE_ASSETS_MANIFEST__ || {};\n window.__ICE_ASSETS_MANIFEST__.publicPath = __webpack_public_path__;\n }\n \\`;\n code += source;\n return { code };\n }\n });\n });\n },\n});\n\n// The project config, see https://v3.ice.work/docs/guide/basic/config\nconst minify = process.env.NODE_ENV === 'production' ? 'swc' : false;\nexport default defineConfig(() => ({\n ssr: false,\n ssg: false,\n minify,\n ${routesContent}\n externals: {\n react: 'React',\n 'react-dom': 'ReactDOM',\n 'react-dom/client': 'ReactDOM',\n '@alifd/next': 'Next',\n lodash: 'var window._',\n '@alilc/lowcode-engine': 'var window.AliLowCodeEngine',\n },\n plugins: [\n fusion(${cfg?.themePackage ? `{\n importStyle: 'sass',\n themePackage: '${getThemeInfo(cfg.themePackage).name}',\n }` : `{\n importStyle: 'sass',\n }`}),\n locales(),\n plugin(),\n ]\n}));\n `;\n}\n\nfunction getRoutesContent(navData: any, needShell = true) {\n const routes = [\n 'routes: {',\n ' defineRoutes: route => {',\n ];\n function _getRoutes(nav: any, _routes: string[] = []) {\n const { slug, children } = nav;\n if (children && children.length > 0) {\n children.forEach((_nav: any) => _getRoutes(_nav, _routes));\n } else if (slug) {\n _routes.push(`route('/${slug}', '${slug}/index.jsx');`);\n }\n }\n if (needShell) {\n routes.push(\" route('/', 'layout.jsx', () => {\");\n }\n navData?.forEach((nav: any) => {\n _getRoutes(nav, routes);\n });\n if (needShell) {\n routes.push(' });');\n }\n routes.push(' }'); // end of defineRoutes\n routes.push(' },'); // end of routes\n return routes.join('\\n');\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<BuildConfigPluginConfig> = (cfg?) => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const { navConfig } = next.contextData;\n const routesContent = navConfig?.data ? getRoutesContent(navConfig.data, true) : '';\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.MTS,\n name: COMMON_CHUNK_NAME.FileMainContent,\n content: format(getContent(cfg, routesContent)),\n linkAfter: [],\n });\n\n return next;\n };\n\n return plugin;\n};\n\nexport default pluginFactory;\n", "import template from './template';\nimport globalStyle from './plugins/globalStyle';\nimport packageJSON from './plugins/packageJSON';\nimport layout from './plugins/layout';\nimport appConfig from './plugins/appConfig';\nimport buildConfig from './plugins/buildConfig';\n\nexport default {\n template,\n plugins: {\n appConfig,\n buildConfig,\n globalStyle,\n packageJSON,\n layout,\n },\n};\n", "import { IProjectBuilder, IProjectBuilderOptions } from '../types';\n\nimport { createProjectBuilder } from '../generator/ProjectBuilder';\n\nimport esmodule from '../plugins/common/esmodule';\nimport styleImport from '../plugins/common/styleImport';\nimport containerClass from '../plugins/component/react/containerClass';\nimport containerInitState from '../plugins/component/react/containerInitState';\nimport containerInjectContext from '../plugins/component/react/containerInjectContext';\nimport containerInjectUtils from '../plugins/component/react/containerInjectUtils';\nimport containerInjectDataSourceEngine from '../plugins/component/react/containerInjectDataSourceEngine';\nimport containerInjectConstants from '../plugins/component/react/containerInjectConstants';\nimport containerInjectI18n from '../plugins/component/react/containerInjectI18n';\nimport containerLifeCycle from '../plugins/component/react/containerLifeCycle';\nimport containerMethod from '../plugins/component/react/containerMethod';\nimport jsx from '../plugins/component/react/jsx';\nimport reactCommonDeps from '../plugins/component/react/reactCommonDeps';\nimport css from '../plugins/component/style/css';\nimport constants from '../plugins/project/constants';\nimport i18n from '../plugins/project/i18n';\nimport utils from '../plugins/project/utils';\n\nimport icejs3 from '../plugins/project/framework/icejs3';\n\nimport { prettier } from '../postprocessor';\n\nexport type IceJs3ProjectBuilderOptions = IProjectBuilderOptions;\n\nexport default function createIceJsProjectBuilder(\n options?: IceJs3ProjectBuilderOptions,\n): IProjectBuilder {\n return createProjectBuilder({\n inStrictMode: options?.inStrictMode,\n extraContextData: { ...options },\n template: icejs3.template,\n plugins: {\n components: [\n reactCommonDeps(),\n esmodule({\n fileType: 'jsx',\n }),\n styleImport(),\n containerClass(),\n containerInjectContext(),\n containerInjectUtils(),\n containerInjectDataSourceEngine(),\n containerInjectI18n(),\n containerInjectConstants(),\n containerInitState(),\n containerLifeCycle(),\n containerMethod(),\n jsx({\n nodeTypeMapping: {\n Div: 'div',\n Component: 'div',\n Page: 'div',\n Block: 'div',\n },\n }),\n css(),\n ],\n pages: [\n reactCommonDeps(),\n esmodule({\n fileType: 'jsx',\n }),\n styleImport(),\n containerClass(),\n containerInjectContext(),\n containerInjectUtils(),\n containerInjectDataSourceEngine(),\n containerInjectI18n(),\n containerInjectConstants(),\n containerInitState(),\n containerLifeCycle(),\n containerMethod(),\n jsx({\n nodeTypeMapping: {\n Div: 'div',\n Component: 'div',\n Page: 'div',\n Block: 'div',\n Box: 'div',\n },\n }),\n css(),\n ],\n constants: [constants()],\n utils: [esmodule(), utils('react')],\n i18n: [i18n()],\n globalStyle: [icejs3.plugins.globalStyle()],\n packageJSON: [icejs3.plugins.packageJSON()],\n buildConfig: [icejs3.plugins.buildConfig()],\n appConfig: [icejs3.plugins.appConfig()],\n layout: [icejs3.plugins.layout()],\n },\n postProcessors: [prettier()],\n customizeBuilderOptions: options?.customizeBuilderOptions,\n });\n}\n\nexport const plugins = {\n containerClass,\n containerInitState,\n containerInjectContext,\n containerInjectUtils,\n containerInjectI18n,\n containerInjectDataSourceEngine,\n containerLifeCycle,\n containerMethod,\n jsx,\n commonDeps: reactCommonDeps,\n};\n", "import changeCase from 'change-case';\nimport {\n COMMON_CHUNK_NAME,\n CLASS_DEFINE_CHUNK_NAME,\n DEFAULT_LINK_AFTER,\n} from '../../../const/generator';\nimport { RAX_CHUNK_NAME } from './const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\nimport { ensureValidClassName } from '../../../utils/validate';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n\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\n const componentClassName = ensureValidClassName(\n `${changeCase.pascalCase(ir.moduleName)}$$Page`,\n );\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: CLASS_DEFINE_CHUNK_NAME.Start,\n content: `class ${componentClassName} extends Component {`,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n ],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: CLASS_DEFINE_CHUNK_NAME.End,\n content: '}',\n linkAfter: [\n CLASS_DEFINE_CHUNK_NAME.Start,\n CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\n RAX_CHUNK_NAME.ClassRenderEnd,\n RAX_CHUNK_NAME.MethodsEnd,\n ],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorStart,\n content: 'constructor(props, context) { super(props); ',\n linkAfter: DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorStart],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorEnd,\n content: '} /* end of constructor */',\n linkAfter: DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorEnd],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: RAX_CHUNK_NAME.ClassDidMountBegin,\n content: 'componentDidMount() {',\n linkAfter: [\n CLASS_DEFINE_CHUNK_NAME.Start,\n CLASS_DEFINE_CHUNK_NAME.InsVar,\n CLASS_DEFINE_CHUNK_NAME.InsMethod,\n CLASS_DEFINE_CHUNK_NAME.ConstructorEnd,\n ],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: RAX_CHUNK_NAME.ClassDidMountEnd,\n content: '} /* end of componentDidMount */',\n linkAfter: [RAX_CHUNK_NAME.ClassDidMountBegin, RAX_CHUNK_NAME.ClassDidMountContent],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: RAX_CHUNK_NAME.ClassWillUnmountBegin,\n content: 'componentWillUnmount() {',\n linkAfter: [\n CLASS_DEFINE_CHUNK_NAME.Start,\n CLASS_DEFINE_CHUNK_NAME.InsVar,\n CLASS_DEFINE_CHUNK_NAME.InsMethod,\n RAX_CHUNK_NAME.ClassDidMountEnd,\n ],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: RAX_CHUNK_NAME.ClassWillUnmountEnd,\n content: '} /* end of componentWillUnmount */',\n linkAfter: [RAX_CHUNK_NAME.ClassWillUnmountBegin, RAX_CHUNK_NAME.ClassWillUnmountContent],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: RAX_CHUNK_NAME.ClassRenderBegin,\n content: 'render() {',\n linkAfter: [RAX_CHUNK_NAME.ClassDidMountEnd, RAX_CHUNK_NAME.ClassWillUnmountEnd],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: RAX_CHUNK_NAME.ClassRenderEnd,\n content: '} /* end of render */',\n linkAfter: [\n RAX_CHUNK_NAME.ClassRenderBegin,\n RAX_CHUNK_NAME.ClassRenderPre,\n RAX_CHUNK_NAME.ClassRenderJSX,\n ],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.FileExport,\n content: `export default ${componentClassName};`,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n CLASS_DEFINE_CHUNK_NAME.End,\n ],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "export const RAX_CHUNK_NAME = {\n ClassDidMountBegin: 'RaxComponentClassDidMountBegin',\n ClassDidMountContent: 'RaxComponentClassDidMountContent',\n ClassDidMountEnd: 'RaxComponentClassDidMountEnd',\n ClassWillUnmountBegin: 'RaxComponentClassWillUnmountBegin',\n ClassWillUnmountContent: 'RaxComponentClassWillUnmountContent',\n ClassWillUnmountEnd: 'RaxComponentClassWillUnmountEnd',\n ClassRenderBegin: 'RaxComponentClassRenderBegin',\n ClassRenderPre: 'RaxComponentClassRenderPre',\n ClassRenderJSX: 'RaxComponentClassRenderJSX',\n ClassRenderEnd: 'RaxComponentClassRenderEnd',\n MethodsBegin: 'RaxComponentMethodsBegin',\n MethodsContent: 'RaxComponentMethodsContent',\n MethodsEnd: 'RaxComponentMethodsEnd',\n LifeCyclesBegin: 'RaxComponentLifeCyclesBegin',\n LifeCyclesContent: 'RaxComponentLifeCyclesContent',\n LifeCyclesEnd: 'RaxComponentLifeCyclesEnd',\n};\n", "import _ from 'lodash';\nimport { isJSExpression, isJSFunction } from '@alilc/lowcode-types';\n\nimport { CLASS_DEFINE_CHUNK_NAME } from '../../../const/generator';\nimport { RAX_CHUNK_NAME } from './const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n FileType,\n ChunkType,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\nimport { debug } from '../../../utils/debug';\nimport { isJSExpressionFn } from '../../../utils/common';\n\nexport interface PluginConfig {\n fileType: string;\n exportNameMapping: Record<string, string>;\n normalizeNameMapping: Record<string, string>;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig = {\n fileType: FileType.JSX,\n exportNameMapping: {},\n normalizeNameMapping: {\n didMount: 'componentDidMount',\n willUnmount: 'componentWillUnmount',\n },\n ...config,\n };\n\n const exportNameMapping = new Map(Object.entries(cfg.exportNameMapping));\n const normalizeNameMapping = new Map(Object.entries(cfg.normalizeNameMapping));\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n // Rax \u5148\u53EA\u652F\u6301 didMount \u548C willUnmount \u5427\n\n const ir = next.ir as IContainerInfo;\n const { lifeCycles } = ir;\n\n if (lifeCycles && !_.isEmpty(lifeCycles)) {\n Object.entries(lifeCycles).forEach(([lifeCycleName, lifeCycleMethodExpr]) => {\n // \u8FC7\u6EE4\u6389\u975E\u6CD5\u6570\u636E\uFF08\u6709\u4E9B\u573A\u666F\u4E0B\u4F1A\u8BEF\u4F20\u5165\u7A7A\u5B57\u7B26\u4E32\u6216 null)\n if (\n !isJSFunction(lifeCycles[lifeCycleName]) &&\n !isJSExpressionFn(lifeCycles[lifeCycleName]) &&\n !isJSExpression(lifeCycles[lifeCycleName])\n ) {\n return;\n }\n\n const normalizeName = normalizeNameMapping.get(lifeCycleName) || lifeCycleName;\n const exportName = exportNameMapping.get(lifeCycleName) || lifeCycleName;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: RAX_CHUNK_NAME.LifeCyclesContent,\n content: `${exportName}: (${lifeCycleMethodExpr.value}),`,\n linkAfter: [RAX_CHUNK_NAME.LifeCyclesBegin],\n });\n\n if (normalizeName === 'constructor') {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\n content: `this._lifeCycles.${exportName}();`,\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.ConstructorStart],\n });\n } else if (normalizeName === 'componentDidMount') {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: RAX_CHUNK_NAME.ClassDidMountContent,\n content: `this._lifeCycles.${exportName}();`,\n linkAfter: [RAX_CHUNK_NAME.ClassDidMountBegin],\n });\n } else if (normalizeName === 'componentWillUnmount') {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: RAX_CHUNK_NAME.ClassWillUnmountContent,\n content: `this._lifeCycles.${exportName}();`,\n linkAfter: [RAX_CHUNK_NAME.ClassWillUnmountBegin],\n });\n } else {\n debug(`[CodeGen]: unknown life cycle: ${lifeCycleName}`);\n }\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\n content: '_lifeCycles = this._defineLifeCycles();',\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: RAX_CHUNK_NAME.LifeCyclesBegin,\n content: `\n _defineLifeCycles() {\n const __$$lifeCycles = ({\n `,\n linkAfter: [RAX_CHUNK_NAME.ClassRenderEnd, CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: RAX_CHUNK_NAME.LifeCyclesEnd,\n content: `\n });\n\n // \u4E3A\u6240\u6709\u7684\u65B9\u6CD5\u7ED1\u5B9A\u4E0A\u4E0B\u6587\n Object.entries(__$$lifeCycles).forEach(([lifeCycleName, lifeCycleMethod]) => {\n if (typeof lifeCycleMethod === 'function') {\n __$$lifeCycles[lifeCycleName] = (...args) => {\n return lifeCycleMethod.apply(this._context, args);\n }\n }\n });\n\n return __$$lifeCycles;\n }\n `,\n linkAfter: [RAX_CHUNK_NAME.LifeCyclesBegin, RAX_CHUNK_NAME.LifeCyclesContent],\n });\n }\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import createDebug from 'debug';\n\nexport const debug = createDebug('code-generator');\n", "import { CLASS_DEFINE_CHUNK_NAME } from '../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\n\nimport { RAX_CHUNK_NAME } from './const';\n\nexport interface PluginConfig {\n fileType: string;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig = {\n fileType: FileType.JSX,\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\n content: `\n _methods = this._defineMethods();\n `,\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: RAX_CHUNK_NAME.MethodsBegin,\n content: `\n _defineMethods() {\n return ({\n `,\n linkAfter: [\n RAX_CHUNK_NAME.ClassRenderEnd,\n CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\n RAX_CHUNK_NAME.LifeCyclesEnd,\n ],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: RAX_CHUNK_NAME.MethodsEnd,\n content: `\n });\n }\n `,\n linkAfter: [RAX_CHUNK_NAME.MethodsBegin, RAX_CHUNK_NAME.MethodsContent],\n });\n\n if (ir.methods && Object.keys(ir.methods).length > 0) {\n Object.entries(ir.methods).forEach(([methodName, methodDefine]) => {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: RAX_CHUNK_NAME.MethodsContent,\n content: `${methodName}: (${methodDefine.value}),`,\n linkAfter: [RAX_CHUNK_NAME.MethodsBegin],\n });\n });\n }\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { CLASS_DEFINE_CHUNK_NAME, DEFAULT_LINK_AFTER } from '../../../const/generator';\n\nimport { generateCompositeType } from '../../../utils/compositeType';\nimport { Scope } from '../../../utils/Scope';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\n\nexport interface PluginConfig {\n fileType: string;\n implementType: 'inConstructor' | 'insMember' | 'hooks';\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig = {\n fileType: FileType.JSX,\n implementType: 'insMember',\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n const scope = Scope.createRootScope();\n\n const state = ir.state || {};\n const fields = Object.keys(state).map<string>((stateName) => {\n // TODO: \u8FD9\u91CC\u7528\u4EC0\u4E48 handlers?\n const value = generateCompositeType(state[stateName], scope);\n return `${JSON.stringify(stateName)}: ${value}`;\n });\n\n if (cfg.implementType === 'inConstructor') {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\n content: `this.state = { ${fields.join(',')} };`,\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],\n });\n } else if (cfg.implementType === 'insMember') {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\n content: `state = { ${fields.join(',')} };`,\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.InsVar]],\n });\n }\n // TODO: hooks state??\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "/* eslint-disable @typescript-eslint/indent */\nimport { CLASS_DEFINE_CHUNK_NAME, COMMON_CHUNK_NAME } from '../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\nimport { RAX_CHUNK_NAME } from './const';\nimport { DEFAULT_LINK_AFTER } from '../../../const';\n\nexport interface PluginConfig {\n fileType: string;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig = {\n fileType: FileType.JSX,\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n const useRef = !!ir.analyzeResult?.isUsingRef;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: \"import __$$constants from '../../constants';\",\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n\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\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: \"import * as __$$i18n from '../../i18n';\",\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\n content: `\n __$$i18n._inject2(this);\n `,\n linkAfter: [...DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorContent]],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\n content: `\n _context = this._createContext();\n `,\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\n });\n\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\n // Step 1: \u589E\u52A0\u524D\u7F6E\u7684\u5206\u6790\u5668\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\n content: `\n _createContext() {\n const self = this;\n const context = {\n get state() {\n return self.state;\n },\n setState(newState, callback) {\n self.setState(newState, callback);\n },\n get dataSourceMap() {\n return self._dataSourceEngine.dataSourceMap || {};\n },\n async reloadDataSource() {\n await self._dataSourceEngine.reloadDataSource();\n },\n get utils() {\n return self._utils;\n },\n get page() {\n return context;\n },\n get component() {\n return context;\n },\n get props() {\n return self.props;\n },\n get constants() {\n return __$$constants;\n },\n i18n: __$$i18n.i18n,\n i18nFormat: __$$i18n.i18nFormat,\n getLocale: __$$i18n.getLocale,\n setLocale(locale) {\n __$$i18n.setLocale(locale);\n self.forceUpdate();\n },${\n useRef\n ? `\n $(refName) {\n return self._refsManager.get(refName);\n },\n $$(refName) {\n return self._refsManager.getAll(refName);\n },\n get _refsManager() {\n if (!self._refsManager) {\n self._refsManager = new RefsManager();\n }\n return self._refsManager;\n },\n `\n : ''\n }\n ...this._methods,\n };\n\n return context;\n }\n `,\n linkAfter: [RAX_CHUNK_NAME.ClassRenderEnd],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "/* eslint-disable @typescript-eslint/indent */\n\nimport {\n IPublicTypeCompositeValue,\n IPublicTypeJSExpression,\n InterpretDataSourceConfig,\n isJSExpression,\n isJSFunction,\n} from '@alilc/lowcode-types';\nimport changeCase from 'change-case';\n\nimport { CLASS_DEFINE_CHUNK_NAME, COMMON_CHUNK_NAME } from '../../../const/generator';\nimport { Scope } from '../../../utils/Scope';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IScope,\n} from '../../../types';\n\nimport { generateCompositeType } from '../../../utils/compositeType';\nimport { parseExpressionConvertThis2Context } from '../../../utils/expressionParser';\nimport { isContainerSchema } from '../../../utils/schema';\nimport { RaxFrameworkOptions } from '../../project/framework/rax/types/RaxFrameworkOptions';\nimport { RAX_CHUNK_NAME } from './const';\n\nexport interface PluginConfig extends RaxFrameworkOptions {\n fileType?: string;\n\n /**\n * \u6570\u636E\u6E90\u7684 handlers \u7684\u6620\u5C04\u914D\u7F6E\n * @deprecated \u8BF7\u4F7F\u7528 datasourceConfig.handlersPackages \u6765\u914D\u7F6E\n */\n dataSourceHandlersPackageMap?: Record<string, string>;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig = {\n fileType: FileType.JSX,\n ...config,\n dataSourceHandlersPackageMap:\n config?.dataSourceHandlersPackageMap || config?.datasourceConfig?.handlersPackages,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const scope = Scope.createRootScope();\n const dataSourceConfig = isContainerSchema(pre.ir) ? pre.ir.dataSource : null;\n const dataSourceItems: InterpretDataSourceConfig[] =\n (dataSourceConfig && dataSourceConfig.list) || [];\n const dataSourceEngineOptions = { runtimeConfig: true };\n if (dataSourceItems.length > 0) {\n const requestHandlersMap: Record<string, IPublicTypeJSExpression> = {};\n\n dataSourceItems.forEach((ds) => {\n const dsType = ds.type || 'fetch';\n if (!(dsType in requestHandlersMap) && dsType !== 'custom') {\n const handlerFactoryName = `__$$create${changeCase.pascal(dsType)}RequestHandler`;\n\n requestHandlersMap[dsType] = {\n type: 'JSExpression',\n value: `${handlerFactoryName}(${\n dsType === 'urlParams' ? '__$$getSearchParams()' : ''\n })`,\n };\n\n const handlerFactoryExportName = `create${changeCase.pascal(dsType)}Handler`;\n const handlerPkgName =\n cfg.dataSourceHandlersPackageMap?.[dsType] ||\n `@alilc/lowcode-datasource-${changeCase.kebab(dsType)}-handler`;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: `\n import { ${handlerFactoryExportName} as ${handlerFactoryName} } from '${handlerPkgName}';\n `,\n linkAfter: [],\n });\n }\n });\n\n Object.assign(dataSourceEngineOptions, { requestHandlersMap });\n }\n\n const datasourceEnginePackageName =\n cfg.datasourceConfig?.enginePackage || '@alilc/lowcode-datasource-engine';\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: `\n import { create as __$$createDataSourceEngine } from '${datasourceEnginePackageName}/runtime';\n `,\n linkAfter: [],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType!,\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\n content: `\n _dataSourceConfig = this._defineDataSourceConfig();\n _dataSourceEngine = __$$createDataSourceEngine(\n this._dataSourceConfig,\n this._context,\n ${generateCompositeType(dataSourceEngineOptions, scope)}\n );`,\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType!,\n name: RAX_CHUNK_NAME.ClassDidMountContent,\n content: `\n this._dataSourceEngine.reloadDataSource();\n `,\n linkAfter: [RAX_CHUNK_NAME.ClassDidMountBegin],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType!,\n name: CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\n content: `\n_defineDataSourceConfig() {\n const __$$context = this._context;\n return (${generateCompositeType(\n {\n ...dataSourceConfig,\n list: [\n ...dataSourceItems.map((item) => ({\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\n // \u8FD9\u4F1A\u5BFC\u81F4\u9875\u9762\u72B6\u6001\u4E0D\u80FD\u6B63\u5E38\u5C55\u793A\uFF0C\u6545\u8FD9\u91CC\u5904\u7406\u4E0B:\n errorHandler: {\n type: 'JSFunction',\n value: `function (err){\n setTimeout(() => {\n this.setState({ __refresh: Date.now() + Math.random() });\n }, 0);\n throw err;\n }`,\n },\n ...item,\n isInit:\n typeof item.isInit === 'boolean' || typeof item.isInit === 'undefined'\n ? item.isInit ?? true\n : wrapAsFunction(item.isInit, scope),\n options: wrapAsFunction(item.options, scope),\n })),\n ],\n },\n scope,\n {\n handlers: {\n function: (jsFunc) => parseExpressionConvertThis2Context(jsFunc.value, '__$$context'),\n expression: (jsExpr) => parseExpressionConvertThis2Context(jsExpr.value, '__$$context'),\n },\n },\n )});\n}\n `,\n linkAfter: [RAX_CHUNK_NAME.ClassRenderEnd],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n\nfunction wrapAsFunction(value: IPublicTypeCompositeValue, scope: IScope): IPublicTypeCompositeValue {\n if (isJSExpression(value) || isJSFunction(value)) {\n return {\n type: 'JSExpression',\n value: `function(){ return ((${value.value}))}`,\n };\n }\n\n return {\n type: 'JSExpression',\n value: `function(){return((${generateCompositeType(value, scope)}))}`,\n };\n}\n", "import { CLASS_DEFINE_CHUNK_NAME, COMMON_CHUNK_NAME } from '../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\nimport { RAX_CHUNK_NAME } from './const';\n\nexport interface PluginConfig {\n fileType: string;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig = {\n fileType: FileType.JSX,\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n const useRef = !!ir.analyzeResult?.isUsingRef;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n // TODO: \u4E0B\u9762\u8FD9\u4E2A\u8DEF\u5F84\u6709\u6CA1\u6709\u66F4\u597D\u7684\u65B9\u5F0F\u6765\u83B7\u53D6\uFF1F\u800C\u975E\u5199\u6B7B\n content: `\n import __$$projectUtils${useRef ? ', { RefsManager }' : ''} from '../../utils';\n `,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsVar,\n content: '_utils = this._defineUtils();',\n linkAfter: [CLASS_DEFINE_CHUNK_NAME.Start],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: CLASS_DEFINE_CHUNK_NAME.InsPrivateMethod,\n\n content: `\n _defineUtils() {\n return {\n ...__$$projectUtils,\n };\n }`,\n linkAfter: [RAX_CHUNK_NAME.ClassRenderEnd],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import {\n IPublicTypeNodeSchema,\n IPublicTypeJSExpression,\n IPublicTypeNpmInfo,\n IPublicTypeCompositeValue,\n isJSExpression,\n} from '@alilc/lowcode-types';\n\nimport _ from 'lodash';\nimport changeCase from 'change-case';\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n CodePiece,\n FileType,\n ICodeChunk,\n ICodeStruct,\n IContainerInfo,\n PIECE_TYPE,\n HandlerSet,\n IScope,\n NodeGeneratorConfig,\n NodePlugin,\n AttrPlugin,\n} from '../../../types';\n\nimport { RAX_CHUNK_NAME } from './const';\nimport { COMMON_CHUNK_NAME } from '../../../const/generator';\n\nimport { generateExpression } from '../../../utils/jsExpression';\nimport {\n createNodeGenerator,\n generateConditionReactCtrl,\n generateReactExprInJS,\n} from '../../../utils/nodeToJSX';\nimport { generateCompositeType } from '../../../utils/compositeType';\nimport { Scope } from '../../../utils/Scope';\nimport { parseExpressionGetGlobalVariables } from '../../../utils/expressionParser';\nimport { transformThis2Context } from '../../../core/jsx/handlers/transformThis2Context';\nimport { transformJsExpr } from '../../../core/jsx/handlers/transformJsExpression';\n\nexport interface PluginConfig {\n fileType: string;\n\n /** \u662F\u5426\u8981\u5FFD\u7565\u5C0F\u7A0B\u5E8F */\n ignoreMiniApp?: boolean;\n}\n\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\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\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig = {\n fileType: FileType.JSX,\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n const rootScope = Scope.createRootScope();\n const { tolerateEvalErrors = true, evalErrorsHandler = '' } = next.contextData;\n\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\n // \u5148\u6536\u96C6\u4E0B\u6240\u6709\u7684 alias \u7684\u6620\u5C04\n const componentsNameAliasMap = new Map<string, string>();\n next.chunks.forEach((chunk) => {\n if (isImportAliasDefineChunk(chunk)) {\n componentsNameAliasMap.set(chunk.ext.aliasName, chunk.ext.originalName);\n }\n });\n\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\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\n const mapComponentNameToAliasOrKeepIt = (componentName: string) => componentsNameAliasMap.get(componentName) || componentName;\n\n // \u7136\u540E\u8FC7\u6EE4\u6389\u6240\u6709\u7684\u522B\u540D chunks\n next.chunks = next.chunks.filter((chunk) => !isImportAliasDefineChunk(chunk));\n\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\n // 1. \u5C0F\u7A0B\u5E8F\u51FA\u7801\u7684\u65F6\u5019\uFF0C\u5FAA\u73AF\u53D8\u91CF\u6CA1\u6CD5\u62FF\u5230\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\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\n const customHandlers: HandlerSet<string> = {\n expression(input: IPublicTypeJSExpression, scope: IScope) {\n return transformJsExpr(generateExpression(input, scope), scope, {\n dontWrapEval: !tolerateEvalErrors,\n });\n },\n function(input, scope: IScope) {\n return transformThis2Context(input.value || 'null', scope);\n },\n };\n\n // \u521B\u5EFA\u4EE3\u7801\u751F\u6210\u5668\n const commonNodeGenerator = createNodeGenerator({\n handlers: customHandlers,\n tagMapping: mapComponentNameToAliasOrKeepIt,\n nodePlugins: [generateReactExprInJS, generateConditionReactCtrl, generateRaxLoopCtrl],\n attrPlugins: [generateNodeAttrForRax.bind({ cfg })],\n });\n\n // \u751F\u6210 JSX \u4EE3\u7801\n const jsxContent = commonNodeGenerator(ir, rootScope);\n\n if (!cfg.ignoreMiniApp) {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: \"import { isMiniApp as __$$isMiniApp } from 'universal-env';\",\n linkAfter: [],\n });\n }\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: RAX_CHUNK_NAME.ClassRenderPre,\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\n content: `\n const __$$context = this._context;\n const { state, setState, dataSourceMap, reloadDataSource, utils, constants, i18n, i18nFormat, getLocale, setLocale } = __$$context;\n `,\n linkAfter: [RAX_CHUNK_NAME.ClassRenderBegin],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: RAX_CHUNK_NAME.ClassRenderJSX,\n content: `return ${jsxContent};`,\n linkAfter: [RAX_CHUNK_NAME.ClassRenderBegin, RAX_CHUNK_NAME.ClassRenderPre],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: COMMON_CHUNK_NAME.CustomContent,\n content: [\n tolerateEvalErrors &&\n `\n function __$$eval(expr) {\n try {\n return expr();\n } catch (error) {\n ${evalErrorsHandler}\n }\n }\n\n function __$$evalArray(expr) {\n const res = __$$eval(expr);\n return Array.isArray(res) ? res : [];\n }\n `,\n `\n function __$$createChildContext(oldContext, ext) {\n return Object.assign({}, oldContext, ext);\n }\n `,\n ]\n .filter(Boolean)\n .join('\\n'),\n linkAfter: [COMMON_CHUNK_NAME.FileExport],\n });\n\n return next;\n\n function generateRaxLoopCtrl(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n next?: NodePlugin,\n ): CodePiece[] {\n if (nodeItem.loop) {\n const loopItemName = nodeItem.loopArgs?.[0] || 'item';\n const loopIndexName = nodeItem.loopArgs?.[1] || 'index';\n const subScope = scope.createSubScope([loopItemName, loopIndexName]);\n const pieces: CodePiece[] = next ? next(nodeItem, subScope, config) : [];\n\n const loopDataExpr = tolerateEvalErrors\n ? `__$$evalArray(() => (${transformThis2Context(\n generateCompositeType(nodeItem.loop, scope, { handlers: config?.handlers }),\n scope,\n )}))`\n : `(${transformThis2Context(\n generateCompositeType(nodeItem.loop, scope, { handlers: config?.handlers }),\n scope,\n )})`;\n\n pieces.unshift({\n value: `${loopDataExpr}.map((${loopItemName}, ${loopIndexName}) => ((__$$context) => (`,\n type: PIECE_TYPE.BEFORE,\n });\n\n pieces.push({\n value: `))(__$$createChildContext(__$$context, { ${loopItemName}, ${loopIndexName} })))`,\n type: PIECE_TYPE.AFTER,\n });\n\n return pieces;\n }\n\n return next ? next(nodeItem, scope, config) : [];\n }\n };\n\n return plugin;\n};\n\nexport default pluginFactory;\n\nfunction isImportAliasDefineChunk(chunk: ICodeChunk): chunk is ICodeChunk & {\n ext: {\n aliasName: string;\n originalName: string;\n dependency: IPublicTypeNpmInfo;\n };\n} {\n return (\n chunk.name === COMMON_CHUNK_NAME.ImportAliasDefine &&\n !!chunk.ext &&\n typeof chunk.ext.aliasName === 'string' &&\n typeof chunk.ext.originalName === 'string' &&\n !!(chunk.ext.dependency as IPublicTypeNpmInfo | null)?.componentName\n );\n}\n\nfunction generateNodeAttrForRax(\n this: { cfg: PluginConfig },\n attrData: { attrName: string; attrValue: IPublicTypeCompositeValue },\n scope: IScope,\n config?: NodeGeneratorConfig,\n next?: AttrPlugin,\n): CodePiece[] {\n if (!this.cfg.ignoreMiniApp && /^on/.test(attrData.attrName)) {\n // else: onXxx \u7684\u90FD\u662F\u4E8B\u4EF6\u5904\u7406\u51FD\u6570\u9700\u8981\u7279\u6B8A\u5904\u7406\u4E0B\n return generateEventHandlerAttrForRax(attrData.attrName, attrData.attrValue, scope, config);\n }\n\n if (attrData.attrName === 'ref') {\n return [\n {\n name: attrData.attrName,\n value: `__$$context._refsManager.linkRef('${attrData.attrValue}')`,\n type: PIECE_TYPE.ATTR,\n },\n ];\n }\n\n return next ? next(attrData, scope, config) : [];\n}\n\nfunction generateEventHandlerAttrForRax(\n attrName: string,\n attrValue: IPublicTypeCompositeValue,\n scope: IScope,\n config?: NodeGeneratorConfig,\n): CodePiece[] {\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\n const valueExpr = generateCompositeType(\n isJSExpression(attrValue) ? { type: 'JSFunction', value: attrValue.value } : attrValue,\n scope,\n {\n handlers: config?.handlers,\n },\n );\n\n // \u67E5\u8BE2\u5F53\u524D\u4F5C\u7528\u57DF\u4E0B\u7684\u53D8\u91CF\n const currentScopeVariables = scope.bindings?.getAllBindings() || [];\n if (currentScopeVariables.length <= 0) {\n return [\n {\n type: PIECE_TYPE.ATTR,\n name: attrName,\n value: valueExpr,\n },\n ];\n }\n\n // \u63D0\u53D6\u51FA\u6240\u6709\u7684\u672A\u5B9A\u4E49\u7684\u5168\u5C40\u53D8\u91CF\n const undeclaredVariablesInValueExpr = parseExpressionGetGlobalVariables(valueExpr);\n const referencedLocalVariables = _.intersection(\n undeclaredVariablesInValueExpr,\n currentScopeVariables,\n );\n if (referencedLocalVariables.length <= 0) {\n return [\n {\n type: PIECE_TYPE.ATTR,\n name: attrName,\n value: valueExpr,\n },\n ];\n }\n\n const wrappedAttrValueExpr = [\n '(...__$$args) => {',\n ' if (__$$isMiniApp) {',\n ' const __$$event = __$$args[0];',\n ...referencedLocalVariables.map(\n (localVar) => `const ${localVar} = __$$event.target.dataset.${localVar};`,\n ),\n ` return (${valueExpr}).apply(this, __$$args);`,\n ' } else {',\n ` return (${valueExpr}).apply(this, __$$args);`,\n ' }',\n '}',\n ].join('\\n');\n\n return [\n ...referencedLocalVariables.map((localVar) => ({\n type: PIECE_TYPE.ATTR,\n name: `data-${changeCase.snake(localVar)}`,\n value: localVar,\n })),\n {\n type: PIECE_TYPE.ATTR,\n name: attrName,\n value: wrappedAttrValueExpr,\n },\n ];\n}\n", "import { COMMON_CHUNK_NAME } from '../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n} from '../../../types';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: `\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\n // \u4F8B\u5916\uFF1Arax \u6846\u67B6\u7684\u5BFC\u51FA\u540D\u548C\u5404\u79CD\u7EC4\u4EF6\u540D\u9664\u5916\u3002\n import { createElement, Component } from 'rax';\n import { getSearchParams as __$$getSearchParams } from 'rax-app';\n `,\n linkAfter: [],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "/* eslint-disable max-len */\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\n/* -- instead, you should modify \"static-files/rax/.eslintignore.template\" and run \"npm run template\" */\nimport { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n ['.'],\n {\n name: '.eslintignore',\n ext: '',\n content: 'node_modules/\\nlib/\\ndist/\\nbuild/\\ncoverage/\\ndemo/\\nes/\\n.rax/\\n',\n },\n ];\n}\n", "/* eslint-disable max-len */\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\n/* -- instead, you should modify \"static-files/rax/.eslintrc.js.template\" and run \"npm run template\" */\nimport { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n ['.'],\n {\n name: '.eslintrc',\n ext: 'js',\n content:\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\",\n },\n ];\n}\n", "/* eslint-disable max-len */\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\n/* -- instead, you should modify \"static-files/rax/.gitignore.template\" and run \"npm run template\" */\nimport { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n ['.'],\n {\n name: '.gitignore',\n ext: '',\n content:\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',\n },\n ];\n}\n", "/* eslint-disable max-len */\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\n/* -- instead, you should modify \"static-files/rax/.prettierignore.template\" and run \"npm run template\" */\nimport { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n ['.'],\n {\n name: '.prettierignore',\n ext: '',\n content: 'node_modules/\\nlib/\\ndist/\\nbuild/\\ncoverage/\\ndemo/\\nes/\\n.rax/\\n',\n },\n ];\n}\n", "/* eslint-disable max-len */\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\n/* -- instead, you should modify \"static-files/rax/.prettierrc.js.template\" and run \"npm run template\" */\nimport { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n ['.'],\n {\n name: '.prettierrc',\n ext: 'js',\n content:\n \"const { getPrettierConfig } = require('@iceworks/spec');\\n\\nmodule.exports = getPrettierConfig('rax');\\n\",\n },\n ];\n}\n", "/* eslint-disable max-len */\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\n/* -- instead, you should modify \"static-files/rax/.stylelintignore.template\" and run \"npm run template\" */\nimport { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n ['.'],\n {\n name: '.stylelintignore',\n ext: '',\n content: 'node_modules/\\nlib/\\ndist/\\nbuild/\\ncoverage/\\ndemo/\\nes/\\n.rax/\\n',\n },\n ];\n}\n", "/* eslint-disable max-len */\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\n/* -- instead, you should modify \"static-files/rax/.stylelintrc.js.template\" and run \"npm run template\" */\nimport { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n ['.'],\n {\n name: '.stylelintrc',\n ext: 'js',\n content:\n \"const { getStylelintConfig } = require('@iceworks/spec');\\n\\nmodule.exports = getStylelintConfig('rax');\\n\",\n },\n ];\n}\n", "/* eslint-disable max-len */\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\n/* -- instead, you should modify \"static-files/rax/jsconfig.json.template\" and run \"npm run template\" */\nimport { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n ['.'],\n {\n name: 'jsconfig',\n ext: 'json',\n content:\n '{\\n \"compilerOptions\": {\\n \"baseUrl\": \".\",\\n \"jsx\": \"react\",\\n \"paths\": {\\n \"@/*\": [\"./src/*\"],\\n \"rax-app\": [\".rax/index.ts\"]\\n }\\n }\\n}\\n',\n },\n ];\n}\n", "/* eslint-disable max-len */\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\n/* -- instead, you should modify \"static-files/rax/README.md.template\" and run \"npm run template\" */\nimport { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n ['.'],\n {\n name: 'README',\n ext: 'md',\n content:\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',\n },\n ];\n}\n", "/* eslint-disable max-len */\n/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\n/* -- instead, you should modify \"static-files/rax/tsconfig.json.template\" and run \"npm run template\" */\nimport { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n ['.'],\n {\n name: 'tsconfig',\n ext: 'json',\n content:\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}',\n },\n ];\n}\n", "/* Note: this file is generated by \"npm run template\", please dont modify this file directly */\nimport { ResultDir } from '@alilc/lowcode-types';\n\nimport { createResultDir } from '../../../../../utils/resultHelper';\nimport { runFileGenerator } from '../../../../../utils/templateHelper';\nimport file0 from './files/.eslintignore';\nimport file1 from './files/.eslintrc.js';\nimport file2 from './files/.gitignore';\nimport file3 from './files/.prettierignore';\nimport file4 from './files/.prettierrc.js';\nimport file5 from './files/.stylelintignore';\nimport file6 from './files/.stylelintrc.js';\nimport file7 from './files/jsconfig.json';\nimport file8 from './files/README.md';\nimport file9 from './files/tsconfig.json';\n\nexport function generateStaticFiles(root = createResultDir('.')): ResultDir {\n runFileGenerator(root, file0);\n runFileGenerator(root, file1);\n runFileGenerator(root, file2);\n runFileGenerator(root, file3);\n runFileGenerator(root, file4);\n runFileGenerator(root, file5);\n runFileGenerator(root, file6);\n runFileGenerator(root, file7);\n runFileGenerator(root, file8);\n runFileGenerator(root, file9);\n return root;\n}\n", "import { ResultDir } from '@alilc/lowcode-types';\nimport { IProjectTemplate } from '../../../../../types';\nimport { generateStaticFiles } from './static-files';\n\nconst raxAppTemplate: IProjectTemplate = {\n slots: {\n components: {\n path: ['src', 'components'],\n },\n pages: {\n path: ['src', 'pages'],\n },\n router: {\n path: ['src'],\n fileName: 'router',\n },\n entry: {\n path: ['src'],\n fileName: 'app',\n },\n appConfig: {\n path: ['src'],\n fileName: 'app',\n },\n buildConfig: {\n path: [],\n fileName: 'build',\n },\n constants: {\n path: ['src'],\n fileName: 'constants',\n },\n utils: {\n path: ['src'],\n fileName: 'utils',\n },\n i18n: {\n path: ['src'],\n fileName: 'i18n',\n },\n globalStyle: {\n path: ['src'],\n fileName: 'global',\n },\n htmlEntry: {\n path: ['src', 'document'],\n fileName: 'index',\n },\n packageJSON: {\n path: [],\n fileName: 'package',\n },\n },\n\n async generateTemplate(): Promise<ResultDir> {\n return generateStaticFiles();\n },\n};\n\nexport default raxAppTemplate;\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n} from '../../../../../types';\nimport { RaxFrameworkOptions } from '../types/RaxFrameworkOptions';\n\nconst pluginFactory: BuilderComponentPluginFactory<RaxFrameworkOptions> = (cfg) => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: `\nimport { runApp } from 'rax-app';\n\nimport './global.${cfg?.globalStylesFileType || 'css'}';\n`,\n linkAfter: [],\n });\n\n // \u5E94\u7528\u914D\u7F6E\n const appConfig = cfg?.appConfig || {};\n Object.assign(appConfig, {\n // \u8DEF\u7531\u914D\u7F6E\n router: {\n mode: 'hash',\n ...appConfig.router,\n },\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JS,\n name: COMMON_CHUNK_NAME.FileMainContent,\n content: `\nrunApp(${JSON.stringify(appConfig, null, 2)});\n`,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.ImportAliasDefine,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileUtilDefine,\n ],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import changeCase from 'change-case';\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IParseResult,\n} from '../../../../../types';\nimport { ensureValidClassName } from '../../../../../utils/validate';\nimport { RaxFrameworkOptions } from '../types/RaxFrameworkOptions';\n\nconst pluginFactory: BuilderComponentPluginFactory<RaxFrameworkOptions> = (cfg) => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IParseResult;\n\n const routes = ir.globalRouter?.routes?.map((route) => ({\n path: route.path,\n source: `pages/${ensureValidClassName(changeCase.pascalCase(route.fileName))}/index`,\n })) || [{ path: '/', source: 'pages/Home/index' }];\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSON,\n name: COMMON_CHUNK_NAME.CustomContent,\n content: `\n{\n \"routes\": ${JSON.stringify(routes, null, 2)},\n \"window\": {\n \"title\": ${JSON.stringify(\n cfg?.title || ir.project?.meta?.title || ir.project?.meta?.name || '',\n )}\n }\n}\n `,\n linkAfter: [],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IParseResult,\n} from '../../../../../types';\nimport type { RaxFrameworkOptions } from '../types/RaxFrameworkOptions';\n\nconst pluginFactory: BuilderComponentPluginFactory<RaxFrameworkOptions> = (cfg) => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IParseResult;\n\n const miniAppBuildType =\n cfg?.buildConfig?.miniAppBuildType || ir.project?.config?.miniAppBuildType;\n const targets = cfg?.targets || ['web'];\n\n const buildCfg = {\n inlineStyle: false,\n plugins: [],\n targets,\n miniapp: miniAppBuildType\n ? {\n buildType: miniAppBuildType,\n ...cfg?.buildConfig?.miniapp,\n }\n : cfg?.buildConfig?.miniapp,\n ...cfg?.buildConfig,\n };\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSON,\n name: COMMON_CHUNK_NAME.CustomContent,\n content: `${JSON.stringify(buildCfg, null, 2)}\\n`,\n linkAfter: [],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IProjectInfo,\n} from '../../../../../types';\nimport { RaxFrameworkOptions } from '../types/RaxFrameworkOptions';\n\n/**\n * \u8FD9\u79CD\u65B9\u5F0F\u5DF2\u7ECF\u4E0D\u63A8\u8350\u4F7F\u7528\u4E86\n */\nconst pluginFactory: BuilderComponentPluginFactory<RaxFrameworkOptions> = (cfg) => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IProjectInfo;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.CustomContent,\n content: `\nimport { createElement } from 'rax';\nimport { Root, Style, Script } from 'rax-document';\n\nfunction Document() {\n return (\n <html>\n <head>\n <meta charset=\"utf-8\" />\n <meta\n name=\"viewport\"\n content=\"width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no,viewport-fit=cover\"\n />\n <title>${cfg?.title || ir?.meta?.name || 'Rax App'}</title>\n <Style />\n </head>\n <body>\n {/* root container */}\n <Root />\n <Script />\n </body>\n </html>\n );\n}\n\nexport default Document;\n`,\n linkAfter: [],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IProjectInfo,\n} from '../../../../../types';\n\nexport interface GlobalStylePluginConfig {\n fileType: string;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<GlobalStylePluginConfig> = (\n config?: Partial<GlobalStylePluginConfig>,\n) => {\n const cfg: GlobalStylePluginConfig = {\n fileType: FileType.SCSS,\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IProjectInfo;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: COMMON_CHUNK_NAME.StyleDepsImport,\n content: '',\n linkAfter: [],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: COMMON_CHUNK_NAME.StyleCssContent,\n content: `\nbody {\n -webkit-font-smoothing: antialiased;\n}\n`,\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: COMMON_CHUNK_NAME.StyleCssContent,\n content: ir.css || '',\n linkAfter: [COMMON_CHUNK_NAME.StyleDepsImport],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import semver from 'semver';\n\nexport function calcCompatibleVersion(v1: string | undefined | null, v2: string | undefined | null): string {\n if (!v1 && !v2) {\n return '*';\n }\n\n if (!v1 || v1 === '*') {\n return v2 || '*';\n }\n\n if (!v2 || v2 === '*') {\n return v1;\n }\n\n if (v1 === v2) {\n return v1;\n }\n\n if (!semver.intersects(v1, v2, { loose: true })) {\n throw new Error(`no compatible versions for \"${v1}\" and \"${v2}\"`);\n }\n\n if (semver.subset(v1, v2, { loose: true })) {\n return v1;\n }\n\n return v2;\n}\n", "import { IPublicTypeNpmInfo, PackageJSON } from '@alilc/lowcode-types';\nimport { COMMON_CHUNK_NAME } from '../../../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IProjectInfo,\n} from '../../../../../types';\nimport { isNpmInfo } from '../../../../../utils/schema';\nimport { getErrorMessage } from '../../../../../utils/errors';\nimport { calcCompatibleVersion } from '../../../../../utils/version';\nimport { RaxFrameworkOptions } from '../types/RaxFrameworkOptions';\nimport { buildDataSourceDependencies } from '../../../../../utils/dataSource';\n\nconst pluginFactory: BuilderComponentPluginFactory<RaxFrameworkOptions> = (cfg) => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IProjectInfo;\n\n const npmDeps = getNpmDependencies(ir);\n\n const packageJson: PackageJSON = {\n name: cfg?.packageName || 'rax-demo-app',\n private: true,\n version: cfg?.packageVersion || '1.0.0',\n scripts: {\n start: 'rax-app start',\n build: 'rax-app build',\n eslint: 'eslint --ext .js,.jsx ./',\n stylelint: 'stylelint \"**/*.{css,scss,less}\"',\n prettier: 'prettier **/* --write',\n lint: 'npm run eslint && npm run stylelint',\n },\n dependencies: {\n // \u6570\u636E\u6E90\u76F8\u5173\u7684\u4F9D\u8D56:\n ...buildDataSourceDependencies(ir, cfg?.datasourceConfig),\n\n // \u73AF\u5883\u5224\u65AD\n 'universal-env': '^3.2.0',\n\n // \u56FD\u9645\u5316\u76F8\u5173\u4F9D\u8D56:\n 'intl-messageformat': '^9.3.6',\n\n // \u57FA\u7840\u5E93\n rax: '^1.1.0',\n 'rax-document': '^0.1.6',\n\n // \u5176\u4ED6\u7EC4\u4EF6\u5E93\n ...npmDeps.reduce<Record<string, string>>(\n (acc, npm) => ({\n ...acc,\n [npm.package]: npm.version || '*',\n }),\n {},\n ),\n },\n devDependencies: {\n '@iceworks/spec': '^1.0.0',\n 'rax-app': '^3.0.0',\n eslint: '^6.8.0',\n prettier: '^2.1.2',\n stylelint: '^13.7.2',\n },\n };\n\n next.chunks.push({\n type: ChunkType.JSON,\n fileType: FileType.JSON,\n name: COMMON_CHUNK_NAME.FileMainContent,\n content: packageJson,\n linkAfter: [],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n\nfunction getNpmDependencies(project: IProjectInfo): IPublicTypeNpmInfo[] {\n const npmDeps: IPublicTypeNpmInfo[] = [];\n const npmNameToPkgMap = new Map<string, IPublicTypeNpmInfo>();\n\n const allDeps = project.packages;\n\n allDeps.forEach((dep) => {\n if (!isNpmInfo(dep)) {\n return;\n }\n\n const existing = npmNameToPkgMap.get(dep.package);\n if (!existing) {\n npmNameToPkgMap.set(dep.package, dep);\n npmDeps.push(dep);\n return;\n }\n\n if (existing.version !== dep.version) {\n try {\n npmNameToPkgMap.set(dep.package, {\n ...existing,\n version: calcCompatibleVersion(existing.version, dep.version),\n });\n } catch (e) {\n throw new Error(\n `Cannot find compatible version for ${dep.package}. Detail: ${getErrorMessage(e)}`,\n );\n }\n }\n });\n\n return npmDeps;\n}\n", "import template from './template';\nimport entry from './plugins/entry';\nimport appConfig from './plugins/appConfig';\nimport buildConfig from './plugins/buildConfig';\nimport entryDocument from './plugins/entryDocument';\nimport globalStyle from './plugins/globalStyle';\nimport packageJSON from './plugins/packageJSON';\n\nexport default {\n template,\n plugins: {\n appConfig,\n buildConfig,\n entry,\n entryDocument,\n globalStyle,\n packageJSON,\n },\n};\n", "import { IProjectBuilder, IProjectBuilderOptions } from '../types';\n\nimport { createProjectBuilder } from '../generator/ProjectBuilder';\n\nimport esModule from '../plugins/common/esmodule';\nimport containerClass from '../plugins/component/rax/containerClass';\nimport containerLifeCycles from '../plugins/component/rax/containerLifeCycle';\nimport containerMethods from '../plugins/component/rax/containerMethods';\nimport containerInitState from '../plugins/component/rax/containerInitState';\nimport containerInjectContext from '../plugins/component/rax/containerInjectContext';\nimport containerInjectDataSourceEngine from '../plugins/component/rax/containerInjectDataSourceEngine';\nimport containerInjectUtils from '../plugins/component/rax/containerInjectUtils';\nimport jsx from '../plugins/component/rax/jsx';\nimport commonDeps from '../plugins/component/rax/commonDeps';\nimport css from '../plugins/component/style/css';\nimport constants from '../plugins/project/constants';\nimport i18n from '../plugins/project/i18n';\nimport utils from '../plugins/project/utils';\n\nimport raxApp from '../plugins/project/framework/rax';\n\nimport { prettier } from '../postprocessor';\nimport { RaxFrameworkOptions } from '../plugins/project/framework/rax/types/RaxFrameworkOptions';\n\nexport interface RaxProjectBuilderOptions extends IProjectBuilderOptions, RaxFrameworkOptions {}\n\nexport default function createRaxProjectBuilder(\n options?: RaxProjectBuilderOptions,\n): IProjectBuilder {\n return createProjectBuilder({\n inStrictMode: options?.inStrictMode,\n extraContextData: { ...options },\n template: raxApp.template,\n plugins: {\n components: [\n commonDeps(),\n esModule({ fileType: 'jsx', useAliasName: false }),\n containerClass(),\n containerInitState(),\n containerMethods(),\n containerInjectContext(),\n containerInjectDataSourceEngine(options),\n containerInjectUtils(),\n containerLifeCycles(),\n jsx(),\n css(),\n ],\n pages: [\n commonDeps(),\n esModule({ fileType: 'jsx' }),\n containerClass(),\n containerInitState(),\n containerMethods(),\n containerInjectContext(),\n containerInjectDataSourceEngine(options),\n containerInjectUtils(),\n containerLifeCycles(),\n jsx(),\n css(),\n ],\n appConfig: [raxApp.plugins.appConfig(options)],\n buildConfig: [raxApp.plugins.buildConfig(options)],\n entry: [raxApp.plugins.entry(options)],\n constants: [constants()],\n utils: [esModule(), utils('rax')],\n i18n: [i18n()],\n globalStyle: [\n raxApp.plugins.globalStyle({ fileType: options?.globalStylesFileType || 'css' }),\n ],\n htmlEntry: [raxApp.plugins.entryDocument(options)],\n packageJSON: [raxApp.plugins.packageJSON(options)],\n },\n postProcessors: [prettier()],\n customizeBuilderOptions: options?.customizeBuilderOptions,\n });\n}\n\nexport const plugins = {\n containerClass,\n containerLifeCycles,\n containerMethods,\n containerInitState,\n containerInjectContext,\n containerInjectDataSourceEngine,\n containerInjectUtils,\n jsx,\n commonDeps,\n raxApp,\n};\n", "// \u751F\u6210 Vue 3 \u7EC4\u4EF6\n// import changeCase from 'change-case';\nimport {\n TEMPLATE_DEFINE_CHUNK_NAME,\n VUE_DEFAULT_LINK_AFTER,\n} from '../../../const/generator';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n} from '../../../types';\n// import { ensureValidClassName } from '../../../utils/validate';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n // const ir = next.ir as IContainerInfo;\n\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\n // const componentName = ensureValidClassName(\n // `${changeCase.pascalCase(ir.moduleName)}$$${ir.containerType}`,\n // );\n\n // template \u5F00\u59CB\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart,\n content: '<template>',\n linkAfter: [\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart]\n ],\n });\n\n // \u9875\u9762\u7ED3\u6784\n // next.chunks.push({\n // type: ChunkType.STRING,\n // fileType: FileType.VUE,\n // name: TEMPLATE_DEFINE_CHUNK_NAME.TemplateDom,\n // content: `<div>${componentName} Component</div>`, // \u793A\u4F8B\u7ED3\u6784\n // linkAfter: [\n // ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.TemplateDom]\n // ],\n // });\n\n // template \u7ED3\u675F\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.TemplateEnd,\n content: '</template>',\n linkAfter: [\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.TemplateEnd]\n ],\n });\n\n // script \u5F00\u59CB\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart,\n content: '<script setup lang=\"ts\">',\n linkAfter: [\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart]\n ],\n });\n\n // \u5F15\u5165\u5916\u90E8\u4F9D\u8D56(\u5199\u5728vueCommonDeps.ts\u6587\u4EF6)\n // next.chunks.push({\n // type: ChunkType.STRING,\n // fileType: FileType.VUE,\n // name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\n // content: \"import { ref, onMounted } from 'vue';\",\n // linkAfter: [\n // ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart]\n // ],\n // });\n\n // \u6570\u636E\u5B9A\u4E49\n // next.chunks.push({\n // type: ChunkType.STRING,\n // fileType: FileType.VUE,\n // name: TEMPLATE_DEFINE_CHUNK_NAME.ConstVar,\n // content: '',\n // linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport],\n // });\n\n // mounted \u751F\u547D\u5468\u671F\u5F00\u59CB\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart,\n content: 'onMounted(async () => {',\n linkAfter: [\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart]\n ],\n });\n\n // mounted \u751F\u547D\u5468\u671F\u5185\u5BB9\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent,\n content: '',\n linkAfter: [\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent]\n ],\n });\n\n // mounted \u751F\u547D\u5468\u671F\u7ED3\u675F\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.OnMountedEnd,\n content: '});',\n linkAfter: [\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.OnMountedEnd]\n ],\n });\n\n // onUnMounted \u751F\u547D\u5468\u671F\u5F00\u59CB\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.UnMountedStart,\n content: 'onUnmounted(() => {',\n linkAfter: [\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.UnMountedStart]\n ],\n });\n\n // // onUnMounted \u751F\u547D\u5468\u671F\u5185\u5BB9\n // next.chunks.push({\n // type: ChunkType.STRING,\n // fileType: FileType.VUE,\n // name: TEMPLATE_DEFINE_CHUNK_NAME.UnMountedContent,\n // content: '',\n // linkAfter: [\n // ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.UnMountedContent]\n // ],\n // });\n\n // onUnMounted \u751F\u547D\u5468\u671F\u7ED3\u675F\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd,\n content: '});',\n linkAfter: [\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd]\n ],\n });\n\n // script \u7ED3\u675F\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd,\n content: '</script>',\n linkAfter: [\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd]\n ],\n });\n\n // CSS \u6837\u5F0F\u5F00\u59CB\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.CssStyleStart,\n content: '<style scoped lang=\"scss\">',\n linkAfter: [\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.CssStyleStart]\n ],\n });\n\n // \u793A\u4F8B CSS \u6837\u5F0F\n // next.chunks.push({\n // type: ChunkType.STRING,\n // fileType: FileType.VUE,\n // name: TEMPLATE_DEFINE_CHUNK_NAME.CssStyleImport,\n // content: '', // \u793A\u4F8B\u6837\u5F0F\n // linkAfter: [\n // ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.CssStyleImport]\n // ],\n // });\n\n // CSS \u6837\u5F0F\u7ED3\u675F\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.CssStyleEnd,\n content: '</style>',\n linkAfter: [\n ...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.CssStyleEnd]\n ],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import _ from 'lodash';\nimport {\n IScope,\n CodePiece,\n NodeGenerator,\n NodeGeneratorConfig,\n NodePlugin,\n PIECE_TYPE,\n CodeGeneratorError,\n AttrData,\n} from '../types';\nimport { generateCompositeType } from './compositeType';\nimport {\n IPublicTypeNodeSchema,\n isNodeSchema,\n IPublicTypeNodeDataType,\n IPublicTypeCompositeValue,\n} from '@alilc/lowcode-types';\nimport { isValidIdentifier, isValidVueDirective } from './validate';\nimport { executeFunctionStack } from './aopHelper';\nimport { encodeJsxStringNode } from './encodeJsxAttrString';\nimport { getStaticExprValue } from './common';\nimport { array } from 'fp-ts';\nimport { lineToUppercase } from './changeCase';\n\n// \u5408\u5E76\u4E24\u4E2A NodeGeneratorConfig \u5BF9\u8C61\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\n// \u5982\u679C cfg1 \u548C cfg2 \u90FD\u6709 handlers\u3001tagMapping\u3001attrPlugins \u6216 nodePlugins\uFF0C\u5219\u5C06\u5B83\u4EEC\u5408\u5E76\u5230\u4E00\u8D77\nfunction mergeNodeGeneratorConfig(\n cfg1: NodeGeneratorConfig,\n cfg2: NodeGeneratorConfig = {},\n): NodeGeneratorConfig {\n const resCfg: NodeGeneratorConfig = {};\n if (cfg1.handlers || cfg2.handlers) {\n resCfg.handlers = {\n ...(cfg1.handlers || {}),\n ...(cfg2.handlers || {}),\n };\n }\n\n if (cfg1.tagMapping || cfg2.tagMapping) {\n resCfg.tagMapping = cfg2.tagMapping || cfg1.tagMapping;\n }\n\n if (cfg1.attrPlugins || cfg2.attrPlugins) {\n resCfg.attrPlugins = [];\n resCfg.attrPlugins.push(...(cfg2.attrPlugins || []));\n resCfg.attrPlugins.push(...(cfg1.attrPlugins || []));\n }\n\n if (cfg1.nodePlugins || cfg2.nodePlugins) {\n resCfg.nodePlugins = [];\n resCfg.nodePlugins.push(...(cfg2.nodePlugins || []));\n resCfg.nodePlugins.push(...(cfg1.nodePlugins || []));\n }\n\n return resCfg;\n}\n\n// \u68C0\u67E5\u5B57\u7B26\u4E32 v \u662F\u5426\u662F\u4E00\u4E2A\u7EAF\u5B57\u7B26\u4E32\nexport function isPureString(v: string) {\n // FIXME: \u76EE\u524D\u7684\u65B9\u5F0F\u4E0D\u591F\u4E25\u8C28\n return (v[0] === \"'\" && v[v.length - 1] === \"'\") || (v[0] === '\"' && v[v.length - 1] === '\"');\n}\n\n// \u751F\u6210\u5C5E\u6027\u503C\u3002\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\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\nfunction generateAttrValue(\n attrData: { attrName: string; attrValue: IPublicTypeCompositeValue },\n scope: IScope,\n config?: NodeGeneratorConfig,\n): CodePiece[] {\n const valueStr = generateCompositeType(attrData.attrValue, scope, {\n handlers: config?.handlers,\n nodeGenerator: config?.self,\n });\n return [\n {\n type: PIECE_TYPE.ATTR,\n name: attrData.attrName,\n value: valueStr,\n },\n ];\n}\n\n// \u751F\u6210 Vue \u7684\u5C5E\u6027\nfunction generateAttr(\n attrName: string,\n attrValue: IPublicTypeCompositeValue,\n scope: IScope,\n config?: NodeGeneratorConfig,\n): CodePiece[] {\n let pieces: CodePiece[] = [];\n // pieces = generateAttrValue({ attrName, attrValue }, scope, config);\n\n if (config?.attrPlugins) {\n pieces = executeFunctionStack<AttrData, CodePiece[], NodeGeneratorConfig>(\n { attrName, attrValue },\n scope,\n config.attrPlugins,\n generateAttrValue,\n config,\n );\n } else {\n pieces = generateAttrValue({ attrName, attrValue }, scope, config);\n }\n\n pieces = pieces\n .map((p) => {\n if (p.name === '__events') {\n return null;\n }\n\n let newValue: string;\n let pName: string;\n\n //\u5904\u7406\u70B9\u51FB\u4E8B\u4EF6\n if (p.name === 'onClick' || p.name === 'onMouseUp') {\n pName = `@${p.name}`;\n newValue = `\"${p.value}\"`;\n } else if (p.name === 'dataList' || p.name === 'itemArray') {\n //\u5904\u7406\u6570\u636E\u6E90\u7ED1\u5B9A\n let data;\n try {\n data = JSON.parse(p.value);\n } catch (error) {\n newValue = `\"${p.value\n .replace(/[\\n\\r]+/g, '')\n .replace(/^state\\['(.*?)'\\]\\?\\./, '$1?.')}\"`;\n pName = `:${p.name}`;\n }\n if (data) {\n newValue = `\"${JSON.stringify(data)\n .replace(/\"(\\w+)\":/g, '$1:')\n .replace(/:\"([^\"]*)\"/g, \":'$1'\")}\"`;\n pName = `:${p.name}`;\n }\n } else if (p.value && isPureString(p.value)) {\n //\u5904\u7406\u5B57\u7B26\u4E32\n const content = getStaticExprValue<string>(p.value);\n newValue = JSON.stringify(encodeJsxStringNode(content));\n pName = `${p.name}`;\n } else {\n newValue = `\"${p.value}\"`;\n pName = `:${p.name}`;\n }\n\n return {\n value: `${pName}=${lineToUppercase(newValue)}`,\n type: PIECE_TYPE.ATTR,\n };\n })\n .filter((p) => p !== null);\n\n return pieces;\n}\n\n// \u751F\u6210\u8282\u70B9\u7684\u6240\u6709\u5C5E\u6027\u90E8\u5206\uFF0C\u8FD4\u56DE\u4EE3\u7801\u7247\u6BB5\u6570\u7EC4\nfunction generateAttrs(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n): CodePiece[] {\n const { props } = nodeItem;\n\n let pieces: CodePiece[] = [];\n\n if (props) {\n if (!Array.isArray(props)) {\n Object.keys(props).forEach((propName: string) => {\n if (isValidIdentifier(propName) || isValidVueDirective(propName)) {\n pieces = pieces.concat(\n generateAttr(propName, props[propName] as IPublicTypeCompositeValue, scope, config),\n );\n }\n });\n } else {\n props.forEach((prop) => {\n if (prop.name && isValidIdentifier(prop.name) && !prop.spread) {\n pieces = pieces.concat(generateAttr(prop.name, prop.value, scope, config));\n }\n\n // TODO: \u5904\u7406 spread \u573A\u666F\uFF08<Xxx {...(something)}/>)\n // \u8FD9\u79CD\u5728 schema \u91CC\u9762\u600E\u4E48\u63CF\u8FF0\n });\n }\n }\n\n return pieces;\n}\n\n// \u751F\u6210 v-if \u903B\u8F91\nfunction generateConditionVueCtrl(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n next?: NodePlugin,\n): CodePiece[] {\n const pieces: CodePiece[] = next ? next(nodeItem, scope, config) : [];\n\n if (nodeItem.condition != null && nodeItem.condition !== true) {\n let value = generateCompositeType(nodeItem.condition, scope, {\n handlers: config?.handlers,\n });\n\n value = value.replace(/[{}]/g, '');\n\n pieces.unshift({\n value: `v-if=\"${value}\"`,\n type: PIECE_TYPE.ATTR,\n });\n }\n\n return pieces;\n}\n\n// \u751F\u6210 v-for \u903B\u8F91\nfunction generateVueLoopCtrl(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n next?: NodePlugin,\n): CodePiece[] {\n if (nodeItem.loop) {\n const loopItemName = nodeItem.loopArgs?.[0] || 'item';\n const loopIndexName = nodeItem.loopArgs?.[1] || 'index';\n\n let loopDataExpr = generateCompositeType(nodeItem.loop, scope, {\n handlers: config?.handlers,\n });\n\n // \u5C06 v-for \u8868\u8FBE\u5F0F\u4E2D\u7684\u53CC\u5F15\u53F7\u66FF\u6362\u4E3A\u5355\u5F15\u53F7\n loopDataExpr = loopDataExpr.replace(/\"/g, \"'\");\n\n const pieces: CodePiece[] = next ? next(nodeItem, scope, config) : [];\n pieces.unshift({\n value: `v-for=\"(${loopItemName}, ${loopIndexName}) in ${loopDataExpr}\"`,\n type: PIECE_TYPE.ATTR,\n });\n\n return pieces;\n }\n\n return next ? next(nodeItem, scope, config) : [];\n}\n\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\nfunction generateBasicNode(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n): CodePiece[] {\n const pieces: CodePiece[] = [];\n let tagName = (config?.tagMapping || _.identity)(nodeItem.componentName);\n\n // Div\u6807\u7B7E\u8F6C\u6210div\u6807\u7B7E\n tagName = tagName === 'Div' ? 'div' : tagName;\n pieces.push({\n value: tagName || '', // FIXME: type detection error\n type: PIECE_TYPE.TAG,\n });\n\n return pieces;\n}\n\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\n// \u5B50\u8282\u70B9\u901A\u8FC7\u8C03\u7528 config.self \u6765\u9012\u5F52\u751F\u6210\u3002\nfunction generateSimpleNode(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n): CodePiece[] {\n const basicParts = generateBasicNode(nodeItem, scope, config) || [];\n const attrParts = generateAttrs(nodeItem, scope, config) || [];\n const childrenParts: CodePiece[] = [];\n if (nodeItem.children && config?.self) {\n const childrenStr = config.self(nodeItem.children, scope);\n\n childrenParts.push({\n type: PIECE_TYPE.CHILDREN,\n value: childrenStr,\n });\n }\n\n return [...basicParts, ...attrParts, ...childrenParts];\n}\n\n// \u5C06\u751F\u6210\u7684\u4EE3\u7801\u7247\u6BB5\u8FDE\u63A5\u6210\u4E00\u4E2A\u5B8C\u6574\u7684 template \u8282\u70B9\u3002\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\n\nfunction linkPieces(pieces: CodePiece[]): string {\n const tagsPieces = pieces.filter((p) => p.type === PIECE_TYPE.TAG);\n if (tagsPieces.length !== 1) {\n throw new CodeGeneratorError('Only one tag definition required', tagsPieces);\n }\n const tagName = tagsPieces[0].value;\n\n const beforeParts = pieces\n .filter((p) => p.type === PIECE_TYPE.BEFORE)\n .map((p) => p.value)\n .join('');\n\n const afterParts = pieces\n .filter((p) => p.type === PIECE_TYPE.AFTER)\n .map((p) => p.value)\n .join('');\n\n const childrenParts = pieces\n .filter((p) => p.type === PIECE_TYPE.CHILDREN)\n .map((p) => p.value)\n .join('');\n\n let attrsParts = pieces\n .filter((p) => p.type === PIECE_TYPE.ATTR)\n .map((p) => p.value)\n .join(' ');\n\n attrsParts = attrsParts ? ` ${attrsParts}` : '';\n\n if (childrenParts) {\n return `${beforeParts}<${tagName}${attrsParts}>${childrenParts}</${tagName}>${afterParts}`;\n }\n\n return `${beforeParts}<${tagName}${attrsParts} />${afterParts}`;\n}\n\n// generateNodeSchema \u662F\u8BE5\u6A21\u5757\u7684\u6838\u5FC3\u90E8\u5206\uFF0C\u7528\u4E8E\u5C06\u8282\u70B9\u751F\u6210 template \u4EE3\u7801\u3002\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\nfunction generateNodeSchema(\n nodeItem: IPublicTypeNodeSchema,\n scope: IScope,\n config?: NodeGeneratorConfig,\n): string {\n const pieces: CodePiece[] = [];\n if (config?.nodePlugins) {\n const res = executeFunctionStack<IPublicTypeNodeSchema, CodePiece[], NodeGeneratorConfig>(\n nodeItem,\n scope,\n config.nodePlugins,\n generateSimpleNode,\n config,\n );\n pieces.push(...res);\n } else {\n pieces.push(...generateSimpleNode(nodeItem, scope, config));\n }\n\n return linkPieces(pieces);\n}\n\nconst handleChildren = (v: string[]) => v.join('');\n\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\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\nexport function createNodeGenerator(cfg: NodeGeneratorConfig = {}): NodeGenerator<string> {\n const generateNode = (nodeItem: IPublicTypeNodeDataType, scope: IScope): string => {\n const ignoreNode = ['Navigation'];\n if (_.isArray(nodeItem)) {\n const resList = nodeItem.map((n) => generateNode(n, scope));\n return handleChildren(resList);\n }\n\n if (isNodeSchema(nodeItem)) {\n //\u5FFD\u7565\u6307\u5B9A\u8282\u70B9\u751F\u6210\n // \u83B7\u53D6\u6807\u7B7E\u540D\n const tagName = (cfg?.tagMapping || _.identity)(nodeItem.componentName) as string;\n\n if (ignoreNode.includes(tagName)) {\n return '';\n }\n return generateNodeSchema(nodeItem, scope, {\n ...cfg,\n self: generateNode,\n });\n }\n\n const valueStr = generateCompositeType(nodeItem, scope, {\n handlers: cfg.handlers,\n nodeGenerator: generateNode,\n });\n\n if (isPureString(valueStr)) {\n // Vue \u6A21\u677F\u4E2D\u7684\u63D2\u503C\u8868\u8FBE\u5F0F\u4F7F\u7528 {{ }}\n // return `{{${encodeJsxStringNode(getStaticExprValue<string>(valueStr))}}}`;\n return `${encodeJsxStringNode(getStaticExprValue<string>(valueStr))}`;\n }\n\n // \u5904\u7406 Vue \u6A21\u677F\u4E2D\u7684\u52A8\u6001\u7ED1\u5B9A\uFF0C\u7528 v-bind \u6216 : \u6765\u4EE3\u66FF JSX \u4E2D\u7684 {}\n return `{{${valueStr}}}`;\n };\n\n // Vue \u4E0D\u9700\u8981 JSX \u7684 {} \u5305\u88F9\uFF0C\u56E0\u6B64\u4E0D\u9700\u8981 unwrapJsExprQuoteInJsx\n return (nodeItem: IPublicTypeNodeDataType, scope: IScope) => generateNode(nodeItem, scope);\n}\n\n// Vue \u4EE3\u7801\u751F\u6210\u5668\u7684\u6838\u5FC3\u51FD\u6570\nexport function createVueNodeGenerator(cfg?: NodeGeneratorConfig): NodeGenerator<string> {\n const newCfg = mergeNodeGeneratorConfig(\n {\n nodePlugins: [generateVueLoopCtrl, generateConditionVueCtrl],\n },\n cfg,\n );\n\n return createNodeGenerator(newCfg);\n}\n\n/**\n * \u67E5\u627E\u6307\u5B9A\u8282\u70B9\n * @param node\n * @param name\n */\nfunction findNodeSchema(node: IPublicTypeNodeDataType, name: string): IPublicTypeNodeSchema | null {\n // \u68C0\u67E5\u5F53\u524D\u8282\u70B9\u662F\u5426\u662F\u6211\u4EEC\u8981\u627E\u7684\n if (node && node.componentName && node.componentName === name) {\n return node as IPublicTypeNodeSchema;\n }\n\n // \u9012\u5F52\u68C0\u67E5\u5B50\u8282\u70B9\n if (node.children) {\n if (Array.isArray(node.children)) {\n // \u904D\u5386\u5B50\u8282\u70B9\u6570\u7EC4\n for (const child of node.children) {\n const found = findNodeSchema(child, name);\n if (found) {\n return found; // \u627E\u5230\u540E\u7ACB\u5373\u8FD4\u56DE\n }\n }\n } else {\n // \u5904\u7406\u5355\u4E2A\u5B50\u8282\u70B9\n return findNodeSchema(node.children, name);\n }\n }\n\n return null; // \u672A\u627E\u5230\u65F6\u8FD4\u56DE null\n}\n\n/**\n * \u751F\u6210\u6307\u5B9A\u8282\u70B9\n * @param name \u6307\u5B9A\u8282\u70B9\u540D\u79F0\n * @param nodeItem schema\u6587\u4EF6\n * @param scope\n * @param cfg \u914D\u7F6E\n * @param props \u8981\u989D\u5916\u6DFB\u52A0\u7ED9\u7EC4\u4EF6\u7684\u5C5E\u6027\n */\nexport function generateByName(\n cfg: NodeGeneratorConfig = {},\n name: string,\n nodeItem: IPublicTypeNodeDataType,\n scope: IScope,\n props: Record<string, any>,\n): { code: string; node: IPublicTypeNodeSchema } {\n const targetNode = findNodeSchema(nodeItem, name);\n if (!targetNode) {\n return { code: '', node: {} as IPublicTypeNodeSchema };\n }\n targetNode.props = { ...targetNode.props, ...props };\n // \u751F\u6210\u4EE3\u7801\n return {\n code: generateNodeSchema(targetNode as IPublicTypeNodeSchema, scope, {\n ...cfg,\n }),\n node: targetNode,\n };\n}\n", "/**\n * \u5224\u65AD\u662F\u5426\u662F\u539F\u5B50\u7C7B\u578B\u7684\u8868\u8FBE\u5F0F\n */\nexport function isLiteralAtomicExpr(expr: string): boolean {\n return (\n expr === 'null' ||\n expr === 'undefined' ||\n expr === 'true' ||\n expr === 'false' ||\n /^-?\\d+(\\.\\d+)?$/.test(expr)\n );\n}\n", "import { Expression } from '@babel/types';\n\n/** \u5224\u65AD\u662F\u975E\u662F\u4E00\u4E9B\u7B80\u5355\u76F4\u63A5\u7684\u5B57\u9762\u503C */\nexport function isSimpleStraightLiteral(expr: Expression): boolean {\n switch (expr.type) {\n case 'BigIntLiteral':\n case 'BooleanLiteral':\n case 'DecimalLiteral':\n case 'NullLiteral':\n case 'NumericLiteral':\n case 'RegExpLiteral':\n case 'StringLiteral':\n return true;\n default:\n return false;\n }\n}\n", "import { Expression } from '@babel/types';\nimport generate from '@babel/generator';\nimport { IScope } from '../../../types';\nimport { parseExpressionConvertThis2Context } from '../../../utils/expressionParser';\n\n/**\n * \u5C06\u6240\u6709\u7684 this.xxx \u66FF\u6362\u4E3A __$$context.xxx\n * @param expr\n */\nexport function transformThis2Context(\n expr: string | Expression,\n scope: IScope,\n { ignoreRootScope = false } = {},\n): string {\n if (ignoreRootScope && scope.parent == null) {\n return typeof expr === 'string' ? expr : generate(expr).code;\n }\n\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\n // return expr\n // .replace(/\\bthis\\.item\\./g, () => 'item.')\n // .replace(/\\bthis\\.index\\./g, () => 'index.')\n // .replace(/\\bthis\\./g, () => '__$$context.');\n return parseExpressionConvertThis2Context(\n expr,\n '__$$context',\n scope.bindings?.getAllBindings() || [],\n );\n}\n", "import { IScope } from '../../../types';\nimport { parseExpression } from '../../../utils/expressionParser';\nimport { isLiteralAtomicExpr } from '../util/isLiteralAtomicExpr';\nimport { isSimpleStraightLiteral } from '../util/isSimpleStraightLiteral';\nimport { transformThis2Context } from './transformThis2Context';\n\nexport function transformJsExpr(\n expr: string,\n scope: IScope,\n { dontWrapEval = false, dontTransformThis2ContextAtRootScope = false } = {},\n) {\n if (!expr) {\n return 'undefined';\n }\n\n if (isLiteralAtomicExpr(expr)) {\n return expr;\n }\n\n const exprAst = parseExpression(expr);\n\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\n if (isSimpleStraightLiteral(exprAst)) {\n return expr;\n }\n\n // \u79FB\u9664 `this` \u5173\u952E\u5B57\n const transformedExpr = transformThis2Context(exprAst, scope, {\n ignoreRootScope: dontTransformThis2ContextAtRootScope,\n });\n\n if (dontWrapEval) {\n return transformedExpr;\n // return transformThis2Context(exprAst, scope, {\n // ignoreRootScope: dontTransformThis2ContextAtRootScope,\n // });\n }\n\n switch (exprAst.type) {\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\n case 'ArrowFunctionExpression':\n case 'FunctionExpression':\n return transformThis2Context(exprAst, scope, {\n ignoreRootScope: dontTransformThis2ContextAtRootScope,\n });\n\n default:\n break;\n }\n\n // \u5176\u4ED6\u7684\u90FD\u9700\u8981\u5305\u4E00\u5C42\n // return `__$$eval(() => (${transformThis2Context(exprAst, scope, {\n // ignoreRootScope: dontTransformThis2ContextAtRootScope,\n // })}))`;\n // return `{{${transformThis2Context(exprAst, scope, {\n // ignoreRootScope: dontTransformThis2ContextAtRootScope,\n // })}}}`;\n return `${transformedExpr}`;\n}\n", "// \u4ECE\u7EC4\u4EF6\u6811\u751F\u6210template\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n HandlerSet,\n ICodeStruct,\n IContainerInfo,\n IScope,\n NodeGeneratorConfig,\n} from '../../../types';\n\nimport { TEMPLATE_DEFINE_CHUNK_NAME } from '../../../const';\n\nimport { createVueNodeGenerator } from '../../../utils/nodeToTemplate';\nimport { Scope } from '../../../utils/Scope';\nimport { IPublicTypeJSExpression } from '@alilc/lowcode-types';\nimport { generateExpression } from '../../../utils/jsExpression';\nimport { transformJsExpr } from '../../../core/vue/handlers/transformJsExpression';\nimport { transformThis2Context } from '../../../core/vue/handlers/transformThis2Context';\nimport { generateCompositeType } from '../../../utils/compositeType';\n\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\nexport interface PluginConfig {\n fileType?: string;\n nodeTypeMapping?: Record<string, string>;\n}\n\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\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg = {\n fileType: FileType.VUE,\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n nodeTypeMapping: {} as Record<string, string>,\n ...config,\n };\n\n const { nodeTypeMapping } = cfg;\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const { tolerateEvalErrors = true } = next.contextData;\n\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\n // \u4E0E Rax \u6240\u4E0D\u540C\u7684\u662F\uFF0C\u8FD9\u91CC\u4E0D\u4F1A\u5C06\u6700\u9876\u5C42\u7684 this \u8F6C\u6362\u6389\n const customHandlers: HandlerSet<string> = {\n expression(input: IPublicTypeJSExpression, scope: IScope, config2) {\n return transformJsExpr(generateExpression(input, scope), scope, {\n dontWrapEval: !(config2?.tolerateEvalErrors ?? tolerateEvalErrors),\n dontTransformThis2ContextAtRootScope: true,\n });\n },\n function(input, scope: IScope) {\n return transformThis2Context(\n generateCompositeType(\n {\n type: 'JSFunction',\n value: input.value || 'function () {}',\n },\n Scope.createRootScope(),\n ),\n scope,\n { ignoreRootScope: true },\n );\n },\n };\n\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\n const generatorPlugins: NodeGeneratorConfig = {\n // handlers: customHandlers,\n tagMapping: (v) => nodeTypeMapping[v] || v,\n tolerateEvalErrors,\n };\n\n const generator = createVueNodeGenerator(generatorPlugins);\n\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\n const ir = next.ir as IContainerInfo;\n const scope: IScope = Scope.createRootScope();\n const templateContent = generator(ir, scope); // \u751F\u6210 Vue \u6A21\u677F\u5185\u5BB9\n // Vue \u6A21\u677F\u751F\u6210\u7ED3\u679C\u88AB\u4FDD\u5B58\u5230 next.chunks \u4E2D\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.TemplateDom,\n // content: '',\n content: `\n ${templateContent}\n `,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "// VUE\u6846\u67B6\u7684\u516C\u5171\u4F9D\u8D56\nimport { TEMPLATE_DEFINE_CHUNK_NAME } from '../../../const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n} from '../../../types';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\n content: `\nimport { onMounted, onUnmounted, ref, reactive } from 'vue';\nimport { useRouter } from 'vue-router';`,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { JSONObject } from '@alilc/lowcode-datasource-types/src/value-type';\nimport _ from 'lodash';\nimport { generateFunction, parseExpressionGetState } from './jsExpression';\nimport { lineToUppercase } from './changeCase';\nimport { InterpretDataSourceConfig, JSONValue, InterpretDataSource } from '@alilc/lowcode-types';\nimport { DataSourceCustomExtra, ExtraInterpretDataSource } from '../types';\nimport { getApiName } from './apiHandler';\n\n// api\u7F13\u5B58\u524D\u7F00\nexport const PREFIX_API_CACHE = 'page_cache_';\n// \u5206\u9875\u53C2\u6570pageNum\u524D\u7F00\nexport const PREFIX_PAGE_NUM = '_nowPage';\n// \u5206\u9875\u53C2\u6570isLastPage\u524D\u7F00\nexport const PREFIX_IS_LAST_PAGE = '_isLastPage';\n// \u5206\u9875\u53C2\u6570isLastPage\u524D\u7F00\nexport const PREFIX_API_PARAM_NAME = 'Params';\n// script \u5185api\u5F15\u7528\u540E\u7F00\nexport const SUFFIX_API_SCRIPT = 'Request';\n// \u6570\u636E\u6E90\u96C6\u5408\u53D8\u91CF\u540D\nexport const SUFFIX_DATA_SOURCE_MAP = 'dataSourceMap';\n// api\u8BF7\u6C42\u65B9\u6CD5\u540D\u540E\u7F00\nexport const SUFFIX_API_METHOD = 'Method';\n// \u5168\u5C40\u8BF7\u6C42\u53C2\u6570\u540D\u5B57\nexport const GLOBE_API_PARAM = 'globeParam';\n// \u8BF7\u6C42\u7C7B\u578B\u679A\u4E3E\nenum REQUEST_TYPE {\n PAGE = 'page',\n SYSTEM_DICTIONARY = 'systemDictionary',\n}\nexport type TypeDataSourceType =\n | 'dynamicForm'\n | 'dataDictionary'\n | 'dynamicFormCache'\n | 'dynamicFormDetail'\n | 'dataLoginUserInfo';\n\n// \u8BF7\u6C42\u7C7B\u578B\u5339\u914D\nconst requestEndUrl: Record<\n TypeDataSourceType,\n (url: string, formName?: string, isJsExp?: boolean) => string\n> = {\n dynamicForm: (url: string, formName?: string, isJsExp?: boolean) => {\n if (isJsExp) {\n return `/${formName}/page`;\n } else {\n return `'/${formName}/page'`;\n }\n },\n};\n// \u9700\u8981\u5FFD\u7565\u7684\u8BF7\u6C42\u5934\nconst ignoreHeader = [\n {\n key: 'authToken',\n ignore: (value: any) => {\n return true;\n },\n },\n {\n key: 'siteCode',\n ignore: (value: any) => {\n return true;\n },\n },\n {\n key: 'dcAuthType',\n ignore: (value: any) => {\n return true;\n },\n },\n {\n key: 'Content-Type',\n ignore: (value: any) => {\n return ['application/json'].includes(value);\n },\n },\n];\n\n/**\n * \u8BF7\u6C42\u5934\u5904\u7406\n * @param headers \u8BF7\u6C42\u5934\n */\nexport function requestHeaderHandler(headers: JSONObject): string {\n if (!headers) {\n return '';\n }\n let endHeaders = '';\n for (let i = 0; i < Object.keys(headers).length; i++) {\n const key = Object.keys(headers)[i];\n // \u5FFD\u7565\u6307\u5B9Akey\n if (shouldIgnoreKey(key, headers[key])) {\n break;\n }\n if (headers[key]) {\n let tempHeaders = `defaultConfig.header.data['${key}'] = '${headers[key]}'`;\n if (isJsExpression(headers[key])) {\n // js\u8868\u8FBE\u5F0F\u5904\u7406\n tempHeaders = `defaultConfig.header.data['${key}'] = ${generateFunction(headers[key], {\n isToVue: true,\n })}`;\n }\n endHeaders += `${tempHeaders};`;\n }\n }\n if (endHeaders) {\n endHeaders =\n '// \u8BF7\u6C42\u5934\u5904\u7406\\n' + 'const defaultConfig = getDefaultConfig<boolean>()\\n' + endHeaders;\n }\n return endHeaders;\n}\n\n/**\n * \u8BF7\u6C42\u4F53\u5904\u7406\n * @param params \u8BF7\u6C42\u4F53\n */\nexport function requestParamsHandler(params: JSONObject) {\n if (!params || Object.keys(params).length === 0) {\n return '';\n }\n // \u5C06\u8BF7\u6C42\u4F53\u5904\u7406\u6210key\uFF1A value\u7684\u5B57\u7B26\u4E32\n let paramsData = params\n ? Object.keys(params)\n .map((key) => {\n if (isJsExpression(params[key])) {\n // todo \u5FFD\u7565js\u8868\u8FBE\u5F0F\uFF0C\u653E\u5728script\u90A3\u8FB9\u5904\u7406\n return '';\n }\n return `${key}: ${params[key]}`;\n })\n .filter((item) => item)\n .join(',')\n : '';\n return `\n // \u8BF7\u6C42\u53C2\u6570\u5904\u7406\n data = {\n ${paramsData ? paramsData + ',' : ''}\n ...data\n }`;\n}\n\n/**\n * \u8BF7\u6C42\u7ED3\u679C\u5904\u7406\n */\nexport function requestAfterDataHandler(\n dataSourceItems: InterpretDataSourceConfig,\n extra: Record<string, DataSourceCustomExtra>,\n) {\n const strArray = [];\n if (dataSourceItems.dataHandler) {\n const resultDataName = lineToUppercase(dataSourceItems.id + 'Data');\n // \u83B7\u53D6\u8BF7\u6C42\u7ED3\u679C\n const resultData = `const ${resultDataName} = await ${getApiName(dataSourceItems.id)}.${\n dataSourceItems.id\n }(${getApiParamName(dataSourceItems.id)});`;\n const handleData = `const handleData = ${getApiHandleFunctionName(\n dataSourceItems.id,\n )}({ data: ${resultDataName}})`;\n strArray.push(resultData, handleData);\n let endData;\n if (!dataSourceItems.dataHandler.value.includes('requestAfter')) {\n // \u8C03\u7528\u5904\u7406\u51FD\u6570\u8FDB\u884C\u5904\u7406 todo requestAfter\u65B9\u6CD5\u5185\u542B\u6709\u6570\u636E\u6E90\u8D4B\u503C\uFF0C\u6545\u4E0D\u8FDB\u884C\u8D4B\u503C\n endData = `${lineToUppercase(getApiId(dataSourceItems.id, extra))}.value = handleData`;\n strArray.push(endData);\n }\n } else {\n // \u5904\u7406\u51FD\u6570\u5904\u7406\n const handleData = `const handleData = await ${getApiName(dataSourceItems.id)}.${\n dataSourceItems.id\n }(${getApiParamName(dataSourceItems.id)});`;\n const data = `${lineToUppercase(getApiId(dataSourceItems.id, extra))}.value = handleData`;\n strArray.push(handleData, data);\n }\n return strArray;\n}\n\n/**\n * \u662F\u5426\u662Fjs\u8868\u8FBE\u5F0F\n * @param value\n */\nexport function isJsExpression(value: any) {\n return _.isObject(value) && value?.type == 'JSExpression';\n}\n\n/**\n * \u662F\u5426\u5FFD\u7565\u8BE5key\n * @param key\n * @param value\n */\nfunction shouldIgnoreKey(key: string, value: JSONValue) {\n for (let i = 0; i < ignoreHeader.length; i++) {\n const headerItem = ignoreHeader[i];\n if (headerItem.key == key) {\n // \u8C03\u7528\u5FFD\u7565\u51FD\u6570\n return headerItem.ignore(value);\n }\n }\n\n // \u5224\u65AD key \u662F\u5426\u4EE5 'authToken-' \u5F00\u5934\uFF0C\u5E76\u540E\u9762\u8DDF\u7740\u6570\u5B57\uFF08\u52A8\u6001\u90E8\u5206\uFF09\n const dynamicKeyPattern = /^authToken-\\d+$/;\n if (dynamicKeyPattern.test(key)) {\n return true;\n }\n\n return false;\n}\n\n/**\n * \u5C06\u7EBF\u4E0A\u5730\u5740\u8F6C\u4E3A\u51FA\u7801\u540E\u7684\u8BF7\u6C42\u5730\u5740\n * @param dataSourceConfig\n * @param extra \u989D\u5916\u53C2\u6570\n */\nexport function handleUrl(dataSourceConfig: InterpretDataSourceConfig, extra: any) {\n // if (!dataSourceConfig.bindPanelData) {\n // return dataSourceConfig.options?.uri\n // }\n let url;\n if (isJsExpression(dataSourceConfig.options?.uri)) {\n // \u5BF9url\u662Fjs\u8868\u8FBE\u5F0F\u8FDB\u884C\u5904\u7406\n url = generateFunction(dataSourceConfig.options?.uri, {\n isToVue: true,\n isDeleteLastSemicolon: true,\n });\n } else {\n url = dataSourceConfig.options?.uri as string;\n }\n const id = dataSourceConfig.id as string;\n const config = extra && extra[id];\n if (!config) {\n return `'${dataSourceConfig.options?.uri}'`;\n }\n const type = config.dataSourceType as TypeDataSourceType;\n const formName = lineToUppercase(config.code as string);\n\n return requestEndUrl[type](url, formName, isJsExpression(dataSourceConfig.options?.uri));\n}\n\n/**\n * \u5904\u7406\u5206\u9875\u8BF7\u6C42\u53C2\u6570\n * \u5C06\u5206\u9875\u53C2\u6570\u8F6C\u6362\u4E3Aref\uFF08pageNum\u548CisLastPage\uFF09\n */\nexport function handlePageParamToRef(data: ExtraInterpretDataSource): string[] {\n if (!data.extra) {\n return [];\n }\n const extra = data.extra;\n const variableArray: string[] = [];\n Object.keys(extra).forEach((key) => {\n const extraItem = extra[key];\n if (extraItem.pageHelperInfo) {\n // \u5BF9\u5E94\n const pageIsLastPage = `const ${lineToUppercase(key + PREFIX_IS_LAST_PAGE)} = ref(false)`;\n const pageNowPage = `const ${lineToUppercase(key + PREFIX_PAGE_NUM)} = ref(${\n extraItem.pageHelperInfo.page.value ?? 1\n })`;\n variableArray.push(pageNowPage, pageIsLastPage);\n }\n });\n return variableArray;\n}\n\n/**\n * \u5C06\u8BF7\u6C42\u53C2\u6570itemList\u91CC\u9762\u7684this.state.xxx \u90FD\u5305\u88F9\u8FDBreactive\u91CC\u9762\n * @param data\n */\nexport function handleParamToRef(data: ExtraInterpretDataSource) {\n const dataSourceItems: InterpretDataSourceConfig[] = (data && data.list) || [];\n const paramSet: Set<string> = new Set();\n const nameArray: string[] = [];\n dataSourceItems.forEach((item) => {\n // \u83B7\u53D6\u8BF7\u6C42\u53C2\u6570\n const params = item.options?.params as JSONObject;\n if (params) {\n Object.values(params).forEach((paramItem) => {\n if (isJsExpression(paramItem)) {\n // \u5C06\u53C2\u6570\u503C\u4FDD\u5B58\u8FDBset\uFF0C\u8FDB\u884C\u53BB\u91CD\n const nameSet = parseExpressionGetState(paramItem?.value as string);\n nameSet.forEach((name) => paramSet.add(name));\n }\n });\n }\n });\n // paramSet.forEach(item => {\n // if (item) {\n // // \u7EC4\u88C5ref\n // nameArray.push(`const ${item} = ref()`)\n // }\n // })\n const paramArray = [...paramSet];\n const paramStr = paramArray.filter((item) => item).map((item) => `${item}: ''`);\n const param = `const ${GLOBE_API_PARAM} = reactive({${paramStr.join(',')}})`;\n nameArray.push(param);\n return nameArray;\n}\n\n/**\n * \u5C06API\u8F6C\u6362\u4E3Aref\u53D8\u91CF\n * @param data\n */\nexport function handleApiToRef(data: ExtraInterpretDataSource): string[] {\n const dataSourceItems: InterpretDataSourceConfig[] = (data && data.list) || [];\n const variableArray: string[] = [];\n const extra = data.extra;\n dataSourceItems.forEach((item) => {\n let id = getApiId(item.id, extra);\n const data = `const ${lineToUppercase(id)} = ref()`;\n variableArray.push(data);\n });\n return variableArray;\n}\n\n/**\n * \u83B7\u53D6\u6570\u636E\u6E90\u7684id\n * @param id\n * @param extra\n */\nexport function getApiId(id: string, extra: Record<string, DataSourceCustomExtra>) {\n // \u5F00\u542F\u7F13\u5B58\u5219\u52A0\u5165\u7F13\u5B58\u524D\u7F00\n return extra && extra[id]?.isOpenCache ? PREFIX_API_CACHE + id : id;\n}\n\n/**\n * \u83B7\u53D6\u8BF7\u6C42\u53C2\u6570\u540D\u5B57\n * @param id\n */\nexport function getApiParamName(id: string) {\n return lineToUppercase(id) + PREFIX_API_PARAM_NAME;\n}\n\n/**\n * \u83B7\u53D6\u8BF7\u6C42\u540E\u7F6E\u5904\u7406\u65B9\u6CD5\u540D\n * @param id\n */\nexport function getApiHandleFunctionName(id: string) {\n return lineToUppercase('requestAfter' + id);\n}\n/**\n * \u83B7\u53D6script \u91CC\u5F15\u5165\u7684api\u540D\u79F0\n */\nexport function getApiName(apiId: string) {\n return apiId + SUFFIX_API_SCRIPT;\n}\n\n/**\n * \u83B7\u53D6api\u8BF7\u6C42\u65B9\u6CD5\u540D\n * @param id\n */\nexport function getApiRequestMethodName(id: string) {\n return lineToUppercase(id) + 'Method';\n}\n", "import {\n InterpretDataSourceConfig\n} from '@alilc/lowcode-types';\n\nimport {\n TEMPLATE_DEFINE_CHUNK_NAME,\n DEFAULT_LINK_AFTER\n} from '../../../const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct\n} from '../../../types';\n\nimport { isValidContainerType } from '../../../utils/schema';\nimport {getApiName} from \"../../../utils/requestHandle\";\n\nexport interface PluginConfig {\n fileType?: string;\n\n /**\n * \u6570\u636E\u6E90\u914D\u7F6E\n */\n datasourceConfig?: {\n\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\n engineVersion?: string;\n\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\n enginePackage?: string;\n\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\n handlersVersion?: {\n [key: string]: string;\n };\n\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\n handlersPackages?: {\n [key: string]: string;\n };\n };\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const dataSourceConfig = isValidContainerType(pre.ir) ? pre.ir.dataSource : null;\n const dataSourceItems: InterpretDataSourceConfig[] =\n (dataSourceConfig && dataSourceConfig.list) || [];\n if (dataSourceItems.length > 0) {\n dataSourceItems.forEach((ds) => {\n const dsType = ds.type || 'fetch';\n // \u5904\u7406\u975E\u81EA\u5B9A\u4E49\u6570\u636E\u6E90\n if (dsType !== 'custom') {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport,\n content: `import ${getApiName(ds.id)} from '@/api/${ds.id}';`,\n linkAfter: [...DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport]],\n });\n }\n });\n }\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { flatMap, camelCase, get } from 'lodash';\nimport {DEFAULT_LINK_AFTER, TEMPLATE_DEFINE_CHUNK_NAME, VUE_MODULE_NAME} from '../../../const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n CodeGeneratorError,\n DependencyType,\n FileType,\n ICodeChunk,\n ICodeStruct,\n IDependency,\n IExternalDependency,\n IInternalDependency,\n IWithDependency,\n} from '../../../types';\n\nimport { isValidIdentifier } from '../../../utils/validate';\n\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\nconst DEP_MAIN_BLOCKLIST = ['lib', 'lib/index', 'es', 'es/index', 'main'];\nconst DEFAULT_EXPORT_NAME = '__default__';\n\n/**\n * \u5C06\u4E0D\u540C\u5305\u7684\u4F9D\u8D56\u5206\u7EC4\n * @param deps\n */\nfunction groupDepsByPack(deps: IDependency[]): Record<string, IDependency[]> {\n const depMap: Record<string, IDependency[]> = {};\n\n const addDep = (pkg: string, dep: IDependency) => {\n if (!depMap[pkg]) {\n depMap[pkg] = [];\n }\n depMap[pkg].push(dep);\n };\n\n deps.forEach((dep) => {\n if (dep.dependencyType === DependencyType.Internal) {\n addDep(`${(dep as IInternalDependency).moduleName}${dep.main ? `/${dep.main}` : ''}`, dep);\n } else {\n let depMain = '';\n // TODO: \u90E8\u5206\u7C7B\u578B\u7684 main \u6682\u65F6\u8BA4\u4E3A\u6CA1\u7528\n if (dep.main && DEP_MAIN_BLOCKLIST.indexOf(dep.main) < 0) {\n depMain = dep.main;\n }\n if (depMain.substring(0, 1) === '/') {\n depMain = depMain.substring(1);\n }\n addDep(`${(dep as IExternalDependency).package}${depMain ? `/${depMain}` : ''}`, dep);\n }\n });\n\n return depMap;\n}\n\ninterface IDependencyItem {\n exportName: string;\n aliasName?: string;\n isDefault?: boolean;\n subName?: string;\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\n source: IDependency;\n}\n\ninterface IExportItem {\n exportName: string;\n aliasNames: string[];\n isDefault?: boolean;\n needOriginExport: boolean;\n}\n\nfunction getDependencyIdentifier(info: IDependencyItem): string {\n return info.aliasName || info.exportName;\n}\n\n/**\n * \u83B7\u53D6\u4F9D\u8D56\u7684\u5BFC\u51FA\u540D\u79F0\n * @param dep\n */\nfunction getExportNameOfDep(dep: IDependency): string {\n if (dep.destructuring) {\n return (\n dep.exportName ||\n dep.componentName ||\n throwNewError('destructuring dependency must have exportName or componentName')\n );\n }\n\n if (!dep.subName) {\n return (\n dep.componentName ||\n dep.exportName ||\n throwNewError('dependency item must have componentName or exportName')\n );\n }\n\n return (\n dep.exportName ||\n `__$${camelCase(\n get(dep, 'moduleName') ||\n get(dep, 'package') ||\n throwNewError('dep.moduleName or dep.package is undefined'),\n )}_default`\n );\n}\n\nfunction throwNewError(msg: string): never {\n throw new Error(msg);\n}\n\nfunction buildPackageImport(\n pkg: string,\n deps: IDependency[],\n targetFileType: string,\n useAliasName: boolean,\n): ICodeChunk[] {\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\n if (!pkg || pkg === 'undefined' || pkg === 'null') {\n // TODO: \u8981\u4E0D\u8981\u52A0\u4E2A warning\uFF1F\n return [];\n }\n\n const chunks: ICodeChunk[] = [];\n\n const exportItems: Record<string, IExportItem> = {};\n const defaultExportNames: string[] = [];\n\n const depsInfo: IDependencyItem[] = deps.map((dep) => {\n const info: IDependencyItem = {\n exportName: getExportNameOfDep(dep),\n isDefault: !dep.destructuring,\n subName: dep.subName || undefined,\n nodeIdentifier: dep.componentName || undefined,\n source: dep,\n };\n\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\n if (info.isDefault) {\n if (defaultExportNames.indexOf(info.exportName) < 0) {\n defaultExportNames.push(info.exportName);\n }\n }\n\n if (!info.subName) {\n if (info.nodeIdentifier === info.exportName) {\n info.nodeIdentifier = undefined;\n }\n\n if (info.isDefault) {\n info.aliasName = info.nodeIdentifier || info.exportName;\n info.exportName = DEFAULT_EXPORT_NAME;\n }\n\n if (info.nodeIdentifier) {\n info.aliasName = info.nodeIdentifier;\n info.nodeIdentifier = undefined;\n }\n } else {\n if (info.isDefault) {\n info.aliasName = info.exportName;\n info.exportName = DEFAULT_EXPORT_NAME;\n }\n\n if (info.nodeIdentifier === `${info.exportName}.${info.subName}`) {\n info.nodeIdentifier = undefined;\n }\n }\n\n return info;\n });\n\n // \u5EFA\u7ACB export \u9879\u76EE\u7684\u5217\u8868\n depsInfo.forEach((info) => {\n if (!exportItems[info.exportName]) {\n exportItems[info.exportName] = {\n exportName: info.exportName,\n isDefault: info.isDefault,\n aliasNames: [],\n needOriginExport: false,\n };\n }\n\n if (!info.nodeIdentifier && !info.aliasName) {\n exportItems[info.exportName].needOriginExport = true;\n }\n });\n\n // \u5EFA\u7ACB\u522B\u540D\u5B57\u5178\n depsInfo.forEach((info) => {\n if (info.aliasName) {\n const { aliasNames } = exportItems[info.exportName];\n if (aliasNames.indexOf(info.aliasName) < 0) {\n aliasNames.push(info.aliasName);\n }\n }\n });\n\n // fix: \u7236\u7EC4\u4EF6ImportAliasDefine, \u4E0E\u5B50\u7EC4\u4EF6import\u7684\u7236\u7EC4\u4EF6\u51B2\u7A81\u60C5\u51B5\n depsInfo.forEach((info) => {\n if (info.nodeIdentifier) {\n const exportItem = exportItems[info.exportName];\n if (!exportItem.needOriginExport && exportItem.aliasNames.length > 0) {\n // eslint-disable-next-line no-param-reassign\n info.aliasName = exportItem.aliasNames[0];\n }\n }\n });\n\n // \u53D1\u73B0 nodeIdentifier \u4E0E exportName \u6216\u8005 aliasName \u51B2\u7A81\u7684\u573A\u666F\n const nodeIdentifiers = depsInfo.map((info) => info.nodeIdentifier).filter(Boolean);\n const conflictInfos = flatMap(Object.keys(exportItems), (exportName) => {\n const exportItem = exportItems[exportName];\n const usedNames = [\n ...exportItem.aliasNames,\n ...(exportItem.needOriginExport || exportItem.aliasNames.length <= 0 ? [exportName] : []),\n ];\n const conflictNames = usedNames.filter((n) => nodeIdentifiers.indexOf(n) >= 0);\n if (conflictNames.length > 0) {\n return [\n ...(conflictNames.indexOf(exportName) >= 0 ? [[exportName, true, exportItem]] : []),\n ...conflictNames.filter((n) => n !== exportName).map((n) => [n, false, exportItem]),\n ];\n }\n return [];\n });\n\n const conflictExports = conflictInfos.filter((c) => c[1]).map((c) => c[0] as string);\n const conflictAlias = conflictInfos.filter((c) => !c[1]).map((c) => c[0] as string);\n\n const solutions: Record<string, string> = {};\n\n depsInfo.forEach((info) => {\n if (info.aliasName && conflictAlias.indexOf(info.aliasName) >= 0) {\n // find solution\n let solution = solutions[info.aliasName];\n if (!solution) {\n solution = `${info.aliasName}Alias`;\n const conflictItem = (conflictInfos.find((c) => c[0] === info.aliasName) ||\n [])[2] as IExportItem;\n conflictItem.aliasNames = conflictItem.aliasNames.filter((a) => a !== info.aliasName);\n conflictItem.aliasNames.push(solution);\n solutions[info.aliasName] = solution;\n }\n // eslint-disable-next-line no-param-reassign\n info.aliasName = solution;\n }\n\n if (conflictExports.indexOf(info.exportName) >= 0) {\n // find solution\n let solution = solutions[info.exportName];\n if (!solution) {\n solution = `${info.exportName}Export`;\n const conflictItem = (conflictInfos.find((c) => c[0] === info.exportName) ||\n [])[2] as IExportItem;\n conflictItem.aliasNames.push(solution);\n conflictItem.needOriginExport = false;\n solutions[info.exportName] = solution;\n }\n // eslint-disable-next-line no-param-reassign\n info.aliasName = solution;\n }\n });\n\n // \u5224\u65AD\u662F\u5426\u6240\u6709\u4F9D\u8D56\u90FD\u6709\u5408\u6CD5\u7684 Identifier\n depsInfo.forEach((info) => {\n const name = info.aliasName || info.exportName;\n if (!isValidIdentifier(name)) {\n throw new CodeGeneratorError(`Invalid Identifier [${name}]`);\n }\n if (info.nodeIdentifier && !isValidIdentifier(info.nodeIdentifier)) {\n throw new CodeGeneratorError(`Invalid Identifier [${info.nodeIdentifier}]`);\n }\n });\n\n const aliasDefineStatements: Record<string, string> = {};\n if (useAliasName) {\n Object.keys(exportItems).forEach((exportName) => {\n const aliasList = exportItems[exportName]?.aliasNames || [];\n if (aliasList.length > 0) {\n const srcName = exportItems[exportName].needOriginExport ? exportName : aliasList[0];\n const aliasNameList = exportItems[exportName].needOriginExport\n ? aliasList\n : aliasList.slice(1);\n aliasNameList.forEach((a) => {\n if (!aliasDefineStatements[a]) {\n aliasDefineStatements[a] = `const ${a} = ${srcName};`;\n }\n });\n }\n });\n }\n\n function getDefaultExportName(info: IDependencyItem): string {\n if (info.isDefault) {\n return defaultExportNames[0];\n }\n return info.exportName;\n }\n\n depsInfo.forEach((info) => {\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\n if (info.nodeIdentifier) {\n // \u524D\u63D0\uFF0C\u5B58\u5728 nodeIdentifier \u4E00\u5B9A\u662F\u6709 subName \u7684\uFF0C\u4E0D\u7136\u524D\u9762\u4F1A\u4F18\u5316\u6389\n const ownerName = getDependencyIdentifier(info);\n\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\n content: useAliasName ? `const ${info.nodeIdentifier} = ${ownerName}.${info.subName};` : '',\n linkAfter: [...DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport]],\n ext: {\n originalName: `${getDefaultExportName(info)}.${info.subName}`,\n aliasName: info.nodeIdentifier,\n dependency: info.source,\n },\n });\n } else if (info.aliasName) {\n // default \u65B9\u5F0F\u7684\u5BFC\u5165\u4F1A\u751F\u6210\u5355\u72ECde import \u8BED\u53E5\uFF0C\u65E0\u9700\u751F\u6210\u8D4B\u503C\u8BED\u53E5\n if (info.isDefault && defaultExportNames.find((n) => n === info.aliasName)) {\n delete aliasDefineStatements[info.aliasName];\n return;\n }\n\n let contentStatement = '';\n if (aliasDefineStatements[info.aliasName]) {\n contentStatement = aliasDefineStatements[info.aliasName];\n delete aliasDefineStatements[info.aliasName];\n }\n\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\n content: contentStatement,\n linkAfter: [...DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport]],\n ext: {\n originalName: getDefaultExportName(info),\n aliasName: info.aliasName,\n dependency: info.source,\n },\n });\n }\n });\n\n // \u53EF\u80FD\u4F1A\u5269\u4F59\u4E00\u4E9B\u5B58\u5728\u4E8C\u6B21\u8F6C\u6362\u7684\u5B9A\u4E49\n Object.keys(aliasDefineStatements).forEach((a) => {\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\n content: aliasDefineStatements[a],\n linkAfter: [...DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport]],\n });\n });\n\n const exportItemList = Object.keys(exportItems).map((k) => exportItems[k]);\n const defaultExport = exportItemList.filter((item) => item.isDefault);\n const otherExports = exportItemList.filter((item) => !item.isDefault);\n\n const statementL = ['import'];\n if (defaultExport.length > 0) {\n if (useAliasName) {\n statementL.push(defaultExportNames[0]);\n } else {\n statementL.push(defaultExport[0].aliasNames[0]);\n }\n if (otherExports.length > 0) {\n statementL.push(', ');\n }\n }\n if (otherExports.length > 0) {\n const items = otherExports.map((item) => {\n return !useAliasName || item.needOriginExport || item.aliasNames.length <= 0\n ? item.exportName\n : `${item.exportName} as ${item.aliasNames[0]}`;\n });\n statementL.push(`{ ${items.join(', ')} }`);\n }\n statementL.push('from');\n\n const getInternalDependencyModuleId = () => `@/${(deps[0] as IInternalDependency).type}/${pkg}`;\n\n if (deps[0].dependencyType === DependencyType.Internal) {\n // TODO: Internal Deps path use project slot setting\n statementL.push(`'${getInternalDependencyModuleId()}';`);\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport,\n content: statementL.join(' '),\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport],\n });\n } else {\n statementL.push(`'${pkg}';`);\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\n content: statementL.join(' '),\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart],\n });\n }\n\n // \u5904\u7406\u4E0B\u4E00\u4E9B\u989D\u5916\u7684 default \u65B9\u5F0F\u7684\u5BFC\u5165\n if (defaultExportNames.length > 1) {\n if (deps[0].dependencyType === DependencyType.Internal) {\n defaultExportNames.slice(1).forEach((exportName) => {\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport,\n content: `import ${exportName} from '${getInternalDependencyModuleId()}';`,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport],\n });\n });\n } else {\n defaultExportNames.slice(1).forEach((exportName) => {\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\n content: `import ${exportName} from '${pkg}';`,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart],\n });\n\n chunks.push({\n type: ChunkType.STRING,\n fileType: targetFileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\n content: '',\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart],\n ext: {\n aliasName: exportName,\n originalName: exportName,\n dependency: {\n package: pkg,\n componentName: exportName,\n },\n },\n });\n });\n }\n }\n\n return chunks;\n}\n\nexport interface PluginConfig {\n fileType?: string; // \u5BFC\u51FA\u7684\u6587\u4EF6\u7C7B\u578B\n useAliasName?: boolean; // \u662F\u5426\u4F7F\u7528 componentName \u91CD\u547D\u540D\u7EC4\u4EF6 identifier\n filter?: (deps: IDependency[]) => IDependency[]; // \u652F\u6301\u8FC7\u6EE4\u80FD\u529B\n}\n\n/**\n * \u5C06\u4F9D\u8D56\u5730\u5740\u8F6C\u6362\u4E3Avue\u7EC4\u4EF6\u5730\u5740\n * @param deps\n */\nfunction depConvertToVue(deps: IDependency[]) {\n return deps.map((dep) => {\n // \u5FFD\u7565\u6700\u5916\u5C42\u7684page\n if (!dep.devMode || dep.devMode !== 'lowCode') {\n dep.package = VUE_MODULE_NAME\n dep.main = ''\n }\n return dep\n })\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?: PluginConfig) => {\n const cfg = {\n fileType: FileType.JS,\n useAliasName: true,\n ...(config || {}),\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IWithDependency;\n\n if (ir && ir.deps && ir.deps.length > 0) {\n let deps = cfg.filter ? cfg.filter(ir.deps) : ir.deps;\n // \u8F6C\u6362\u4E3Avue\u4F9D\u8D56\n deps = depConvertToVue(deps);\n const packs = groupDepsByPack(deps);\n\n Object.keys(packs).forEach((pkg) => {\n const chunks = buildPackageImport(pkg, packs[pkg], cfg.fileType, cfg.useAliasName);\n next.chunks.push(...chunks);\n });\n }\n\n return next;\n };\n\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { TEMPLATE_DEFINE_CHUNK_NAME, VUE_DEFAULT_LINK_AFTER } from '../../../const';\n\nimport { generateCompositeType } from '../../../utils/compositeType';\nimport { Scope } from '../../../utils/Scope';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\nimport { isValidContainerType } from '../../../utils/schema';\nimport {\n handleApiToRef,\n handlePageParamToRef,\n handleParamToRef\n} from \"../../../utils/requestHandle\";\n\nexport interface PluginConfig {\n fileType?: string;\n implementType: 'inConstructor' | 'insMember' | 'hooks';\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig & { fileType: string } = {\n fileType: FileType.VUE,\n implementType: 'inConstructor',\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n const scope = Scope.createRootScope();\n\n const state = ir.state || {};\n // react\u7684state\u8F6Cvue\u7684ref\n const fields = Object.keys(state).map<string>((stateName) => {\n const value = generateCompositeType(state[stateName], scope);\n return `const ${stateName} = ref(${value})`;\n });\n // \u5C06api\u7684\u7ED3\u679C\u8F6C\u4E3Aref\u53D8\u91CF\n const dataSourceConfig = isValidContainerType(pre.ir) ? pre.ir.dataSource : null;\n const apiRefArray = handleApiToRef(dataSourceConfig)\n // \u6DFB\u52A0\u5206\u9875\u7EC4\u4EF6\u7684\u989D\u5916\u5206\u9875\u53C2\u6570\uFF08\u5C06pageNum\u548CisLastPage\u8F6C\u4E3Avue\u7684ref\uFF09\n const pageParams = handlePageParamToRef(dataSourceConfig)\n // \u5C06api\u7684\u8BF7\u6C42\u53C2\u6570itemList\u91CC\u7684this.state.xxx\u8F6C\u5316\u4E3Aref\u53D8\u91CF\n const data = handleParamToRef(dataSourceConfig)\n // itemList\u8F6Cref\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ConstVar,\n content: `${data.join('\\n')}`,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ConstVar]],\n });\n // \u7528ref\u53D8\u91CF\u4FDD\u5B58api\u8BF7\u6C42\u7ED3\u679C\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ConstVar,\n content: `${apiRefArray.join('\\n')}`,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ConstVar]],\n });\n // state\u8F6C\u6362\u4E3Aref\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ConstVar,\n content: `${fields.join('\\n')}`,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ConstVar]],\n });\n // \u5206\u9875\u53C2\u6570\u8F6C\u6362\u4E3Aref\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ConstVar,\n content: `${pageParams.join('\\n')}`,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ConstVar]],\n });\n // \u8DEF\u7531\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ConstVar,\n content: `const router = useRouter()`,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ConstVar]],\n });\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { TEMPLATE_DEFINE_CHUNK_NAME, VUE_DEFAULT_LINK_AFTER } from '../../../const';\n\nimport { generateFunction } from '../../../utils/jsExpression';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType, ExtraInterpretDataSource,\n FileType,\n ICodeChunk,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\nimport { isJSFunction, isJSExpression, InterpretDataSourceConfig } from '@alilc/lowcode-types';\nimport { isJSExpressionFn } from '../../../utils/common';\nimport { isValidContainerType } from '../../../utils/schema';\nimport {\n getApiRequestMethodName,\n isJsExpression,\n requestAfterDataHandler, SUFFIX_DATA_SOURCE_MAP\n} from '../../../utils/requestHandle';\n\nexport interface PluginConfig {\n fileType?: string;\n exportNameMapping?: Record<string, string>;\n normalizeNameMapping?: Record<string, string>;\n exclude?: string[];\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg = {\n fileType: FileType.VUE,\n exportNameMapping: {},\n normalizeNameMapping: {},\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n\n if (ir.lifeCycles) {\n const { lifeCycles } = ir;\n const chunks = Object.keys(lifeCycles)\n .map<ICodeChunk | null>((lifeCycleName) => {\n // \u8FC7\u6EE4\u6389\u975E\u6CD5\u6570\u636E\uFF08\u6709\u4E9B\u573A\u666F\u4E0B\u4F1A\u8BEF\u4F20\u5165\u7A7A\u5B57\u7B26\u4E32\u6216 null)\n if (\n !isJSFunction(lifeCycles[lifeCycleName]) &&\n !isJSExpressionFn(lifeCycles[lifeCycleName]) &&\n !isJSExpression(lifeCycles[lifeCycleName])\n ) {\n return null;\n }\n\n let normalizeName;\n // constructor\u4F1A\u53D6\u5230\u5BF9\u8C61\u7684\u6784\u9020\u51FD\u6570\n if (lifeCycleName === 'constructor') {\n normalizeName = lifeCycleName;\n } else {\n normalizeName = cfg.normalizeNameMapping[lifeCycleName] || lifeCycleName;\n }\n\n if (cfg?.exclude?.includes(normalizeName)) {\n return null;\n }\n\n const exportName = cfg.exportNameMapping[lifeCycleName] || lifeCycleName;\n if (normalizeName === 'constructor') {\n // todo \u6784\u9020\u51FD\u6570\u6682\u65F6\u4E0D\u5904\u7406\n // return {\n // type: ChunkType.STRING,\n // fileType: cfg.fileType,\n // name: CLASS_DEFINE_CHUNK_NAME.ConstructorContent,\n // content: generateFunction(lifeCycles[lifeCycleName], { isBlock: true }),\n // linkAfter: [...VUE_DEFAULT_LINK_AFTER[CLASS_DEFINE_CHUNK_NAME.ConstructorStart]],\n // };\n }\n // react\u7684componentDidMount\u5BF9\u5E94vue\u7684mounted\n if (normalizeName === 'componentDidMount') {\n // TODO(grammar 2024.10.29) \u6D89\u53CA\u5230react\u4E13\u6709\u8BED\u6CD5\u540E\u7EED\u9047\u5230\u518D\u5904\u7406\uFF08\u5DF2\u5904\u7406this.xxx\uFF0Cthis.setState()\uFF09\n return {\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent,\n content: generateFunction(lifeCycles[lifeCycleName], {\n isBlock: true,\n isToVue: true,\n }),\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent]],\n };\n }\n\n if (normalizeName === 'componentWillUnmount') {\n // TODO(grammar 2024.10.29) \u6D89\u53CA\u5230react\u4E13\u6709\u8BED\u6CD5\u540E\u7EED\u9047\u5230\u518D\u5904\u7406\uFF08\u5DF2\u5904\u7406this.xxx\uFF0Cthis.setState()\uFF09\n return {\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.UnMountedContent,\n content: generateFunction(lifeCycles[lifeCycleName], {\n isBlock: true,\n isToVue: true,\n }),\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.UnMountedContent]],\n };\n }\n\n if (normalizeName === 'render') {\n // todo \u6682\u65F6\u4E0D\u5904\u7406 render\n // return {\n // type: ChunkType.STRING,\n // fileType: cfg.fileType,\n // name: TEMPLATE_DEFINE_CHUNK_NAME.ClassRenderPre,\n // content: generateFunction(lifeCycles[lifeCycleName], { isBlock: true }),\n // linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ClassRenderStart],\n // };\n }\n\n return {\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.Method,\n content: generateFunction(lifeCycles[lifeCycleName], {\n name: exportName,\n isMember: true,\n isToVue: true,\n }),\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.Method]],\n };\n })\n .filter((i) => !!i);\n\n next.chunks.push(...chunks.filter((x): x is ICodeChunk => x !== null));\n }\n\n // \u8C03\u7528\u6570\u636E\u6E90\u65B9\u6CD5\n const dataSourceConfig: ExtraInterpretDataSource = isValidContainerType(pre.ir) ? pre.ir.dataSource : null;\n const dataSourceItems: InterpretDataSourceConfig[] =\n (dataSourceConfig && dataSourceConfig.list) || [];\n dataSourceItems.forEach(item => {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent,\n content: ` ${SUFFIX_DATA_SOURCE_MAP}.${getApiRequestMethodName(item.id)}();`,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent]],\n })\n })\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "/* eslint-disable @typescript-eslint/indent */\n\nimport { InterpretDataSourceConfig } from '@alilc/lowcode-types';\n\nimport { COMMON_CHUNK_NAME } from '../../../const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n} from '../../../types';\n\nimport { isValidContainerType } from '../../../utils/schema';\nimport { lineToUppercase, toFirstUpperCase } from '../../../utils/changeCase';\nimport {\n handleUrl,\n requestHeaderHandler,\n requestParamsHandler,\n} from '../../../utils/requestHandle';\nimport { JSONObject } from '@alilc/lowcode-datasource-types/src/value-type';\n\nexport interface PluginConfig {\n fileType?: string;\n\n /**\n * \u6570\u636E\u6E90\u914D\u7F6E\n */\n datasourceConfig?: {\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\n engineVersion?: string;\n\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\n enginePackage?: string;\n\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\n handlersVersion?: {\n [key: string]: string;\n };\n\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\n handlersPackages?: {\n [key: string]: string;\n };\n };\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = () => {\n // const cfg = {\n // ...config,\n // fileType: config?.fileType || FileType.JSX,\n // };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const dataSourceConfig = isValidContainerType(pre.ir.containers[0])\n ? pre.ir.containers[0].dataSource\n : null;\n const dataSourceItems: InterpretDataSourceConfig[] =\n (dataSourceConfig && dataSourceConfig.list) || [];\n const extra = (dataSourceConfig && dataSourceConfig.extra) || {}\n if (dataSourceItems.length > 0) {\n dataSourceItems.forEach((ds) => {\n const dsType = ds.type || 'fetch';\n // \u8BF7\u6C42\u7C7B\u578B\n const method = toFirstUpperCase((ds.options?.method as string) ?? 'Post');\n // \u5904\u7406\u8BF7\u6C42url\n const url = handleUrl(ds, extra);\n // \u5904\u7406\u975E\u81EA\u5B9A\u4E49\u6570\u636E\u6E90\u548C\u8868\u5355\u7EC4\u4EF6\n // todo \u8868\u8FBE\u5F0F\u4ECEif\u62C6\u5F00\uFF0C\u4E0D\u7136\u4E0D\u597D\u5224\u7A7A\n const formData = dataSourceConfig.extra ? dataSourceConfig.extra[ds.id]?.columnToAttribute?.formData : ''\n if (\n dsType !== 'custom' &&\n !formData\n ) {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n subModule: ds.id,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: `\n import { ${method}RequestModel, QueryType } from '@dc/vue-h5-base/src/http/request-model'\n import { getDefaultConfig } from '@dc/vue-h5-base/src/http/config/custom-config'\n import { PageModel } from '@dc/vue-h5-base/src/http/result-model'\n import utils from '@/utils/utils'\n `,\n linkAfter: [],\n });\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n subModule: ds.id,\n name: COMMON_CHUNK_NAME.FileMainContent,\n content: `\nexport default {\n /**\n * \u5206\u9875\u67E5\u8BE2\n * @param data\n */\n ${ds.id}: (data?: QueryType) => {\n ${requestHeaderHandler(ds.options?.headers as JSONObject)}\n ${requestParamsHandler(ds.options?.params as JSONObject)}\n return new ${method}RequestModel<PageModel<any>>(${url}, data).request()\n },\n}\n `,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n } else {\n console.log(dataSourceConfig.extra[ds.id]['columnToAttribute']['formData']);\n const formId = url?.toString().split('/').pop();\n const formName = lineToUppercase(dataSourceConfig.extra[ds.id]['code']);\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n subModule: ds.id,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n content: `\n import { GetRequestModel, PostRequestModel, PutRequestModel, QueryType } from '@dc/vue-h5-base/src/http/request-model'\n import { getDefaultConfig } from '@dc/vue-h5-base/src/http/config/custom-config'\n import { PageModel } from '@dc/vue-h5-base/src/http/result-model'\n `,\n linkAfter: [],\n });\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n subModule: ds.id,\n name: COMMON_CHUNK_NAME.FileMainContent,\n content: `\nexport default {\n /**\n * \u83B7\u53D6\u8868\u5355\u8BE6\u60C5\n * @param data\n */\n ${ds.id}: (data?: QueryType) => {\n ${requestHeaderHandler(ds.options?.headers as JSONObject)}\n ${requestParamsHandler(ds.options?.params as JSONObject)}\n return new ${method}RequestModel<PageModel<any>>(${url}, data).request()\n },\n /**\n\t * \u5206\u9875\u67E5\u8BE2\u4FE1\u606F\n\t * @param query\n\t */\n page: (query?: QueryType) => new PostRequestModel<PageModel<any>>('/${formName}/page', query).request(),\n /**\n * \u65B0\u589E\n * @param data\n */\n add: (data: Partial<Record<string, string | number | Array<{}>>>) => {\n return new PostRequestModel<any>('/${formName}/', data as unknown as QueryType).request()\n },\n /**\n * \u66F4\u65B0\n * @param data\n */\n update: (data: Partial<Record<string, string | number | Array<{}>>>) => {\n return new PutRequestModel<any>('/${formName}/', data as unknown as QueryType).request()\n },\n /**\n\t * \u6839\u636Eid\u83B7\u53D6\u8BE6\u7EC6\u4FE1\u606F\n\t * @param id\n\t */\n getById: (id: string) => {\n return new GetRequestModel<any>(\\`/${formName}/\\${id}\\`, {}).request()\n },\n}\n `,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n }\n });\n }\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import {\n GLOBE_API_PARAM,\n SUFFIX_API_METHOD,\n SUFFIX_API_SCRIPT,\n SUFFIX_DATA_SOURCE_MAP\n} from \"../../../../utils/requestHandle\";\n// \u8C03\u7528api\nconst useApiMethod = `${SUFFIX_DATA_SOURCE_MAP}[dataSourceId + '${SUFFIX_API_METHOD}']`\nexport default {\n updateVariable: `\n /**\n * \u6570\u636E\u6E90\u7684\u70B9\u51FB\u4EA4\u4E92\u4E8B\u4EF6\uFF08\u8BF7\u4E0D\u8981\u968F\u610F\u6539\u52A8\u8BE5\u65B9\u6CD5\uFF09\n * @param clickValue \u4E8B\u4EF6\u4F20\u9012\u7684\u539F\u53C2\u6570\n * @param extra \u989D\u5916\u7684\u53C2\u6570\uFF08\u6570\u636E\u6E90\u76F8\u5173\u7684\u53C2\u6570\uFF09\n */\n function updateVariable(clickValue, extra) {\n const { field, dataSourceId } = extra || {}\n // \u5982\u679C\u6CA1\u6709field\uFF0C\u5219\u4E0D\u8FDB\u884C\u64CD\u4F5C\n if (!field) {\n console.log('\u6CA1\u6709field\uFF0C\u4E0D\u8FDB\u884C\u64CD\u4F5C')\n return\n }\n ${GLOBE_API_PARAM}[field] = clickValue\n ${useApiMethod}().then((data) => {\n this[dataSourceId + 'IsLastPage'] = data?.data?.isLastPage;\n this[dataSourceId + 'NowPage'] = data?.data?.pageNum\n })\n}`,\n goPage: `\n /**\n * \u9875\u9762\u8DF3\u8F6C\u4E8B\u4EF6\uFF08\u8BF7\u4E0D\u8981\u968F\u610F\u6539\u52A8\u8BE5\u65B9\u6CD5\uFF09\n * @param params \u9ED8\u8BA4\u4F20\u5165\u7684\u53C2\u6570\n * @param extra \u989D\u5916\u7684\u53C2\u6570\n */\n function goPage(params, extra) {\n const pageId = extra?.['pathId'] || params || ''\n if (!pageId) {\n // \u5982\u679C\u6CA1\u6709\u8DEF\u5F84\u7684\u60C5\u51B5\u4E0B\uFF0C\u4E0D\u8FDB\u884C\u8DF3\u8F6C\n return\n }\n // \u8FDB\u884C\u9875\u9762\u8DF3\u8F6C\n router.push(pageId);\n}`,\n pageHelperInfo: `\n /**\n * \u5206\u9875\u52A9\u624B\u4FE1\u606F\n * @param params\n * @param extra\n */\n function pageHelperInfo(params, extra) {\n const {\n pageField = 'pageNum',\n pageValue = 1,\n rowsField = 'pageSize',\n rowsValue = 10,\n dataSourceId,\n } = { ...(params || {}), ...(extra || {}) }\n return new Promise((resolve) => {\n ${useApiMethod}({ [pageField]: params?.page || pageValue, [rowsField]: params?.rows || rowsValue })\n .then((data) => {\n this[dataSourceId + 'IsLastPage'] = data?.data?.isLastPage;\n this[dataSourceId + 'NowPage'] = data?.data?.pageNum;\n resolve({\n page: data.data[pageField],\n rows: data.data[rowsField],\n total: data.data.total,\n isLastPage: data.data.isLastPage,\n });\n })\n })\n}`\n}", "import { VUE_DEFAULT_LINK_AFTER, TEMPLATE_DEFINE_CHUNK_NAME } from '../../../const';\n\nimport { generateFunction } from '../../../utils/jsExpression';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType, ExtraInterpretDataSource,\n FileType,\n ICodeChunk,\n ICodeStruct,\n IContainerInfo,\n} from '../../../types';\nimport {isValidContainerType} from \"../../../utils/schema\";\nimport {InterpretDataSourceConfig} from \"@alilc/lowcode-types\";\nimport {\n getApiHandleFunctionName,\n getApiParamName, getApiRequestMethodName,\n isJsExpression,\n requestAfterDataHandler,\n} from \"../../../utils/requestHandle\";\nimport convertFunction from './convert/convert-function'\nimport convertVariable from './convert/convert-variable'\n\nexport interface PluginConfig {\n fileType: string;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig = {\n fileType: FileType.VUE,\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IContainerInfo;\n\n if (!ir.methods) {\n return next;\n }\n\n // \u5C06\u8FD9\u4E9B methods \u90FD\u5B9A\u4E49\u5230 class \u4E0A\n const { methods } = ir;\n const chunks = Object.keys(methods).map<ICodeChunk>((methodName) => {\n // \u7279\u6B8A\u5904\u7406\u7684\u51FD\u6570\n const convertMethod = convertFunction[methodName as keyof typeof convertFunction]\n if (convertMethod) {\n return {\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.Method,\n content: `${convertMethod}`,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.Method]],\n }\n }\n // \u6B63\u5E38\u5904\u7406\u7684\u51FD\u6570\uFF0CgenerateFunction\u5904\u7406\n return {\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.Method,\n content: `function ${generateFunction(methods[methodName], { name: methodName, isMember: true, isToVue: true })}`,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.Method]],\n }});\n // \u6570\u636E\u6E90\u76F8\u5173\u65B9\u6CD5\n const dataSourceConfig: ExtraInterpretDataSource = isValidContainerType(pre.ir) ? pre.ir.dataSource : null;\n const dataSourceItems: InterpretDataSourceConfig[] =\n (dataSourceConfig && dataSourceConfig.list) || [];\n dataSourceItems.forEach((item) => {\n if (item.dataHandler && item.dataHandler.type == 'JSFunction') {\n // \u5904\u7406\u8BF7\u6C42\u5904\u7406\u540E\u7F6E\u51FD\u6570\n const functionName = getApiHandleFunctionName(item.id)\n const handleFunction = generateFunction(item.dataHandler, { name: functionName, isMember: true, isToVue: true })\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.Method,\n content: `function ${handleFunction}`,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.Method]],\n })\n }\n });\n next.chunks.push(...chunks);\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import {ItemList} from \"../../../../types/datasource-extra-base\";\nimport {lineToUppercase} from \"../../../../utils/changeCase\";\nimport {GLOBE_API_PARAM} from \"../../../../utils/requestHandle\";\n\nexport default {\n /**\n * \u5904\u7406\u8BF7\u6C42\u53C2\u6570\u91CC\u7684itemList\n * @param value\n */\n itemList: (value: string) => {\n if (!value) return []\n // \u66FF\u6362\u91CC\u9762\u7684\u5355\u5F15\u53F7\u4E3A\u53CC\u5F15\u53F7\n // value = value.replace(/'/g, '\"')\n const valueJSON: ItemList[] = parseCustomObjectArray(value)\n const strArray: { key: string; value: string }[] = []\n const ascArray: string[] = []\n const descArray: string[] = []\n valueJSON.forEach(item => {\n if (item.columnValue) {\n const valueName = `${GLOBE_API_PARAM}.${item.columnValue.split('.')[0]}`\n strArray.push({ key: lineToUppercase(item.columnName), value: valueName })\n } else if (item.orderBy) {\n if (item.orderBy == 'desc') {\n descArray.push(lineToUppercase(item.columnName))\n }else if (item.orderBy == 'asc') {\n ascArray.push(lineToUppercase(item.columnName))\n }\n }\n })\n // \u964D\u5E8F\u6392\u5E8F\u5B57\u6BB5\n descArray.length && strArray.push({\n key: 'orderByDesc',\n value: `'${descArray[0]}'`\n })\n // \u5347\u5E8F\u6392\u5E8F\u5B57\u6BB5\n ascArray.length && strArray.push({\n key: 'orderByAsc',\n value: `'${ascArray[0]}'`\n })\n return strArray\n }\n}\nfunction parseCustomObjectArray(str: string) {\n if (str == '[]') {\n return []\n }\n const result: Record<string, any>[] = [];\n\n // \u5339\u914D\u6BCF\u4E2A\u5BF9\u8C61\n const objectRegex = /{([^}]+)}/g;\n let match;\n while ((match = objectRegex.exec(str)) !== null) {\n const objString = match[1].trim(); // \u83B7\u53D6\u5BF9\u8C61\u5185\u5BB9\n const obj: Record<string, any> = {};\n\n // \u5339\u914D\u952E\u503C\u5BF9\n const keyValueRegex = /(\\w+)\\s*:\\s*([^,]+)(,|$)/g;\n let keyValueMatch;\n while ((keyValueMatch = keyValueRegex.exec(objString)) !== null) {\n const key = keyValueMatch[1].trim();\n let value = keyValueMatch[2].trim();\n\n // \u5982\u679C\u662F\u5B57\u7B26\u4E32\u503C\uFF0C\u53BB\u6389\u9996\u5C3E\u7684\u5355\u5F15\u53F7\n if (value.startsWith(\"'\") && value.endsWith(\"'\")) {\n value = value.slice(1, -1);\n }\n\n // \u5982\u679C\u662F\u7C7B\u4F3C productType.value \u7684\u53D8\u91CF\uFF0C\u5F53\u4F5C\u5B57\u7B26\u4E32\u5904\u7406\n if (/^\\w+\\.\\w+$/.test(value)) {\n value = value; // \u4FDD\u6301\u539F\u6837\n }\n\n obj[key] = value; // \u6DFB\u52A0\u5230\u5BF9\u8C61\u4E2D\n }\n\n result.push(obj);\n }\n\n return result;\n}", "import { TEMPLATE_DEFINE_CHUNK_NAME, VUE_DEFAULT_LINK_AFTER } from '../../../const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType, ExtraInterpretDataSource,\n FileType,\n ICodeStruct,\n} from '../../../types';\nimport { isValidContainerType } from '../../../utils/schema';\nimport { InterpretDataSourceConfig } from '@alilc/lowcode-types';\nimport {\n getApiParamName, getApiRequestMethodName,\n handleParamToRef, isJsExpression,\n requestAfterDataHandler, SUFFIX_DATA_SOURCE_MAP\n} from \"../../../utils/requestHandle\";\nimport {generateFunction} from \"../../../utils/jsExpression\";\nimport convertVariable from \"./convert/convert-variable\";\n\nexport interface PluginConfig {\n fileType?: string;\n implementType: 'inConstructor' | 'insMember' | 'hooks';\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg: PluginConfig & { fileType: string } = {\n fileType: FileType.VUE,\n implementType: 'inConstructor',\n ...config,\n };\n\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n // \u5C06api\u7684\u7ED3\u679C\u8F6C\u4E3Aref\u53D8\u91CF\n const dataSourceConfig = isValidContainerType(pre.ir) ? pre.ir.dataSource : null;\n const dataSourceItems: InterpretDataSourceConfig[] =\n (dataSourceConfig && dataSourceConfig.list) || [];\n // \u5C06\u6240\u6709api\u8BF7\u6C42\u65B9\u6CD5\u5305\u88F9\u5728dataSourceMap\u53D8\u91CF\u5185\n// \u5C06\u6570\u636E\u8BF7\u6C42\u5355\u72EC\u5C01\u88C5\u4E3A\u65B9\u6CD5\uFF0C\u65B9\u4FBF\u5206\u9875\u65F6\u91CD\u65B0\u51FA\u53D1\u65B9\u6CD5\n // \u8C03\u7528api\u7684\u5E76\u5C06\u7ED3\u679C\u8D4B\u503C\u7ED9ref\u53D8\u91CF\n dataSourceItems.forEach((item) => {\n let paramsStr = '';\n let paramsObject = `const ${item.id}Params = {};`;\n const paramName = getApiParamName(item.id);\n const strArray: { key: string; value: string }[] = [];\n // \u8BF7\u6C42\u7ED3\u679C\u5904\u7406\n const dataResults = requestAfterDataHandler(item, dataSourceConfig.extra)\n // \u5F53\u8BF7\u6C42\u53C2\u6570\u4E3Ajs\u8868\u8FBE\u5F0F\u65F6\u5904\u7406\n //\u5F53\u53C2\u6570\u4E0D\u4E3A\u7A7A\u7684\u65F6\u5019\n if (item.options && item.options.params) {\n const params = item.options.params;\n const keys = Object.keys(params);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n if (isJsExpression(params[key])) {\n // \u5982\u679C\u662F\u8868\u8FBE\u5F0F\uFF0C\u5219\u8F6C\u4E3A\u5B57\u7B26\u4E32\n let handleValue = generateFunction(params[key], {\n isToVue: true,\n isDeleteLastSemicolon: true,\n })\n // \u5BF9itemList\u8FDB\u884C\u5355\u72EC\u5904\u7406,\u5C06itemList\u91CC\u9762\u7684\u53C2\u6570\u6539\u4E3A\n if (convertVariable[key as keyof typeof convertVariable]) {\n strArray.push(...convertVariable[key as keyof typeof convertVariable](handleValue))\n } else {\n strArray.push({\n key: key,\n value: handleValue,\n });\n }\n }\n }\n paramsStr = `${strArray.filter(item => item).map((item) => `${item.key}: ${item.value}`).join(',')}`;\n paramsObject = `const ${paramName} = { ${paramsStr ? paramsStr + ',' : ''}...params}`;\n } else if (item.options && !item.options.params) {\n //\u5F53\u53C2\u6570\u4E3A\u7A7A\u65F6\uFF0C\u8D4B\u503C\u4E00\u4E2A\u7A7A\u5BF9\u8C61\n paramsObject = `const ${paramName} = {...params}`;\n }\n // \u8BF7\u6C42\u53C2\u6570\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapContent,\n content: `\n ${getApiRequestMethodName(item.id)}: async (params?: any) => {\n ${paramsObject}\n ${dataResults.join('\\n')}\n return handleData\n},\n `,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapContent]],\n });\n\n });\n // datasourceMap\u5F00\u59CB\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapStart,\n content: `const ${SUFFIX_DATA_SOURCE_MAP} = {`,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapStart]],\n });\n // datasourceMap\u7ED3\u675F\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: cfg.fileType,\n name: TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapEnd,\n content: `}`,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.DataSourceMapEnd]],\n });\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "/**\n * @description: \u751F\u6210\u4E8C\u7EA7\u8DEF\u7531\n */\nimport { COMMON_CHUNK_NAME } from '../../../const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IRouterInfo,\n} from '../../../types';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir;\n ir.globalRouter?.routes?.filter(item => item.firstPage == 'false').forEach(route => {\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n name: COMMON_CHUNK_NAME.ExternalDepsImport,\n subModule: route.fileName,\n content: `export default [`,\n linkAfter: [],\n });\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n name: COMMON_CHUNK_NAME.FileMainContent,\n subModule: route.fileName,\n content: `{\n path: '${route.path}',\n name: '${route.title}',\n component: () => import(\"@/views/${route.componentName}/${\n route.isFormRouter ? 'Manage.vue' : 'Index.vue'\n }\"),\n }`,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n name: COMMON_CHUNK_NAME.FileExport,\n subModule: route.fileName,\n content: `]`,\n linkAfter: [COMMON_CHUNK_NAME.FileMainContent],\n });\n })\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\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=/api\n\nVITE_APP_API_FILE_REVIEW=http://tz.future.dct99.com:8090/\n#VITE_APP_COPYRIGHT=Copyright@2022 \u7248\u6743\u6240\u6709\uFF1Axxxx\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';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n [],\n {\n name: '.gitignore',\n ext: '',\n content: `\n# \u9879\u76EE\u7684\u73AF\u5883\u6587\u4EF6\n.DS_Store\nnode_modules\n/dist\n\n\n# \u672C\u5730\u73AF\u5883\u6587\u4EF6\n.env.local\n.env.*.local\n\n# \u65E5\u5FD7\u6587\u4EF6\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\n*-debug.log\n\n# \u7F16\u8F91\u76EE\u5F55\u548C\u6587\u4EF6\n.idea\n.vscode\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\nlocal\n\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\npackage-lock.json\nyarn.lock\npnpm-lock.yaml\n\n# \u6392\u9664\u672C\u5730\u6587\u4EF6\nlocal/\n\ndist.zip\n `\n }\n ];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n [],\n {\n name: '.npmrc',\n ext: '',\n content: `\n@dc-basic-component:registry=https://nexus.dct99.com/repository/npm-public/\n@dc:registry=https://nexus.dct99.com/repository/npm-public/\nshamefully-hoist=true\nstrict-peer-dependencies=false\n `\n }\n ];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n [],\n {\n name: '.prettierignore',\n ext: '',\n content: `\nnode_modules\n.vscode\n.idea\ndist\n/public\n.eslintrc.js\n*.yml\n*.yaml\n*.md\n*.min.js\n `\n }\n ];\n}\n\n", "import { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n [],\n {\n name: '.prettierrc',\n ext: 'yml',\n content: `\n# \u6BCF\u884C\u4EE3\u7801\u957F\u5EA6\uFF08\u9ED8\u8BA480\uFF09\nprintWidth: 160\n# \u6BCF\u4E2Atab\u76F8\u5F53\u4E8E\u591A\u5C11\u4E2A\u7A7A\u683C\uFF08\u9ED8\u8BA42\uFF09\ntabWidth: 4\n# \u662F\u5426\u4F7F\u7528tab\u8FDB\u884C\u7F29\u8FDB\uFF08\u9ED8\u8BA4false\uFF09\nuseTabs: true\n# \u4F7F\u7528\u5355\u5F15\u53F7\uFF08\u9ED8\u8BA4false\uFF09\nsingleQuote: true\n# \u58F0\u660E\u7ED3\u5C3E\u4F7F\u7528\u5206\u53F7(\u9ED8\u8BA4true)\nsemi: false\n# \u591A\u884C\u4F7F\u7528\u62D6\u5C3E\u9017\u53F7\uFF08\u9ED8\u8BA4none\uFF09\ntrailingComma: none\n# \u5BF9\u8C61\u5B57\u9762\u91CF\u7684\u5927\u62EC\u53F7\u95F4\u4F7F\u7528\u7A7A\u683C\uFF08\u9ED8\u8BA4true\uFF09\nbracketSpacing: true\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\narrowParens: 'avoid'\n# \u884C\u7ED3\u675F\u95EE\u9898\u5904\u7406, lf\nendOfLine: lf\n `\n }\n ];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n [],\n {\n name: 'index',\n ext: 'html',\n content: `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\"/>\n <link rel=\"icon\" type=\"image/png\" href=\"/logo.png\"/>\n <meta name=\"viewport\"\n content=\"width=device-width, initial-scale=1.0, user-scalable=1.0, minimum-scale=1.0, maximum-scale=1.0, viewport-fit=cover\"/>\n <title>\u7801\u94FA</title>\n <!--\u5FAE\u4FE1web view api-->\n <script type=\"text/javascript\" src=\"https://res.wx.qq.com/open/js/jweixin-1.3.2.js\"></script>\n</head>\n<body>\n<div id=\"app\">\n <div class=\"loading\" style=\"display: flex;justify-content: center;align-items: center;height: 100vh\">\n <div class=\"loading__icon\"></div>\n <div class=\"loading__text\">\u8BF7\u7A0D\u7B49\uFF0C\u9875\u9762\u52A0\u8F7D\u4E2D...</div>\n </div>\n</div>\n<script type=\"module\" src=\"/src/main.ts\"></script>\n</body>\n</html>\n `\n }\n ];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n [],\n {\n name: 'postcss.config',\n ext: 'cjs',\n content: '// postcss.config.js\\n' +\n 'module.exports = {\\n' +\n ' plugins: {\\n' +\n ' \\'postcss-px-to-viewport\\': {\\n' +\n ' // \u8BBE\u8BA1\u7A3F\u5BBD\u5EA6\\n' +\n ' viewportWidth: 375,\\n' +\n ' // \u6392\u9664 node_modules\\n' +\n ' // exclude: /(\\\\/|\\\\\\\\)(node_modules)(\\\\/|\\\\\\\\)/,\\n' +\n ' // \u4E0D\u8F6C\u6362\u7684\u7C7B\u540D\\n' +\n ' selectorBlackList: [\\'.ignore\\', \\'.hairlines\\']\\n' +\n ' }\\n' +\n ' }\\n' +\n '}'\n }\n ];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n [],\n {\n name: 'tsconfig',\n ext: 'json',\n content: `\n{\n \"compilerOptions\": {\n \"target\": \"ESNext\",\n \"useDefineForClassFields\": true,\n \"module\": \"ESNext\",\n \"moduleResolution\": \"Node\",\n \"strict\": true,\n \"jsx\": \"preserve\",\n \"sourceMap\": true,\n \"resolveJsonModule\": true,\n \"isolatedModules\": true,\n \"esModuleInterop\": true,\n \"lib\": [\"ESNext\", \"DOM\"],\n \"skipLibCheck\": true,\n \"baseUrl\": \".\",\n \"paths\": {\n \"@/*\": [\"src/*\"]\n }\n },\n \"include\": [\"src/**/*.ts\", \"src/**/*.d.ts\", \"src/**/*.tsx\", \"src/**/*.vue\"],\n \"references\": [{ \"path\": \"./tsconfig.node.json\" }]\n}\n `\n }\n ];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n [],\n {\n name: 'tsconfig.node',\n ext: 'json',\n content: `\n{\n \"compilerOptions\": {\n \"composite\": true,\n \"module\": \"ESNext\",\n \"moduleResolution\": \"Node\",\n \"allowSyntheticDefaultImports\": true\n },\n \"include\": [\"vite.config.ts\"]\n}\n `\n }\n ];\n}\n", "import { ResultFile } from '@alilc/lowcode-types';\n\nexport default function getFile(): [string[], ResultFile] {\n return [\n [],\n {\n name: 'vite.config',\n ext: 'ts',\n content: `\nimport { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport viteCompression from 'vite-plugin-compression'\nimport * as path from 'path'\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n base: '/expressH5/',\n plugins: [vue(), viteCompression()],\n resolve: {\n alias: {\n '@': path.resolve(__dirname, './src'),\n '~@': path.resolve(__dirname, './src')\n }\n },\n server: {\n // host: '127.0.0.1',\n host: '0.0.0.0',\n port: 3212,\n cors: true,\n proxy: {\n '/source/api': {\n target: 'http://localhost:9933/',\n changeOrigin: true,\n ws: true,\n rewrite: path => path.replace(/\\\\/api/g, '/api')\n }\n }\n },\n css: {\n preprocessorOptions: {\n less: {\n javascriptEnabled: true\n }\n }\n },\n // \u914D\u7F6E\u6253\u5305\u5757\u5927\u5C0F\n build: {\n chunkSizeWarningLimit: 1500\n },\n optimizeDeps: {\n exclude: ['@dc/vue-h5-base'],\n include: ['axios']\n }\n})\n `\n }\n ];\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 'global',\n 'scss',\n `\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\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 height: 100vh;\n width: 100vw;\n display: flex;\n flex-direction: column;\n overflow: hidden scroll;\n box-sizing: border-box;\n\n // \u5B50\u5143\u7D20\u9AD8\u5EA6\u95EE\u9898\u5904\u7406\n & > * {\n flex: 0 0 auto;\n }\n\n & > & {\n flex: 1 1 auto;\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/*\u5360\u4F4D*/\n.spacer {\n flex: 1 1 auto;\n}\n\n.spacer-2 {\n flex: 2 1 auto;\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';\nimport { createResultFile } from '../../../../../../../utils/resultHelper';\n\nexport default function getFile(): [string[], ResultFile] {\n const file = createResultFile(\n 'theme',\n 'css',\n `\n@import '@dc/vue-h5-base/src/assets/scss/theme.css';\n\n:root {\n\\t--van-primary-color: #008fff;\n\\t/* Color Palette */\n\\t--van-gray-9: #eeeeee;\n\\t--van-gray-10: #bdbdbd;\n\\t--van-gray-11: #cccccc;\n\\t--van-blue-1: #008fff;\n\\t--van-blue-2: #3296fb;\n\\t--van-orange-1: #f27623;\n\n\\t/* --------------------------------------------- */\n\\t/* tabbar height */\n\\t--van-tabbar-height: 50px;\n\n\\t/* --------------------------------------------- */\n\\t/* input \u80CC\u666F\u8272*/\n\\t--input-background-color: #f4f4f4;\n\n\\t/* --------------------------------------------- */\n\\t/* \u6D59\u91CC\u529E\u4E3B\u9898 */\n\n\\t/* \u5706\u89D2*/\n\\t--zlb-radius-r5: 10px;\n\\t--zlb-radius-r6: 12px;\n\\t--zlb-radius-r7: 14px;\n\\t--zlb-radius-r8: 16px;\n\\t--zlb-radius-r9: 18px;\n\n\\t/* --------------------------------------------- */\n\\t/* \u5B57\u4F53\u989C\u8272 */\n\\t--van-text-color-4: #7897ba;\n\\t--van-text-color-5: #232d2d;\n\\t/*--van-text-size2: 18px;*/\n\n\\t/* --------------------------------------------- */\n\\t/* \u5B57\u4F53 */\n\\t/*\u5DF2\u6709\u5B57\u4F53\uFF0C\u53EF\u4EE5\u4E0D\u7528\u8986\u5199*/\n\\t--van-font-size-xs: 10px;\n\\t--van-font-size-sm: 12px;\n\\t--van-font-size-md: 14px;\n\\t--van-font-size-lg: 16px;\n\\t/*\u8FFD\u52A0\u4E00\u4E2A\u8D85\u5927\u53F7\u5B57\u4F53*/\n\\t--van-font-size-ml: 18px;\n\n\\t/* --------------------------------------------- */\n\\t/*\u8F93\u5165\u6846\u6837\u5F0F*/\n\\t--van-field-label-color: var(--van-text-color);\n\\t--van-field-placeholder-text-color: var(--van-text-color-3);\n\n\\t/* --------------------------------------------- */\n\\t/*\u8F93\u5165\u6846\u6837\u5F0F*/\n\\t/*--van-uploader-size: 69px;*/\n\\t/*--van-uploader-delete-icon-size: 18px;*/\n\n\\t--title-bar-height: 50px;\n\\t--title-bar-padding-top: 0;\n\n\\t--van-cascader-active-color: var(--van-primary-color);\n\\t--van-cascader-tab-color: var(--van-primary-color);\n\\t--van-tabs-bottom-bar-color: var(--van-primary-color);\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 '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';\nimport { createResultFile } from '../../../../../../../utils/resultHelper';\n\nexport default function getFile(): [string[], ResultFile] {\n const file = createResultFile(\n 'main',\n 'ts',\n `\nimport { createApp } from 'vue'\nimport App from './App.vue'\n\n/**\n * \u72B6\u6001\u7BA1\u7406\n */\nimport { createPinia } from 'pinia'\nimport piniaPluginPersist from 'pinia-plugin-persist'\n// \u8DEF\u7531\nimport router from './router'\n/**\n * vant \u7EC4\u4EF6\uFF0C\u6309\u9700\u5F15\u5165\n */\nimport Vant from 'vant'\nimport 'vant/lib/index.css'\n\n// \u8986\u76D6\u4E3B\u9898\u6837\u5F0F\nimport '@/assets/scss/theme.css'\n\n/* \u8FD9\u91CC\u662F\u57FA\u7840\u6846\u67B6\u7684\u6837\u5F0F */\nimport '@/assets/scss/global.scss'\nimport '@dc/vue-h5-base/src/assets/font/iconfont.css'\nimport '@dckj-npm/lowcode-vue-materials/style.css'\n\ncreateApp(App)\n\\t.use(createPinia().use(piniaPluginPersist))\n\\t.use(Vant)\n\\t// \u8DEF\u7531\n\\t.use(router)\n\\t.mount('#app')\n\n `,\n );\n\n return [['src'], 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 'vite-env.d',\n 'ts',\n `\ndeclare module '*.vue' {\n import type { DefineComponent } from 'vue'\n const component: DefineComponent<{}, {}, any>\n export default component\n}\n\ninterface ImportMetaEnv {\n // \u767B\u5F55\u7684\u63A5\u53E3\u5730\u5740\n readonly VITE_APP_API_LOGIN: string\n // \u767B\u5F55\u7684\u63A5\u53E3\u5730\u5740\n readonly VITE_APP_API_LOGIN_OUT: string\n // \u767B\u5F55\u7684\u63A5\u53E3\u5730\u5740\n readonly VITE_APP_API_BASE_URL: string\n //\u6587\u4EF6\u9884\u89C8\u5730\u5740\u524D\u7F00\n readonly VITE_APP_API_FILE_REVIEW: string\n\n // copyright\n readonly VITE_APP_COPYRIGHT: string\n // \u9ED8\u8BA4\u7684\u8BF7\u6C42\u906E\u7F69\u5C42\u662F\u5426\u5F00\u542F\n readonly VITE_APP_DEFAULT_MASK: boolean\n}\n\ninterface ImportMeta {\n readonly env: ImportMetaEnv\n}\n `,\n );\n\n return [['src'], 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 'Welcome',\n 'vue',\n `\n<template>\n <div></div>\n</template>\n\n<script lang=\"ts\" setup>\n</script>\n\n<style lang=\"scss\" scoped>\n</style>\n `,\n );\n\n return [['src', 'views', 'baseIndexA'], 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 'tabs',\n 'ts',\n `\n// import home from '@/assets/images/index/home.png'\n// import homeActive from '@/assets/images/index/home-active.png'\n// import housekeeper from '@/assets/images/index/housekeeper.png'\n// import housekeeperActive from '@/assets/images/index/housekeeper-active.png'\n// import mine from '@/assets/images/index/mine.png'\n// import mineActive from '@/assets/images/index/mine-active.png'\n//\n// export interface TabItem {\n// /**\n// * \u6807\u9898\n// */\n// label: string\n// /**\n// * \u56FE\u6807\n// */\n// icon: string\n// /**\n// * \u6FC0\u6D3B\u56FE\u6807\n// */\n// activeIcon: string\n// /**\n// * \u8DEF\u7531\u5730\u5740\n// */\n// router: string\n// }\n//\n// export const tabs: Array<TabItem> = [\n// {\n// label: '\u9996\u9875',\n// icon: home,\n// activeIcon: homeActive,\n// router: '/home'\n// },\n// {\n// label: '\u6D88\u606F',\n// icon: housekeeper,\n// activeIcon: housekeeperActive,\n// router: '/message'\n// },\n// {\n// label: '\u6211\u7684',\n// icon: mine,\n// activeIcon: mineActive,\n// router: '/mine'\n// }\n// ]\n `,\n );\n\n return [['src', 'views', 'baseIndexA'], 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 'utils',\n 'ts',\n `\nexport default {\n /**\n * \u8DF3\u8F6C\u5230\u6307\u5B9A\u7684pathId\uFF0C\u4EC5\u9650\u9884\u89C8\u9875\u9762\n * @param pageId\n * @param isNew\n */\n gotoByPageId: (pageId: string, isNew: boolean) => {\n // \u83B7\u53D6\u5DF2\u6709\u7684path\u53C2\u6570\u4FE1\u606F\n const oldPageId = getValueFromQueryByName('pageId')\n if (!oldPageId) {\n console.error('pageId is not exist')\n return\n }\n // \u6DFB\u52A0\u5730\u5740\u680F\u4E2D\u7684pathId\u53C2\u6570\u4FE1\u606F\n const resultPath = window.location.href.replace(\\`pageId=\\${oldPageId}\\`, \\`pageId=\\${pageId}\\`)\n if (isNew) {\n window.open(resultPath)\n } else {\n window.location.href = resultPath\n }\n },\n /**\n * \u83B7\u53D6\u5730\u5740\u680F\u53C2\u6570\u503C\n * @param queryName \u53C2\u6570\u540D\n * @param defaultValue \u9ED8\u8BA4\u503C\n */\n getValueFromQueryByName: (queryName: string, defaultValue: string = '') => {\n return getValueFromQueryByName(queryName, defaultValue)\n },\n /**\n * \u83B7\u53D6cookie\u4E2D\u7684\u503C\n * @param cookieName\n * @param defaultValue\n */\n getValueFromCookieByName: (cookieName: string, defaultValue: string = '') => {\n const reg = new RegExp('(^| )' + cookieName + '=([^;]*)(;|$)')\n const arr = document.cookie.match(reg)\n if (arr) {\n return unescape(arr[2])\n } else {\n return defaultValue\n }\n },\n /**\n * \u83B7\u53D6localStorage\u4E2D\u7684\u503C\n * @param key\n * @param defaultValue\n */\n getValueFromLocalStorage: (key: string, defaultValue: string = '') => {\n return localStorage.getItem(key) || defaultValue\n },\n /**\n * \u83B7\u53D6sessionStorage\u4E2D\u7684\u503C\n * @param key\n * @param defaultValue\n */\n getValueFromSessionStorage: (key: string, defaultValue: string = '') => {\n return sessionStorage.getItem(key) || defaultValue\n }\n}\n `,\n );\n\n return [['src', 'utils'], file];\n}\n", "import { ResultDir } from '@alilc/lowcode-types';\n\nimport { createResultDir } from '../../../../../utils/resultHelper';\nimport { runFileGenerator } from '../../../../../utils/templateHelper';\n\nimport file12 from './files/env';\nimport file11 from './files/eslintignore';\nimport file10 from './files/eslintrc.yml';\nimport file9 from './files/gitignore';\nimport file8 from './files/npmrc';\nimport file7 from './files/prettierignore';\nimport file6 from './files/prettierrc.yml';\nimport file5 from './files/index.html';\nimport file4 from './files/postcss.config.cjs';\nimport file13 from './files/tsconfig.json';\nimport file16 from './files/tsconfig.node.json';\nimport file17 from './files/vite.config.ts';\nimport file18 from './files/css/global.scss';\nimport file19 from './files/css/mixin.scss';\nimport file20 from './files/css/theme.css';\nimport file14 from './files/src/App.vue';\nimport file15 from './files/src/main';\nimport file3 from './files/src/vite-env';\nimport file21 from './files/src/views/baseIndexA/welcome.vue';\nimport file22 from './files/src/views/baseIndexA/tabs';\nimport file23 from './files/src/utils/utils';\n\nexport function generateStaticFiles(root = createResultDir('.')): ResultDir {\n runFileGenerator(root, file3);\n runFileGenerator(root, file4);\n runFileGenerator(root, file5);\n runFileGenerator(root, file6);\n runFileGenerator(root, file7);\n runFileGenerator(root, file8);\n runFileGenerator(root, file9);\n runFileGenerator(root, file10);\n runFileGenerator(root, file11);\n runFileGenerator(root, file12);\n runFileGenerator(root, file13);\n runFileGenerator(root, file14);\n runFileGenerator(root, file15);\n runFileGenerator(root, file16);\n runFileGenerator(root, file17);\n runFileGenerator(root, file18);\n runFileGenerator(root, file19);\n runFileGenerator(root, file20);\n runFileGenerator(root, file21);\n runFileGenerator(root, file22);\n runFileGenerator(root, file23);\n\n return root;\n}\n", "import { ResultDir } from '@alilc/lowcode-types';\nimport { IProjectTemplate } from '../../../../../types';\nimport { generateStaticFiles } from './static-files';\n\nconst vuejs3Template: IProjectTemplate = {\n slots: {\n // \u4E0D\u80FD\u5C11\uFF0C\u4F1A\u62A5\u9519\n components: {\n path: ['src', 'components'],\n },\n // \u4E0D\u80FD\u5C11\uFF0C\u4F1A\u62A5\u9519\n pages: {\n path: ['src', 'views'],\n },\n router: {\n path: ['src', 'router'],\n fileName: 'index',\n },\n // \u8DEF\u7531\u4E8C\u7EA7\u9875\u9762\n routerModules: {\n path: ['src', 'router', 'modules']\n },\n // entry: {\n // path: ['src'],\n // fileName: 'app',\n // },\n // constants: {\n // path: ['src'],\n // fileName: 'constants',\n // },\n // \u4E0D\u80FD\u5C11\uFF0C\u4F1A\u62A5\u9519\n utils: {\n path: ['src', 'utils'],\n fileName: 'utils',\n },\n // \u4E0D\u80FD\u5C11\uFF0C\u4F1A\u62A5\u9519\n i18n: {\n path: ['src'],\n fileName: 'i18n',\n },\n // globalStyle: {\n // path: ['src'],\n // fileName: 'global',\n // },\n // htmlEntry: {\n // path: ['public'],\n // fileName: 'index',\n // },\n packageJSON: {\n path: [],\n fileName: 'package',\n },\n // \u63A5\u53E3api\n api: {\n path: ['src', 'api'],\n },\n // \u4E3B\u5165\u53E3\u9996\u9875\n main: {\n path: ['src', 'views', 'baseIndexA'],\n fileName: 'Index',\n },\n //\u8868\u5355\u9875\u9762\n form: {\n path: ['src', 'views'],\n },\n // hooks\n hooks: {\n path: ['src', 'hooks'],\n },\n },\n\n generateTemplate(): ResultDir {\n return generateStaticFiles();\n },\n};\n\nexport default vuejs3Template;\n", "import { PackageJSON } from '@alilc/lowcode-types';\n\nimport { COMMON_CHUNK_NAME } from '../../../../../const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IProjectInfo,\n} from '../../../../../types';\n// todo \u540E\u7EED\u8003\u8651\u81EA\u5B9A\u4E49axios\u8BF7\u6C42\uFF0C\u518D\u4ECEschema\u4E2D\u83B7\u53D6\u6570\u636E\u6E90\u4F9D\u8D56\n// import { buildDataSourceDependencies } from '../../../../../utils/dataSource';\n\ninterface IIceJsPackageJSON extends PackageJSON {\n type: string;\n}\n\nexport interface IceJsPackageJsonPluginConfig {\n /**\n * \u6570\u636E\u6E90\u914D\u7F6E\n */\n datasourceConfig?: {\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u7248\u672C */\n engineVersion?: string;\n /** \u6570\u636E\u6E90\u5F15\u64CE\u7684\u5305\u540D */\n enginePackage?: string;\n /** \u6570\u636E\u6E90 handlers \u7684\u7248\u672C */\n handlersVersion?: {\n [key: string]: string;\n };\n /** \u6570\u636E\u6E90 handlers \u7684\u5305\u540D */\n handlersPackages?: {\n [key: string]: string;\n };\n };\n /** \u5305\u540D */\n packageName?: string;\n /** \u7248\u672C */\n packageVersion?: string;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<IceJsPackageJsonPluginConfig> = (cfg) => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IProjectInfo;\n\n const packageJson: IIceJsPackageJSON = {\n name: cfg?.packageName || 'vuejs3-demo-app',\n private: true,\n version: cfg?.packageVersion || '0.0.1',\n type: 'module',\n scripts: {\n dev: 'vite',\n build: 'vite build',\n preview: 'vite preview',\n },\n description: 'vue3\u57FA\u7840\u9879\u76EE',\n dependencies: {\n axios: '^1.7.7',\n dayjs: '^1.11.9',\n 'js-base64': '^3.7.5',\n pinia: '^2.0.20',\n 'pinia-plugin-persist': '^1.0.0',\n 'postcss-px-to-viewport': '^1.1.1',\n vant: '^3.6.4',\n vue: '^3.3',\n 'vue-router': '^4.1.3',\n '@dckj-npm/lowcode-vue-materials': '^1.2.100',\n 'ant-design-vue': '^4.2.5',\n jsencrypt: '^3.3.2',\n },\n devDependencies: {\n '@dc/vue-h5-base': '^1.0.53-beta.10',\n '@types/node': '^17.0.45',\n '@typescript-eslint/eslint-plugin': '^5.56.0',\n '@typescript-eslint/parser': '^5.56.0',\n '@vitejs/plugin-vue': '^3.2.0',\n '@vue/compiler-sfc': '3.2.33',\n '@vue/eslint-config-prettier': '^7.1.0',\n eslint: '^8.36.0',\n 'eslint-plugin-prettier': '^4.2.1',\n 'eslint-plugin-vue': '^8.7.1',\n prettier: '^2.8.6',\n sass: '^1.60.0',\n typescript: '^4.9.5',\n vite: '^3.2.5',\n 'vite-plugin-compression': '^0.5.1',\n 'vite-plugin-eslint': '^1.8.1',\n 'vite-plugin-style-import': '^2.0.0',\n 'vue-eslint-parser': '^8.3.0',\n 'vue-tsc': '^0.40.13',\n },\n };\n\n // ir.packages.forEach((packageInfo) => {\n // packageJson.dependencies[packageInfo.package] = packageInfo.version;\n // });\n\n next.chunks.push({\n type: ChunkType.JSON,\n fileType: FileType.JSON,\n name: COMMON_CHUNK_NAME.FileMainContent,\n content: packageJson,\n linkAfter: [],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { RouterInfoItem } from \"../types\";\n\n/**\n * \u83B7\u53D6\u4E00\u7EA7\u8DEF\u7531\u4FE1\u606F\n * @param routes\n */\nexport function getRouters(routes: RouterInfoItem[]) {\n return routes.filter(item => item.firstPage != 'false').map(route => {\n return `\n {\n path: '${route.path}',\n name: '${route.title}',\n component: () => import(\"@/views/${route.componentName}/${\n route.isFormRouter ? 'Manage.vue' : 'Index.vue'\n }\"),\n }`\n })\n}\n\n/**\n * \u83B7\u53D6\u4E8C\u7EA7\u8DEF\u7531\u4FE1\u606F\n * @param routes\n */\nexport function getSecondRouters(routes: RouterInfoItem[]) {\n return routes.filter(item => item.firstPage == 'false').map(route => {\n return `{\n path: '${route.path}',\n name: '${route.componentName}',\n component: () => import(\"@/views/${route.componentName}/${\n route.isFormRouter ? 'Manage.vue' : 'Index.vue'\n }\"),\n }`\n })\n}", "import { COMMON_CHUNK_NAME } from '../../../../../const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IRouterInfo,\n} from '../../../../../types';\nimport {getRouters} from \"../../../../../utils/routerHandle\";\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IRouterInfo;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: `\n import {\n \\tcreateRouter,\n \\tcreateWebHashHistory,\n \\tcreateWebHistory,\n \\tNavigationGuardNext,\n \\tRouteLocationNormalized,\n \\tRouteLocationNormalizedLoaded,\n \\tRouteRecordRaw\n } from \"vue-router\"\n import { useSystemStore } from \"@dc/vue-h5-base/src/store/system\"\n import { setRouter, defaultBeforeEach } from \"@dc/vue-h5-base/src/router\"\n import { useUserStore } from '@dc/vue-h5-base/src/store/user'\n `,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n name: COMMON_CHUNK_NAME.FileVarDefine,\n content: `\n// \u52A8\u6001\u5BFC\u5165\u6240\u6709modules\u4E0B\u7684\u8DEF\u7531\u6587\u4EF6\u4FE1\u606F\nconst modelsFile = import.meta.globEager<Record<\"default\", Array<RouteRecordRaw>>>(\"./modules/**/*.ts\")\n\n// \u8DEF\u7531\u53BB\u4E2D\u5FC3\u5316\nconst children =\n Object.keys(modelsFile)\n .map((key: string) => modelsFile[key].default)\n .flat(1) || []\n\n/**\n * \u7CFB\u7EDF\u8DEF\u7531\u4FE1\u606F\n */\nconst routes: RouteRecordRaw[] = [\n {\n path: \"/\",\n redirect: \"${ir.routes[0].path}\",\n name: \"index\",\n meta: {\n keepAlive: true\n },\n component: () => import(\"@/views/baseIndexA/Index.vue\"),\n children: [\n ${getRouters(ir.routes).join(',')}\n ]\n },\n {\n path: \"/business\",\n name: \"business\",\n component: () => import(\"@dc/vue-h5-base/src/views/Main.vue\"),\n children: children,\n // \u8FD9\u91CC\u7528\u6765\u663E\u793A\u6807\u9898\n props: (route: RouteLocationNormalizedLoaded) => ({\n title: route.query.title || route.query.title || route.name\n })\n },\n {\n path: \"/login\",\n name: \"\u767B\u5F55\",\n component: () => import(\"@dc/vue-h5-base/src/views/login/Login.vue\")\n }\n]\nconst router = createRouter({\n history: createWebHashHistory(import.meta.env.BASE_URL),\n routes,\n})\n\n// \u8BBE\u7F6E\u57FA\u7840\u6846\u67B6\u4E2D\u7684\u8DEF\u7531\u4FE1\u606F\nsetRouter(router)\n\n/**\n * \u5F00\u542F\u8DEF\u7531\u524D\u7F6E\u5B88\u536B\n */\nrouter.beforeEach(defaultBeforeEach)\n `,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n name: COMMON_CHUNK_NAME.FileExport,\n content: `\n export default router;\n `,\n linkAfter: [\n COMMON_CHUNK_NAME.ExternalDepsImport,\n COMMON_CHUNK_NAME.InternalDepsImport,\n COMMON_CHUNK_NAME.FileVarDefine,\n COMMON_CHUNK_NAME.FileMainContent,\n ],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { IPublicTypeJSExpression, PackageJSON } from '@alilc/lowcode-types';\n\nimport { COMMON_CHUNK_NAME } from '../../../../../const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n HandlerSet,\n ICodeStruct,\n IContainerInfo,\n IProjectInfo,\n IScope,\n NodeGeneratorConfig,\n Tab,\n} from '../../../../../types';\nimport { transformJsExpr } from '../../../../../core/vue/handlers/transformJsExpression';\nimport { generateExpression } from '../../../../../utils/jsExpression';\nimport { transformThis2Context } from '../../../../../core/vue/handlers/transformThis2Context';\nimport { generateCompositeType } from '../../../../../utils/compositeType';\nimport { Scope } from '../../../../../utils/Scope';\nimport { createVueNodeGenerator, generateByName } from '../../../../../utils/nodeToTemplate';\nimport { PluginConfig } from '../../../../component/vue/template';\n\ninterface IIceJsPackageJSON extends PackageJSON {\n type: string;\n}\n\nconst pluginFactory: BuilderComponentPluginFactory<PluginConfig> = (config?) => {\n const cfg = {\n fileType: FileType.VUE,\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n nodeTypeMapping: {} as Record<string, string>,\n ...config,\n };\n const { nodeTypeMapping } = cfg;\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const { tolerateEvalErrors = true } = next.contextData;\n\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\n // \u4E0E Rax \u6240\u4E0D\u540C\u7684\u662F\uFF0C\u8FD9\u91CC\u4E0D\u4F1A\u5C06\u6700\u9876\u5C42\u7684 this \u8F6C\u6362\u6389\n const customHandlers: HandlerSet<string> = {\n expression(input: IPublicTypeJSExpression, scope: IScope, config2) {\n return transformJsExpr(generateExpression(input, scope), scope, {\n dontWrapEval: !(config2?.tolerateEvalErrors ?? tolerateEvalErrors),\n dontTransformThis2ContextAtRootScope: true,\n });\n },\n function(input, scope: IScope) {\n return transformThis2Context(\n generateCompositeType(\n {\n type: 'JSFunction',\n value: input.value || 'function () {}',\n },\n Scope.createRootScope(),\n ),\n scope,\n { ignoreRootScope: true },\n );\n },\n };\n\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\n const generatorPlugins: NodeGeneratorConfig = {\n handlers: customHandlers,\n tagMapping: (v) => nodeTypeMapping[v] || v,\n tolerateEvalErrors,\n };\n\n const ir = next.ir.containers[0] as IContainerInfo;\n const scope: IScope = Scope.createRootScope();\n // \u751F\u6210\u5E95\u90E8\u5BFC\u822A\u680F\n const { code, node } = generateByName(generatorPlugins, 'Navigation', ir, scope, {\n 'v-model': 'active',\n });\n next.chunks.push({\n zIndex: code ? 1 : 0,\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: COMMON_CHUNK_NAME.FileMainContent,\n content: `\n<template>\n\t<div class=\"page\">\n\t\t<!--\u9996\u9875-->\n\t\t<router-view v-slot=\"{ Component, route }\">\n\t\t\t<keep-alive>\n\t\t\t\t<component :is=\"Component\" :key=\"route.fullPath\" />\n\t\t\t</keep-alive>\n\t\t</router-view>\n\n\t\t<!--\u5E95\u90E8\u5BFC\u822A\u680F-->\n ${code}\n\t</div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { onMounted, ref, watchEffect } from \"vue\"\nimport { useRoute, useRouter } from 'vue-router'\nimport { Navigation } from '@dckj-npm/lowcode-vue-materials';\n\nlet router = useRouter()\n\n/**\n * \u5F53\u524D\u6FC0\u6D3B\u7684tab\n */\nconst active = ref(0)\nconst tabInfo = [\n ${(node.props?.itemArray as unknown as Tab[])\n ?.map(\n (item) =>\n `{text: '${item.text ?? ''}', icon: '${item.icon ?? ''}', pageId: '${\n item.pageId ?? ''\n }', selectedIcon: '${item.selectedIcon ?? ''}'}`,\n )\n .join(',\\n')}]\n\n/**\n* \u8DF3\u8F6C\u9875\u9762\n* @param params\n* @param extParams\n*/\nfunction goPage(params, ...extParams) {\n const { pathId } = extParams.find(obj => obj.hasOwnProperty('pathId')) || {};\n const pageId = params ? params : pathId;\n router.replace(pageId);\n}\n\n/**\n * \u4ECE\u754C\u9762\u8FDB\u5165\uFF0C\u9009\u4E2Dtab\n */\nlet route = useRoute()\nwatchEffect(() => {\n\tlet number = tabInfo.findIndex((tab) => tab.pageId == route?.path)\n\tif (number != -1) {\n\t\tactive.value = number\n\t}\n})\n</script>\n\n<style lang=\"scss\" scoped>\n</style>`,\n linkAfter: [],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "const suffix = 'Request';\n/**\n * \u83B7\u53D6api\u540D\u79F0\n */\nexport function getApiName(apiId: string) {\n return apiId + suffix;\n}\n", "export interface DynamicColumnDataType {\n /**\n * \u7F16\u7801\n */\n code: number;\n /**\n * \u540D\u79F0\n */\n name: string;\n /**\n * \u6570\u636E\u5E93\u7C7B\u578B\n */\n dbTypeName: string;\n}\n\n/**\n * \u679A\u4E3E\u7C7B\u578B\u7684\u901A\u7528\u7ED3\u6784\n */\nexport interface BaseEnumType {\n /**\n * \u679A\u4E3E\u7684\u4EE3\u7801\u503C\n */\n code: number;\n /**\n * \u679A\u4E3E\u7684\u540D\u79F0\u63CF\u8FF0\n */\n name: string;\n /**\n * \u679A\u4E3E\u7684\u6392\u5E8F\u503C\uFF08\u53EF\u9009\uFF09\n */\n ordinal?: number;\n}\n\nexport const DYNAMIC_COLUMN_DATA_TYPE_TEXT: DynamicColumnDataType = {\n code: 1,\n name: '\u5355\u884C\u6587\u672C',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_TEXTAREA: DynamicColumnDataType = {\n code: 2,\n name: '\u591A\u884C\u6587\u672C',\n dbTypeName: 'text',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_INT: DynamicColumnDataType = {\n code: 3,\n name: '\u6574\u6570',\n dbTypeName: 'int',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_MONEY: DynamicColumnDataType = {\n code: 15,\n name: '\u91D1\u989D',\n dbTypeName: 'numeric',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_NUMBER: DynamicColumnDataType = {\n code: 35,\n name: '\u6570\u503C',\n dbTypeName: 'numeric',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_ID_CARD: DynamicColumnDataType = {\n code: 11,\n name: '\u8EAB\u4EFD\u8BC1',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_MOBILE: DynamicColumnDataType = {\n code: 12,\n name: '\u624B\u673A',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_EMAIL: DynamicColumnDataType = {\n code: 36,\n name: '\u90AE\u7BB1',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_DATE: DynamicColumnDataType = {\n code: 6,\n name: '\u65E5\u671F',\n dbTypeName: 'date',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_DATETIME: DynamicColumnDataType = {\n code: 7,\n name: '\u65E5\u671F\u65F6\u95F4',\n dbTypeName: 'datetime',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_LABEL: DynamicColumnDataType = {\n code: 10,\n name: '\u6587\u672C\u8BF4\u660E',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_SWITCH: DynamicColumnDataType = {\n code: 29,\n name: '\u5F00\u5173',\n dbTypeName: 'tinyint',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_RADIO: DynamicColumnDataType = {\n code: 4,\n name: '\u5355\u9009\u6846',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_CHECKBOX: DynamicColumnDataType = {\n code: 5,\n name: '\u590D\u9009\u6846',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_USER: DynamicColumnDataType = {\n code: 18,\n name: '\u8054\u7CFB\u4EBA',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_DEPT: DynamicColumnDataType = {\n code: 17,\n name: '\u7EC4\u7EC7\u67B6\u6784\u90E8\u95E8',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_ORGAN: DynamicColumnDataType = {\n code: 25,\n name: '\u7EC4\u7EC7\u67B6\u6784\u5355\u4F4D',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_SELECT: DynamicColumnDataType = {\n code: 19,\n name: '\u4E0B\u62C9\u6846',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_CASCADE: DynamicColumnDataType = {\n code: 13,\n name: '\u7EA7\u8054/\u5206\u7C7B',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_PICTURE: DynamicColumnDataType = {\n code: 14,\n name: '\u56FE\u7247',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_VIDEO: DynamicColumnDataType = {\n code: 30,\n name: '\u89C6\u9891',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_AUDIO: DynamicColumnDataType = {\n code: 37,\n name: '\u97F3\u9891',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_DOC: DynamicColumnDataType = {\n code: 34,\n name: '\u6587\u6863',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_ATTACHMENTS: DynamicColumnDataType = {\n code: 16,\n name: '\u9644\u4EF6',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_AUTO: DynamicColumnDataType = {\n code: 26,\n name: '\u81EA\u52A8\u751F\u6210',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_EDITOR: DynamicColumnDataType = {\n code: 31,\n name: '\u5BCC\u6587\u672C',\n dbTypeName: 'longtext',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_POSITIONING: DynamicColumnDataType = {\n code: 39,\n name: '\u5B9A\u4F4D',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_SIGNATURE: DynamicColumnDataType = {\n code: 40,\n name: '\u7B7E\u540D',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_GRADE: DynamicColumnDataType = {\n code: 41,\n name: '\u7B49\u7EA7',\n dbTypeName: 'numeric',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_BUTTON: DynamicColumnDataType = {\n code: 46,\n name: '\u6309\u94AE',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_CHILDREN_TABLE: DynamicColumnDataType = {\n code: 47,\n name: '\u5B50\u8868\u5355',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_QUOTE: DynamicColumnDataType = {\n code: 48,\n name: '\u5F15\u7528\u5B57\u6BB5',\n dbTypeName: 'varchar',\n};\nexport const DYNAMIC_COLUMN_DATA_TYPE_LINKAGE: DynamicColumnDataType = {\n code: 49,\n name: '\u8054\u52A8\u5B57\u6BB5',\n dbTypeName: 'varchar',\n};\n\n/**\n * \u5217\u7C7B\u578B\u63A5\u53E3\n */\nexport interface ColumnType {\n /**\n * \u5217\u7684\u552F\u4E00\u6807\u8BC6\u7B26\n */\n id: string;\n /**\n * \u5173\u8054\u7684\u8868 ID\n */\n fkTableId: string;\n /**\n * \u8868\u540D\n */\n tableName: string;\n /**\n * \u5217\u540D\n */\n columnName: string;\n /**\n * \u9009\u62E9\u64CD\u4F5C\u7C7B\u578B\n */\n selectActionType: number;\n /**\n * \u9009\u62E9\u64CD\u4F5C\u7C7B\u578B\u7684\u679A\u4E3E\n */\n selectActionTypeEnum: BaseEnumType;\n /**\n * \u5217\u952E\u7C7B\u578B\n */\n columnKeyType: number;\n /**\n * \u5217\u952E\u7C7B\u578B\u7684\u679A\u4E3E\n */\n columnKeyTypeEnum: BaseEnumType;\n /**\n * \u5217\u7684\u6570\u636E\u7C7B\u578B\n */\n columnType: string;\n /**\n * \u5217\u7684\u5927\u5C0F\n */\n columnSize: number;\n /**\n * \u5217\u7684\u5C0F\u6570\u4F4D\u6570\n */\n columnDecimal: number;\n /**\n * \u9ED8\u8BA4\u503C\n */\n defaultValue: string;\n /**\n * \u9ED8\u8BA4\u503C\u7C7B\u578B\n */\n defaultValueType: number;\n /**\n * \u9ED8\u8BA4\u503C\u7C7B\u578B\u7684\u679A\u4E3E\n */\n defaultValueTypeEnum: BaseEnumType;\n /**\n * \u662F\u5426\u5FC5\u586B\uFF080\uFF1A\u5426\uFF0C1\uFF1A\u662F\uFF09\n */\n isRequired: number;\n /**\n * \u662F\u5426\u5FC5\u586B\u7684\u679A\u4E3E\n */\n isRequiredEnum: BaseEnumType;\n /**\n * \u5217\u7684\u6CE8\u91CA\n */\n columnComment: string;\n /**\n * \u663E\u793A\u6DFB\u52A0\u7C7B\u578B\n */\n showAddType: number;\n /**\n * \u663E\u793A\u6DFB\u52A0\u7C7B\u578B\u7684\u679A\u4E3E\n */\n showAddTypeEnum: BaseEnumType;\n /**\n * \u663E\u793A\u66F4\u65B0\u7C7B\u578B\n */\n showUpdateType: number;\n /**\n * \u663E\u793A\u66F4\u65B0\u7C7B\u578B\u7684\u679A\u4E3E\n */\n showUpdateTypeEnum: BaseEnumType;\n /**\n * \u5217\u5728\u5217\u8868\u4E2D\u7684\u663E\u793A\u7C7B\u578B\n */\n showListType: number;\n /**\n * \u5217\u5728\u5217\u8868\u4E2D\u7684\u663E\u793A\u7C7B\u578B\u7684\u679A\u4E3E\n */\n showListTypeEnum: BaseEnumType;\n /**\n * \u5217\u5728\u89C6\u56FE\u4E2D\u7684\u663E\u793A\u7C7B\u578B\n */\n showViewType: number;\n /**\n * \u5217\u5728\u89C6\u56FE\u4E2D\u7684\u663E\u793A\u7C7B\u578B\u7684\u679A\u4E3E\n */\n showViewTypeEnum: BaseEnumType;\n /**\n * \u641C\u7D22\u7C7B\u578B\n */\n searchType: number;\n /**\n * \u641C\u7D22\u7C7B\u578B\u7684\u679A\u4E3E\n */\n searchTypeEnum: BaseEnumType;\n /**\n * \u66F4\u65B0\u7C7B\u578B\n */\n updateType: number;\n /**\n * \u66F4\u65B0\u7C7B\u578B\u7684\u679A\u4E3E\n */\n updateTypeEnum: BaseEnumType;\n /**\n * \u8BC4\u5206\u4EE3\u7801\n */\n scoreCode: number;\n /**\n * \u5B57\u6BB5\u5BBD\u5EA6\n */\n fieldWidth: number;\n /**\n * \u5B57\u6BB5\u524D\u7F00\n */\n fieldPrefix: string;\n /**\n * \u663E\u793A\u6761\u4EF6\n */\n showCondition: string;\n /**\n * \u552F\u4E00\u6027\u9A8C\u8BC1\n */\n validationUnique: number;\n /**\n * \u552F\u4E00\u6027\u9A8C\u8BC1\u7684\u679A\u4E3E\n */\n validationUniqueEnum: BaseEnumType;\n /**\n * \u663E\u793A\u6837\u5F0F\n */\n showStyle: string;\n /**\n * \u81EA\u5B9A\u4E49\u51FD\u6570\n */\n customFunction: string;\n /**\n * \u5217\u9009\u9879\u5217\u8868\n */\n columnOptionList: any[];\n /**\n * \u5C5E\u6027\u5217\u8868\n */\n propList: {\n /**\n * \u5C5E\u6027\u7684\u552F\u4E00\u6807\u8BC6\u7B26\n */\n id: string;\n /**\n * \u5C5E\u6027\u540D\u79F0\n */\n propName: string;\n /**\n * \u5C5E\u6027\u503C\n */\n propValue: string;\n }[];\n /**\n * \u5F15\u5BFC\u6587\u5B57\n */\n guideWords: string;\n /**\n * \u6821\u9A8C\u8868\u8FBE\u5F0F\n */\n fieldValidation: string;\n /**\n * \u6821\u9A8C\u7C7B\u578B\n */\n fieldValidationType: string;\n /**\n * \u5B57\u6BB5\u540E\u7F00\n */\n fieldSuffix: string;\n /**\n * \u5173\u8054\u5B57\u6BB5\n */\n joinColumn: string;\n /**\n * \u5173\u8054\u8868\u5355\n */\n joinTable: string;\n /**\n * \u5173\u8054\u8868\u5355\u4FE1\u606F\n */\n joinTableInfo: JoinTableInfo;\n /**\n * \u8FDE\u8868\u5B57\u6BB5\n */\n linkageColumn: string;\n /**\n * \u8FDE\u8868\u5B57\u6BB5\n */\n linkageTableColumn: string;\n /**\n * \u9009\u62E9\u64CD\u4F5C\u8C03\u7528\u7684\u63A5\u53E3\n */\n selectAction: string;\n /**\n * \u4E0B\u62C9\u6846\u9009\u62E9\u7684\u6807\u7B7E\n */\n selectActionLabel: string;\n /**\n * \u4E0B\u62C9\u6846\u663E\u793A\u7684\u6807\u7B7E\n */\n selectActionLabelArr: string[];\n /**\n * \u4E0B\u62C9\u6846\u9009\u62E9\u7684\u6807\u7B7E\n */\n selectActionValue: string;\n}\n\nexport interface JoinTableInfo {\n id: string;\n joinAlias: string;\n joinColumnList: JoinColumnList[];\n joinNum: number;\n joinSerial: number;\n joinTableId: string;\n joinTitle: string;\n joinType: number;\n mainTableId: string;\n relationId: string;\n showColumnList: [];\n showColumns: string;\n showType: number;\n tableComment: string;\n valueColumn: string;\n}\n\nexport interface JoinColumnList {\n id: string;\n conditionKey: string;\n conditionValue: string;\n fkJoinId: string;\n groupSerial: number;\n relation: string;\n valueType: number;\n}\n", "import {\n DYNAMIC_COLUMN_DATA_TYPE_ATTACHMENTS,\n DYNAMIC_COLUMN_DATA_TYPE_AUDIO,\n DYNAMIC_COLUMN_DATA_TYPE_AUTO,\n DYNAMIC_COLUMN_DATA_TYPE_CASCADE,\n DYNAMIC_COLUMN_DATA_TYPE_CHECKBOX,\n DYNAMIC_COLUMN_DATA_TYPE_CHILDREN_TABLE,\n DYNAMIC_COLUMN_DATA_TYPE_DATE,\n DYNAMIC_COLUMN_DATA_TYPE_DATETIME,\n DYNAMIC_COLUMN_DATA_TYPE_DEPT,\n DYNAMIC_COLUMN_DATA_TYPE_DOC,\n DYNAMIC_COLUMN_DATA_TYPE_EDITOR,\n DYNAMIC_COLUMN_DATA_TYPE_EMAIL,\n DYNAMIC_COLUMN_DATA_TYPE_GRADE,\n DYNAMIC_COLUMN_DATA_TYPE_ID_CARD,\n DYNAMIC_COLUMN_DATA_TYPE_LABEL,\n DYNAMIC_COLUMN_DATA_TYPE_LINKAGE,\n DYNAMIC_COLUMN_DATA_TYPE_MOBILE,\n DYNAMIC_COLUMN_DATA_TYPE_MONEY,\n DYNAMIC_COLUMN_DATA_TYPE_NUMBER,\n DYNAMIC_COLUMN_DATA_TYPE_ORGAN,\n DYNAMIC_COLUMN_DATA_TYPE_PICTURE,\n DYNAMIC_COLUMN_DATA_TYPE_POSITIONING,\n DYNAMIC_COLUMN_DATA_TYPE_QUOTE,\n DYNAMIC_COLUMN_DATA_TYPE_RADIO,\n DYNAMIC_COLUMN_DATA_TYPE_SELECT,\n DYNAMIC_COLUMN_DATA_TYPE_SWITCH,\n DYNAMIC_COLUMN_DATA_TYPE_TEXT,\n DYNAMIC_COLUMN_DATA_TYPE_TEXTAREA,\n DYNAMIC_COLUMN_DATA_TYPE_USER,\n DYNAMIC_COLUMN_DATA_TYPE_VIDEO,\n DYNAMIC_COLUMN_DATA_TYPE_INT,\n} from '../types/column-type';\n\nexport const getFieldType = (columnKeyType: number) => {\n switch (columnKeyType) {\n // \u5355\u884C\u6587\u672C \u6574\u6570 \u91D1\u989D \u6570\u503C \u8EAB\u4EFD\u8BC1\n case DYNAMIC_COLUMN_DATA_TYPE_TEXT.code:\n case DYNAMIC_COLUMN_DATA_TYPE_INT.code:\n case DYNAMIC_COLUMN_DATA_TYPE_MONEY.code:\n case DYNAMIC_COLUMN_DATA_TYPE_NUMBER.code:\n case DYNAMIC_COLUMN_DATA_TYPE_ID_CARD.code:\n case DYNAMIC_COLUMN_DATA_TYPE_MOBILE.code:\n case DYNAMIC_COLUMN_DATA_TYPE_EMAIL.code:\n return 'field';\n\n // \u591A\u884C\u6587\u672C\n case DYNAMIC_COLUMN_DATA_TYPE_TEXTAREA.code:\n return 'textarea';\n\n // \u65E5\u671F\n case DYNAMIC_COLUMN_DATA_TYPE_DATE.code:\n return 'date-picker';\n\n // \u65E5\u671F\u65F6\u95F4\n case DYNAMIC_COLUMN_DATA_TYPE_DATETIME.code:\n return 'time-picker';\n\n // \u6587\u672C\u8BF4\u660E\n case DYNAMIC_COLUMN_DATA_TYPE_LABEL.code:\n return 'text';\n\n // \u5F00\u5173\n case DYNAMIC_COLUMN_DATA_TYPE_SWITCH.code:\n return 'switch';\n\n // \u5355\u9009\u6846\n case DYNAMIC_COLUMN_DATA_TYPE_RADIO.code:\n return 'radio';\n\n // \u590D\u9009\u6846\n case DYNAMIC_COLUMN_DATA_TYPE_CHECKBOX.code:\n return 'checkbox';\n\n // \u8054\u7CFB\u4EBA \u7EC4\u7EC7\u67B6\u6784\u90E8\u95E8 \u7EC4\u7EC7\u67B6\u6784\u5355\u4F4D \u4E0B\u62C9\u6846\n case DYNAMIC_COLUMN_DATA_TYPE_USER.code:\n case DYNAMIC_COLUMN_DATA_TYPE_DEPT.code:\n case DYNAMIC_COLUMN_DATA_TYPE_ORGAN.code:\n case DYNAMIC_COLUMN_DATA_TYPE_SELECT.code:\n return 'picker';\n\n // \u7EA7\u8054\n case DYNAMIC_COLUMN_DATA_TYPE_CASCADE.code:\n return 'cascader';\n\n // \u56FE\u7247 \u89C6\u9891 \u97F3\u9891\n case DYNAMIC_COLUMN_DATA_TYPE_PICTURE.code:\n case DYNAMIC_COLUMN_DATA_TYPE_VIDEO.code:\n case DYNAMIC_COLUMN_DATA_TYPE_AUDIO.code:\n case DYNAMIC_COLUMN_DATA_TYPE_DOC.code:\n case DYNAMIC_COLUMN_DATA_TYPE_ATTACHMENTS.code:\n return 'uploader';\n\n //\u81EA\u52A8\u751F\u6210\n case DYNAMIC_COLUMN_DATA_TYPE_AUTO.code:\n return 'auto-complete';\n\n // \u5BCC\u6587\u672C\n case DYNAMIC_COLUMN_DATA_TYPE_EDITOR.code:\n return 'rich-text';\n\n // \u5B9A\u4F4D\n case DYNAMIC_COLUMN_DATA_TYPE_POSITIONING.code:\n return 'amap';\n\n // \u7B49\u7EA7\n case DYNAMIC_COLUMN_DATA_TYPE_GRADE.code:\n return 'rate';\n\n // \u6309\u94AE \u7B7E\u540D\n\n // \u5B50\u8868\u5355 \u5F15\u7528\u5B57\u6BB5 \u8054\u52A8\u5B57\u6BB5\n case DYNAMIC_COLUMN_DATA_TYPE_CHILDREN_TABLE.code:\n case DYNAMIC_COLUMN_DATA_TYPE_QUOTE.code:\n case DYNAMIC_COLUMN_DATA_TYPE_LINKAGE.code:\n return 'picker';\n default:\n return 'field';\n }\n};\n", "import { InterpretDataSourceConfig } from '@alilc/lowcode-types';\nimport {\n COMMON_CHUNK_NAME,\n DEFAULT_LINK_AFTER,\n TEMPLATE_DEFINE_CHUNK_NAME,\n VUE_DEFAULT_LINK_AFTER,\n} from '../../../../../const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IRouterInfo,\n ICodeChunk,\n IContainerInfo,\n IFormInfo,\n} from '../../../../../types';\nimport { isValidContainerType } from '../../../../../utils/schema';\nimport { getApiName } from '../../../../../utils/apiHandler';\nimport { getFieldType } from '../../../../../utils/columnType';\nimport {\n ColumnType,\n DYNAMIC_COLUMN_DATA_TYPE_AUTO,\n DYNAMIC_COLUMN_DATA_TYPE_BUTTON,\n DYNAMIC_COLUMN_DATA_TYPE_CHILDREN_TABLE,\n DYNAMIC_COLUMN_DATA_TYPE_DEPT,\n DYNAMIC_COLUMN_DATA_TYPE_LINKAGE,\n DYNAMIC_COLUMN_DATA_TYPE_ORGAN,\n DYNAMIC_COLUMN_DATA_TYPE_QUOTE,\n DYNAMIC_COLUMN_DATA_TYPE_USER,\n} from '../../../../../types/column-type';\nimport { camelize } from '../../../../../utils/common';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IFormInfo;\n\n const columnList = ir.dataSource?.extra[\n ir.dataSource.list[0].id\n ].columnToAttribute?.formData?.filter(\n (item: ColumnType) =>\n item.columnKeyType !== DYNAMIC_COLUMN_DATA_TYPE_BUTTON.code &&\n item.columnKeyType !== DYNAMIC_COLUMN_DATA_TYPE_AUTO.code,\n ) || [];\n console.log(columnList);\n //\u6839\u636Eir\u751F\u6210\u8868\u5355\u6587\u4EF6\u5939,\u5305\u62ECAdd.vue\u548Cfield.ts\uFF08\u6682\u65F6\uFF09\n\n //add-fields.ts\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n subModule: 'add-field',\n content: `\n import { FieldProps } from '@dc/vue-h5-base/src/components/form-item/field-props'\n `,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n name: COMMON_CHUNK_NAME.FileVarDefine,\n subModule: 'add-field',\n content: `\n export const fields = (id?: string | undefined) => {\n return [\n ${columnList.map((field: ColumnType) => {\n return `\n {\n name: '${field.columnName}',\n label: '${field.columnComment}',\n type: '${getFieldType(field.columnKeyType)}',\n placeholder: '${field.guideWords}',\n show: ${field.showAddType == 0 ? false : true},\n required: ${field.isRequired == 0 ? false : true},\n rules: [\n {\n required: ${field.isRequired == 0 ? false : true},\n message: '${field.guideWords}',\n },\n ${\n field.fieldValidation\n ? `\n {\n pattern: '${field.fieldValidation}',\n message: '${field.columnComment}\u683C\u5F0F\u4E0D\u6B63\u786E'\n }\n `\n : ''\n }\n ],\n typeValue: { \n ${\n field.selectActionLabel\n ? `\n fieldNames: {\n label: '${field.selectActionLabel}',\n value: '${field.selectActionValue}'\n },\n `\n : ''\n }\n ${field.fieldSuffix ? `addonAfter: ${field.fieldSuffix}` : ''}\n ${\n field.columnOptionList\n ? `\n options: [${field.columnOptionList.map((item) => {\n console.log(JSON.stringify(item));\n return JSON.stringify(item);\n })}]\n `\n : ''\n }\n }\n }\n `;\n })}\n ]\n }\n `,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport],\n });\n\n //Add.vue\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.TemplateDom,\n subModule: 'Add',\n content: `\n <template>\n <van-form ref=\"form\">\n <template v-for=\"(item, index) of addFields\">\n <base-form-item\n v-if=\"item.show\"\n :key=\"index\"\n v-model:value=\"formState[item.name]\"\n :label=\"item.label\"\n :name=\"item.name\"\n :placeholder=\"item.placeholder\"\n :required=\"true\"\n :rules=\"item.rules\"\n :type=\"item.type\"\n :typeValue=\"item.typeValue\"\n @update:extraValue=\"extraValueChange\"\n />\n </template>\n </van-form>\n <van-button round type=\"primary\" color=\"#FB663E\" @click=\"onSubmit\">\u63D0\u4EA4</van-button>\n </template>\n `,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\n subModule: 'Add',\n content: `\n <script setup lang=\"ts\">\n import router from '@/router'\n import { fields } from './add-field'\n import { computed, onMounted, reactive, ref, defineProps, onBeforeMount } from 'vue'\n import BaseFormItem from '@dc/vue-h5-base/src/components/form-item/BaseFormItem.vue'\n import { messageMethod } from '@dc/vue-h5-base/src/utils/message-util'\n import { GetRequestModel, PostRequestModel } from '@dc/vue-h5-base/src/http/request-model'\n import { OptionProps, SelectProps, FieldProps, ExtraProps } from '@dc/vue-h5-base/src/components/form-item/field-props'\n import {\n ColumnField,\n handleFileList,\n handleLinkageFields,\n handleRemoteSearch,\n LinkageField,\n getDefaultValues,\n handleColumnOptions,\n FilterField,\n handleFilterField\n } from '@/sources/hooks/index'\n `,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart],\n });\n\n // dataSource\n const dataSourceConfig = isValidContainerType(pre.ir) ? pre.ir.dataSource : null;\n const dataSourceItems: InterpretDataSourceConfig[] =\n (dataSourceConfig && dataSourceConfig.list) || [];\n //\u5B9A\u4E49\u6709\u9009\u62E9\u9879\u7684\u63A7\u4EF6\u5217\u8868\n const selectActionTypeFieldList: ColumnType[] = ir.dataSource?.extra[\n ir.dataSource.list[0].id\n ].columnToAttribute?.formData?.filter(\n (field: ColumnType) =>\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_USER.code ||\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_DEPT.code ||\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_ORGAN.code ||\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_CHILDREN_TABLE.code ||\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_QUOTE.code ||\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_LINKAGE.code,\n ) || [];\n //\u5B9A\u4E49\u5F15\u7528\u5B57\u6BB5\u7684\u63A7\u4EF6\n const quoteFieldList: ColumnType[] = selectActionTypeFieldList.filter(\n (field: ColumnType) => field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_QUOTE.code,\n );\n\n if (dataSourceItems.length > 0) {\n dataSourceItems.forEach((ds) => {\n const dsType = ds.type || 'fetch';\n // \u5904\u7406\u975E\u81EA\u5B9A\u4E49\u6570\u636E\u6E90\n if (dsType !== 'custom') {\n // Add.vue\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n subModule: 'Add',\n name: TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport,\n content: `import ${getApiName(ds.id)} from '@/api/${ds.id}';`,\n linkAfter: [...DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport]],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ConstVar,\n subModule: 'Add',\n content: `\nconst form = ref(null)\n\nconst props = defineProps<{\n id?: string\n}>()\n\nconst addFields = ref(fields(''))\nconst formState = reactive({\n id: props.id\n})\n `,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent,\n subModule: 'Add',\n content: `\n ${selectActionTypeFieldList.map((field: ColumnType) => {\n return `\n// \u8BF7\u6C42\u5B57\u6BB5\u8FDC\u7A0B\u6570\u636E\nonBeforeMount(async () => {\n const fieldsItem = addFields.find(item => item.name === '${field.columnComment}')\n if (fieldsItem) {\n const typeValue = reactive<SelectProps>(fieldsItem.typeValue as SelectProps)\n const { data } = await new ${\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_CHILDREN_TABLE.code ||\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_QUOTE.code ||\n field.columnKeyType == DYNAMIC_COLUMN_DATA_TYPE_LINKAGE.code\n ? 'Post'\n : 'Get'\n }RequestModel<Array<OptionProps>>('${field.selectAction}', {}).request()\n typeValue.isFetching = data.length >= 100\n typeValue.options = data ?? []\n // \u76F4\u63A5\u66F4\u65B0\u539F\u59CB item \u7684 typeValue\n fieldsItem.typeValue = typeValue\n }\n})\n `;\n })}\nonMounted(async () => {\n ${selectActionTypeFieldList\n .map((field: ColumnType) => {\n return `\n await get${camelize(field.columnName)}()\n `;\n })\n .join('')}\n \n //\u67E5\u8BE6\u60C5\u5E76\u663E\u793A\n if (props.id) {\n const { data } = await ${getApiName(ds.id)}.getById(props.id)\n Object.assign(formState, data)\n } \n})\n `,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.Method,\n subModule: 'Add',\n content: `\n${selectActionTypeFieldList.map((field: ColumnType) => {\n return `\n const get${camelize(field.columnName)} = async () => {\n const typeValue = reactive<SelectProps>(fieldsItem.typeValue as SelectProps)\n const { data } = await new ${\n field.selectActionType == 14 || field.selectActionType == 15 ? 'Post' : 'Get'\n }RequestModel<Array<OptionProps>>('${field.selectAction}', {}).request()\n\n typeValue.isFetching = data.length >= 100\n \n typeValue.options = data ?? []\n \n // \u76F4\u63A5\u66F4\u65B0\u539F\u59CB item \u7684 typeValue\n fieldsItem.typeValue = typeValue\n }\n `;\n})}\n/**\n * \u8868\u5355\u5B57\u6BB5\u503C\u6539\u53D8\u89E6\u53D1\n **/\nfunction extraValueChange(name: string, option: ExtraProps) {\n ${\n quoteFieldList\n ? `\n //\u5F15\u7528\u5B57\u6BB5\n const referenceFields: ColumnField[] = [\n ${quoteFieldList.map((field: ColumnType) => {\n return `\n {\n fieldName: '${camelize(field.columnName)}',\n joinTableInfoId: '${field.joinTableInfo.id}',\n }\n `;\n })}\n ]\n `\n : ''\n }\n ${\n quoteFieldList\n ? `\n //\u6709\u7B5B\u9009\u5173\u7CFB\u5B57\u6BB5\n const filterFields: FilterField[] = [\n ${quoteFieldList.map((field: ColumnType) => {\n console.log(field.joinTableInfo.joinColumnList);\n return `\n {\n fieldName: '${camelize(field.columnName)}',\n columnName: '${field.columnName}',\n columnKeyType: ${field.columnKeyType},\n selectAction: '${field.selectAction}',\n selectActionLabelArr: [],\n joinColumnList: [${field.joinTableInfo.joinColumnList\n .map((item) => JSON.stringify(item))\n .join(', \\n')}]\n }\n `;\n })}\n \n ]\n// \u5904\u7406\u7B5B\u9009\u5B57\u6BB5\nif(filterFields.length > 0) handleFilterField<IDynamicTbSpxx>(name, option, formState, addFields, filterFields)\n `\n : ''\n }\n\n }\n /**\n * \u63D0\u4EA4\u6570\u636E\n **/\n async function onSubmit () {\n if (props.id) {\n const { message } = await ${getApiName(ds.id)}.update(formState)\n messageMethod.success(message)\n } else {\n const { message } = await ${getApiName(ds.id)}.add(formState)\n messageMethod.success(message)\n }\n }\n `,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd,\n subModule: 'Add',\n content: `\n </script>\n `,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd]],\n });\n\n // Manage.vue\u6587\u4EF6\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.TemplateDom,\n subModule: 'Manage',\n content: `\n <template>\n <div class=\"page\">\n <div class=\"action\">\n <SearchBar\n placeholder=\"\u8BF7\u8F93\u5165\u5173\u952E\u8BCD\"\n :searchText=\"true\"\n v-model:search-value=\"searchValue\"\n @confirm=\"handleSearch\"\n @clear=\"handleSearch\"\n :autofocus=\"true\"\n >\n </SearchBar>\n <Icon type=\"add\" />\n </div>\n <van-pull-refresh :disabled=\"true\" v-model=\"refreshing\" @refresh=\"onRefresh\" v-if=\"list.length > 0\">\n <van-list v-model:loading=\"loading\" :finished=\"finished\" finished-text=\"\u6CA1\u6709\u66F4\u591A\u4E86\" @load=\"onLoad\">\n <div class=\"list\">\n <div class=\"list-item\" v-for=\"item in list\" :key=\"item.id\">\n ${\n columnList.length > 3\n ? columnList.slice(0, 3).map((item: ColumnType) => {\n return `\n <div class=\"list-item-column\" >${item.columnComment}: {{item['${item.columnName}']}}</div>\n `;\n })\n : columnList.map((item: ColumnType) => {\n return `\n <div class=\"list-item-column\" >${item.columnComment}: {{item['${item.columnName}']}}</div>\n `;\n })\n }\n </div>\n </div>\n </van-list>\n </van-pull-refresh>\n </div>\n </template>\n `,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.TemplateStart],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ExternalDepsImport,\n subModule: 'Manage',\n content: `\n <script setup lang=\"ts\">\n import { SearchBar, Icon } from '@dckj-npm/lowcode-vue-materials'\n import { ref, onMounted } from 'vue'\n `,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.ScriptStart],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n subModule: 'Manage',\n name: TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport,\n content: `import ${getApiName(ds.id)} from '@/api/${ds.id}';`,\n linkAfter: [...DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport]],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ConstVar,\n subModule: 'Manage',\n content: `\n const pageNum = ref(1)\n let loading = ref(false)\n const finished = ref(false)\n const refreshing = ref(false)\n const isLastPage = ref(false)\n let list = ref<any[]>([])\n `,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.InternalDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.OnMountedContent,\n subModule: 'Manage',\n content: `\n onMounted(() => {\n onRefresh()\n })\n `,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.OnMountedStart],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.Method,\n subModule: 'Manage',\n content: `\n const onRefresh = async () => {\n // \u6E05\u7A7A\u5217\u8868\u6570\u636E\n finished.value = false\n \n // \u91CD\u65B0\u52A0\u8F7D\u6570\u636E\n // \u5C06 loading \u8BBE\u7F6E\u4E3A true\uFF0C\u8868\u793A\u5904\u4E8E\u52A0\u8F7D\u72B6\u6001\n loading.value = true\n pageNum.value = 1\n await onLoad()\n }\n const onLoad = async () => {\n if (refreshing.value) {\n list.value = []\n refreshing.value = false\n }\n // \u907F\u514D\u91CD\u590D\u52A0\u8F7D\n // if (loading.value || finished.value) return\n \n let { data } = await ${getApiName(\n ds.id,\n )}.page({ pageNum: pageNum.value, pageSize: 10 })\n console.log('data', data.list)\n \n isLastPage.value = data.isLastPage\n if (data.pageNum === 1) {\n list.value = data.list\n } else {\n list.value?.push(...data.list)\n }\n loading.value = false\n pageNum.value = pageNum.value + 1\n if (isLastPage.value || list.value.length >= data.total) {\n finished.value = true\n console.log(finished.value)\n }\n }\n `,\n linkAfter: [TEMPLATE_DEFINE_CHUNK_NAME.UnMountedEnd],\n });\n }\n });\n }\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd,\n subModule: 'Manage',\n content: `\n </script>\n `,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd]],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.VUE,\n name: TEMPLATE_DEFINE_CHUNK_NAME.CssStyleImport,\n subModule: 'Manage',\n content: `\n <style lang=\"scss\">\n .page {\n width: 100%;\n display: flex;\n flex-direction: column;\n .action {\n width: 100%;\n display: flex;\n align-items: center;\n }\n .list {\n width: 100%;\n display: flex;\n flex-direction: column;\n .list-item {\n width: 100%;\n display: flex;\n flex-direction: column;\n .list-item-column {\n display: flex;\n align-items: center;\n }\n }\n }\n }\n </style>\n `,\n linkAfter: [...VUE_DEFAULT_LINK_AFTER[TEMPLATE_DEFINE_CHUNK_NAME.ScriptEnd]],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import { COMMON_CHUNK_NAME } from '../../../../../const';\n\nimport {\n BuilderComponentPlugin,\n BuilderComponentPluginFactory,\n ChunkType,\n FileType,\n ICodeStruct,\n IProjectInfo,\n IRouterInfo,\n} from '../../../../../types';\n\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n const ir = next.ir as IProjectInfo;\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: `\n import { BasePo, BusinessPO } from '@dc/vue-h5-base/src/entity/common/base'\n import { ExtraProps, FieldProps, SelectProps } from '@dc/vue-h5-base/src/components/form-item/field-props'\n import { PostRequestModel, QueryType } from '@dc/vue-h5-base/src/http/request-model'\n import { OptionProps } from 'ant-design-vue/es/vc-select/Option'\n\t\timport { UnwrapNestedRefs } from 'vue'\n\t\timport { BaseUtil } from '@dc/vue-h5-base/src/utils/base-util'\n\t\timport { CascaderProps, UploadFile, UploadProps } from 'ant-design-vue'\n `,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport],\n });\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.TS,\n name: COMMON_CHUNK_NAME.FileVarDefine,\n content: `\nexport interface IColumnOption {\n\t/**\n\t * \u662F\u5426\u662F\u9ED8\u8BA4\u503C\n\t */\n\tisDefault: number\n\t/**\n\t * \u9009\u9879\u540D\u79F0\n\t */\n\toptionName: string\n\t/**\n\t * \u9009\u9879\u503C\n\t */\n\toptionValue: string | number\n\n\t[key: string]: string | number | string[]\n}\nexport interface FilterField {\n\tfieldName: string\n\tcolumnName: string\n\tcolumnKeyType: number\n\tselectAction: string\n\tselectActionLabelArr: string[]\n\tjoinColumnList: {\n\t\tconditionKey: string\n\t\tconditionValue: string\n\t}[]\n}\nexport interface LinkageField {\n\tselectAction: string\n\tselectActionValue: string\n\tselectActionLabel: string\n}\n\nexport function handleFilterField<T extends BusinessPO | BasePo>(\n\tname: string,\n\toption: ExtraProps,\n\tformState: Record<string, unknown>,\n\tfieldList: Array<FieldProps<T>>,\n\tfilterFields: FilterField[]\n) {\n\tconst relationColumns = filterFields.filter(column => column.joinColumnList.find(joinColumn => joinColumn.conditionKey === name))\n\tif (relationColumns.length > 0) {\n\t\tlet itemList: Record<string, QueryType>[] = []\n\t\titemList = relationColumns.map(relationColumn => {\n\t\t\treturn {\n\t\t\t\tcolumnName: relationColumn.columnName,\n\t\t\t\tcolumnValue: option.values ? (formState[relationColumn.fieldName] as QueryType) : ''\n\t\t\t}\n\t\t})\n\t\tconst field = filterFields.find(field => field.fieldName === name)\n\t\titemList.push({\n\t\t\tcolumnName: field?.columnName,\n\t\t\tcolumnValue: formState[field?.fieldName as string] as string\n\t\t})\n\t\trelationColumns.forEach(column => {\n\t\t\tconst { columnKeyType, selectAction, selectActionLabelArr } = column\n\t\t\tif (columnKeyType !== 47) {\n\t\t\t\tnew PostRequestModel<Array<IColumnOption>>(selectAction, itemList ? { itemList } : {}).request().then(({ data }) => {\n\t\t\t\t\tconst fieldTypeValue = fieldList.find(field => field.name === column.fieldName)?.typeValue as SelectProps\n\t\t\t\t\tif (fieldTypeValue) fieldTypeValue.options = data ?? []\n\t\t\t\t\tconst isMultipleField = selectActionLabelArr && selectActionLabelArr.length > 1\n\t\t\t\t\tif (isMultipleField) {\n\t\t\t\t\t\tdata?.forEach(item => {\n\t\t\t\t\t\t\tconst label: string[] = []\n\t\t\t\t\t\t\tselectActionLabelArr.forEach(labelName => label.push(<string>item[labelName]))\n\t\t\t\t\t\t\titem.label = label.join(',')\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t}\n}\n\nexport const handleColumnOptions = <T>(data: Array<T>, selectActionType: number, selectActionLabel: string, selectActionValue: string) => {\n\tlet columnOptionList = []\n\tswitch (selectActionType) {\n\t\tcase 6:\n\t\t\t// \u90E8\u95E8\u7528\u6237\u5217\u8868\n\t\t\tcolumnOptionList = JSON.parse(\n\t\t\t\tJSON.stringify(data)\n\t\t\t\t\t.replace(/\"deptName\"/g, \\`\"\\${selectActionLabel}\"\\`)\n\t\t\t\t\t.replace(/\"deptId\"/g, \\`\"\\${selectActionValue}\"\\`)\n\t\t\t\t\t.replace(/\"userList\"/g, '\"options\"')\n\t\t\t)\n\t\t\tbreak\n\t\tcase 7:\n\t\t\t// \u90E8\u95E8\u7528\u6237\u6811\n\t\t\tcolumnOptionList = JSON.parse(\n\t\t\t\tJSON.stringify(flattenDeptUserTree(data as Array<any>))\n\t\t\t\t\t.replace(/\"deptName\"/g, \\`\"\\${selectActionLabel}\"\\`)\n\t\t\t\t\t.replace(/\"deptId\"/g, \\`\"\\${selectActionValue}\"\\`)\n\t\t\t)\n\t\t\tbreak\n\t\tcase 8:\n\t\t\t// \u5355\u4F4D\u90E8\u95E8\u7528\u6237\u5217\u8868\n\t\t\tcolumnOptionList = JSON.parse(\n\t\t\t\tJSON.stringify(flatten(data as Array<any>))\n\t\t\t\t\t.replace(/\"orgName\"/g, \\`\"\\${selectActionLabel}\"\\`)\n\t\t\t\t\t.replace(/\"orgId\"/g, \\`\"\\${selectActionValue}\"\\`)\n\t\t\t\t\t.replace(/\"deptName\"/g, \\`\"\\${selectActionLabel}\"\\`)\n\t\t\t\t\t.replace(/\"deptId\"/g, \\`\"\\${selectActionValue}\"\\`)\n\t\t\t\t\t.replace(/\"deptUserList\"/g, '\"children\"')\n\t\t\t\t\t.replace(/\"userList\"/g, '\"children\"')\n\t\t\t)\n\t\t\tbreak\n\t\tdefault:\n\t\t\tcolumnOptionList = data\n\t}\n\treturn columnOptionList\n}\n\t\n/**\n * \u8F6C\u5316\u6587\u4EF6\u7C7B\u578B\n * @param fileTypeString\n */\nexport const convertFileTypeString = (fileTypeString: string): string => {\n\tconst parts = fileTypeString.split('/')\n\tif (parts.length > 0) {\n\t\treturn parts.flatMap(part => part.split(',').map(type => \\`.\\${type}\\`)).join(',')\n\t} else {\n\t\treturn fileTypeString\n\t\t\t.split(',')\n\t\t\t.map(item => \\`.\\${item}\\`)\n\t\t\t.join(',')\n\t}\n}\n\t/**\n * \u5904\u7406\u8FDC\u7A0B\u641C\u7D22\u94A9\u5B50\u51FD\u6570\n * @param fieldList \u8868\u5355\u5B57\u6BB5\u5217\u8868\n * @param linkageFields \u6709\u5173\u8054\u5173\u7CFB\u7684\u5B57\u6BB5\n * @param name \u5B57\u6BB5\u540D\n * @param value \u503C\n */\nexport const handleRemoteSearch = async <T extends BusinessPO | BasePo>(\n\tfieldList: Array<FieldProps<T>>,\n\tlinkageFields: Record<string, LinkageField>,\n\tname: string,\n\tvalue: string\n) => {\n\tif (fieldList.length === 0) return\n\tconst typeValue = fieldList.find(item => item.name === name)?.typeValue as SelectProps\n\tconst itemField = Object.keys(linkageFields).find(item => item === name)\n\tif (itemField && typeValue && typeValue?.isFetching) {\n\t\tconst { data } = await new PostRequestModel<Array<IColumnOption>>(linkageFields[itemField as string].selectAction, {\n\t\t\titemList: [{ columnName: linkageFields[itemField].selectActionLabel, columnValue: value }]\n\t\t}).request()\n\t\ttypeValue.options = data\n\t}\n}\nexport interface ColumnField {\n\tfieldName: string\n\tjoinTableInfoId?: string\n\tlinkageTable?: string\n\tlinkageTableColumn?: string\n}\n\t/**\n * \u5904\u7406\u5173\u8054\u5B57\u6BB5\u94A9\u5B50\u51FD\u6570\n * @param referenceFields \u5F15\u7528\u5B57\u6BB5\n * @param linkageFields \u5173\u8054\u5B57\u6BB5\n * @param name \u5B57\u6BB5\u540D\n * @param options \u9009\u62E9\u9879\n * @param formState \u8868\u5355\u5B57\u6BB5\n */\nexport const handleLinkageFields = <T>(\n\treferenceFields: Array<ColumnField>,\n\tlinkageFields: Array<ColumnField>,\n\tname: string,\n\toptions: Array<OptionProps>,\n\tformState: UnwrapNestedRefs<Partial<T>>\n) => {\n\tconst localReference = referenceFields.filter(field => field?.fieldName === name)\n\n\tif (localReference.length > 0) {\n\t\tconst localLinkage = linkageFields.filter(field => field.linkageTable === localReference[0].joinTableInfoId)\n\t\tif (localLinkage.length > 0) {\n\t\t\tlocalLinkage.flatMap(item => {\n\t\t\t\tformState[item.fieldName as keyof UnwrapNestedRefs<Partial<T>>] = options[0][item.linkageTableColumn as string]\n\t\t\t})\n\t\t}\n\t}\n}\n/**\n * \u5904\u7406\u9644\u4EF6\u5217\u8868\u94A9\u5B50\n * @param formState \u8868\u5355\u6570\u636E\n * @param fieldList \u5B57\u6BB5\u5217\u8868\u6570\u636E\n */\nexport const handleFileList = <T extends BusinessPO | BasePo>(formState: UnwrapNestedRefs<Partial<T>>, fieldList: Array<FieldProps<T>>) => {\n\tconst uploadComponents = fieldList.filter(item => item.type === 'upload')\n\tif (uploadComponents.length > 0) {\n\t\tfieldList\n\t\t\t.filter(item => item.type === 'upload')\n\t\t\t.forEach(item => {\n\t\t\t\tconst typeValue = item.typeValue as UploadProps\n\t\t\t\tconst fieldValue = formState[\\`\\${item.name as string}FileList\\` as keyof UnwrapNestedRefs<Partial<T>>] as LogFile[]\n\t\t\t\tif (typeValue && fieldValue && fieldValue.length > 0) {\n\t\t\t\t\ttypeValue.fileList = []\n\t\t\t\t\ttypeValue.fileList =\n\t\t\t\t\t\t(fieldValue\n\t\t\t\t\t\t\t?.filter(item => item)\n\t\t\t\t\t\t\t.map(item => ({\n\t\t\t\t\t\t\t\tuid: item.id,\n\t\t\t\t\t\t\t\turl: BaseUtil.getUploadPath(item.uploadPath)\n\t\t\t\t\t\t\t})) as UploadFile<LogFile>[]) ?? []\n\t\t\t\t}\n\t\t\t})\n\t}\n}\n/**\n * \u83B7\u53D6\u9ED8\u8BA4\u503C\u94A9\u5B50\u51FD\u6570\n * @param formState \u8868\u5355\u6570\u636E\n * @param tableId\n * @param id \u4E3B\u952Eid\n */\nexport const getDefaultValues = <T extends BusinessPO | BasePo>(formState: Record<string, any>, tableId: string, id?: string | undefined) => {\n\tdynamicRequest\n\t\t.getDefaultValue({\n\t\t\ttableId,\n\t\t\tid,\n\t\t\trecordMap: formState\n\t\t})\n\t\t.then(({ data }) => {\n\t\t\tdata.forEach(item => {\n\t\t\t\tformState[item.columnName as string] = item.columnValue\n\t\t\t})\n\t\t})\n}\nexport type PickType = 'date' | 'week' | 'month' | 'quarter' | 'year'\n/**\n * \u8BBE\u7F6E\u65E5\u671F\u9009\u62E9\u5668\u7C7B\u578B\u548C\u65E5\u671F\u683C\u5F0F\u94A9\u5B50\u51FD\u6570\n * @param dateFormat \u65E5\u671F\u683C\u5F0F\n */\nexport const setDatePickProps = (dateFormat?: string, showTime?: boolean) => {\n\tlet type: PickType = 'date'\n\tlet dateFormatUpper = dateFormat?.replace(/yyyy/g, 'YYYY').replace(/dd/g, 'DD') || 'YYYY-MM-DD'\n\tif (showTime) dateFormatUpper = dateFormat?.replace(/yyyy/g, 'YYYY').replace(/dd/g, 'DD') || 'YYYY-MM-DD HH:mm'\n\tif (dateFormat) {\n\t\tconst formatLowerCase = dateFormat.toLowerCase()\n\t\tif (formatLowerCase.includes('w') || formatLowerCase.includes('ww')) {\n\t\t\ttype = 'week'\n\t\t} else if (formatLowerCase.includes('q')) {\n\t\t\ttype = 'quarter'\n\t\t} else if (!formatLowerCase.includes('dd')) {\n\t\t\ttype = 'month'\n\t\t\tif (!formatLowerCase.includes('mm')) {\n\t\t\t\ttype = 'year'\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tpickType: type,\n\t\tformat: dateFormatUpper,\n\t\tvalueFormat: dateFormatUpper\n\t}\n}\n\n `,\n linkAfter: [COMMON_CHUNK_NAME.ExternalDepsImport, COMMON_CHUNK_NAME.InternalDepsImport],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\n", "import template from './template';\nimport packageJSON from './plugins/packageJSON';\nimport router from './plugins/router';\nimport main from './plugins/main';\nimport form from './plugins/form';\nimport hooks from './plugins/hooks';\n\nexport default {\n template,\n plugins: {\n packageJSON,\n router,\n main,\n form,\n hooks,\n },\n};\n", "import { createProjectBuilder } from '../generator/ProjectBuilder';\nimport containerVue from '../plugins/component/vue/containerVue';\nimport template from '../plugins/component/vue/template';\nimport vueCommonDeps from '../plugins/component/vue/vueCommonDeps';\nimport apiImport from '../plugins/component/vue/apiImport';\nimport esmodule from '../plugins/component/vue/esmodule';\nimport containerInitVariable from '../plugins/component/vue/containerInitVariable';\nimport containerLifeCycle from '../plugins/component/vue/containerLifeCycle';\nimport containerInjectDataSourceEngine from '../plugins/component/vue/containerInjectDataSourceEngine';\nimport containerMethod from '../plugins/component/vue/containerMethod';\nimport dataSourceMap from '../plugins/component/vue/dataSourceMap';\nimport routerSecond from '../plugins/component/vue/routerSecond';\nimport vuejs3 from '../plugins/project/framework/vuejs3';\nimport { prettier } from '../postprocessor';\n\nexport default function createDcSolutionProjectBuilder() {\n return createProjectBuilder({\n template: vuejs3.template,\n plugins: {\n components: [],\n pages: [\n template({\n nodeTypeMapping: {\n Div: 'div',\n Component: 'div',\n Page: 'div',\n Block: 'div',\n },\n }),\n vueCommonDeps(),\n esmodule({ fileType: 'vue' }),\n containerVue(),\n apiImport(),\n containerInitVariable(),\n dataSourceMap(),\n containerLifeCycle(),\n containerMethod(),\n ],\n router: [\n // CodeGen.plugins.common.esModule(),\n vuejs3.plugins.router(),\n ],\n // entry: [CodeGen.solutionParts.icejs.plugins.entry()],\n // constants: [CodeGen.plugins.project.constants()],\n utils: [],\n i18n: [],\n // globalStyle: [CodeGen.solutionParts.icejs.plugins.globalStyle()],\n // htmlEntry: [CodeGen.solutionParts.icejs.plugins.entryHtml()],\n packageJSON: [vuejs3.plugins.packageJSON()],\n api: [containerInjectDataSourceEngine()],\n main: [vuejs3.plugins.main()],\n form: [vuejs3.plugins.form()],\n hooks: [vuejs3.plugins.hooks()],\n routerModules: [routerSecond()]\n },\n postProcessors: [prettier()],\n });\n}\nexport const plugins = {\n template,\n vueCommonDeps,\n esmodule,\n containerVue,\n apiImport,\n containerInitVariable,\n dataSourceMap,\n containerLifeCycle,\n containerMethod,\n vuejs3,\n};\n", "import { COMMON_CHUNK_NAME } from '../../const/generator';\n\nimport { BuilderComponentPlugin, BuilderComponentPluginFactory, ChunkType, FileType, ICodeStruct } from '../../types';\n\n// TODO: How to merge this logic to common deps\nconst pluginFactory: BuilderComponentPluginFactory<unknown> = () => {\n const plugin: BuilderComponentPlugin = async (pre: ICodeStruct) => {\n const next: ICodeStruct = {\n ...pre,\n };\n\n next.chunks.push({\n type: ChunkType.STRING,\n fileType: FileType.JSX,\n name: COMMON_CHUNK_NAME.InternalDepsImport,\n content: 'import * from \\'react\\';',\n linkAfter: [],\n });\n\n return next;\n };\n return plugin;\n};\n\nexport default pluginFactory;\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\nimport * as common from './common';\nimport * as compositeType from './compositeType';\nimport * as jsExpression from './jsExpression';\nimport * as jsSlot from './jsSlot';\nimport * as nodeToJSX from './nodeToJSX';\nimport * as resultHelper from './resultHelper';\nimport * as templateHelper from './templateHelper';\nimport * as validate from './validate';\nimport * as schema from './schema';\nimport * as version from './version';\nimport * as scope from './Scope';\nimport * as expressionParser from './expressionParser';\nimport * as dataSource from './dataSource';\nimport * as pathHelper from './pathHelper';\n\nexport {\n common,\n compositeType,\n jsExpression,\n jsSlot,\n nodeToJSX,\n resultHelper,\n templateHelper,\n validate,\n schema,\n version,\n scope,\n expressionParser,\n dataSource,\n pathHelper,\n};\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["import_change_case", "FileType", "ChunkType", "PluginType", "InternalDependencyType", "DependencyType", "PIECE_TYPE", "changeCase", "short", "ContainerType", "changeCase", "_a", "_b", "file", "nm", "t", "plugins", "file", "plugins", "file", "file", "JSZip", "file", "import_change_case", "pluginFactory", "changeCase", "import_change_case", "pluginFactory", "changeCase", "import_lowcode_types", "import_lodash", "parseExpression", "parser", "import_generator", "import_traverse", "t", "import_lowcode_types", "parseExpression", "import_generator", "import_types", "generate", "traverse", "parseExpression", "traverse", "generate", "parseExpression", "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", "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", "import_lodash", "_", "data", "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", "pluginFactory", "item", "pluginFactory", "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", "getFile", "file", "generateStaticFiles", "getFile", "generateStaticFiles", "template_default", "pluginFactory", "packageJSON_default", "pluginFactory", "router_default", "pluginFactory", "scope", "_a", "transformJsExpr", "transformThis2Context", "_b", "getApiName", "pluginFactory", "getApiName", "pluginFactory", "template_default", "packageJSON_default", "router_default", "template_default", "esmodule_default", "containerLifeCycle_default", "containerMethod_default", "containerInjectDataSourceEngine_default", "plugins", "pluginFactory", "createIceJsProjectBuilder", "plugins"]
|
|
7
7
|
}
|