mirror of https://github.com/msgbyte/tailchat
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			317 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Diff
		
	
			
		
		
	
	
			317 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Diff
		
	
diff --git a/src/runner-esm.mjs b/src/runner-esm.mjs
 | 
						|
index 97b78b59c8931ed2c71e719c12d23bd5172da977..b14e9e0c61be8b0460e60f448781103c49f563e5 100644
 | 
						|
--- a/src/runner-esm.mjs
 | 
						|
+++ b/src/runner-esm.mjs
 | 
						|
@@ -332,83 +332,87 @@ export default class MoleculerRunner {
 | 
						|
 		this.watchFolders.length = 0;
 | 
						|
 		const fileMask = this.flags.mask || "**/*.service.js";
 | 
						|
 
 | 
						|
-		const serviceDir = process.env.SERVICEDIR || "";
 | 
						|
-		const svcDir = path.isAbsolute(serviceDir)
 | 
						|
-			? serviceDir
 | 
						|
-			: path.resolve(process.cwd(), serviceDir);
 | 
						|
+		const serviceDirList = (process.env.SERVICEDIR || "").split(',');
 | 
						|
 
 | 
						|
-		let patterns = this.servicePaths;
 | 
						|
+		for (const serviceDir of serviceDirList) {
 | 
						|
+			const serviceDir = process.env.SERVICEDIR || "";
 | 
						|
+			const svcDir = path.isAbsolute(serviceDir)
 | 
						|
+				? serviceDir
 | 
						|
+				: path.resolve(process.cwd(), serviceDir);
 | 
						|
 
 | 
						|
-		if (process.env.SERVICES || process.env.SERVICEDIR) {
 | 
						|
-			if (this.isDirectory(svcDir) && !process.env.SERVICES) {
 | 
						|
-				// Load all services from directory (from subfolders too)
 | 
						|
-				this.broker.loadServices(svcDir, fileMask);
 | 
						|
+			let patterns = this.servicePaths;
 | 
						|
 
 | 
						|
-				if (this.config.hotReload) {
 | 
						|
-					this.watchFolders.push(svcDir);
 | 
						|
+			if (process.env.SERVICES || process.env.SERVICEDIR) {
 | 
						|
+				if (this.isDirectory(svcDir) && !process.env.SERVICES) {
 | 
						|
+					// Load all services from directory (from subfolders too)
 | 
						|
+					this.broker.loadServices(svcDir, fileMask);
 | 
						|
+
 | 
						|
+					if (this.config.hotReload) {
 | 
						|
+						this.watchFolders.push(svcDir);
 | 
						|
+					}
 | 
						|
+				} else if (process.env.SERVICES) {
 | 
						|
+					// Load services from env list
 | 
						|
+					patterns = Array.isArray(process.env.SERVICES)
 | 
						|
+						? process.env.SERVICES
 | 
						|
+						: process.env.SERVICES.split(",");
 | 
						|
 				}
 | 
						|
-			} else if (process.env.SERVICES) {
 | 
						|
-				// Load services from env list
 | 
						|
-				patterns = Array.isArray(process.env.SERVICES)
 | 
						|
-					? process.env.SERVICES
 | 
						|
-					: process.env.SERVICES.split(",");
 | 
						|
 			}
 | 
						|
-		}
 | 
						|
 
 | 
						|
-		if (patterns.length > 0) {
 | 
						|
-			let serviceFiles = [];
 | 
						|
-
 | 
						|
-			patterns
 | 
						|
-				.map(s => s.trim())
 | 
						|
-				.forEach(p => {
 | 
						|
-					const skipping = p[0] == "!";
 | 
						|
-					if (skipping) p = p.slice(1);
 | 
						|
-
 | 
						|
-					let files;
 | 
						|
-					const svcPath = path.isAbsolute(p) ? p : path.resolve(svcDir, p);
 | 
						|
-					// Check is it a directory?
 | 
						|
-					if (this.isDirectory(svcPath)) {
 | 
						|
-						if (this.config.hotReload) {
 | 
						|
-							this.watchFolders.push(svcPath);
 | 
						|
+			if (patterns.length > 0) {
 | 
						|
+				let serviceFiles = [];
 | 
						|
+
 | 
						|
+				patterns
 | 
						|
+					.map(s => s.trim())
 | 
						|
+					.forEach(p => {
 | 
						|
+						const skipping = p[0] == "!";
 | 
						|
+						if (skipping) p = p.slice(1);
 | 
						|
+
 | 
						|
+						let files;
 | 
						|
+						const svcPath = path.isAbsolute(p) ? p : path.resolve(svcDir, p);
 | 
						|
+						// Check is it a directory?
 | 
						|
+						if (this.isDirectory(svcPath)) {
 | 
						|
+							if (this.config.hotReload) {
 | 
						|
+								this.watchFolders.push(svcPath);
 | 
						|
+							}
 | 
						|
+							files = glob.sync(svcPath + "/" + fileMask, { absolute: true });
 | 
						|
+							if (files.length == 0)
 | 
						|
+								return this.broker.logger.warn(
 | 
						|
+									kleur
 | 
						|
+										.yellow()
 | 
						|
+										.bold(
 | 
						|
+											`There is no service files in directory: '${svcPath}'`
 | 
						|
+										)
 | 
						|
+								);
 | 
						|
+						} else if (this.isServiceFile(svcPath)) {
 | 
						|
+							files = [svcPath.replace(/\\/g, "/")];
 | 
						|
+						} else if (this.isServiceFile(svcPath + ".service.js")) {
 | 
						|
+							files = [svcPath.replace(/\\/g, "/") + ".service.js"];
 | 
						|
+						} else {
 | 
						|
+							// Load with glob
 | 
						|
+							files = glob.sync(p, { cwd: svcDir, absolute: true });
 | 
						|
+							if (files.length == 0)
 | 
						|
+								this.broker.logger.warn(
 | 
						|
+									kleur
 | 
						|
+										.yellow()
 | 
						|
+										.bold(`There is no matched file for pattern: '${p}'`)
 | 
						|
+								);
 | 
						|
 						}
 | 
						|
-						files = glob.sync(svcPath + "/" + fileMask, { absolute: true });
 | 
						|
-						if (files.length == 0)
 | 
						|
-							return this.broker.logger.warn(
 | 
						|
-								kleur
 | 
						|
-									.yellow()
 | 
						|
-									.bold(
 | 
						|
-										`There is no service files in directory: '${svcPath}'`
 | 
						|
-									)
 | 
						|
-							);
 | 
						|
-					} else if (this.isServiceFile(svcPath)) {
 | 
						|
-						files = [svcPath.replace(/\\/g, "/")];
 | 
						|
-					} else if (this.isServiceFile(svcPath + ".service.js")) {
 | 
						|
-						files = [svcPath.replace(/\\/g, "/") + ".service.js"];
 | 
						|
-					} else {
 | 
						|
-						// Load with glob
 | 
						|
-						files = glob.sync(p, { cwd: svcDir, absolute: true });
 | 
						|
-						if (files.length == 0)
 | 
						|
-							this.broker.logger.warn(
 | 
						|
-								kleur
 | 
						|
-									.yellow()
 | 
						|
-									.bold(`There is no matched file for pattern: '${p}'`)
 | 
						|
-							);
 | 
						|
-					}
 | 
						|
 
 | 
						|
-					if (files && files.length > 0) {
 | 
						|
-						if (skipping)
 | 
						|
-							serviceFiles = serviceFiles.filter(f => files.indexOf(f) === -1);
 | 
						|
-						else serviceFiles.push(...files);
 | 
						|
-					}
 | 
						|
-				});
 | 
						|
+						if (files && files.length > 0) {
 | 
						|
+							if (skipping)
 | 
						|
+								serviceFiles = serviceFiles.filter(f => files.indexOf(f) === -1);
 | 
						|
+							else serviceFiles.push(...files);
 | 
						|
+						}
 | 
						|
+					});
 | 
						|
 
 | 
						|
-			await Promise.all(_.uniq(serviceFiles).map(async f => {
 | 
						|
-				const mod = await import(f.startsWith("/") ? f : "/" + f);
 | 
						|
-				const content = mod.default;
 | 
						|
+				await Promise.all(_.uniq(serviceFiles).map(async f => {
 | 
						|
+					const mod = await import(f.startsWith("/") ? f : "/" + f);
 | 
						|
+					const content = mod.default;
 | 
						|
 
 | 
						|
-				const svc = this.broker.createService(content);
 | 
						|
-				svc.__filename = f;
 | 
						|
-			}));
 | 
						|
+					const svc = this.broker.createService(content);
 | 
						|
+					svc.__filename = f;
 | 
						|
+				}));
 | 
						|
+			}
 | 
						|
 		}
 | 
						|
 	}
 | 
						|
 
 | 
						|
diff --git a/src/runner.js b/src/runner.js
 | 
						|
index 695e5affcb21b456ce5b0f69f2c02e776ad4216a..34cc885fd80279b1b91f8013263c522ff6f1d42b 100644
 | 
						|
--- a/src/runner.js
 | 
						|
+++ b/src/runner.js
 | 
						|
@@ -335,83 +335,87 @@ class MoleculerRunner {
 | 
						|
 		this.watchFolders.length = 0;
 | 
						|
 		const fileMask = this.flags.mask || "**/*.service.js";
 | 
						|
 
 | 
						|
-		const serviceDir = process.env.SERVICEDIR || "";
 | 
						|
-		const svcDir = path.isAbsolute(serviceDir)
 | 
						|
-			? serviceDir
 | 
						|
-			: path.resolve(process.cwd(), serviceDir);
 | 
						|
+		const serviceDirList = (process.env.SERVICEDIR || "").split(',');
 | 
						|
 
 | 
						|
-		let patterns = this.servicePaths;
 | 
						|
+		for (const serviceDir of serviceDirList) {
 | 
						|
+			const svcDir = path.isAbsolute(serviceDir)
 | 
						|
+				? serviceDir
 | 
						|
+				: path.resolve(process.cwd(), serviceDir);
 | 
						|
 
 | 
						|
-		if (process.env.SERVICES || process.env.SERVICEDIR) {
 | 
						|
-			if (this.isDirectory(svcDir) && !process.env.SERVICES) {
 | 
						|
-				// Load all services from directory (from subfolders too)
 | 
						|
-				this.broker.loadServices(svcDir, fileMask);
 | 
						|
+			let patterns = this.servicePaths;
 | 
						|
 
 | 
						|
-				if (this.config.hotReload) {
 | 
						|
-					this.watchFolders.push(svcDir);
 | 
						|
+			if (process.env.SERVICES || process.env.SERVICEDIR) {
 | 
						|
+				if (this.isDirectory(svcDir) && !process.env.SERVICES) {
 | 
						|
+					// Load all services from directory (from subfolders too)
 | 
						|
+					this.broker.loadServices(svcDir, fileMask);
 | 
						|
+
 | 
						|
+					if (this.config.hotReload) {
 | 
						|
+						this.watchFolders.push(svcDir);
 | 
						|
+					}
 | 
						|
+				} else if (process.env.SERVICES) {
 | 
						|
+					// Load services from env list
 | 
						|
+					patterns = Array.isArray(process.env.SERVICES)
 | 
						|
+						? process.env.SERVICES
 | 
						|
+						: process.env.SERVICES.split(",");
 | 
						|
 				}
 | 
						|
-			} else if (process.env.SERVICES) {
 | 
						|
-				// Load services from env list
 | 
						|
-				patterns = Array.isArray(process.env.SERVICES)
 | 
						|
-					? process.env.SERVICES
 | 
						|
-					: process.env.SERVICES.split(",");
 | 
						|
 			}
 | 
						|
-		}
 | 
						|
 
 | 
						|
-		if (patterns.length > 0) {
 | 
						|
-			let serviceFiles = [];
 | 
						|
-
 | 
						|
-			patterns
 | 
						|
-				.map(s => s.trim())
 | 
						|
-				.forEach(p => {
 | 
						|
-					const skipping = p[0] == "!";
 | 
						|
-					if (skipping) p = p.slice(1);
 | 
						|
-
 | 
						|
-					if (p.startsWith("npm:")) {
 | 
						|
-						// Load NPM module
 | 
						|
-						this.loadNpmModule(p.slice(4));
 | 
						|
-					} else {
 | 
						|
-						let files;
 | 
						|
-						const svcPath = path.isAbsolute(p) ? p : path.resolve(svcDir, p);
 | 
						|
-						// Check is it a directory?
 | 
						|
-						if (this.isDirectory(svcPath)) {
 | 
						|
-							if (this.config.hotReload) {
 | 
						|
-								this.watchFolders.push(svcPath);
 | 
						|
-							}
 | 
						|
-							files = glob(svcPath + "/" + fileMask, { absolute: true });
 | 
						|
-							if (files.length == 0)
 | 
						|
-								return this.broker.logger.warn(
 | 
						|
-									kleur
 | 
						|
-										.yellow()
 | 
						|
-										.bold(
 | 
						|
-											`There is no service files in directory: '${svcPath}'`
 | 
						|
-										)
 | 
						|
-								);
 | 
						|
-						} else if (this.isServiceFile(svcPath)) {
 | 
						|
-							files = [svcPath.replace(/\\/g, "/")];
 | 
						|
-						} else if (this.isServiceFile(svcPath + ".service.js")) {
 | 
						|
-							files = [svcPath.replace(/\\/g, "/") + ".service.js"];
 | 
						|
+			if (patterns.length > 0) {
 | 
						|
+				let serviceFiles = [];
 | 
						|
+
 | 
						|
+				patterns
 | 
						|
+					.map(s => s.trim())
 | 
						|
+					.forEach(p => {
 | 
						|
+						const skipping = p[0] == "!";
 | 
						|
+						if (skipping) p = p.slice(1);
 | 
						|
+
 | 
						|
+						if (p.startsWith("npm:")) {
 | 
						|
+							// Load NPM module
 | 
						|
+							this.loadNpmModule(p.slice(4));
 | 
						|
 						} else {
 | 
						|
-							// Load with glob
 | 
						|
-							files = glob(p, { cwd: svcDir, absolute: true });
 | 
						|
-							if (files.length == 0)
 | 
						|
-								this.broker.logger.warn(
 | 
						|
-									kleur
 | 
						|
-										.yellow()
 | 
						|
-										.bold(`There is no matched file for pattern: '${p}'`)
 | 
						|
-								);
 | 
						|
-						}
 | 
						|
+							let files;
 | 
						|
+							const svcPath = path.isAbsolute(p) ? p : path.resolve(svcDir, p);
 | 
						|
+							// Check is it a directory?
 | 
						|
+							if (this.isDirectory(svcPath)) {
 | 
						|
+								if (this.config.hotReload) {
 | 
						|
+									this.watchFolders.push(svcPath);
 | 
						|
+								}
 | 
						|
+								files = glob(svcPath + "/" + fileMask, { absolute: true });
 | 
						|
+								if (files.length == 0)
 | 
						|
+									return this.broker.logger.warn(
 | 
						|
+										kleur
 | 
						|
+											.yellow()
 | 
						|
+											.bold(
 | 
						|
+												`There is no service files in directory: '${svcPath}'`
 | 
						|
+											)
 | 
						|
+									);
 | 
						|
+							} else if (this.isServiceFile(svcPath)) {
 | 
						|
+								files = [svcPath.replace(/\\/g, "/")];
 | 
						|
+							} else if (this.isServiceFile(svcPath + ".service.js")) {
 | 
						|
+								files = [svcPath.replace(/\\/g, "/") + ".service.js"];
 | 
						|
+							} else {
 | 
						|
+								// Load with glob
 | 
						|
+								files = glob(p, { cwd: svcDir, absolute: true });
 | 
						|
+								if (files.length == 0)
 | 
						|
+									this.broker.logger.warn(
 | 
						|
+										kleur
 | 
						|
+											.yellow()
 | 
						|
+											.bold(`There is no matched file for pattern: '${p}'`)
 | 
						|
+									);
 | 
						|
+							}
 | 
						|
 
 | 
						|
-						if (files && files.length > 0) {
 | 
						|
-							if (skipping)
 | 
						|
-								serviceFiles = serviceFiles.filter(f => files.indexOf(f) === -1);
 | 
						|
-							else serviceFiles.push(...files);
 | 
						|
+							if (files && files.length > 0) {
 | 
						|
+								if (skipping)
 | 
						|
+									serviceFiles = serviceFiles.filter(f => files.indexOf(f) === -1);
 | 
						|
+								else serviceFiles.push(...files);
 | 
						|
+							}
 | 
						|
 						}
 | 
						|
-					}
 | 
						|
-				});
 | 
						|
+					});
 | 
						|
 
 | 
						|
-			_.uniq(serviceFiles).forEach(f => this.broker.loadService(f));
 | 
						|
+				_.uniq(serviceFiles).forEach(f => this.broker.loadService(f));
 | 
						|
+			}
 | 
						|
 		}
 | 
						|
+
 | 
						|
 	}
 | 
						|
 
 | 
						|
 	/**
 |