feat: add recore project template

This commit is contained in:
春希 2020-04-20 13:53:16 +08:00
parent e906683a1a
commit 267953b82b
16 changed files with 692 additions and 0 deletions

View File

@ -0,0 +1,32 @@
import ResultFile from '../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'.editorconfig',
'',
`
# EditorConfig is awesome: http://EditorConfig.org
# top-most EditorConfig file
root = true
# Tab indentation
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
`,
);
return [[], file];
}

View File

@ -0,0 +1,26 @@
import ResultFile from '../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'.eslintignore',
'',
`
.idea
.vscode
.theia
.recore
build/
.*
~*
node_modules
packages/solution
`,
);
return [[], file];
}

View File

@ -0,0 +1,57 @@
import ResultFile from '../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'.gitignore',
'',
`
node_modules/
coverage/
build/
dist/
.idea/
.vscode/
.theia/
.recore/
.Trash-*/
~*
package-lock.json
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store
*.swp
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
`,
);
return [[], file];
}

View File

@ -0,0 +1,22 @@
import ResultFile from '../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'.prettierrc',
'',
`
{
"semi": true,
"singleQuote": true,
"printWidth": 120,
"trailingComma": "all"
}
`,
);
return [[], file];
}

View File

@ -0,0 +1,36 @@
import ResultFile from '../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'README',
'md',
`
# runtime-code
##
```bash
# install dependencies
tnpm install
# serve with hot reload at localhost:8080
npm start
# test projects
npm test
# local build
npm run build
```
`,
);
return [[], file];
}

View File

@ -0,0 +1,28 @@
import ResultFile from '../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'abc',
'json',
`
{
"name": "test",
"assets": {
"type": "command",
"command": {
"cmd": [
"tnpm ii",
"tnpm run build"
]
}
}
}
`,
);
return [[], file];
}

View File

@ -0,0 +1,32 @@
import ResultFile from '../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'build',
'json',
`
{
"entry": "src/index",
"alias": {
"@": "./src"
},
"publicPath": "./",
"outputAssetsPath": {
"js": "",
"css": ""
},
"plugins": [
"build-plugin-react-app",
"@ali/build-plugin-recore-lowcode"
],
"externals": { "react": "window.React", "react-dom": "window.ReactDOM", "@ali/recore": "window.Recore" }
}
`,
);
return [[], file];
}

View File

@ -0,0 +1,67 @@
import ResultFile from '../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'package',
'json',
`
{
"name": "test",
"version": "1.0.0",
"description": "test",
"scripts": {
"start": "build-scripts start",
"build": "build-scripts build",
"test": "build-scripts test"
},
"engines": {
"node": ">= 8.9.0",
"npm": ">=6.1.0"
},
"dependencies": {
"@ali/recore": "^1.6.10",
"@ali/lowcode-runtime": "^0.8.0",
"@ali/recore-renderer": "^0.0.1",
"@ali/vc-shell": "1.3.1",
"@ali/vc-block": "^3.0.3-beta.1",
"@ali/vc-deep": "1.2.38",
"@ali/vc-div": "^1.0.1",
"@ali/vc-page": "^1.0.5",
"@ali/vc-slot": "^2.0.1",
"@ali/vc-text": "^4.0.1",
"@ali/vu-dataSource": "^1.0.4",
"@ali/vu-formatter": "^2.0.0",
"@ali/vu-fusion": "^2.0.1-beta.0",
"@ali/vu-legao-builtin": "^1.4.0-beta.2",
"react": "^16"
},
"devDependencies": {
"build-plugin-react-app": "^1.0.15",
"@ali/build-plugin-recore-lowcode": "^0.0.1",
"@alib/build-scripts": "^0.1.0",
"@types/node": "^7",
"@types/react": "^16",
"eslint": "^6.5.1",
"tslib": "^1.9.3",
"typescript": "^3.1.3",
"prettier": "^1.18.2"
},
"lint-staged": {
"./src/**/*.{ts,tsx}": [
"tslint --fix",
"git add"
]
},
"nowa": {
"solution": "@ali/nowa-recore-solution"
}
}
`,
);
return [[], file];
}

View File

