create-nocobase-app 0.7.0-alpha.9 → 0.7.1-alpha.4
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/bin/index.js +5 -0
- package/package.json +8 -9
- package/src/cli.js +34 -0
- package/src/generator.js +175 -0
- package/src/index.js +0 -0
- package/src/util.js +57 -0
- package/{src/resources/files/packages/app/client → templates}/.gitkeep +0 -0
- package/templates/app/.buildrc.ts +5 -0
- package/templates/app/.editorconfig +16 -0
- package/templates/app/.env.tpl +14 -0
- package/{src/resources/files → templates/app}/.eslintignore +0 -0
- package/{src/resources/files → templates/app}/.eslintrc +0 -0
- package/templates/app/.gitignore.tpl +19 -0
- package/{src/resources/files → templates/app}/.prettierignore +2 -1
- package/{src/resources/files → templates/app}/.prettierrc +0 -0
- package/{src/resources/files → templates/app}/jest.config.js +5 -3
- package/{src/resources/files → templates/app}/jest.setup.ts +0 -1
- package/{src/resources/files → templates/app}/lerna.json +1 -1
- package/templates/app/package.json.tpl +28 -0
- package/{src/resources/files/packages/app/server → templates/app/packages/app/client}/.gitkeep +0 -0
- package/templates/app/packages/app/client/tsconfig.json +21 -0
- package/{src/resources/files/packages/plugins → templates/app/packages/app/server}/.gitkeep +0 -0
- package/templates/app/packages/plugins/.gitkeep +0 -0
- package/templates/app/storage/db/.gitkeep +0 -0
- package/templates/app/storage/uploads/.gitkeep +0 -0
- package/templates/app/tsconfig.jest.json +13 -0
- package/{src/resources/files/tsconfig.json → templates/app/tsconfig.json.tpl} +11 -4
- package/templates/app/tsconfig.server.json +7 -0
- package/bin/create-nocobase-app.js +0 -3
- package/src/create-app.js +0 -170
- package/src/create-nocobase-app.js +0 -11
- package/src/resources/files/jest.cli.js +0 -23
- package/src/resources/files/packages/app/client/.umirc.ts +0 -35
- package/src/resources/files/packages/app/server/tsconfig.build.json +0 -9
- package/src/resources/files/packages/app/server/tsconfig.json +0 -5
- package/src/resources/files/pnpm-workspace.yaml +0 -2
- package/src/resources/files/tsconfig.build.json +0 -19
- package/src/resources/files/tsconfig.jest.json +0 -14
- package/src/resources/templates/client.package.json.js +0 -16
- package/src/resources/templates/env.js +0 -34
- package/src/resources/templates/env.template +0 -37
- package/src/resources/templates/load-src-from-npm.js +0 -49
- package/src/resources/templates/package.json.js +0 -67
- package/src/resources/templates/server.package.json.js +0 -38
- package/src/utils.js +0 -39
package/bin/index.js
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-nocobase-app",
|
|
3
|
-
"version": "0.7.
|
|
3
|
+
"version": "0.7.1-alpha.4",
|
|
4
4
|
"main": "src/index.js",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"licenses": [
|
|
@@ -10,20 +10,19 @@
|
|
|
10
10
|
}
|
|
11
11
|
],
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@
|
|
13
|
+
"@umijs/utils": "^3.5.20",
|
|
14
14
|
"axios": "^0.26.1",
|
|
15
15
|
"chalk": "^4.1.1",
|
|
16
|
-
"commander": "^
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
"
|
|
16
|
+
"commander": "^9.2.0",
|
|
17
|
+
"tar": "6.1.11"
|
|
18
|
+
},
|
|
19
|
+
"bin": {
|
|
20
|
+
"create-nocobase-app": "./bin/index.js"
|
|
21
21
|
},
|
|
22
|
-
"bin": "./bin/create-nocobase-app.js",
|
|
23
22
|
"repository": {
|
|
24
23
|
"type": "git",
|
|
25
24
|
"url": "git+https://github.com/nocobase/nocobase.git",
|
|
26
25
|
"directory": "packages/core/create-nocobase-app"
|
|
27
26
|
},
|
|
28
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "570d039f1904a041729c1967c0637b1109c278a8"
|
|
29
28
|
}
|
package/src/cli.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const { resolve } = require('path');
|
|
3
|
+
const { Command } = require('commander');
|
|
4
|
+
const { AppGenerator } = require('./generator');
|
|
5
|
+
const { concat } = require('./util');
|
|
6
|
+
const packageJson = require('../package.json');
|
|
7
|
+
|
|
8
|
+
const cli = new Command('create-nocobase');
|
|
9
|
+
|
|
10
|
+
cli
|
|
11
|
+
.arguments('<name>', 'directory of new NocoBase app')
|
|
12
|
+
.option('--quickstart', 'quickstart app creation')
|
|
13
|
+
.option('-a, --all-db-dialect', 'install all database dialect dependencies')
|
|
14
|
+
.option('-d, --db-dialect <dbDialect>', 'database dialect, current support sqlite/mysql/postgres', 'sqlite')
|
|
15
|
+
.option('-e, --env <env>', 'environment variables write into .env file', concat, [])
|
|
16
|
+
.description('create a new application')
|
|
17
|
+
.action(async (name, options) => {
|
|
18
|
+
if (options.quickstart) {
|
|
19
|
+
console.log(`⚠️ ${chalk.yellow('quickstart option is deprecated')}`);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const generator = new AppGenerator({
|
|
23
|
+
cwd: resolve(process.cwd(), name),
|
|
24
|
+
args: options,
|
|
25
|
+
context: {
|
|
26
|
+
name,
|
|
27
|
+
version: packageJson.version,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
await generator.run();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
module.exports = cli;
|
package/src/generator.js
ADDED
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
const chalk = require('chalk');
|
|
2
|
+
const crypto = require('crypto');
|
|
3
|
+
const { existsSync } = require('fs');
|
|
4
|
+
const { join, resolve } = require('path');
|
|
5
|
+
const { Generator } = require('@umijs/utils');
|
|
6
|
+
const { downloadPackageFromNpm, updateJsonFile } = require('./util');
|
|
7
|
+
|
|
8
|
+
class AppGenerator extends Generator {
|
|
9
|
+
constructor(options) {
|
|
10
|
+
const { context = {}, ...opts } = options;
|
|
11
|
+
super(opts);
|
|
12
|
+
this.context = context;
|
|
13
|
+
this.env = this.parseEnvs();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
parseEnvs() {
|
|
17
|
+
const envs = this.args.env;
|
|
18
|
+
const items = {};
|
|
19
|
+
for (const env of envs) {
|
|
20
|
+
const keys = env.split('=');
|
|
21
|
+
if (keys.length !== 2) {
|
|
22
|
+
console.log(`${chalk.red(env)} is not a valid environment value`);
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
items[keys[0]] = keys[1];
|
|
26
|
+
}
|
|
27
|
+
return items;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
checkDbEnv() {
|
|
31
|
+
const dialect = this.args.dbDialect;
|
|
32
|
+
const env = this.env;
|
|
33
|
+
if (dialect === 'sqlite') {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (!env.DB_DATABASE || !env.DB_USER || !env.DB_PASSWORD) {
|
|
37
|
+
console.log(
|
|
38
|
+
chalk.red(
|
|
39
|
+
`Please set DB_HOST, DB_PORT, DB_DATABASE, DB_USER, DB_PASSWORD in .env file to complete database settings`,
|
|
40
|
+
),
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
checkProjectPath() {
|
|
46
|
+
if (existsSync(this.cwd)) {
|
|
47
|
+
console.log(chalk.red('Project directory already exists'));
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
checkDialect() {
|
|
53
|
+
const dialect = this.args.dbDialect;
|
|
54
|
+
const supportDialects = ['mysql', 'sqlite', 'postgres'];
|
|
55
|
+
if (!supportDialects.includes(dialect)) {
|
|
56
|
+
console.log(
|
|
57
|
+
`dialect ${chalk.red(dialect)} is not supported, currently supported dialects are ${chalk.green(
|
|
58
|
+
supportDialects.join(','),
|
|
59
|
+
)}.`,
|
|
60
|
+
);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
getContext() {
|
|
66
|
+
const env = this.env;
|
|
67
|
+
const envs = [];
|
|
68
|
+
const dependencies = [];
|
|
69
|
+
const { dbDialect, allDbDialect } = this.args;
|
|
70
|
+
|
|
71
|
+
if (allDbDialect) {
|
|
72
|
+
dependencies.push(`"mysql2": "^2.3.3"`);
|
|
73
|
+
dependencies.push(`"pg": "^8.7.3"`);
|
|
74
|
+
dependencies.push(`"pg-hstore": "^2.3.4"`);
|
|
75
|
+
dependencies.push(`"sqlite3": "^5.0.8"`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
switch (dbDialect) {
|
|
79
|
+
case 'sqlite':
|
|
80
|
+
if (!allDbDialect) {
|
|
81
|
+
dependencies.push(`"sqlite3": "^5.0.8"`);
|
|
82
|
+
}
|
|
83
|
+
envs.push(`DB_STORAGE=${env.DB_STORAGE || 'storage/db/nocobase.sqlite'}`);
|
|
84
|
+
break;
|
|
85
|
+
case 'mysql':
|
|
86
|
+
if (!allDbDialect) {
|
|
87
|
+
dependencies.push(`"mysql2": "^2.3.3"`);
|
|
88
|
+
}
|
|
89
|
+
envs.push(`DB_HOST=${env.DB_HOST || 'localhost'}`);
|
|
90
|
+
envs.push(`DB_PORT=${env.DB_PORT || 3306}`);
|
|
91
|
+
envs.push(`DB_DATABASE=${env.DB_DATABASE || ''}`);
|
|
92
|
+
envs.push(`DB_USER=${env.DB_USER || ''}`);
|
|
93
|
+
envs.push(`DB_PASSWORD=${env.DB_PASSWORD || ''}`);
|
|
94
|
+
break;
|
|
95
|
+
case 'postgres':
|
|
96
|
+
if (!allDbDialect) {
|
|
97
|
+
dependencies.push(`"pg": "^8.7.3"`);
|
|
98
|
+
dependencies.push(`"pg-hstore": "^2.3.4"`);
|
|
99
|
+
}
|
|
100
|
+
envs.push(`DB_HOST=${env.DB_HOST || 'localhost'}`);
|
|
101
|
+
envs.push(`DB_PORT=${env.DB_PORT || 5432}`);
|
|
102
|
+
envs.push(`DB_DATABASE=${env.DB_DATABASE || ''}`);
|
|
103
|
+
envs.push(`DB_USER=${env.DB_USER || ''}`);
|
|
104
|
+
envs.push(`DB_PASSWORD=${env.DB_PASSWORD || ''}`);
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
...this.context,
|
|
110
|
+
dependencies: dependencies.join(`,\n `),
|
|
111
|
+
envs: envs.join(`\n`),
|
|
112
|
+
env: {
|
|
113
|
+
APP_PORT: 13000,
|
|
114
|
+
APP_ENV: 'development',
|
|
115
|
+
DB_DIALECT: dbDialect,
|
|
116
|
+
APP_KEY: crypto.randomBytes(256).toString('base64'),
|
|
117
|
+
...env,
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
async downloadServerPackage() {
|
|
123
|
+
const { name } = this.context;
|
|
124
|
+
console.log('Download: @nocobase/app-server');
|
|
125
|
+
const serverPackageDir = resolve(this.cwd, 'packages/app/server');
|
|
126
|
+
await downloadPackageFromNpm('@nocobase/app-server', serverPackageDir);
|
|
127
|
+
await updateJsonFile(resolve(serverPackageDir, 'package.json'), (data) => {
|
|
128
|
+
data['name'] = `@${name}/app-server`;
|
|
129
|
+
data['version'] = '0.1.0';
|
|
130
|
+
return data;
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
async downloadClientPackage() {
|
|
135
|
+
const { name } = this.context;
|
|
136
|
+
console.log('Download: @nocobase/app-client');
|
|
137
|
+
const clientPackageDir = resolve(this.cwd, 'packages/app/client');
|
|
138
|
+
await downloadPackageFromNpm('@nocobase/app-client', clientPackageDir);
|
|
139
|
+
await updateJsonFile(resolve(clientPackageDir, 'package.json'), (data) => {
|
|
140
|
+
data['name'] = `@${name}/app-client`;
|
|
141
|
+
data['version'] = '0.1.0';
|
|
142
|
+
return data;
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
async writing() {
|
|
147
|
+
this.checkProjectPath();
|
|
148
|
+
this.checkDialect();
|
|
149
|
+
|
|
150
|
+
const { name } = this.context;
|
|
151
|
+
|
|
152
|
+
console.log(`Creating a new NocoBase application at ${chalk.green(name)}`);
|
|
153
|
+
console.log('Creating files');
|
|
154
|
+
|
|
155
|
+
this.copyDirectory({
|
|
156
|
+
context: this.getContext(),
|
|
157
|
+
path: join(__dirname, '../templates/app'),
|
|
158
|
+
target: this.cwd,
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
await this.downloadServerPackage();
|
|
162
|
+
await this.downloadClientPackage();
|
|
163
|
+
|
|
164
|
+
this.checkDbEnv();
|
|
165
|
+
|
|
166
|
+
console.log('');
|
|
167
|
+
console.log(chalk.green(`$ cd ${name}`));
|
|
168
|
+
console.log(chalk.green(`$ yarn install`));
|
|
169
|
+
console.log(chalk.green(`$ yarn nocobase install`));
|
|
170
|
+
console.log(chalk.green(`$ yarn dev`));
|
|
171
|
+
console.log('');
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
exports.AppGenerator = AppGenerator;
|
package/src/index.js
CHANGED
|
File without changes
|
package/src/util.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const tar = require('tar');
|
|
3
|
+
const axios = require('axios');
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
const crypto = require('crypto');
|
|
6
|
+
const { join } = require('path');
|
|
7
|
+
const { execa } = require('@umijs/utils');
|
|
8
|
+
const { unlink, writeFile, readFile } = require('fs').promises;
|
|
9
|
+
|
|
10
|
+
exports.downloadPackageFromNpm = async (packageName, target) => {
|
|
11
|
+
const { stdout } = await execa('npm', ['v', packageName, 'dist.tarball']);
|
|
12
|
+
const tarballFile = join(target, '..', `${crypto.createHash('md5').update(packageName).digest('hex')}-tarball.gz`);
|
|
13
|
+
const writer = fs.createWriteStream(tarballFile);
|
|
14
|
+
console.log(chalk.gray(`URL: ${stdout}`));
|
|
15
|
+
await axios.get(stdout, { responseType: 'stream' }).then((response) => {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
response.data.pipe(writer);
|
|
18
|
+
|
|
19
|
+
let error = null;
|
|
20
|
+
|
|
21
|
+
writer.on('error', (err) => {
|
|
22
|
+
error = err;
|
|
23
|
+
writer.close();
|
|
24
|
+
reject(err);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
writer.on('close', () => {
|
|
28
|
+
if (!error) {
|
|
29
|
+
resolve(true);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
await tar.x({
|
|
36
|
+
file: tarballFile,
|
|
37
|
+
gzip: true,
|
|
38
|
+
cwd: target,
|
|
39
|
+
strip: 1,
|
|
40
|
+
k: true,
|
|
41
|
+
// filter(path, entry) {
|
|
42
|
+
// return !(path.startsWith('package/lib') || path.startsWith('package/esm') || path.startsWith('package/dist'));
|
|
43
|
+
// },
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
await unlink(tarballFile);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
exports.updateJsonFile = async (target, fn) => {
|
|
50
|
+
const content = await readFile(target, 'utf-8');
|
|
51
|
+
const json = JSON.parse(content);
|
|
52
|
+
await writeFile(target, JSON.stringify(fn(json), null, 2), 'utf-8');
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
exports.concat = (value, previous) => {
|
|
56
|
+
return previous.concat([value]);
|
|
57
|
+
};
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# http://editorconfig.org
|
|
2
|
+
root = true
|
|
3
|
+
|
|
4
|
+
[*]
|
|
5
|
+
indent_style = space
|
|
6
|
+
indent_size = 2
|
|
7
|
+
end_of_line = lf
|
|
8
|
+
charset = utf-8
|
|
9
|
+
trim_trailing_whitespace = true
|
|
10
|
+
insert_final_newline = true
|
|
11
|
+
|
|
12
|
+
[*.md]
|
|
13
|
+
trim_trailing_whitespace = false
|
|
14
|
+
|
|
15
|
+
[Makefile]
|
|
16
|
+
indent_style = tab
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
APP_ENV={{{env.APP_ENV}}}
|
|
2
|
+
APP_KEY={{{env.APP_KEY}}}
|
|
3
|
+
APP_PORT={{{env.APP_PORT}}}
|
|
4
|
+
|
|
5
|
+
API_BASE_PATH=/api/
|
|
6
|
+
API_BASE_URL=
|
|
7
|
+
|
|
8
|
+
DB_LOGGING=off
|
|
9
|
+
DB_DIALECT={{{env.DB_DIALECT}}}
|
|
10
|
+
{{{envs}}}
|
|
11
|
+
|
|
12
|
+
INIT_ROOT_EMAIL=admin@nocobase.com
|
|
13
|
+
INIT_ROOT_PASSWORD=admin123
|
|
14
|
+
INIT_ROOT_NICKNAME=Super Admin
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
const { pathsToModuleNameMapper } = require('ts-jest/utils');
|
|
2
|
-
const { compilerOptions } = require('./tsconfig.
|
|
2
|
+
const { compilerOptions } = require('./tsconfig.json');
|
|
3
|
+
const { resolve } = require('path');
|
|
3
4
|
|
|
4
5
|
module.exports = {
|
|
6
|
+
rootDir: process.cwd(),
|
|
5
7
|
collectCoverage: false,
|
|
6
8
|
verbose: true,
|
|
7
9
|
testEnvironment: 'jsdom',
|
|
8
10
|
preset: 'ts-jest',
|
|
9
11
|
testMatch: ['**/__tests__/**/*.test.[jt]s?(x)'],
|
|
10
|
-
setupFilesAfterEnv: [require.resolve('jest-dom/extend-expect'), './jest.setup.ts'],
|
|
12
|
+
setupFilesAfterEnv: [require.resolve('jest-dom/extend-expect'), resolve(__dirname, './jest.setup.ts')],
|
|
11
13
|
moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, {
|
|
12
14
|
prefix: '<rootDir>/',
|
|
13
15
|
}),
|
|
@@ -18,7 +20,7 @@ module.exports = {
|
|
|
18
20
|
diagnostics: false,
|
|
19
21
|
},
|
|
20
22
|
},
|
|
21
|
-
modulePathIgnorePatterns: ['/esm/', '/lib/'],
|
|
23
|
+
modulePathIgnorePatterns: ['/esm/', '/es/', '/dist/', '/lib/'],
|
|
22
24
|
coveragePathIgnorePatterns: [
|
|
23
25
|
'/node_modules/',
|
|
24
26
|
'/__tests__/',
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{{name}}}",
|
|
3
|
+
"private": true,
|
|
4
|
+
"workspaces": [
|
|
5
|
+
"packages/*/*"
|
|
6
|
+
],
|
|
7
|
+
"scripts": {
|
|
8
|
+
"nocobase": "nocobase",
|
|
9
|
+
"dev": "nocobase dev",
|
|
10
|
+
"start": "nocobase start",
|
|
11
|
+
"clean": "nocobase clean",
|
|
12
|
+
"build": "nocobase build",
|
|
13
|
+
"test": "nocobase test",
|
|
14
|
+
"postinstall": "nocobase postinstall",
|
|
15
|
+
"lint": "eslint ."
|
|
16
|
+
},
|
|
17
|
+
"resolutions": {
|
|
18
|
+
"@types/react": "^17.0.0",
|
|
19
|
+
"@types/react-dom": "^17.0.0"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@nocobase/cli": "{{{version}}}",
|
|
23
|
+
{{{dependencies}}}
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@nocobase/devtools": "{{{version}}}"
|
|
27
|
+
}
|
|
28
|
+
}
|
package/{src/resources/files/packages/app/server → templates/app/packages/app/client}/.gitkeep
RENAMED
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "esnext",
|
|
4
|
+
"module": "esnext",
|
|
5
|
+
"moduleResolution": "node",
|
|
6
|
+
"resolveJsonModule": true,
|
|
7
|
+
"importHelpers": true,
|
|
8
|
+
"jsx": "react-jsx",
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
"baseUrl": "./",
|
|
12
|
+
"strict": true,
|
|
13
|
+
"paths": {
|
|
14
|
+
"@/*": ["src/*"],
|
|
15
|
+
"@@/*": ["src/.umi/*"]
|
|
16
|
+
},
|
|
17
|
+
"allowSyntheticDefaultImports": true
|
|
18
|
+
},
|
|
19
|
+
"include": ["mock/**/*", "src/**/*", "config/**/*", ".umirc.ts", "typings.d.ts"],
|
|
20
|
+
"exclude": ["node_modules", "lib", "es", "dist", "typings", "**/__test__", "test", "docs", "tests"]
|
|
21
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"esModuleInterop": true,
|
|
4
4
|
"moduleResolution": "node",
|
|
5
5
|
"jsx": "react",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"allowJs":
|
|
6
|
+
"target": "esnext",
|
|
7
|
+
"module": "esnext",
|
|
8
|
+
"allowJs": true,
|
|
9
9
|
"noUnusedLocals": false,
|
|
10
10
|
"preserveConstEnums": true,
|
|
11
11
|
"skipLibCheck": true,
|
|
@@ -16,6 +16,13 @@
|
|
|
16
16
|
"experimentalDecorators": true,
|
|
17
17
|
"downlevelIteration": true,
|
|
18
18
|
"baseUrl": ".",
|
|
19
|
-
"paths": {
|
|
19
|
+
"paths": {
|
|
20
|
+
"@{{{name}}}/app-*": [
|
|
21
|
+
"packages/app/*/src"
|
|
22
|
+
],
|
|
23
|
+
"@{{{name}}}/*": [
|
|
24
|
+
"packages/plugins/*/src"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
20
27
|
}
|
|
21
28
|
}
|
package/src/create-app.js
DELETED
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
const chalk = require('chalk');
|
|
2
|
-
const fse = require('fs-extra');
|
|
3
|
-
const path = require('path');
|
|
4
|
-
const { hasYarn, runInit, runInstall } = require('./utils');
|
|
5
|
-
const ora = require('ora');
|
|
6
|
-
const execa = require('execa');
|
|
7
|
-
const { join, resolve } = require('path');
|
|
8
|
-
|
|
9
|
-
const createEnvFile = require('./resources/templates/env');
|
|
10
|
-
const createPackageJson = require('./resources/templates/package.json.js');
|
|
11
|
-
const createServerPackageJson = require('./resources/templates/server.package.json.js');
|
|
12
|
-
const createClientPackageJson = require('./resources/templates/client.package.json.js');
|
|
13
|
-
const loadSrcFromNpm = require('./resources/templates/load-src-from-npm');
|
|
14
|
-
|
|
15
|
-
let envs = undefined;
|
|
16
|
-
|
|
17
|
-
const parseEnvs = (options) => {
|
|
18
|
-
if (envs) {
|
|
19
|
-
return envs;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
for (const env of options.env) {
|
|
23
|
-
if (!env.match(/\w+=\w+/)) {
|
|
24
|
-
console.log(`${chalk.red(env)} is not a valid environment value`);
|
|
25
|
-
process.exit(1);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
envs = options.env
|
|
30
|
-
.map((env) => env.split('='))
|
|
31
|
-
.reduce((carry, item) => {
|
|
32
|
-
carry[item[0]] = item[1];
|
|
33
|
-
return carry;
|
|
34
|
-
}, {});
|
|
35
|
-
|
|
36
|
-
return envs;
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
function checkDialect(dialect) {
|
|
40
|
-
const supportDialects = ['mysql', 'sqlite', 'postgres'];
|
|
41
|
-
if (!supportDialects.includes(dialect)) {
|
|
42
|
-
console.log(
|
|
43
|
-
`dialect ${chalk.red(dialect)} is not supported, currently supported dialects are ${chalk.green(
|
|
44
|
-
supportDialects.join(','),
|
|
45
|
-
)}.`,
|
|
46
|
-
);
|
|
47
|
-
process.exit(1);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const getDatabaseOptionsFromCommandOptions = (commandOptions) => {
|
|
52
|
-
const envs = parseEnvs(commandOptions);
|
|
53
|
-
|
|
54
|
-
if (!commandOptions.dbDialect || commandOptions.dbDialect === 'sqlite' || envs['DB_STORAGE']) {
|
|
55
|
-
return {
|
|
56
|
-
dialect: 'sqlite',
|
|
57
|
-
storage: envs['DB_STORAGE'] || 'db.sqlite',
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const databaseOptions = {
|
|
62
|
-
dialect: commandOptions.dbDialect,
|
|
63
|
-
host: envs['DB_HOST'],
|
|
64
|
-
port: envs['DB_PORT'],
|
|
65
|
-
database: envs['DB_DATABASE'],
|
|
66
|
-
user: envs['DB_USER'],
|
|
67
|
-
password: envs['DB_PASSWORD'],
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
const emptyValues = Object.entries(databaseOptions).filter((items) => !items[1]);
|
|
71
|
-
|
|
72
|
-
if (emptyValues.length > 0) {
|
|
73
|
-
console.log(
|
|
74
|
-
chalk.red(
|
|
75
|
-
`Please set ${emptyValues
|
|
76
|
-
.map((i) => i[0])
|
|
77
|
-
.map((i) => `DB_${i.toUpperCase()}`)
|
|
78
|
-
.join(' ')} in .env file to complete database settings`,
|
|
79
|
-
),
|
|
80
|
-
);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
return databaseOptions;
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
async function createApp(directory, options) {
|
|
87
|
-
const dbDialect = options.dbDialect || 'sqlite';
|
|
88
|
-
checkDialect(dbDialect);
|
|
89
|
-
|
|
90
|
-
if (options.quickstart) {
|
|
91
|
-
console.log(`⚠️ ${chalk.yellow('quickstart option is deprecated')}`);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
parseEnvs(options);
|
|
95
|
-
|
|
96
|
-
console.log(`Creating a new NocoBase application at ${chalk.green(directory)}.`);
|
|
97
|
-
console.log('Creating files.');
|
|
98
|
-
|
|
99
|
-
const projectPath = path.join(process.cwd(), directory);
|
|
100
|
-
const resourcePath = path.join(__dirname, 'resources');
|
|
101
|
-
|
|
102
|
-
const dbOptions = getDatabaseOptionsFromCommandOptions(options);
|
|
103
|
-
|
|
104
|
-
// copy files
|
|
105
|
-
await fse.copy(path.join(resourcePath, 'files'), projectPath);
|
|
106
|
-
|
|
107
|
-
console.log('download @nocobase/app-server');
|
|
108
|
-
await loadSrcFromNpm('@nocobase/app-server', path.join(projectPath, 'packages/app/server'));
|
|
109
|
-
|
|
110
|
-
console.log('download @nocobase/app-client');
|
|
111
|
-
await loadSrcFromNpm('@nocobase/app-client', path.join(projectPath, 'packages/app/client'));
|
|
112
|
-
|
|
113
|
-
// write .env file
|
|
114
|
-
await fse.writeFile(join(projectPath, '.env'), createEnvFile({ dbOptions, envs: parseEnvs(options) }));
|
|
115
|
-
|
|
116
|
-
// write root packages.json
|
|
117
|
-
await fse.writeJson(
|
|
118
|
-
join(projectPath, 'package.json'),
|
|
119
|
-
createPackageJson({
|
|
120
|
-
projectName: 'nocobase-app',
|
|
121
|
-
}),
|
|
122
|
-
{
|
|
123
|
-
spaces: 2,
|
|
124
|
-
},
|
|
125
|
-
);
|
|
126
|
-
|
|
127
|
-
// write server package.json
|
|
128
|
-
await fse.writeJson(
|
|
129
|
-
join(projectPath, 'packages/app/server/package.json'),
|
|
130
|
-
createServerPackageJson({
|
|
131
|
-
projectPath,
|
|
132
|
-
dbOptions,
|
|
133
|
-
}),
|
|
134
|
-
{
|
|
135
|
-
spaces: 2,
|
|
136
|
-
},
|
|
137
|
-
);
|
|
138
|
-
|
|
139
|
-
// write client package.json
|
|
140
|
-
await fse.writeJson(
|
|
141
|
-
join(projectPath, 'packages/app/client/package.json'),
|
|
142
|
-
createClientPackageJson({
|
|
143
|
-
projectPath,
|
|
144
|
-
}),
|
|
145
|
-
{
|
|
146
|
-
spaces: 2,
|
|
147
|
-
},
|
|
148
|
-
);
|
|
149
|
-
|
|
150
|
-
// run install command
|
|
151
|
-
console.log('finished');
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
function collect(value, previous) {
|
|
155
|
-
return previous.concat([value]);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
function setCommandOptions(command) {
|
|
159
|
-
return command
|
|
160
|
-
.arguments('<directory>', 'directory of new NocoBase app')
|
|
161
|
-
.option('--quickstart', 'Quickstart app creation')
|
|
162
|
-
.option('-d, --db-dialect <dbdialect>', 'Database dialect, current support sqlite/mysql/postgres')
|
|
163
|
-
.option('-e, --env <envvalue>', 'environment variables write into .env file', collect, [])
|
|
164
|
-
.description('create a new application');
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
module.exports = {
|
|
168
|
-
setCommandOptions,
|
|
169
|
-
createApp,
|
|
170
|
-
};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
const { createApp, setCommandOptions } = require('./create-app');
|
|
2
|
-
|
|
3
|
-
const { Command } = require('commander');
|
|
4
|
-
const packageJson = require('../package.json');
|
|
5
|
-
const program = new Command(packageJson.name);
|
|
6
|
-
|
|
7
|
-
setCommandOptions(program);
|
|
8
|
-
|
|
9
|
-
program.action((directory, options) => createApp(directory, options));
|
|
10
|
-
|
|
11
|
-
program.parse(process.argv);
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
const dotenv = require('dotenv');
|
|
2
|
-
const { existsSync } = require('fs');
|
|
3
|
-
const { resolve } = require('path')
|
|
4
|
-
const yargs = require('yargs');
|
|
5
|
-
|
|
6
|
-
const envFile = existsSync(resolve(__dirname, '.env.test')) ? '.env.test' : '.env';
|
|
7
|
-
|
|
8
|
-
dotenv.config({
|
|
9
|
-
path: resolve(__dirname, envFile),
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
if (yargs.argv.dbDialect) {
|
|
13
|
-
process.env.DB_DIALECT = yargs.argv.dbDialect;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
if (yargs.argv.dbPort) {
|
|
17
|
-
process.env.DB_PORT = yargs.argv.dbPort;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
console.log('DB_DIALECT:', process.env.DB_DIALECT);
|
|
21
|
-
console.log('DB_PORT:', process.env.DB_PORT);
|
|
22
|
-
|
|
23
|
-
require('jest-cli/bin/jest');
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { getUmiConfig } from '@nocobase/utils/umiConfig';
|
|
2
|
-
import dotenv from 'dotenv';
|
|
3
|
-
import { resolve } from 'path';
|
|
4
|
-
import { defineConfig } from 'umi';
|
|
5
|
-
|
|
6
|
-
dotenv.config({
|
|
7
|
-
path: resolve(__dirname, '../../../.env'),
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
process.env.MFSU_AD = 'none';
|
|
11
|
-
|
|
12
|
-
const umiConfig = getUmiConfig();
|
|
13
|
-
|
|
14
|
-
export default defineConfig({
|
|
15
|
-
hash: true,
|
|
16
|
-
define: {
|
|
17
|
-
'process.env.NOCOBASE_ENV': process.env.NOCOBASE_ENV,
|
|
18
|
-
...umiConfig.define,
|
|
19
|
-
},
|
|
20
|
-
// only proxy when using `umi dev`
|
|
21
|
-
// if the assets are built, will not proxy
|
|
22
|
-
proxy: {
|
|
23
|
-
...umiConfig.proxy,
|
|
24
|
-
},
|
|
25
|
-
nodeModulesTransform: {
|
|
26
|
-
type: 'none',
|
|
27
|
-
},
|
|
28
|
-
routes: [{ path: '/', exact: false, component: '@/pages/index' }],
|
|
29
|
-
// fastRefresh: {},
|
|
30
|
-
chainWebpack(config) {
|
|
31
|
-
const clientSrc = resolve(__dirname, '../../../node_modules/@nocobase/client/src');
|
|
32
|
-
config.module.rules.get('ts-in-node_modules').include.add(clientSrc);
|
|
33
|
-
config.resolve.alias.set('@nocobase/client', clientSrc);
|
|
34
|
-
},
|
|
35
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"esModuleInterop": true,
|
|
4
|
-
"resolveJsonModule": true,
|
|
5
|
-
"moduleResolution": "node",
|
|
6
|
-
"jsx": "react",
|
|
7
|
-
"module": "commonjs",
|
|
8
|
-
"target": "es6",
|
|
9
|
-
"allowJs": false,
|
|
10
|
-
"noUnusedLocals": false,
|
|
11
|
-
"preserveConstEnums": true,
|
|
12
|
-
"skipLibCheck": true,
|
|
13
|
-
"sourceMap": true,
|
|
14
|
-
"inlineSources": true,
|
|
15
|
-
"declaration": true,
|
|
16
|
-
"experimentalDecorators": true,
|
|
17
|
-
"downlevelIteration": true,
|
|
18
|
-
}
|
|
19
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"jsx": "react",
|
|
5
|
-
"esModuleInterop": true,
|
|
6
|
-
"resolveJsonModule": true,
|
|
7
|
-
"moduleResolution": "node",
|
|
8
|
-
"allowJs": true,
|
|
9
|
-
"module": "commonjs",
|
|
10
|
-
"target": "es6",
|
|
11
|
-
"paths": {}
|
|
12
|
-
},
|
|
13
|
-
"exclude": ["./packages/*/esm", "./packages/*/lib"]
|
|
14
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
|
|
3
|
-
module.exports = (opts) => {
|
|
4
|
-
const { projectPath } = opts;
|
|
5
|
-
const templateJsonPath = path.join(projectPath, 'packages/app/client/package.json');
|
|
6
|
-
const templateJson = require(templateJsonPath);
|
|
7
|
-
|
|
8
|
-
return {
|
|
9
|
-
...templateJson,
|
|
10
|
-
name: 'app-client',
|
|
11
|
-
version: '0.1.0',
|
|
12
|
-
dependencies: {
|
|
13
|
-
...templateJson.dependencies,
|
|
14
|
-
},
|
|
15
|
-
};
|
|
16
|
-
};
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
const fs = require('fs');
|
|
2
|
-
const path = require('path');
|
|
3
|
-
const crypto = require('crypto');
|
|
4
|
-
const _ = require('lodash');
|
|
5
|
-
|
|
6
|
-
const generateASecret = () => crypto.randomBytes(256).toString('base64');
|
|
7
|
-
|
|
8
|
-
module.exports = (options) => {
|
|
9
|
-
const { dbOptions, envs } = options;
|
|
10
|
-
const tmpl = fs.readFileSync(path.join(__dirname, 'env.template'));
|
|
11
|
-
const compile = _.template(tmpl);
|
|
12
|
-
|
|
13
|
-
const dbEnvs = Object.keys(dbOptions)
|
|
14
|
-
.map((keyName) => [`DB_${keyName.toUpperCase()}`, dbOptions[keyName]])
|
|
15
|
-
.map((item) => `${item[0]}=${item[1] || ''}`)
|
|
16
|
-
.join('\n');
|
|
17
|
-
|
|
18
|
-
let envContent = compile({
|
|
19
|
-
jwtSecret: generateASecret(),
|
|
20
|
-
dbEnvs,
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
for (const env of Object.entries(envs)) {
|
|
24
|
-
const [key, value] = env;
|
|
25
|
-
const re = new RegExp(`${key}=\\w+`);
|
|
26
|
-
if (envContent.match(re)) {
|
|
27
|
-
envContent = envContent.replace(re, `${key}=${value}`);
|
|
28
|
-
} else {
|
|
29
|
-
envContent = `${envContent}${key}=${value}\n`;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return envContent;
|
|
34
|
-
};
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
NOCOBASE_ENV=development
|
|
2
|
-
|
|
3
|
-
SERVER_HOST=0.0.0.0
|
|
4
|
-
SERVER_PORT=3000
|
|
5
|
-
|
|
6
|
-
JWT_SECRET=<%= jwtSecret %>
|
|
7
|
-
|
|
8
|
-
# api base path endpoint for app(web)
|
|
9
|
-
SERVER_BASE_PATH=/api/
|
|
10
|
-
|
|
11
|
-
# api server access point for app(web when build)
|
|
12
|
-
SERVER_BASE_URL=
|
|
13
|
-
|
|
14
|
-
DB_LOG_SQL=off
|
|
15
|
-
<%= dbEnvs %>
|
|
16
|
-
|
|
17
|
-
# local or ali-oss
|
|
18
|
-
DEFAULT_STORAGE_TYPE=local
|
|
19
|
-
STORAGE_TYPE=local
|
|
20
|
-
|
|
21
|
-
# LOCAL STORAGE
|
|
22
|
-
LOCAL_STORAGE_USE_STATIC_SERVER=true
|
|
23
|
-
LOCAL_STORAGE_BASE_URL=
|
|
24
|
-
|
|
25
|
-
# ALI OSS STORAGE
|
|
26
|
-
ALI_OSS_STORAGE_BASE_URL=
|
|
27
|
-
ALI_OSS_REGION=oss-cn-beijing
|
|
28
|
-
ALI_OSS_ACCESS_KEY_ID=
|
|
29
|
-
ALI_OSS_ACCESS_KEY_SECRET=
|
|
30
|
-
ALI_OSS_BUCKET=
|
|
31
|
-
|
|
32
|
-
# AWS
|
|
33
|
-
AWS_ACCESS_KEY_ID=
|
|
34
|
-
AWS_SECRET_ACCESS_KEY=
|
|
35
|
-
AWS_S3_REGION=
|
|
36
|
-
AWS_S3_BUCKET=
|
|
37
|
-
AWS_S3_STORAGE_BASE_URL=
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
const execa = require('execa');
|
|
2
|
-
const axios = require('axios');
|
|
3
|
-
const fs = require('fs');
|
|
4
|
-
const fsP = require('fs/promises');
|
|
5
|
-
const tar = require('tar');
|
|
6
|
-
const { join } = require('path');
|
|
7
|
-
const crypto = require('crypto');
|
|
8
|
-
|
|
9
|
-
module.exports = async (packageName, target) => {
|
|
10
|
-
const viewResult = await execa('npm', ['v', packageName, 'dist.tarball']);
|
|
11
|
-
const url = viewResult['stdout'];
|
|
12
|
-
|
|
13
|
-
const tarballFile = join(target, '..', `${crypto.createHash('md5').update(packageName).digest('hex')}-tarball.gz`);
|
|
14
|
-
|
|
15
|
-
const writer = fs.createWriteStream(tarballFile);
|
|
16
|
-
|
|
17
|
-
await axios.get(url, { responseType: 'stream' }).then((response) => {
|
|
18
|
-
return new Promise((resolve, reject) => {
|
|
19
|
-
response.data.pipe(writer);
|
|
20
|
-
|
|
21
|
-
let error = null;
|
|
22
|
-
|
|
23
|
-
writer.on('error', (err) => {
|
|
24
|
-
error = err;
|
|
25
|
-
writer.close();
|
|
26
|
-
reject(err);
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
writer.on('close', () => {
|
|
30
|
-
if (!error) {
|
|
31
|
-
resolve(true);
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
const result = await tar.x({
|
|
38
|
-
file: tarballFile,
|
|
39
|
-
gzip: true,
|
|
40
|
-
cwd: target,
|
|
41
|
-
strip: 1,
|
|
42
|
-
k: true,
|
|
43
|
-
filter(path, entry) {
|
|
44
|
-
return !(path.startsWith('package/lib') || path.startsWith('package/esm') || path.startsWith('package/dist'));
|
|
45
|
-
},
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
await fsP.unlink(tarballFile);
|
|
49
|
-
};
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
module.exports = (opts) => {
|
|
2
|
-
const { projectName } = opts;
|
|
3
|
-
return {
|
|
4
|
-
name: projectName,
|
|
5
|
-
version: '0.1.0',
|
|
6
|
-
private: true,
|
|
7
|
-
workspaces: ['packages/app/*', 'packages/plugins/*'],
|
|
8
|
-
license: 'MIT',
|
|
9
|
-
scripts: {
|
|
10
|
-
start: 'concurrently --kill-others "npm run start-server" "npm run start-client"',
|
|
11
|
-
bootstrap: 'lerna bootstrap',
|
|
12
|
-
clean: 'rimraf -rf packages/{app,plugins}/*/{lib,esm,dist} && lerna clean',
|
|
13
|
-
nocobase:
|
|
14
|
-
'cross-env DOTENV_CONFIG_PATH=.env ts-node-dev -r dotenv/config -r tsconfig-paths/register ./packages/app/server/src/index.ts',
|
|
15
|
-
'nocobase-prod': 'cross-env DOTENV_CONFIG_PATH=.env node -r dotenv/config packages/app/server/lib/index.js',
|
|
16
|
-
'start-client': 'cd packages/app/client && npm run start',
|
|
17
|
-
'start-server': 'npm run nocobase start',
|
|
18
|
-
build: 'lerna run build',
|
|
19
|
-
'build-docs': 'dumi build',
|
|
20
|
-
test: 'node ./jest.cli.js -i',
|
|
21
|
-
lint: 'eslint .',
|
|
22
|
-
},
|
|
23
|
-
resolutions: {
|
|
24
|
-
'@types/react': '^17.0.0',
|
|
25
|
-
'@types/react-dom': '^17.0.0',
|
|
26
|
-
},
|
|
27
|
-
devDependencies: {
|
|
28
|
-
'@testing-library/react': '^12.1.2',
|
|
29
|
-
'@types/jest': '^26.0.0',
|
|
30
|
-
'@types/node': '^12.6.8',
|
|
31
|
-
'@types/react': '^17.0.0',
|
|
32
|
-
'@types/react-dom': '^17.0.0',
|
|
33
|
-
'@typescript-eslint/eslint-plugin': '^4.9.1',
|
|
34
|
-
'@typescript-eslint/parser': '^4.8.2',
|
|
35
|
-
concurrently: '^7.0.0',
|
|
36
|
-
'cross-env': '^7.0.3',
|
|
37
|
-
dotenv: '^10.0.0',
|
|
38
|
-
eslint: '^7.14.0',
|
|
39
|
-
'eslint-config-prettier': '^7.0.0',
|
|
40
|
-
'eslint-plugin-import': '^2.13.0',
|
|
41
|
-
'eslint-plugin-markdown': '^2.0.1',
|
|
42
|
-
'eslint-plugin-node': '^11.1.0',
|
|
43
|
-
'eslint-plugin-prettier': '^3.1.0',
|
|
44
|
-
'eslint-plugin-promise': '^4.0.0',
|
|
45
|
-
'eslint-plugin-react': '^7.14.2',
|
|
46
|
-
'eslint-plugin-react-hooks': '^4.2.0',
|
|
47
|
-
'eslint-plugin-vue': '^7.0.1',
|
|
48
|
-
jest: '^26.0.0',
|
|
49
|
-
'jest-codemods': '^0.19.1',
|
|
50
|
-
'jest-dom': '^3.1.2',
|
|
51
|
-
'jest-localstorage-mock': '^2.3.0',
|
|
52
|
-
'jest-styled-components': '6.3.3',
|
|
53
|
-
'jest-watch-lerna-packages': '^1.1.0',
|
|
54
|
-
lerna: '^4.0.0',
|
|
55
|
-
prettier: '^2.2.1',
|
|
56
|
-
'pretty-format': '^24.0.0',
|
|
57
|
-
'pretty-quick': '^3.1.0',
|
|
58
|
-
rimraf: '^3.0.0',
|
|
59
|
-
'ts-jest': '^26.0.0',
|
|
60
|
-
'ts-loader': '^7.0.4',
|
|
61
|
-
'ts-node': '^9.1.1',
|
|
62
|
-
'ts-node-dev': '^1.1.8',
|
|
63
|
-
'tsconfig-paths': '^3.12.0',
|
|
64
|
-
typescript: '^4.1.5',
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
const path = require('path');
|
|
2
|
-
const dialectLib = (dialect) => {
|
|
3
|
-
if (dialect === 'sqlite') {
|
|
4
|
-
return {
|
|
5
|
-
sqlite3: '^5.0.2',
|
|
6
|
-
};
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
if (dialect === 'mysql') {
|
|
10
|
-
return {
|
|
11
|
-
mysql2: '^2.3.3',
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
if (dialect === 'postgres') {
|
|
16
|
-
return {
|
|
17
|
-
pg: '^8.7.3',
|
|
18
|
-
'pg-hstore': '^2.3.4',
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
module.exports = (opts) => {
|
|
24
|
-
const { dbOptions, projectPath } = opts;
|
|
25
|
-
const templateJsonPath = path.join(projectPath, 'packages/app/server/package.json');
|
|
26
|
-
const templateJson = require(templateJsonPath);
|
|
27
|
-
|
|
28
|
-
return {
|
|
29
|
-
...templateJson,
|
|
30
|
-
name: 'app-server',
|
|
31
|
-
version: '0.1.0',
|
|
32
|
-
main: 'index.js',
|
|
33
|
-
dependencies: {
|
|
34
|
-
...templateJson.dependencies,
|
|
35
|
-
...dialectLib(dbOptions.dialect),
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
};
|
package/src/utils.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
const execa = require('execa');
|
|
2
|
-
|
|
3
|
-
function hasYarn() {
|
|
4
|
-
return (process.env.npm_config_user_agent || '').indexOf('yarn') === 0;
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
function runYarn(path, args) {
|
|
8
|
-
if (hasYarn()) {
|
|
9
|
-
return execa('yarn', args, {
|
|
10
|
-
cwd: path,
|
|
11
|
-
stdin: 'ignore',
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
return execa('npm', args, { cwd: path, stdin: 'ignore' });
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
function runInstall(path) {
|
|
19
|
-
return runYarn(path, ['install']);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function runStart(path) {
|
|
23
|
-
return runYarn(path, ['run', 'start']);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function runInit(path, args = []) {
|
|
27
|
-
if (!hasYarn()) {
|
|
28
|
-
args.unshift('--');
|
|
29
|
-
}
|
|
30
|
-
console.log('run init', args);
|
|
31
|
-
return runYarn(path, ['run', 'nocobase', 'init', ...args]);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
module.exports = {
|
|
35
|
-
runInit,
|
|
36
|
-
runStart,
|
|
37
|
-
runInstall,
|
|
38
|
-
hasYarn,
|
|
39
|
-
};
|