Cavnas: Implement basic service discovery logic
Change-Id: I71b25076dba94d6491ad4db748b259870991c526
diff --git a/apps/canvas/back/src/lib/analyze.ts b/apps/canvas/back/src/lib/analyze.ts
new file mode 100644
index 0000000..e1fa699
--- /dev/null
+++ b/apps/canvas/back/src/lib/analyze.ts
@@ -0,0 +1,58 @@
+import { FileSystem } from "./fs";
+
+export interface ServiceAnalyzer {
+ detect: (fs: FileSystem, root: string) => boolean;
+ analyze: (fs: FileSystem, root: string) => Promise<ServiceInfo>;
+}
+
+export interface ConfigVar {
+ name: string;
+ category: ConfigVarCategory;
+ type?: ConfigVarType;
+ semanticType?: ConfigVarSemanticType;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ defaultValue?: any;
+ description?: string;
+ required?: boolean;
+ sensitive?: boolean;
+}
+
+export enum ConfigVarCategory {
+ CommandLineFlag = "CommandLineFlag",
+ EnvironmentVariable = "EnvironmentVariable",
+}
+
+export enum ConfigVarType {
+ String = "String",
+ Number = "Number",
+ Boolean = "Boolean",
+}
+
+export enum ConfigVarSemanticType {
+ EXPANDED_ENV_VAR = "EXPANDED_ENV_VAR",
+ PORT = "PORT",
+ FILESYSTEM_PATH = "FILESYSTEM_PATH",
+ DATABASE_URL = "DATABASE_URL",
+ SQLITE_PATH = "SQLITE_PATH",
+ POSTGRES_URL = "POSTGRES_URL",
+ POSTGRES_PASSWORD = "POSTGRES_PASSWORD",
+ POSTGRES_USER = "POSTGRES_USER",
+ POSTGRES_DB = "POSTGRES_DB",
+ POSTGRES_PORT = "POSTGRES_PORT",
+ POSTGRES_HOST = "POSTGRES_HOST",
+ POSTGRES_SSL = "POSTGRES_SSL",
+ MONGO_URL = "MONGO_URL",
+ MONGO_PASSWORD = "MONGO_PASSWORD",
+ MONGO_USER = "MONGO_USER",
+ MONGO_DB = "MONGO_DB",
+ MONGO_PORT = "MONGO_PORT",
+ MONGO_HOST = "MONGO_HOST",
+ MONGO_SSL = "MONGO_SSL",
+}
+
+export interface ServiceInfo {
+ name: string;
+ location: string;
+ configVars: Array<ConfigVar>;
+ commands: Array<string>;
+}