@ -0,0 +1,51 @@
import ResultFile from '../../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'index',
'html',
`
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=no" />
<title>lowcode-runtime-test</title>
<link rel="shortcut icon" type="image/png" href="https://img.alicdn.com/tfs/TB1zgoCemrqK1RjSZK9XXXyypXa-96-96.png" />
<link rel="stylesheet" id="" href="//g.alicdn.com/legao-comp/csxs/1.0.2/web.css?t=1f">
<script
src="https://g.alicdn.com/code/lib/??react/16.9.0/umd/react.production.min.js,react-dom/16.9.0/umd/react-dom.production.min.js,prop-types/15.7.2/prop-types.js"></script>
<!-- React 非压缩版代码,可根据需要替换或通过代理替换后方便调试 -->
<!-- <script src="https://g.alicdn.com/code/lib/??react/16.9.0/umd/react.development.js,react-dom/16.9.0/umd/react-dom.development.js,prop-types/15.7.2/prop-types.js"></script> -->
<script src="https://g.alicdn.com/mylib/@ali/recore/1.6.8/umd/recore.min.js"></script>
<script>
React.PropTypes = PropTypes;
</script>
<style type="text/css">
body {
-webkit-overflow-scrolling: touch;
}
</style>
</head>
<body>
<script>
window.g_config = {
appKey: 'test', // 乐高应用的 AppKey
// isSectionalRender: true, // 必填,标记当前为局部使用
// autoRender: true,
// index: 'search_form',
};
</script>
</body>
</html>
`,
);
return [['public'], file];
}

View File

@ -0,0 +1,77 @@
import ResultFile from '../../../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'app',
'ts',
`
export default {
"sdkVersion": "1.0.3",
"history": "hash", // 浏览器路由brower 哈希路由hash
"containerId": "app",
"layout": {
"componentName": "BasicLayout",
"props": {
"navConfig": {
"showLanguageChange": true,
"data": [
{
"hidden": false,
"navUuid": "FORM-CP5669B1-3AW9DCLHZAY8EIY6WE6X1-GFZM3V1K-6",
"children": [],
"icon": "",
"targetNew": false,
"title": "测试基础表格",
"inner": true,
"relateUuid": "FORM-CP5669B1-3AW9DCLHZAY8EIY6WE6X1-GFZM3V1K-6",
"slug": "qihfg"
},
{
"hidden": false,
"navUuid": "FORM-CP5669B1-8AW9XCUT4PCH15SMDWUM3-ZPQP3V1K-1",
"children": [],
"icon": "",
"targetNew": false,
"title": "测试查询表格",
"inner": true,
"relateUuid": "zqhej",
"slug": "zqhej"
}
],
"systemLink": "/my_dev_center_code/0.1.0",
"appName": "乐高转码demo",
"isFoldHorizontal": "n",
"showAppTitle": true,
"isFold": "n",
"searchBarType": "icon",
"singletons": {},
"navTheme": "default",
"type": "top_side_fold",
"navStyle": "orange",
"layout": "auto",
"bgColor": "white",
"languageChangeUrl": "/common/account/changeAccountLanguage.json",
"showSearch": "n",
"openSubMode": false,
"showCrumb": true,
"isFixed": "y",
"showIcon": false,
"showNav": true
}
},
},
"theme": {
"package": "@alife/theme-fusion",
"version": "^0.1.0"
},
"compDependencies": []
}
`,
);
return [['src','config'], file];
}

View File

@ -0,0 +1,43 @@
import ResultFile from '../../../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'components',
'ts',
`
/**
*
*/
import Div from '@ali/vc-div/build/view';
import Text from '@ali/vc-text/build/view';
import Slot from '@ali/vc-slot/build/view';
import Deep from '@ali/vc-deep/build/view';
import Page from '@ali/vc-page/build/view';
import Block from '@ali/vc-block/build/view';
const components = [Div, Text, Slot, Deep, Page, Block];
const componentsMap = {
};
const processComponents = (deps) => {
deps.forEach((dep) => {
if (Array.isArray(dep)) {
processComponents(dep);
} else {
componentsMap[dep.displayName] = dep;
}
});
};
processComponents(components);
export default componentsMap;
`,
);
return [['src','config'], file];
}

View File

@ -0,0 +1,29 @@
import ResultFile from '../../../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'utils',
'ts',
`
import toolkit from '@ali/vu-toolkit';
import fusion from '@ali/vu-fusion';
import dataSource from '@ali/vu-dataSource';
import legaoBuiltin from '@ali/vu-legao-builtin';
import formatter from '@ali/vu-formatter';
export default {
...toolkit,
...fusion,
legaoBuiltin,
dataSource,
formatter
}
`,
);
return [['src','config'], file];
}

