cnpmcore 3.73.1 → 3.74.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type ValueType = 'string' | 'boolean' | 'number';
|
|
2
|
+
export declare function env(key: string, valueType: ValueType, defaultValue: string): string;
|
|
3
|
+
export declare function env(key: string, valueType: ValueType, defaultValue: boolean): boolean;
|
|
4
|
+
export declare function env(key: string, valueType: ValueType, defaultValue: number): number;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.env = void 0;
|
|
4
|
+
function env(key, valueType, defaultValue) {
|
|
5
|
+
let value = process.env[key];
|
|
6
|
+
if (typeof value === 'string') {
|
|
7
|
+
value = value.trim();
|
|
8
|
+
}
|
|
9
|
+
if (!value) {
|
|
10
|
+
return defaultValue;
|
|
11
|
+
}
|
|
12
|
+
if (valueType === 'string') {
|
|
13
|
+
return value;
|
|
14
|
+
}
|
|
15
|
+
if (valueType === 'boolean') {
|
|
16
|
+
let booleanValue = false;
|
|
17
|
+
if (value === 'true' || value === '1') {
|
|
18
|
+
booleanValue = true;
|
|
19
|
+
}
|
|
20
|
+
else if (value === 'false' || value === '0') {
|
|
21
|
+
booleanValue = false;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
throw new TypeError(`Invalid boolean value: ${value} on process.env.${key}`);
|
|
25
|
+
}
|
|
26
|
+
return booleanValue;
|
|
27
|
+
}
|
|
28
|
+
if (valueType === 'number') {
|
|
29
|
+
const numberValue = Number(value);
|
|
30
|
+
if (isNaN(numberValue)) {
|
|
31
|
+
throw new TypeError(`Invalid number value: ${value} on process.env.${key}`);
|
|
32
|
+
}
|
|
33
|
+
return numberValue;
|
|
34
|
+
}
|
|
35
|
+
throw new TypeError(`Invalid value type: ${valueType}`);
|
|
36
|
+
}
|
|
37
|
+
exports.env = env;
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW52VXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwcC9jb21tb24vRW52VXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSxTQUFnQixHQUFHLENBQUMsR0FBVyxFQUFFLFNBQW9CLEVBQUUsWUFBdUM7SUFDNUYsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ3RCO0lBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRTtRQUNWLE9BQU8sWUFBWSxDQUFDO0tBQ3JCO0lBRUQsSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFO1FBQzFCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7UUFDM0IsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksS0FBSyxLQUFLLE1BQU0sSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFO1lBQ3JDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDckI7YUFBTSxJQUFJLEtBQUssS0FBSyxPQUFPLElBQUksS0FBSyxLQUFLLEdBQUcsRUFBRTtZQUM3QyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQ3RCO2FBQU07WUFDTCxNQUFNLElBQUksU0FBUyxDQUFDLDBCQUEwQixLQUFLLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQzlFO1FBQ0QsT0FBTyxZQUFZLENBQUM7S0FDckI7SUFFRCxJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUU7UUFDMUIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxTQUFTLENBQUMseUJBQXlCLEtBQUssbUJBQW1CLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDN0U7UUFDRCxPQUFPLFdBQVcsQ0FBQztLQUNwQjtJQUVELE1BQU0sSUFBSSxTQUFTLENBQUMsdUJBQXVCLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQWxDRCxrQkFrQ0MifQ==
|
|
@@ -10,13 +10,14 @@ const node_path_1 = require("node:path");
|
|
|
10
10
|
const oss_cnpm_1 = __importDefault(require("oss-cnpm"));
|
|
11
11
|
const typebox_1 = require("../app/port/typebox");
|
|
12
12
|
const constants_1 = require("../app/common/constants");
|
|
13
|
+
const EnvUtil_1 = require("../app/common/EnvUtil");
|
|
13
14
|
const database_1 = require("./database");
|
|
14
15
|
exports.cnpmcoreConfig = {
|
|
15
16
|
name: 'cnpm',
|
|
16
17
|
hookEnable: false,
|
|
17
18
|
hooksLimit: 20,
|
|
18
|
-
sourceRegistry: 'https://registry.npmjs.org',
|
|
19
|
-
sourceRegistryIsCNpm: false,
|
|
19
|
+
sourceRegistry: (0, EnvUtil_1.env)('CNPMCORE_CONFIG_SOURCE_REGISTRY', 'string', 'https://registry.npmjs.org'),
|
|
20
|
+
sourceRegistryIsCNpm: (0, EnvUtil_1.env)('CNPMCORE_CONFIG_SOURCE_REGISTRY_IS_CNPM', 'boolean', false),
|
|
20
21
|
syncUpstreamFirst: false,
|
|
21
22
|
sourceRegistrySyncTimeout: 180000,
|
|
22
23
|
taskQueueHighWaterSize: 100,
|
|
@@ -36,7 +37,7 @@ exports.cnpmcoreConfig = {
|
|
|
36
37
|
checkChangesStreamInterval: 500,
|
|
37
38
|
changesStreamRegistry: 'https://replicate.npmjs.com',
|
|
38
39
|
changesStreamRegistryMode: constants_1.ChangesStreamMode.streaming,
|
|
39
|
-
registry:
|
|
40
|
+
registry: (0, EnvUtil_1.env)('CNPMCORE_CONFIG_REGISTRY', 'string', 'http://localhost:7001'),
|
|
40
41
|
alwaysAuth: false,
|
|
41
42
|
allowScopes: [
|
|
42
43
|
'@cnpm',
|
|
@@ -48,7 +49,7 @@ exports.cnpmcoreConfig = {
|
|
|
48
49
|
admins: {
|
|
49
50
|
cnpmcore_admin: 'admin@cnpmjs.org',
|
|
50
51
|
},
|
|
51
|
-
enableWebAuthn:
|
|
52
|
+
enableWebAuthn: (0, EnvUtil_1.env)('CNPMCORE_CONFIG_ENABLE_WEB_AUTHN', 'boolean', false),
|
|
52
53
|
enableCDN: false,
|
|
53
54
|
cdnCacheControlHeader: 'public, max-age=300',
|
|
54
55
|
cdnVaryHeader: 'Accept, Accept-Encoding',
|
|
@@ -60,7 +61,7 @@ exports.cnpmcoreConfig = {
|
|
|
60
61
|
enableSyncUnpkgFiles: true,
|
|
61
62
|
enableSyncUnpkgFilesWhiteList: false,
|
|
62
63
|
strictSyncSpecivicVersion: false,
|
|
63
|
-
enableElasticsearch:
|
|
64
|
+
enableElasticsearch: (0, EnvUtil_1.env)('CNPMCORE_CONFIG_ENABLE_ES', 'boolean', false),
|
|
64
65
|
elasticsearchIndex: 'cnpmcore_packages',
|
|
65
66
|
strictValidateTarballPkg: false,
|
|
66
67
|
strictValidatePackageDeps: false,
|
|
@@ -70,13 +71,13 @@ exports.cnpmcoreConfig = {
|
|
|
70
71
|
};
|
|
71
72
|
exports.default = (appInfo) => {
|
|
72
73
|
const config = {};
|
|
73
|
-
config.keys =
|
|
74
|
+
config.keys = (0, EnvUtil_1.env)('CNPMCORE_EGG_KEYS', 'string', (0, node_crypto_1.randomUUID)());
|
|
74
75
|
config.cnpmcore = exports.cnpmcoreConfig;
|
|
75
76
|
// override config from framework / plugin
|
|
76
|
-
config.dataDir =
|
|
77
|
+
config.dataDir = (0, EnvUtil_1.env)('CNPMCORE_DATA_DIR', 'string', (0, node_path_1.join)(appInfo.root, '.cnpmcore'));
|
|
77
78
|
config.orm = {
|
|
78
79
|
...database_1.database,
|
|
79
|
-
database: database_1.database.name
|
|
80
|
+
database: database_1.database.name || 'cnpmcore',
|
|
80
81
|
charset: 'utf8mb4',
|
|
81
82
|
logger: {
|
|
82
83
|
// https://github.com/cyjake/leoric/blob/master/docs/zh/logging.md#logqueryerror
|
|
@@ -89,10 +90,10 @@ exports.default = (appInfo) => {
|
|
|
89
90
|
};
|
|
90
91
|
config.redis = {
|
|
91
92
|
client: {
|
|
92
|
-
port:
|
|
93
|
-
host:
|
|
94
|
-
password:
|
|
95
|
-
db:
|
|
93
|
+
port: (0, EnvUtil_1.env)('CNPMCORE_REDIS_PORT', 'number', 6379),
|
|
94
|
+
host: (0, EnvUtil_1.env)('CNPMCORE_REDIS_HOST', 'string', '127.0.0.1'),
|
|
95
|
+
password: (0, EnvUtil_1.env)('CNPMCORE_REDIS_PASSWORD', 'string', ''),
|
|
96
|
+
db: (0, EnvUtil_1.env)('CNPMCORE_REDIS_DB', 'number', 0),
|
|
96
97
|
},
|
|
97
98
|
};
|
|
98
99
|
config.security = {
|
|
@@ -111,59 +112,61 @@ exports.default = (appInfo) => {
|
|
|
111
112
|
};
|
|
112
113
|
config.nfs = {
|
|
113
114
|
client: null,
|
|
114
|
-
dir:
|
|
115
|
+
dir: (0, EnvUtil_1.env)('CNPMCORE_NFS_DIR', 'string', (0, node_path_1.join)(config.dataDir, 'nfs')),
|
|
115
116
|
};
|
|
116
117
|
/* c8 ignore next 17 */
|
|
117
118
|
// enable oss nfs store by env values
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
bucket: process.env.CNPMCORE_NFS_OSS_BUCKET,
|
|
127
|
-
accessKeyId: process.env.CNPMCORE_NFS_OSS_ID,
|
|
128
|
-
accessKeySecret: process.env.CNPMCORE_NFS_OSS_SECRET,
|
|
119
|
+
const nfsType = (0, EnvUtil_1.env)('CNPMCORE_NFS_TYPE', 'string', '');
|
|
120
|
+
if (nfsType === 'oss') {
|
|
121
|
+
const ossConfig = {
|
|
122
|
+
cdnBaseUrl: (0, EnvUtil_1.env)('CNPMCORE_NFS_OSS_CDN', 'string', ''),
|
|
123
|
+
endpoint: (0, EnvUtil_1.env)('CNPMCORE_NFS_OSS_ENDPOINT', 'string', ''),
|
|
124
|
+
bucket: (0, EnvUtil_1.env)('CNPMCORE_NFS_OSS_BUCKET', 'string', ''),
|
|
125
|
+
accessKeyId: (0, EnvUtil_1.env)('CNPMCORE_NFS_OSS_ID', 'string', ''),
|
|
126
|
+
accessKeySecret: (0, EnvUtil_1.env)('CNPMCORE_NFS_OSS_SECRET', 'string', ''),
|
|
129
127
|
defaultHeaders: {
|
|
130
128
|
'Cache-Control': 'max-age=0, s-maxage=60',
|
|
131
129
|
},
|
|
132
|
-
}
|
|
130
|
+
};
|
|
131
|
+
(0, node_assert_1.strict)(ossConfig.cdnBaseUrl, 'require env CNPMCORE_NFS_OSS_BUCKET');
|
|
132
|
+
(0, node_assert_1.strict)(ossConfig.endpoint, 'require env CNPMCORE_NFS_OSS_ENDPOINT');
|
|
133
|
+
(0, node_assert_1.strict)(ossConfig.accessKeyId, 'require env CNPMCORE_NFS_OSS_ID');
|
|
134
|
+
(0, node_assert_1.strict)(ossConfig.accessKeySecret, 'require env CNPMCORE_NFS_OSS_SECRET');
|
|
135
|
+
config.nfs.client = new oss_cnpm_1.default(ossConfig);
|
|
133
136
|
}
|
|
134
|
-
else if (
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
(0, node_assert_1.strict)(process.env.CNPMCORE_NFS_S3_CLIENT_BUCKET, 'require env CNPMCORE_NFS_S3_CLIENT_BUCKET');
|
|
139
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
140
|
-
const S3Client = require('s3-cnpmcore');
|
|
141
|
-
config.nfs.client = new S3Client({
|
|
142
|
-
region: process.env.CNPMCORE_NFS_S3_CLIENT_REGION || 'default',
|
|
143
|
-
endpoint: process.env.CNPMCORE_NFS_S3_CLIENT_ENDPOINT,
|
|
137
|
+
else if (nfsType === 's3') {
|
|
138
|
+
const s3Config = {
|
|
139
|
+
region: (0, EnvUtil_1.env)('CNPMCORE_NFS_S3_CLIENT_REGION', 'string', 'default'),
|
|
140
|
+
endpoint: (0, EnvUtil_1.env)('CNPMCORE_NFS_S3_CLIENT_ENDPOINT', 'string', ''),
|
|
144
141
|
credentials: {
|
|
145
|
-
accessKeyId:
|
|
146
|
-
secretAccessKey:
|
|
142
|
+
accessKeyId: (0, EnvUtil_1.env)('CNPMCORE_NFS_S3_CLIENT_ID', 'string', ''),
|
|
143
|
+
secretAccessKey: (0, EnvUtil_1.env)('CNPMCORE_NFS_S3_CLIENT_SECRET', 'string', ''),
|
|
147
144
|
},
|
|
148
|
-
bucket:
|
|
149
|
-
forcePathStyle:
|
|
150
|
-
disableURL:
|
|
151
|
-
}
|
|
145
|
+
bucket: (0, EnvUtil_1.env)('CNPMCORE_NFS_S3_CLIENT_BUCKET', 'string', ''),
|
|
146
|
+
forcePathStyle: (0, EnvUtil_1.env)('CNPMCORE_NFS_S3_CLIENT_FORCE_PATH_STYLE', 'boolean', false),
|
|
147
|
+
disableURL: (0, EnvUtil_1.env)('CNPMCORE_NFS_S3_CLIENT_DISABLE_URL', 'boolean', false),
|
|
148
|
+
};
|
|
149
|
+
(0, node_assert_1.strict)(s3Config.endpoint, 'require env CNPMCORE_NFS_S3_CLIENT_ENDPOINT');
|
|
150
|
+
(0, node_assert_1.strict)(s3Config.credentials.accessKeyId, 'require env CNPMCORE_NFS_S3_CLIENT_ID');
|
|
151
|
+
(0, node_assert_1.strict)(s3Config.credentials.secretAccessKey, 'require env CNPMCORE_NFS_S3_CLIENT_SECRET');
|
|
152
|
+
(0, node_assert_1.strict)(s3Config.bucket, 'require env CNPMCORE_NFS_S3_CLIENT_BUCKET');
|
|
153
|
+
// TODO(@fengmk2): should change to use import to support esm
|
|
154
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
155
|
+
const S3Client = require('s3-cnpmcore');
|
|
156
|
+
config.nfs.client = new S3Client(s3Config);
|
|
152
157
|
}
|
|
153
158
|
config.logger = {
|
|
154
159
|
enablePerformanceTimer: true,
|
|
155
160
|
enableFastContextLogger: true,
|
|
156
|
-
appLogName:
|
|
157
|
-
coreLogName:
|
|
158
|
-
agentLogName:
|
|
159
|
-
errorLogName:
|
|
160
|
-
outputJSON:
|
|
161
|
+
appLogName: (0, EnvUtil_1.env)('CNPMCORE_APP_LOG_NAME', 'string', `${appInfo.name}-web.log`),
|
|
162
|
+
coreLogName: (0, EnvUtil_1.env)('CNPMCORE_CORE_LOG_NAME', 'string', 'egg-web.log'),
|
|
163
|
+
agentLogName: (0, EnvUtil_1.env)('CNPMCORE_AGENT_LOG_NAME', 'string', 'egg-agent.log'),
|
|
164
|
+
errorLogName: (0, EnvUtil_1.env)('CNPMCORE_ERROR_LOG_NAME', 'string', 'common-error.log'),
|
|
165
|
+
outputJSON: (0, EnvUtil_1.env)('CNPMCORE_LOG_JSON_OUTPUT', 'boolean', false),
|
|
161
166
|
};
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
if (process.env.CNPMCORE_LOG_JSON_OUTPUT) {
|
|
166
|
-
config.logger.outputJSON = Boolean(process.env.CNPMCORE_LOG_JSON_OUTPUT);
|
|
167
|
+
const logDir = (0, EnvUtil_1.env)('CNPMCORE_LOG_DIR', 'string', '');
|
|
168
|
+
if (logDir) {
|
|
169
|
+
config.logger.dir = logDir;
|
|
167
170
|
}
|
|
168
171
|
config.logrotator = {
|
|
169
172
|
// only keep 1 days log files
|
|
@@ -196,14 +199,14 @@ exports.default = (appInfo) => {
|
|
|
196
199
|
if (config.cnpmcore.enableElasticsearch) {
|
|
197
200
|
config.elasticsearch = {
|
|
198
201
|
client: {
|
|
199
|
-
node:
|
|
202
|
+
node: (0, EnvUtil_1.env)('CNPMCORE_CONFIG_ES_CLIENT_NODE', 'string', ''),
|
|
200
203
|
auth: {
|
|
201
|
-
username:
|
|
202
|
-
password:
|
|
204
|
+
username: (0, EnvUtil_1.env)('CNPMCORE_CONFIG_ES_CLIENT_AUTH_USERNAME', 'string', ''),
|
|
205
|
+
password: (0, EnvUtil_1.env)('CNPMCORE_CONFIG_ES_CLIENT_AUTH_PASSWORD', 'string', ''),
|
|
203
206
|
},
|
|
204
207
|
},
|
|
205
208
|
};
|
|
206
209
|
}
|
|
207
210
|
return config;
|
|
208
211
|
};
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jb25maWcvY29uZmlnLmRlZmF1bHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNkNBQStDO0FBQy9DLDZDQUF5QztBQUN6Qyx5Q0FBaUM7QUFFakMsd0RBQWlDO0FBQ2pDLGlEQUErQztBQUMvQyx1REFBNEc7QUFDNUcsbURBQTRDO0FBRTVDLHlDQUFzQztBQUV6QixRQUFBLGNBQWMsR0FBbUI7SUFDNUMsSUFBSSxFQUFFLE1BQU07SUFDWixVQUFVLEVBQUUsS0FBSztJQUNqQixVQUFVLEVBQUUsRUFBRTtJQUNkLGNBQWMsRUFBRSxJQUFBLGFBQUcsRUFBQyxpQ0FBaUMsRUFBRSxRQUFRLEVBQUUsNEJBQTRCLENBQUM7SUFDOUYsb0JBQW9CLEVBQUUsSUFBQSxhQUFHLEVBQUMseUNBQXlDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQztJQUN0RixpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLHlCQUF5QixFQUFFLE1BQU07SUFDakMsc0JBQXNCLEVBQUUsR0FBRztJQUMzQixRQUFRLEVBQUUsb0JBQVEsQ0FBQyxJQUFJO0lBQ3ZCLGNBQWMsRUFBRSwwQkFBYyxDQUFDLE1BQU07SUFDckMsbUNBQW1DLEVBQUUsRUFBRTtJQUN2QyxtQ0FBbUMsRUFBRSxFQUFFO0lBQ3ZDLHlDQUF5QyxFQUFFLEVBQUU7SUFDN0Msb0JBQW9CLEVBQUUsRUFBRTtJQUN4QiwwQkFBMEIsRUFBRSxJQUFJO0lBQ2hDLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsdUJBQXVCLEVBQUUsRUFBRTtJQUMzQixzQkFBc0IsRUFBRSxLQUFLO0lBQzdCLDhCQUE4QixFQUFFLEVBQUU7SUFDbEMsdUJBQXVCLEVBQUUsRUFBRTtJQUMzQixtQkFBbUIsRUFBRSxLQUFLO0lBQzFCLDBCQUEwQixFQUFFLEdBQUc7SUFDL0IscUJBQXFCLEVBQUUsNkJBQTZCO0lBQ3BELHlCQUF5QixFQUFFLDZC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
|
|
@@ -12,7 +12,7 @@ exports.default = (appInfo) => {
|
|
|
12
12
|
const config = {};
|
|
13
13
|
config.dataDir = (0, path_1.join)(appInfo.root, '.cnpmcore_unittest');
|
|
14
14
|
config.orm = {
|
|
15
|
-
database: database_1.database.name
|
|
15
|
+
database: database_1.database.name || 'cnpmcore_unittest',
|
|
16
16
|
};
|
|
17
17
|
config.nfs = {
|
|
18
18
|
dir: (0, path_1.join)(config.dataDir, 'nfs'),
|
|
@@ -7,9 +7,9 @@ export declare const database: {
|
|
|
7
7
|
type: string;
|
|
8
8
|
dialect: string;
|
|
9
9
|
client: string;
|
|
10
|
-
name: string
|
|
11
|
-
host: string
|
|
12
|
-
port:
|
|
13
|
-
user: string
|
|
14
|
-
password: string
|
|
10
|
+
name: string;
|
|
11
|
+
host: string;
|
|
12
|
+
port: number;
|
|
13
|
+
user: string;
|
|
14
|
+
password: string;
|
|
15
15
|
};
|
package/dist/config/database.js
CHANGED
|
@@ -1,38 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.database = exports.DATABASE_TYPE = void 0;
|
|
4
|
+
const EnvUtil_1 = require("../app/common/EnvUtil");
|
|
4
5
|
var DATABASE_TYPE;
|
|
5
6
|
(function (DATABASE_TYPE) {
|
|
6
7
|
DATABASE_TYPE["MySQL"] = "MySQL";
|
|
7
8
|
DATABASE_TYPE["PostgreSQL"] = "PostgreSQL";
|
|
8
9
|
DATABASE_TYPE["SQLite"] = "SQLite";
|
|
9
10
|
})(DATABASE_TYPE || (exports.DATABASE_TYPE = DATABASE_TYPE = {}));
|
|
10
|
-
const dbType =
|
|
11
|
-
let dbName =
|
|
12
|
-
let dbHost =
|
|
13
|
-
let dbPort =
|
|
14
|
-
let dbUser =
|
|
15
|
-
let dbPassword =
|
|
11
|
+
const dbType = (0, EnvUtil_1.env)('CNPMCORE_DATABASE_TYPE', 'string', DATABASE_TYPE.MySQL);
|
|
12
|
+
let dbName = (0, EnvUtil_1.env)('CNPMCORE_DATABASE_NAME', 'string', '');
|
|
13
|
+
let dbHost = (0, EnvUtil_1.env)('CNPMCORE_DATABASE_HOST', 'string', '');
|
|
14
|
+
let dbPort = (0, EnvUtil_1.env)('CNPMCORE_DATABASE_PORT', 'number', 0);
|
|
15
|
+
let dbUser = (0, EnvUtil_1.env)('CNPMCORE_DATABASE_USER', 'string', '');
|
|
16
|
+
let dbPassword = (0, EnvUtil_1.env)('CNPMCORE_DATABASE_PASSWORD', 'string', '');
|
|
16
17
|
let dialect = 'mysql';
|
|
17
18
|
let dbClient = 'mysql2';
|
|
18
19
|
if (dbType === DATABASE_TYPE.MySQL) {
|
|
19
20
|
// Compatible mysql configurations
|
|
20
|
-
dbName = dbName
|
|
21
|
-
dbHost = dbHost
|
|
22
|
-
dbPort = dbPort
|
|
23
|
-
dbUser = dbUser
|
|
24
|
-
dbPassword = dbPassword
|
|
21
|
+
dbName = dbName || (0, EnvUtil_1.env)('CNPMCORE_MYSQL_DATABASE', 'string', '') || (0, EnvUtil_1.env)('MYSQL_DATABASE', 'string', '') || '';
|
|
22
|
+
dbHost = dbHost || (0, EnvUtil_1.env)('CNPMCORE_MYSQL_HOST', 'string', '') || (0, EnvUtil_1.env)('MYSQL_HOST', 'string', '') || '127.0.0.1';
|
|
23
|
+
dbPort = dbPort || (0, EnvUtil_1.env)('CNPMCORE_MYSQL_PORT', 'number', 0) || (0, EnvUtil_1.env)('MYSQL_PORT', 'number', 0) || 3306;
|
|
24
|
+
dbUser = dbUser || (0, EnvUtil_1.env)('CNPMCORE_MYSQL_USER', 'string', '') || (0, EnvUtil_1.env)('MYSQL_USER', 'string', '') || 'root';
|
|
25
|
+
dbPassword = dbPassword || (0, EnvUtil_1.env)('CNPMCORE_MYSQL_PASSWORD', 'string', '') || (0, EnvUtil_1.env)('MYSQL_PASSWORD', 'string', '');
|
|
25
26
|
}
|
|
26
27
|
else if (dbType === DATABASE_TYPE.PostgreSQL) {
|
|
27
28
|
dbClient = 'pg';
|
|
28
29
|
dialect = 'postgres';
|
|
29
|
-
dbHost = dbHost
|
|
30
|
-
dbPort = dbPort
|
|
31
|
-
dbUser = dbUser
|
|
32
|
-
dbPassword = dbPassword
|
|
30
|
+
dbHost = dbHost || (0, EnvUtil_1.env)('CNPMCORE_POSTGRES_HOST', 'string', '') || (0, EnvUtil_1.env)('POSTGRES_HOST', 'string', '') || '127.0.0.1';
|
|
31
|
+
dbPort = dbPort || (0, EnvUtil_1.env)('CNPMCORE_POSTGRES_PORT', 'number', 0) || (0, EnvUtil_1.env)('POSTGRES_PORT', 'number', 0) || 5432;
|
|
32
|
+
dbUser = dbUser || (0, EnvUtil_1.env)('CNPMCORE_POSTGRES_USER', 'string', '') || (0, EnvUtil_1.env)('POSTGRES_USER', 'string', '') || 'postgres';
|
|
33
|
+
dbPassword = dbPassword || (0, EnvUtil_1.env)('CNPMCORE_POSTGRES_PASSWORD', 'string', '') || (0, EnvUtil_1.env)('POSTGRES_PASSWORD', 'string', '') || 'postgres';
|
|
33
34
|
}
|
|
34
35
|
else if (dbType === DATABASE_TYPE.SQLite) {
|
|
35
|
-
// TODO
|
|
36
|
+
// TODO: Implement SQLite
|
|
36
37
|
dbClient = 'sqlite';
|
|
37
38
|
dialect = 'sqlite';
|
|
38
39
|
}
|
|
@@ -46,4 +47,4 @@ exports.database = {
|
|
|
46
47
|
user: dbUser,
|
|
47
48
|
password: dbPassword,
|
|
48
49
|
};
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9jb25maWcvZGF0YWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQTRDO0FBRTVDLElBQVksYUFJWDtBQUpELFdBQVksYUFBYTtJQUN2QixnQ0FBZSxDQUFBO0lBQ2YsMENBQXlCLENBQUE7SUFDekIsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLGFBQWEsNkJBQWIsYUFBYSxRQUl4QjtBQUVELE1BQU0sTUFBTSxHQUFHLElBQUEsYUFBRyxFQUFDLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUUsSUFBSSxNQUFNLEdBQUcsSUFBQSxhQUFHLEVBQUMsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELElBQUksTUFBTSxHQUFHLElBQUEsYUFBRyxFQUFDLHdCQUF3QixFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN6RCxJQUFJLE1BQU0sR0FBRyxJQUFBLGFBQUcsRUFBQyx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLEdBQUcsSUFBQSxhQUFHLEVBQUMsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELElBQUksVUFBVSxHQUFHLElBQUEsYUFBRyxFQUFDLDRCQUE0QixFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNqRSxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdEIsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ3hCLElBQUksTUFBTSxLQUFLLGFBQWEsQ0FBQyxLQUFLLEVBQUU7SUFDbEMsa0NBQWtDO0lBQ2xDLE1BQU0sR0FBRyxNQUFNLElBQUksSUFBQSxhQUFHLEVBQUMseUJBQXlCLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUEsYUFBRyxF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
|