steedos-cli 3.0.0-beta.7 → 3.0.0-beta.70

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/run CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env node
2
- console.log('111')
3
2
  require('@oclif/command').run()
4
3
  .then(require('@oclif/command/flush'))
5
4
  .catch(require('@oclif/errors/handle'))
@@ -32,376 +32,43 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
35
  Object.defineProperty(exports, "__esModule", { value: true });
39
- const { Command, flags } = require('@oclif/command');
40
- console.log('========>');
41
- const path = require("path");
42
- const moleculer_1 = require("moleculer");
43
- const fs_1 = __importDefault(require("fs"));
44
- const glob_1 = __importDefault(require("glob"));
45
- const lodash_1 = __importDefault(require("lodash"));
46
- const os_1 = __importDefault(require("os"));
47
- const cluster_1 = __importDefault(require("cluster"));
48
- const kleur_1 = __importDefault(require("kleur"));
49
- const start_1 = require("../start");
50
- const stopSignals = [
51
- "SIGHUP",
52
- "SIGINT",
53
- "SIGQUIT",
54
- "SIGILL",
55
- "SIGTRAP",
56
- "SIGABRT",
57
- "SIGBUS",
58
- "SIGFPE",
59
- "SIGUSR1",
60
- "SIGSEGV",
61
- "SIGUSR2",
62
- "SIGTERM"
63
- ];
64
- const logger = {
65
- info(message) {
66
- console.log(kleur_1.default.grey("[Runner]"), kleur_1.default.green().bold(message));
67
- },
68
- error(err) {
69
- if (err instanceof Error)
70
- console.error(kleur_1.default.grey("[Runner]"), kleur_1.default.red().bold(err.message), err);
71
- else
72
- console.error(kleur_1.default.grey("[Runner]"), kleur_1.default.red().bold(err));
73
- }
74
- };
75
- class StartCommand extends Command {
76
- async loadEnvFile() {
77
- if (this.flags.env || this.flags.envfile) {
78
- try {
79
- const dotenv = await Promise.resolve().then(() => __importStar(require("dotenv")));
80
- if (this.flags.envfile)
81
- dotenv.config({ path: this.flags.envfile });
82
- else
83
- dotenv.config();
84
- }
85
- catch (err) {
86
- throw new Error("The 'dotenv' package is missing! Please install it with 'npm install dotenv --save' command.");
87
- }
88
- }
89
- }
90
- fixDriveLetterCase(s) {
91
- if (s && process.platform === "win32" && s.match(/^[A-Z]:/g)) {
92
- return s.charAt(0).toLowerCase() + s.slice(1);
93
- }
94
- return s;
95
- }
96
- async loadConfigFile() {
97
- let filePath;
98
- if (process.env["MOLECULER_CONFIG"]) {
99
- filePath = path.isAbsolute(process.env["MOLECULER_CONFIG"])
100
- ? process.env["MOLECULER_CONFIG"]
101
- : path.resolve(process.cwd(), process.env["MOLECULER_CONFIG"]);
102
- }
103
- else if (this.flags.config) {
104
- filePath = path.isAbsolute(this.flags.config)
105
- ? this.flags.config
106
- : path.resolve(process.cwd(), this.flags.config);
107
- if (!fs_1.default.existsSync(filePath)) {
108
- filePath = null;
109
- }
110
- }
111
- if (!filePath && fs_1.default.existsSync(path.resolve(process.cwd(), "moleculer.config.mjs"))) {
112
- filePath = path.resolve(process.cwd(), "moleculer.config.mjs");
113
- }
114
- if (!filePath && fs_1.default.existsSync(path.resolve(process.cwd(), "moleculer.config.js"))) {
115
- filePath = path.resolve(process.cwd(), "moleculer.config.js");
116
- }
117
- if (!filePath && fs_1.default.existsSync(path.resolve(process.cwd(), "moleculer.config.json"))) {
118
- filePath = path.resolve(process.cwd(), "moleculer.config.json");
119
- }
120
- if (filePath) {
121
- if (!fs_1.default.existsSync(filePath))
122
- return Promise.reject(new Error(`Config file not found: ${filePath}`));
123
- const ext = path.extname(filePath);
124
- switch (ext) {
125
- case ".json":
126
- case ".js":
127
- case ".mjs":
128
- case ".ts": {
129
- let content = require(filePath);
130
- if (moleculer_1.Utils.isFunction(content))
131
- content = await content.call(this);
132
- this.configFile = await start_1.Start.mergeConfig(content);
133
- break;
134
- }
135
- default:
136
- return Promise.reject(new Error(`Not supported file extension: ${ext}`));
137
- }
138
- }
139
- return;
140
- }
141
- normalizeEnvValue(value) {
142
- if (value.toLowerCase() === "true" || value.toLowerCase() === "false") {
143
- value = value === "true";
144
- }
145
- else if (!isNaN(value)) {
146
- value = Number(value);
147
- }
148
- return value;
149
- }
150
- overwriteFromEnv(obj, prefix) {
151
- Object.keys(obj).forEach(key => {
152
- const envName = ((prefix ? prefix + "_" : "") + key).toUpperCase();
153
- if (process.env[envName]) {
154
- obj[key] = this.normalizeEnvValue(process.env[envName]);
155
- }
156
- if (moleculer_1.Utils.isPlainObject(obj[key]))
157
- obj[key] = this.overwriteFromEnv(obj[key], (prefix ? prefix + "_" : "") + key);
158
- });
159
- if (prefix == null) {
160
- const moleculerPrefix = "MOL_";
161
- Object.keys(process.env)
162
- .filter(key => key.startsWith(moleculerPrefix))
163
- .map(key => ({
164
- key,
165
- withoutPrefix: key.substring(moleculerPrefix.length)
166
- }))
167
- .forEach(variable => {
168
- const dotted = variable.withoutPrefix
169
- .split("__")
170
- .map(level => level.toLocaleLowerCase())
171
- .map(level => level
172
- .split("_")
173
- .map((value, index) => {
174
- if (index == 0) {
175
- return value;
176
- }
177
- else {
178
- return value[0].toUpperCase() + value.substring(1);
179
- }
180
- })
181
- .join(""))
182
- .join(".");
183
- obj = moleculer_1.Utils.dotSet(obj, dotted, this.normalizeEnvValue(process.env[variable.key]));
184
- });
185
- }
186
- return obj;
187
- }
188
- mergeOptions() {
189
- this.config = lodash_1.default.defaultsDeep(this.configFile, moleculer_1.ServiceBroker.defaultOptions);
190
- this.config = this.overwriteFromEnv(this.config);
191
- if (this.flags.silent)
192
- this.config.logger = false;
193
- if (this.flags.hot)
194
- this.config.steedosHotReload = true;
195
- }
196
- isDirectory(p) {
36
+ const command_1 = require("@oclif/command");
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ class StartCommand extends command_1.Command {
40
+ async run() {
197
41
  try {
198
- return fs_1.default.lstatSync(p).isDirectory();
199
- }
200
- catch (_) {
201
- }
202
- return false;
203
- }
204
- isServiceFile(p) {
42
+ this.checkModuleExists("@builder6/server");
43
+ this.checkModuleExists("@steedos/server");
44
+ const serverPath = require.resolve("@builder6/server");
45
+ const steedosPath = require.resolve("@steedos/server");
46
+ const appConfig = require(steedosPath);
47
+ const server = require(serverPath);
48
+ const { version } = require("@steedos/server/package.json");
49
+ const i18n = require("@steedos/i18n");
50
+ global.t = i18n.t;
51
+ global._ = require("underscore");
52
+ process.env.STEEDOS_VERSION = version;
53
+ server.bootstrap(appConfig);
54
+ }
55
+ catch (error) {
56
+ this.error(error.message, { exit: 1 });
57
+ }
58
+ }
59
+ checkModuleExists(moduleName) {
205
60
  try {
206
- return !fs_1.default.lstatSync(p).isDirectory();
207
- }
208
- catch (_) {
209
- }
210
- return false;
211
- }
212
- async loadServices() {
213
- this.watchFolders.length = 0;
214
- const fileMask = this.flags.mask || "**/*.service.js";
215
- const serviceDir = process.env.SERVICEDIR || "";
216
- const svcDir = path.isAbsolute(serviceDir)
217
- ? serviceDir
218
- : path.resolve(process.cwd(), serviceDir);
219
- let patterns = this.servicePaths;
220
- if (process.env.SERVICES || process.env.SERVICEDIR) {
221
- if (this.isDirectory(svcDir) && !process.env.SERVICES) {
222
- this.broker.loadServices(svcDir, fileMask);
223
- if (this.config.hotReload) {
224
- this.watchFolders.push(svcDir);
225
- }
226
- }
227
- else if (process.env.SERVICES) {
228
- patterns = Array.isArray(process.env.SERVICES)
229
- ? process.env.SERVICES
230
- : process.env.SERVICES.split(",");
231
- }
232
- }
233
- if (patterns.length > 0) {
234
- let serviceFiles = [];
235
- patterns
236
- .map(s => s.trim())
237
- .forEach(p => {
238
- const skipping = p[0] == "!";
239
- if (skipping)
240
- p = p.slice(1);
241
- if (p.startsWith("npm:")) {
242
- this.loadNpmModule(p.slice(4));
243
- }
244
- else {
245
- let files;
246
- const svcPath = path.isAbsolute(p) ? p : path.resolve(svcDir, p);
247
- if (this.isDirectory(svcPath)) {
248
- if (this.config.hotReload) {
249
- this.watchFolders.push(svcPath);
250
- }
251
- files = glob_1.default.sync(svcPath + "/" + fileMask, { absolute: true });
252
- if (files.length == 0)
253
- return this.broker.logger.warn(kleur_1.default
254
- .yellow()
255
- .bold(`There is no service files in directory: '${svcPath}'`));
256
- }
257
- else if (this.isServiceFile(svcPath)) {
258
- files = [svcPath.replace(/\\/g, "/")];
259
- }
260
- else if (this.isServiceFile(svcPath + ".service.js")) {
261
- files = [svcPath.replace(/\\/g, "/") + ".service.js"];
262
- }
263
- else {
264
- files = glob_1.default.sync(p, { cwd: svcDir, absolute: true });
265
- if (files.length == 0)
266
- this.broker.logger.warn(kleur_1.default
267
- .yellow()
268
- .bold(`There is no matched file for pattern: '${p}'`));
269
- }
270
- if (files && files.length > 0) {
271
- if (skipping)
272
- serviceFiles = serviceFiles.filter(f => files.indexOf(f) === -1);
273
- else
274
- serviceFiles.push(...files);
275
- }
276
- }
277
- });
278
- await Promise.all(lodash_1.default.uniq(serviceFiles).map(async (f) => {
279
- const content = require(f);
280
- const svc = this.broker.createService(content);
281
- svc.__filename = f;
282
- }));
61
+ require.resolve(moduleName);
283
62
  }
284
- }
285
- startWorkers(instances) {
286
- let stopping = false;
287
- cluster_1.default.on("exit", function (worker, code) {
288
- if (!stopping) {
289
- if (process.env.NODE_ENV === "production" && code !== 0) {
290
- logger.info(`The worker #${worker.id} has disconnected`);
291
- logger.info(`Worker #${worker.id} restarting...`);
292
- cluster_1.default.fork();
293
- logger.info(`Worker #${worker.id} restarted`);
294
- }
295
- else {
296
- process.exit(code);
297
- }
63
+ catch (err) {
64
+ const modulePath = path.join(process.cwd(), "node_modules", moduleName);
65
+ if (!fs.existsSync(modulePath)) {
66
+ throw new Error(`Required module '${moduleName}' is not installed. Please run 'npm install ${moduleName}'`);
298
67
  }
299
- });
300
- const workerCount = Number.isInteger(instances) && instances > 0 ? instances : os_1.default.cpus().length;
301
- logger.info(`Starting ${workerCount} workers...`);
302
- for (let i = 0; i < workerCount; i++) {
303
- cluster_1.default.fork();
304
- }
305
- stopSignals.forEach(function (signal) {
306
- process.on(signal, () => {
307
- logger.info(`Got ${signal}, stopping workers...`);
308
- stopping = true;
309
- cluster_1.default.disconnect(function () {
310
- logger.info("All workers stopped, exiting.");
311
- process.exit(0);
312
- });
313
- });
314
- });
315
- }
316
- async loadHotReloadService() {
317
- if (this.config.steedosHotReload) {
318
- const content = require('../start/hotReload');
319
- this.broker.createService(content);
68
+ throw new Error(`Failed to resolve module '${moduleName}'. ${err.message}`);
320
69
  }
321
70
  }
322
- loadNpmModule(name) {
323
- let svc = require(name);
324
- return this.broker.createService(svc);
325
- }
326
- async startBroker() {
327
- this.worker = cluster_1.default.worker;
328
- if (this.worker) {
329
- Object.assign(this.config, {
330
- nodeID: (this.config.nodeID || moleculer_1.Utils.getNodeID()) + "-" + this.worker.id
331
- });
332
- }
333
- this.broker = new moleculer_1.ServiceBroker(Object.assign({}, this.config));
334
- this.broker.runner = this;
335
- global.broker = this.broker;
336
- await this.loadServices();
337
- await this.loadHotReloadService();
338
- if (this.watchFolders.length > 0)
339
- this.broker.runner.folders = this.watchFolders;
340
- return this.broker.start().then(() => {
341
- if (this.flags.repl && (!this.worker || this.worker.id === 1))
342
- this.broker.repl();
343
- return this.broker;
344
- });
345
- }
346
- _runMoleculer() {
347
- return Promise.resolve()
348
- .then(() => this.loadConfigFile())
349
- .then(() => this.mergeOptions())
350
- .then(() => this.startBroker())
351
- .catch(err => {
352
- logger.error(err);
353
- process.exit(1);
354
- });
355
- }
356
- restartBroker() {
357
- if (this.broker && this.broker.started) {
358
- return this.broker
359
- .stop()
360
- .catch(err => {
361
- logger.error("Error while stopping ServiceBroker.");
362
- logger.error(err);
363
- })
364
- .then(() => this._runMoleculer());
365
- }
366
- else {
367
- return this._runMoleculer();
368
- }
369
- }
370
- async run() {
371
- const { args, flags } = this.parse(StartCommand);
372
- this.watchFolders = [];
373
- this.flags = null;
374
- this.configFile = null;
375
- this.config = null;
376
- this.servicePaths = null;
377
- this.broker = null;
378
- this.worker = null;
379
- this.flags = flags;
380
- this.servicePaths = lodash_1.default.compact(Object.values(args));
381
- if (this.flags.instances !== undefined && cluster_1.default.isMaster) {
382
- this.instances = Number.parseInt(this.flags.instances) ? Number.parseInt(this.flags.instances) : 'max';
383
- return this.startWorkers(this.instances);
384
- }
385
- return this._runMoleculer();
386
- }
387
71
  }
388
- StartCommand.args = [
389
- {
390
- name: 'servicePaths',
391
- required: false,
392
- default: '',
393
- description: 'service files or directories or glob masks',
394
- }
395
- ];
396
- StartCommand.description = `run steedos projects`;
397
- StartCommand.flags = {
398
- repl: flags.boolean({ char: 'r', default: false, description: 'If true, it switches to REPL mode after broker started.' }),
399
- silent: flags.boolean({ char: 's', default: false, description: 'Disable the broker logger. It prints nothing to the console.' }),
400
- hot: flags.boolean({ char: 'h', default: false, description: 'Hot reload services when they change.' }),
401
- config: flags.string({ char: 'c', default: 'steedos.config.js', description: 'Load configuration file from a different path or a different filename.' }),
402
- env: flags.boolean({ char: 'e', default: false, description: 'Load environment variables from the ‘.env’ file from the current folder.' }),
403
- envfile: flags.string({ char: 'E', description: 'Load environment variables from the specified file.' }),
404
- instances: flags.string({ char: 'i', description: 'Launch [number] node instances or max for all cpu cores (with cluster module)' })
405
- };
72
+ StartCommand.description = `Run Steedos projects`;
406
73
  module.exports = StartCommand;
407
74
  //# sourceMappingURL=start.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAyC;AACzC,uCAAyB;AACzB,2CAA6B;AAE7B,MAAM,YAAa,SAAQ,iBAAO;IAChC,KAAK,CAAC,GAAG;QACP,IAAI,CAAC;YAEH,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;YAC3C,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;YAE1C,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YAEvD,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAEvD,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;YAEvC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;YAGnC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;YAG5D,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;YACtC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YAElB,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;YAEjC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,OAAO,CAAC;YAEtC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAEO,iBAAiB,CAAC,UAAkB;QAC1C,IAAI,CAAC;YACH,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;YACxE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CACb,oBAAoB,UAAU,+CAA+C,UAAU,GAAG,CAC3F,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,KAAK,CACb,6BAA6B,UAAU,MAAM,GAAG,CAAC,OAAO,EAAE,CAC3D,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,YAAY,CAAC,WAAW,GAAG,sBAAsB,CAAC;AAElD,MAAM,CAAC,OAAO,GAAG,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "steedos-cli",
3
- "version": "3.0.0-beta.7",
3
+ "version": "3.0.0-beta.70",
4
4
  "description": "Develop and run your enterprise apps in miniutes",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -33,8 +33,8 @@
33
33
  "@oclif/command": "^1.8.16",
34
34
  "@oclif/config": "^1.8.3",
35
35
  "@oclif/plugin-help": "^5.1.12",
36
- "@steedos/metadata-core": "3.0.0-beta.7",
37
- "@steedos/metadata-registrar": "3.0.0-beta.7",
36
+ "@steedos/metadata-core": "3.0.0-beta.70",
37
+ "@steedos/metadata-registrar": "3.0.0-beta.70",
38
38
  "archiver": "^5.0.2",
39
39
  "chalk": "2.4.2",
40
40
  "change-case": "^3.1.0",
@@ -77,5 +77,5 @@
77
77
  "publishConfig": {
78
78
  "access": "public"
79
79
  },
80
- "gitHead": "b68a33d2fa33b380aa7ec401b63315886f7de861"
80
+ "gitHead": "597f124ef73efa97a2da52b4de3c7d733ebd6887"
81
81
  }
@@ -1,356 +0,0 @@
1
- "use strict";
2
- const _ = require("lodash")
3
-
4
- global.__startDate = new Date();
5
-
6
- require('dotenv-flow').config(
7
- {
8
- path: process.cwd(),
9
- silent: true
10
- });
11
-
12
- if (_.isEmpty(process.env.STEEDOS_TENANT_ENABLE_PASSWORD_LOGIN)) {
13
- process.env.STEEDOS_TENANT_ENABLE_PASSWORD_LOGIN = 'true';
14
- }
15
-
16
- if (_.isEmpty(process.env.STEEDOS_UNPKG_URL)) {
17
- process.env.STEEDOS_UNPKG_URL = 'https://unpkg.steedos.cn';
18
- }
19
- process.env.STEEDOS_UNPKG_URL = process.env.STEEDOS_UNPKG_URL.replace(/\/+$/, "");
20
-
21
- if (_.isEmpty(process.env.STEEDOS_BUILDER_URL)) {
22
- process.env.STEEDOS_BUILDER_URL = 'https://6-3.builder.steedos.com';
23
- }
24
- process.env.STEEDOS_BUILDER_URL = process.env.STEEDOS_BUILDER_URL.replace(/\/+$/, "");
25
-
26
-
27
- if (_.isEmpty(process.env.STEEDOS_AMIS_VERSION)) {
28
- process.env.STEEDOS_AMIS_VERSION = '6.3.0-patch.3';
29
- }
30
-
31
- if (_.isEmpty(process.env.STEEDOS_AMIS_URL)) {
32
- // process.env.STEEDOS_AMIS_URL = process.env.STEEDOS_UNPKG_URL + '/amis@' + process.env.STEEDOS_AMIS_VERSION;
33
- // 默认加载 https://unpkg.steedos.cn/@steedos-widgets/amis@3.6.3-patch.2, STEEDOS_AMIS_VERSION可变更版本号
34
- process.env.STEEDOS_AMIS_URL = process.env.STEEDOS_UNPKG_URL + '/@steedos-widgets/amis@' + process.env.STEEDOS_AMIS_VERSION;
35
- } else {
36
- process.env.STEEDOS_AMIS_URL = process.env.STEEDOS_AMIS_URL.replace("https://unpkg.com", process.env.STEEDOS_UNPKG_URL)
37
- }
38
- process.env.STEEDOS_AMIS_URL = process.env.STEEDOS_AMIS_URL.replace(/\/+$/, "");
39
-
40
- if (_.isEmpty(process.env.STEEDOS_WIDGETS_VERSION)) {
41
- process.env.STEEDOS_WIDGETS_VERSION = 'v6.10.1-beta.13';
42
- }
43
-
44
- if (_.isEmpty(process.env.STEEDOS_PUBLIC_PAGE_ASSETURLS)) {
45
- const widgetsVersion = process.env.STEEDOS_WIDGETS_VERSION;
46
- const unpkgUrl = process.env.STEEDOS_UNPKG_URL;
47
- let steedosPublicPageAsseturls = `${unpkgUrl}/@steedos-widgets/amis-object@${widgetsVersion}/dist/assets.json`;
48
- if (!_.isEmpty(process.env.STEEDOS_WIDGETS_ADDITIONAL)) {
49
- process.env.STEEDOS_WIDGETS_ADDITIONAL.split(',').forEach(additional => {
50
- const lastAtIndex = additional.lastIndexOf('@');
51
- let packageName = additional;
52
- let versionToUse = widgetsVersion;
53
-
54
- // 只有当 '@' 不在字符串开头(即大于0的位置)才视为存在版本信息
55
- if (lastAtIndex > 0) {
56
- packageName = additional.substring(0, lastAtIndex);
57
- versionToUse = additional.substring(lastAtIndex + 1) || widgetsVersion;
58
- }
59
- steedosPublicPageAsseturls += `,${unpkgUrl}/${packageName}@${versionToUse}/dist/assets.json`;
60
- })
61
- }
62
- process.env.STEEDOS_PUBLIC_PAGE_ASSETURLS = steedosPublicPageAsseturls
63
- }
64
-
65
- if (_.isEmpty(process.env.SERIALIZER)) {
66
- process.env.SERIALIZER = 'JSON'
67
- }
68
-
69
- if (_.isEmpty(process.env.ROOT_URL)) {
70
- console.error("ERROR: Environment variable ROOT_URL is not defined.")
71
- process.env.ROOT_URL = "http://localhost"
72
- }
73
-
74
- process.env.ROOT_URL = process.env.ROOT_URL.replace(/\/+$/, "");
75
-
76
- /**
77
- * Steedos ServiceBroker configuration file
78
- *
79
- * More info about options:
80
- * https://moleculer.services/docs/0.14/configuration.html
81
- *
82
- *
83
- * Overwriting options in production:
84
- * ================================
85
- * You can overwrite any option with environment variables.
86
- * For example to overwrite the "logLevel" value, use `LOGLEVEL=warn` env var.
87
- * To overwrite a nested parameter, e.g. retryPolicy.retries, use `RETRYPOLICY_RETRIES=10` env var.
88
- *
89
- * To overwrite broker’s deeply nested default options, which are not presented in "steedos.config.js",
90
- * use the `MOL_` prefix and double underscore `__` for nested properties in .env file.
91
- * For example, to set the cacher prefix to `MYCACHE`, you should declare an env var as `MOL_CACHER__OPTIONS__PREFIX=mycache`.
92
- * It will set this:
93
- * {
94
- * cacher: {
95
- * options: {
96
- * prefix: "mycache"
97
- * }
98
- * }
99
- * }
100
- */
101
- module.exports = {
102
- // Namespace of nodes to segment your nodes on the same network.
103
- namespace: "steedos",
104
- // Unique node identifier. Must be unique in a namespace.
105
- nodeID: process.env.STEEDOS_NODEID,
106
- // Custom metadata store. Store here what you want. Accessing: `this.broker.metadata`
107
- metadata: {},
108
-
109
- // Enable/disable logging or use custom logger. More info: https://moleculer.services/docs/0.14/logging.html
110
- // Available logger types: "Console", "File", "Pino", "Winston", "Bunyan", "debug", "Log4js", "Datadog"
111
- logger: [{
112
- type: "Console",
113
- options: {
114
- // level: "warn",
115
- // Using colors on the output
116
- colors: true,
117
- // Print module names with different colors (like docker-compose for containers)
118
- moduleColors: false,
119
- // Line formatter. It can be "json", "short", "simple", "full", a `Function` or a template string like "{timestamp} {level} {nodeID}/{mod}: {msg}"
120
- formatter: "full",
121
- // Custom object printer. If not defined, it uses the `util.inspect` method.
122
- objectPrinter: null,
123
- // Auto-padding the module name in order to messages begin at the same column.
124
- autoPadding: false
125
- }
126
- },
127
- {
128
- type: "File",
129
- options: {
130
- // Logging level
131
- // level: "warn",
132
- // Folder path to save files. You can use {nodeID} & {namespace} variables.
133
- folder: "./logs",
134
- // Filename template. You can use {date}, {nodeID} & {namespace} variables.
135
- filename: "{nodeID}-{date}.log",
136
- // Line formatter. It can be "json", "short", "simple", "full", a `Function` or a template string like "{timestamp} {level} {nodeID}/{mod}: {msg}"
137
- formatter: "json",
138
- // Custom object printer. If not defined, it uses the `util.inspect` method.
139
- objectPrinter: null,
140
- // End of line. Default values comes from the OS settings.
141
- eol: "\n",
142
- // File appending interval in milliseconds.
143
- interval: 1 * 1000
144
- },
145
- },
146
- ],
147
-
148
- // Default log level for built-in console logger. It can be overwritten in logger options above.
149
- // Available values: trace, debug, info, warn, error, fatal
150
- logLevel: process.env.STEEDOS_LOG_LEVEL || "warn",
151
-
152
- // Define transporter.
153
- // More info: https://moleculer.services/docs/0.14/networking.html
154
- // Note: During the development, you don't need to define it because all services will be loaded locally.
155
- // In production you can set it via `TRANSPORTER=nats://localhost:4222` environment variable.
156
- transporter: function () {
157
- try {
158
- return JSON.parse(process.env.STEEDOS_TRANSPORTER);
159
- } catch (error) {
160
- return process.env.STEEDOS_TRANSPORTER;
161
- }
162
- }(), //process.env.STEEDOS_TRANSPORTER,
163
-
164
- // Define a cacher.
165
- // More info: https://moleculer.services/docs/0.14/caching.html
166
- cacher: function () {
167
- try {
168
- return JSON.parse(process.env.STEEDOS_CACHER);
169
- } catch (error) {
170
- return process.env.STEEDOS_CACHER;
171
- }
172
- }(),
173
-
174
- // Define a serializer.
175
- // Available values: "JSON", "Avro", "ProtoBuf", "MsgPack", "Notepack", "Thrift".
176
- // More info: https://moleculer.services/docs/0.14/networking.html#Serialization
177
- serializer: process.env.SERIALIZER || "JSON",
178
-
179
- // Number of milliseconds to wait before reject a request with a RequestTimeout error. Disabled: 0
180
- requestTimeout: 0,
181
-
182
- // Retry policy settings. More info: https://moleculer.services/docs/0.14/fault-tolerance.html#Retry
183
- retryPolicy: {
184
- // Enable feature
185
- enabled: false,
186
- // Count of retries
187
- retries: 5,
188
- // First delay in milliseconds.
189
- delay: 100,
190
- // Maximum delay in milliseconds.
191
- maxDelay: 1000,
192
- // Backoff factor for delay. 2 means exponential backoff.
193
- factor: 2,
194
- // A function to check failed requests.
195
- check: err => err && !!err.retryable
196
- },
197
-
198
- // Limit of calling level. If it reaches the limit, broker will throw an MaxCallLevelError error. (Infinite loop protection)
199
- maxCallLevel: 100,
200
-
201
- // Number of seconds to send heartbeat packet to other nodes.
202
- heartbeatInterval: 10,
203
- // Number of seconds to wait before setting node to unavailable status.
204
- heartbeatTimeout: 30,
205
-
206
- // Cloning the params of context if enabled. High performance impact, use it with caution!
207
- contextParamsCloning: false,
208
-
209
- // Tracking requests and waiting for running requests before shuting down. More info: https://moleculer.services/docs/0.14/context.html#Context-tracking
210
- tracking: {
211
- // Enable feature
212
- enabled: false,
213
- // Number of milliseconds to wait before shuting down the process.
214
- shutdownTimeout: 5000,
215
- },
216
-
217
- // Disable built-in request & emit balancer. (Transporter must support it, as well.). More info: https://moleculer.services/docs/0.14/networking.html#Disabled-balancer
218
- disableBalancer: false,
219
-
220
- // Settings of Service Registry. More info: https://moleculer.services/docs/0.14/registry.html
221
- registry: {
222
- // Define balancing strategy. More info: https://moleculer.services/docs/0.14/balancing.html
223
- // Available values: "RoundRobin", "Random", "CpuUsage", "Latency", "Shard"
224
- strategy: "RoundRobin",
225
- // Enable local action call preferring. Always call the local action instance if available.
226
- preferLocal: true
227
- },
228
-
229
- // Settings of Circuit Breaker. More info: https://moleculer.services/docs/0.14/fault-tolerance.html#Circuit-Breaker
230
- circuitBreaker: {
231
- // Enable feature
232
- enabled: false,
233
- // Threshold value. 0.5 means that 50% should be failed for tripping.
234
- threshold: 0.5,
235
- // Minimum request count. Below it, CB does not trip.
236
- minRequestCount: 20,
237
- // Number of seconds for time window.
238
- windowTime: 60,
239
- // Number of milliseconds to switch from open to half-open state
240
- halfOpenTime: 10 * 1000,
241
- // A function to check failed requests.
242
- check: err => err && err.code >= 500
243
- },
244
-
245
- // Settings of bulkhead feature. More info: https://moleculer.services/docs/0.14/fault-tolerance.html#Bulkhead
246
- bulkhead: {
247
- // Enable feature.
248
- enabled: false,
249
- // Maximum concurrent executions.
250
- concurrency: 10,
251
- // Maximum size of queue
252
- maxQueueSize: 100,
253
- },
254
-
255
- // Enable action & event parameter validation. More info: https://moleculer.services/docs/0.14/validating.html
256
- validator: true,
257
-
258
- errorHandler: null,
259
-
260
- // Enable/disable built-in metrics function. More info: https://moleculer.services/docs/0.14/metrics.html
261
- metrics: {
262
- enabled: false,
263
- // Available built-in reporters: "Console", "CSV", "Event", "Prometheus", "Datadog", "StatsD"
264
- reporter: [
265
- {
266
- type: "Prometheus",
267
- options: {
268
- // HTTP port
269
- port: 3030,
270
- // HTTP URL path
271
- path: "/metrics",
272
- // Default labels which are appended to all metrics labels
273
- defaultLabels: registry => ({
274
- namespace: registry.broker.namespace,
275
- nodeID: registry.broker.nodeID
276
- })
277
- }
278
- }
279
- ]
280
- },
281
-
282
-
283
- tracing: {
284
- enabled: true,
285
- tags: {
286
- action: {
287
- // Add `user.userId` value from `ctx.meta`
288
- meta: ["user.userId", "user.spaceId"],
289
- },
290
- },
291
- exporter: {
292
- type: "Event",
293
- options: {
294
- // Name of event
295
- eventName: "$tracing.spans",
296
- // Send event when a span started
297
- sendStartSpan: false,
298
- // Send event when a span finished
299
- sendFinishSpan: true,
300
- // Broadcast or emit event
301
- broadcast: false,
302
- // Event groups
303
- groups: null,
304
- // Sending time interval in seconds
305
- interval: 5,
306
- // Custom span object converter before sending
307
- spanConverter: null,
308
- // Default tags. They will be added into all span tags.
309
- defaultTags: null
310
- }
311
- }
312
- },
313
-
314
- // Register custom middlewares
315
- middlewares: [],
316
-
317
- // Register custom REPL commands.
318
- replCommands: null,
319
-
320
- skipProcessEventRegistration: true,
321
-
322
- // Called after broker created.
323
- created(broker) {
324
- // Clear all cache entries
325
- broker.logger.warn('Clear all cache entries on startup.')
326
- broker.cacher.clean();
327
- console.log(`Clear all cache entries on startup===1>`)
328
- const objectql = require(require.resolve('@steedos/objectql', { paths: [process.cwd()] }));
329
- console.log(`Clear all cache entries on startup===2>`)
330
- objectql.broker.init(broker);
331
- console.log(`Clear all cache entries on startup===init>`)
332
- //TODO 此处不考虑多个node服务模式.
333
- process.on('SIGTERM', close.bind(broker, 'SIGTERM'));
334
- process.on('SIGINT', close.bind(broker, 'SIGINT'));
335
- async function close(signal) {
336
- try {
337
- await this.cacher.clean(); //TODO 此clean 有问题,如果在启动过程中就停止服务,则会清理不干净。尝试试用reids client 原生clean(flushdb)。
338
- await this.cacher.close();
339
- } catch (error) {
340
- // console.log(`error`, error)
341
- }
342
- console.log(`[${signal}]服务已停止: namespace: ${this.namespace}, nodeID: ${this.nodeID}`);
343
- process.exit(0);
344
- }
345
- },
346
-
347
- // Called after broker started.
348
- started(broker) {
349
-
350
- },
351
-
352
- // Called after broker stopped.
353
- stopped(broker) {
354
-
355
- }
356
- };
@@ -1,148 +0,0 @@
1
- datasources:
2
- default:
3
- connection:
4
- url: ${MONGO_URL}
5
- objectFiles:
6
- - "./steedos-app/**"
7
- public:
8
- NODE_ENV: ${NODE_ENV}
9
- amis:
10
- map_ak: ${STEEDOS_AMIS_MAP_KEY}
11
- map_vendor: ${STEEDOS_AMIS_MAP_VENDER}
12
- cfs:
13
- store: ${STEEDOS_CFS_STORE}
14
- templateSpaceId: 'template'
15
- enable_saas: ${STEEDOS_TENANT_ENABLE_SAAS}
16
- use_open_api: ${STEEDOS_PUBLIC_USE_OPEN_API}
17
- webservices:
18
- jsreport:
19
- url: ${JSREPORT_URL}
20
- urlProvideForJsreport: ${JSREPORT_TO_ACQUIRE_DATA_URL}
21
- app_exchange:
22
- url: ${STEEDOS_APP_EXCHANGE_URL}
23
- analytics:
24
- enabled: ${STEEDOS_PUBLIC_ANALYTICS_ENABLED}
25
- baidu:
26
- id: ${STEEDOS_PUBLIC_ANALYTICS_BAIDU_ID}
27
- posthog:
28
- id: ${STEEDOS_PUBLIC_ANALYTICS_POSTHOG_ID}
29
- api_host: ${STEEDOS_PUBLIC_ANALYTICS_POSTHOG_API_HOST}
30
- workflow:
31
- traceShowSignImage: ${STEEDOS_WORKFLOW_TRACE_SHOW_SIGN_IMAGE}
32
- sentry:
33
- enabled: ${STEEDOS_SENTRY_ENABLED}
34
- dsn: ${STEEDOS_SENTRY_DSN}
35
- vconsole:
36
- url: ${STEEDOS_PUBLIC_SCRIPT_VCONSOLE}
37
- accounts:
38
- username_min_length: ${STEEDOS_ACCOUNT_USERNAME_MIN_LENGTH}
39
- UTF8_Names_Validation: ${STEEDOS_ACCOUNT_NAME_VALIDATION}
40
- enable_query_auth: ${STEEDOS_ENABLE_QUERY_AUTH}
41
- cfs:
42
- store: ${STEEDOS_CFS_STORE}
43
- local:
44
- folder: ${STEEDOS_STORAGE_DIR}
45
- aliyun:
46
- region: ${STEEDOS_CFS_ALIYUN_REGION}
47
- bucket: ${STEEDOS_CFS_ALIYUN_BUCKET}
48
- folder: ${STEEDOS_CFS_ALIYUN_FOLDER}
49
- accessKeyId: ${STEEDOS_CFS_ALIYUN_ACCESSKEYID}
50
- secretAccessKey: ${STEEDOS_CFS_ALIYUN_SECRETACCESSKEY}
51
- aws:
52
- region: ${STEEDOS_CFS_AWS_S3_REGION}
53
- endpoint: ${STEEDOS_CFS_AWS_S3_ENDPOINT}
54
- bucket: ${STEEDOS_CFS_AWS_S3_BUCKET}
55
- accessKeyId: ${STEEDOS_CFS_AWS_S3_ACCESS_KEY_ID}
56
- secretAccessKey: ${STEEDOS_CFS_AWS_S3_SECRET_ACCESS_KEY}
57
- s3ForcePathStyle: ${STEEDOS_CFS_AWS_S3_FORCE_PATH_STYLE}
58
- signatureVersion: ${STEEDOS_CFS_AWS_S3_SIGNATURE_VERSION}
59
- steedosCloud:
60
- region: ${STEEDOS_CFS_CLOUD_REGION}
61
- bucket: ${STEEDOS_CFS_CLOUD_BUCKET}
62
- endpoint: ${STEEDOS_CFS_CLOUD_ENDPOINT}
63
- accessKeyId: ${STEEDOS_CFS_CLOUD_ACCESSKEYID}
64
- secretAccessKey: ${STEEDOS_CFS_CLOUD_SECRETACCESSKEY}
65
- tenant:
66
- _id: ${STEEDOS_TENANT_ID}
67
- name: 华炎魔方
68
- logo_url: ${STEEDOS_TENANT_LOGO_URL}
69
- logo_square_url: ${STEEDOS_TENANT_LOGO_SQUARE_URL}
70
- background_url: ${STEEDOS_TENANT_BACKGROUND_URL}
71
- enable_activation: ${STEEDOS_TENANT_ENABLE_ACTIVATION} # 启用初始化向导
72
- enable_register: ${STEEDOS_TENANT_ENABLE_REGISTER} # 启用注册功能 true / false
73
- enable_forget_password: ${STEEDOS_TENANT_ENABLE_FORGET_PASSWORD}
74
- enable_create_tenant: ${STEEDOS_TENANT_ENABLE_SAAS}
75
- enable_password_login: ${STEEDOS_TENANT_ENABLE_PASSWORD_LOGIN}
76
- enable_mobile_code_login: ${STEEDOS_TENANT_ENABLE_MOBILE_CODE_LOGIN}
77
- enable_email_code_login: ${STEEDOS_TENANT_ENABLE_EMAIL_CODE_LOGIN}
78
- enable_bind_email: ${STEEDOS_TENANT_ENABLE_BIND_EMAIL}
79
- enable_bind_mobile: ${STEEDOS_TENANT_ENABLE_BIND_MOBILE}
80
- tokenSecret: ${STEEDOS_TENANT_TOKEN_SECRET} # 默认值 43位字符串, 每次重启服务时生成新的值
81
- accessTokenExpiresIn: ${STEEDOS_TENANT_ACCESS_TOKEN_EXPIRES_IN} # 默认值 90d
82
- refreshTokenExpiresIn: ${STEEDOS_TENANT_REFRESH_TOKEN_EXPIRES_IN} # 默认值 7d
83
- sms:
84
- qcloud:
85
- smsqueue_interval: ${STEEDOS_CRON_SMSQUEUE_INTERVAL}
86
- sdkappid: ${STEEDOS_SMS_QCLOUD_SDKAPPID}
87
- appkey: ${STEEDOS_SMS_QCLOUD_APPKEY}
88
- signname: ${STEEDOS_SMS_QCLOUD_SIGNNAME}
89
- email:
90
- from: ${STEEDOS_EMAIL_FROM}
91
- url: ${STEEDOS_EMAIL_URL}
92
- host: ${STEEDOS_EMAIL_HOST}
93
- port: ${STEEDOS_EMAIL_PORT}
94
- username: ${STEEDOS_EMAIL_USERNAME}
95
- password: ${STEEDOS_EMAIL_PASSWORD}
96
- secure: ${STEEDOS_EMAIL_PASSWORD}
97
- signname: ${STEEDOS_EMAIL_SIGNNAME}
98
- cron:
99
- enabled: ${STEEDOS_CRON_ENABLED}
100
- instancerecordqueue_interval: ${STEEDOS_CRON_INSTANCERECORDQUEUE_INTERVAL}
101
- mailqueue_interval: ${STEEDOS_CRON_MAILQUEUE_INTERVAL}
102
- push_interval: ${STEEDOS_CRON_PUSH_INTERVAL}
103
- webhookqueue_interval: ${STEEDOS_CRON_WEBHOOKQUEUE_INTERVAL}
104
- build_index: ${STEEDOS_CRON_BUILD_INDEX}
105
- objectwebhooksqueue_interval: ${STEEDOS_CRON_OBJECTWEBHOOKSQUEUE_INTERVAL}
106
- workflow_rule_interval: ${STEEDOS_CRON_WORKFLOW_RULE}
107
- instances_stat:
108
- schedule: ${STEEDOS_INSTANCES_STAT_SCHEDULE}
109
- dingtalk:
110
- api_Key: ${APIKEY}
111
- log_path: ${DING_LOGPATH}
112
- qywx:
113
- api_Key: ${APIKEY}
114
- log_path: ${QYWX_LOGPATH}
115
- push:
116
- apn:
117
- keyData: ${STEEDOS_PUSH_APN_DATA}
118
- certData: ${STEEDOS_PUSH_APN_DATA}
119
- gcm:
120
- apiKey: ${STEEDOS_GCM_APIKEY}
121
- projectNumber: ${STEEDOS_GCM_PROJECT_NUMBER}
122
- xinge:
123
- accessId: ${STEEDOS_PUSH_XINGE_ACCESSID}
124
- secretKey: ${STEEDOS_PUSH_XINGE_SECRETKEY}
125
- huawei:
126
- appId: ${STEEDOS_PUSH_HUAWEI_APPID}
127
- appSecret: ${STEEDOS_PUSH_HUAWEI_APPSECRET}
128
- appPkgName: ${STEEDOS_PUSH_HUAWEI_APPPKGNAME}
129
- debug: ${STEEDOS_PUSH_HUAWEI_DEBUG}
130
- mi:
131
- appSecret: ${STEEDOS_PUSH_MI_APPSECRET}
132
- production: ${STEEDOS_PUSH_MI_PRODUCTION}
133
- pay:
134
- weixin:
135
- appid: ${PAY_WEIXIN_APPID}
136
- mch_id: ${PAY_WEIXIN_MCH_ID}
137
- partner_key: ${PAY_WEIXIN_PARTNER_KEY}
138
- sso:
139
- oidc:
140
- config_url: ${STEEDOS_IDENTITY_OIDC_CONFIG_URL}
141
- client_id: ${STEEDOS_IDENTITY_OIDC_CLIENT_ID}
142
- client_secret: ${STEEDOS_IDENTITY_OIDC_CLIENT_SECRET}
143
- name: ${STEEDOS_IDENTITY_OIDC_NAME}
144
- label: ${STEEDOS_IDENTITY_OIDC_LABEL}
145
- logo: ${STEEDOS_IDENTITY_OIDC_LOGO}
146
- require_local_account: ${STEEDOS_IDENTITY_OIDC_REQUIRE_LOCAL_ACCOUNT}
147
- db:
148
- auto_migrate: ${STEEDOS_DB_AUTO_MIGRATE}
@@ -1 +0,0 @@
1
- export {};
@@ -1,48 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const path = require('path');
7
- const chokidar = require('chokidar');
8
- const underscore_1 = __importDefault(require("underscore"));
9
- let changePackages = [];
10
- let timeoutId = null;
11
- const reloadPackage = (broker, packagePath) => {
12
- changePackages.push(packagePath);
13
- if (!timeoutId) {
14
- clearTimeout(timeoutId);
15
- }
16
- timeoutId = setTimeout(() => {
17
- const _changePackages = underscore_1.default.clone(changePackages);
18
- changePackages = [];
19
- underscore_1.default.each(underscore_1.default.uniq(underscore_1.default.compact(_changePackages)), (_packagePath) => {
20
- const packageJson = require(path.join(_packagePath, 'package.json'));
21
- if (packageJson) {
22
- const servicePath = path.join(_packagePath, 'package.service.js');
23
- const serviceJson = require(servicePath);
24
- if (serviceJson) {
25
- delete require.cache[require.resolve(servicePath)];
26
- }
27
- broker.call(`@steedos/service-project.reloadPackage`, { module: packageJson.name });
28
- }
29
- });
30
- }, 3000);
31
- };
32
- module.exports = {
33
- name: "steedos-dx-develop",
34
- namespace: "steedos",
35
- started() {
36
- const appPath = path.join(process.cwd(), 'steedos-app');
37
- chokidar.watch(appPath).on('change', (_path, stats) => {
38
- reloadPackage(this.broker, appPath);
39
- });
40
- const packagesPath = path.join(process.cwd(), 'steedos-packages');
41
- chokidar.watch(packagesPath).on('change', (_path, stats) => {
42
- const rP = path.relative(packagesPath, _path);
43
- const packagePath = path.join(packagesPath, rP.split(path.sep)[0]);
44
- reloadPackage(this.broker, packagePath);
45
- });
46
- }
47
- };
48
- //# sourceMappingURL=hotReload.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hotReload.js","sourceRoot":"","sources":["../../src/start/hotReload.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;AACb,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACrC,4DAA2B;AAC3B,IAAI,cAAc,GAAa,EAAE,CAAC;AAElC,IAAI,SAAS,GAAQ,IAAI,CAAC;AAE1B,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;IAC1C,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjC,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,YAAY,CAAC,SAAS,CAAC,CAAA;IAC3B,CAAC;IACD,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;QACxB,MAAM,eAAe,GAAG,oBAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAChD,cAAc,GAAG,EAAE,CAAA;QACnB,oBAAC,CAAC,IAAI,CAAC,oBAAC,CAAC,IAAI,CAAC,oBAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE;YACxD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC,CAAC;YACrE,IAAI,WAAW,EAAE,CAAC;gBACd,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAA;gBACjE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;gBACzC,IAAI,WAAW,EAAE,CAAC;oBACd,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;gBACvD,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;YACvF,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC,EAAE,IAAI,CAAC,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,OAAO,GAAG;IACb,IAAI,EAAE,oBAAoB;IAC1B,SAAS,EAAE,SAAS;IACpB,OAAO;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,CAAA;QACvD,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAClD,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAClE,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACvD,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAClE,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAC"}
@@ -1,9 +0,0 @@
1
- export declare class Start {
2
- static loadSettings: (filePath: string) => any;
3
- static loadDefaultSettings(): any;
4
- static loadProjectSettings(): any;
5
- static loadDefaultConfig(): Promise<any>;
6
- static mergeConfig(projectConfig: any): Promise<any>;
7
- static mergeSchemaLifecycleHandlers(src: any, target: any): unknown[];
8
- static flatten(arr: any): any;
9
- }
@@ -1,143 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Start = void 0;
4
- const lodash_1 = require("lodash");
5
- const util_1 = require("../util");
6
- const path = require("path");
7
- const fs = require("fs");
8
- const clone = require("clone");
9
- const validator = require('validator');
10
- const yaml = require('js-yaml');
11
- function calcString(str, content = process.env) {
12
- if (!(0, lodash_1.isString)(str)) {
13
- return str;
14
- }
15
- let calcFun = null;
16
- var reg = /(\${[^{}]*\})/g;
17
- let rev = str.replace(reg, function (m, $1) {
18
- return $1.replace(/\{\s*/, "{args[\"").replace(/\s*\}/, "\"]}");
19
- });
20
- eval(`calcFun = function(args){return \`${rev}\`}`);
21
- let val = calcFun.call({}, content);
22
- if ((0, lodash_1.isString)(val) && val) {
23
- return val.replace(/\\r/g, '\r').replace(/\\n/g, '\n').replace(/undefined/g, '');
24
- }
25
- else {
26
- return null;
27
- }
28
- }
29
- function calcSteedosConfig(config) {
30
- (0, lodash_1.each)(config, (v, k) => {
31
- if ((0, util_1.isJsonMap)(v)) {
32
- let _d = (0, lodash_1.get)(config, k);
33
- if ((0, util_1.isJsonMap)(_d)) {
34
- config[k] = calcSteedosConfig(clone(_d));
35
- }
36
- else {
37
- config[k] = calcString(v);
38
- if (k && (0, lodash_1.isString)(k) && k.startsWith('enable_') && config[k] && (0, lodash_1.isString)(config[k])) {
39
- config[k] = validator.toBoolean(config[k], true);
40
- }
41
- }
42
- }
43
- else {
44
- config[k] = calcString(v);
45
- if (k && (0, lodash_1.isString)(k) && k.startsWith('enable_') && config[k] && (0, lodash_1.isString)(config[k])) {
46
- config[k] = validator.toBoolean(config[k], true);
47
- }
48
- }
49
- });
50
- return config;
51
- }
52
- class Start {
53
- static loadDefaultSettings() {
54
- const filePath = path.join(__dirname, '../', '../', "default.steedos.settings.yml");
55
- if (fs.existsSync(filePath) && !fs.statSync(filePath).isDirectory()) {
56
- return Start.loadSettings(filePath);
57
- }
58
- else {
59
- return null;
60
- }
61
- }
62
- static loadProjectSettings() {
63
- let configPath = path.join((0, util_1.getBaseDirectory)(), 'steedos-config.yml');
64
- if (fs.existsSync(configPath) && !fs.statSync(configPath).isDirectory()) {
65
- return Start.loadSettings(configPath);
66
- }
67
- }
68
- static async loadDefaultConfig() {
69
- const filePath = path.join(__dirname, '../', '../', "default.steedos.config.js");
70
- if (filePath) {
71
- if (!fs.existsSync(filePath))
72
- return Promise.reject(new Error(`Config file not found: ${filePath}`));
73
- return require(filePath);
74
- }
75
- }
76
- static async mergeConfig(projectConfig) {
77
- const loadProjectSettings = Start.loadProjectSettings();
78
- const _projectConfig = (0, lodash_1.defaultsDeep)(projectConfig, { settings: loadProjectSettings });
79
- const defaultConfig = await Start.loadDefaultConfig();
80
- const defaultSettings = Start.loadDefaultSettings();
81
- const _defaultConfig = (0, lodash_1.defaultsDeep)(defaultConfig, { settings: defaultSettings });
82
- const res = (0, lodash_1.cloneDeep)(_defaultConfig);
83
- const mods = (0, lodash_1.cloneDeep)(_projectConfig);
84
- Object.keys(mods).forEach(key => {
85
- if (["created", "started", "stopped"].indexOf(key) !== -1) {
86
- const functionArray = Start.mergeSchemaLifecycleHandlers(mods[key], res[key]);
87
- if (functionArray.length > 0) {
88
- res[key] = function (broker) {
89
- functionArray.forEach((fn) => fn.call(this, broker));
90
- };
91
- }
92
- }
93
- else if (["tracing", "metrics", "logger"].indexOf(key) !== -1) {
94
- res[key] = mods[key];
95
- }
96
- else {
97
- res[key] = (0, lodash_1.defaultsDeep)({ [key]: mods[key] }, { [key]: res[key] })[key];
98
- }
99
- });
100
- return res;
101
- }
102
- static mergeSchemaLifecycleHandlers(src, target) {
103
- return (0, lodash_1.compact)(Start.flatten([target, src]));
104
- }
105
- static flatten(arr) {
106
- return Array.prototype.reduce.call(arr, (a, b) => a.concat(b), []);
107
- }
108
- }
109
- exports.Start = Start;
110
- Start.loadSettings = (filePath) => {
111
- try {
112
- const settings = yaml.load(fs.readFileSync(filePath, 'utf8'));
113
- if (settings.env) {
114
- (0, lodash_1.each)(settings.env, function (item, key) {
115
- process.env[key] = calcString(item);
116
- });
117
- }
118
- let emailConfig = settings.email;
119
- if (emailConfig) {
120
- if (!emailConfig.url && emailConfig.host && emailConfig.port && emailConfig.username && emailConfig.password) {
121
- let url = `smtps://${emailConfig.username}:${emailConfig.password}@${emailConfig.host}:${emailConfig.port}/`;
122
- emailConfig.url = url;
123
- }
124
- if (emailConfig.url) {
125
- process.env["MAIL_URL"] = calcString(emailConfig.url);
126
- }
127
- if (emailConfig.from) {
128
- process.env["MAIL_FROM"] = calcString(emailConfig.from);
129
- }
130
- }
131
- const res = calcSteedosConfig(settings);
132
- if (res) {
133
- res.setTenant = (tenant) => {
134
- res.tenant = (0, lodash_1.defaultsDeep)(tenant, res.tenant);
135
- };
136
- }
137
- return res;
138
- }
139
- catch (error) {
140
- console.error('loadFile error', filePath, error);
141
- }
142
- };
143
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/start/index.ts"],"names":[],"mappings":"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"}