View File

@ -0,0 +1,28 @@
import ResultFile from '../../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'index',
'ts',
`
import { app } from '@ali/lowcode-runtime';
import Shell from '@ali/vc-shell';
import StaticRender from './plugins/provider';
// 注册布局组件,可注册多个
app.registerLayout(Shell, {
componentName: 'BasicLayout',
});
app.registerProvider(StaticRender);
app.run();
`,
);
return [['src'], file];
}

View File

@ -0,0 +1,89 @@
import ResultFile from '../../../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'provider',
'ts',
`
import { ReactProvider } from '@ali/lowcode-runtime';
import Router from '@/router';
import appConfig from '@/config/app';
import components from '@/config/components';
import utils from '@/config/utils';
// 定制加载应用配置的逻辑
export default class MyProvider extends ReactProvider {
// 初始化时调用如可以在这里注入全局API
init() {
const gConfig = (window as any).g_config || {};
const LeGao = {
__ctx__: {},
createContext: (cfg: any) => {
const { schema } = cfg || {};
// 1. 根据参数拉取schema
if (schema && typeof schema === 'string') {
this.setHomePage(schema);
}
const { isSectionalRender, autoRender } = gConfig || {};
if (isSectionalRender && !autoRender) {
// 2. 渲染
this.setSectionalRender();
this.ready();
}
const provider = this;
class Context {
get utils() {
return provider.getUtils();
}
get components() {
return provider.getComponents();
}
}
const ctx = new Context();
(LeGao.__ctx__ as any)[this.getContainerId()] = ctx;
return ctx;
},
getContext: (id: string) => {
if (!id) {
for (id in LeGao.__ctx__) {
return (LeGao.__ctx__ as any)[id];
}
}
return (LeGao.__ctx__ as any)[id];
}
};
(window as any).LeGao = LeGao;
if (gConfig.index) {
this.setHomePage(gConfig.index);
}
if (gConfig.isSectionalRender) {
this.setSectionalRender();
if (!gConfig.autoRender) {
return;
}
}
this.ready();
}
// 定制获取、处理应用配置(组件、插件、路由模式、布局等)的逻辑
getAppData() {
return {
...appConfig,
components,
utils: utils,
}
}
getRouterView() {
return Router;
}
}
`,
);
return [['src','plugins'], file];
}

View File

@ -0,0 +1,22 @@
import ResultFile from '../../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'router',
'ts',
`
export default {
baseDir: './pages',
exact: true,
routes: [
{ main: './index', path: '/' },
],
};
`,
);
return [['src'], file];
}

View File

@ -0,0 +1,53 @@
import ResultFile from '../../../../../../model/ResultFile';
import { IResultFile } from '../../../../../../types';
export default function getFile(): [string[], IResultFile] {
const file = new ResultFile(
'tsconfig',
'json',
`
{
"compilerOptions": {
"lib": ["es2015", "dom"],
// Target latest version of ECMAScript.
"target": "esnext",
// Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'.
"module": "esnext",
// Search under node_modules for non-relative imports.
"moduleResolution": "node",
// Process & infer types from .js files.
"allowJs": true,
// Report errors in .js files.
"checkJs": false,
// Don't emit; allow Babel to transform files.
"noEmit": true,
// Enable strictest settings like strictNullChecks & noImplicitAny.
"strict": true,
// Allow default imports from modules with no default export. This does not affect code emit, just typechecking.
"allowSyntheticDefaultImports": true,
// Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'.
"esModuleInterop": true,
// Specify JSX code generation: 'preserve', 'react-native', or 'react'.
"jsx": "preserve",
// Import emit helpers (e.g. __extends, __rest, etc..) from tslib
"importHelpers": true,
// Enables experimental support for ES7 decorators.
"experimentalDecorators": true,
// Generates corresponding .map file.
"sourceMap": true,
// Disallow inconsistently-cased references to the same file.
"forceConsistentCasingInFileNames": true,
// Allow json import
"resolveJsonModule": true,
// skip type checking of declaration files
"skipLibCheck": true,
}
}
`,
);
return [[], file];
}