From dd84b9d64fb98746a230cd24233ff50a562c39c9 Mon Sep 17 00:00:00 2001 From: 简律纯 Date: Fri, 28 Apr 2023 01:36:44 +0800 Subject: --- .../lib/utils/getEnvVarDependencies.ts | 75 ++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 packages/eslint-plugin-turbo/lib/utils/getEnvVarDependencies.ts (limited to 'packages/eslint-plugin-turbo/lib/utils') diff --git a/packages/eslint-plugin-turbo/lib/utils/getEnvVarDependencies.ts b/packages/eslint-plugin-turbo/lib/utils/getEnvVarDependencies.ts new file mode 100644 index 0000000..a57e5eb --- /dev/null +++ b/packages/eslint-plugin-turbo/lib/utils/getEnvVarDependencies.ts @@ -0,0 +1,75 @@ +import { getTurboConfigs } from "@turbo/utils"; + +function findDependsOnEnvVars({ + dependencies, +}: { + dependencies?: Array; +}) { + if (dependencies) { + return ( + dependencies + // filter for dep env vars + .filter((dep) => dep.startsWith("$")) + // remove leading $ + .map((envVar) => envVar.slice(1, envVar.length)) + ); + } + + return []; +} + +function getEnvVarDependencies({ + cwd, +}: { + cwd: string | undefined; +}): Record> | null { + const turboConfigs = getTurboConfigs(cwd); + + if (!turboConfigs.length) { + return null; + } + + const envVars: Record> = { + "//": new Set(), + }; + + turboConfigs.forEach((turboConfig) => { + const { config, workspacePath, isRootConfig } = turboConfig; + + const key = isRootConfig ? "//" : workspacePath; + if (!envVars[key]) { + envVars[key] = new Set(); + } + + // handle globals + if (!("extends" in config)) { + const { globalDependencies = [], globalEnv = [] } = config; + + const keys = [ + ...findDependsOnEnvVars({ + dependencies: globalDependencies, + }), + ...globalEnv, + ]; + keys.forEach((k) => envVars[key].add(k)); + } + + // handle pipelines + const { pipeline = {} } = config; + Object.values(pipeline).forEach(({ env, dependsOn }) => { + if (dependsOn) { + findDependsOnEnvVars({ dependencies: dependsOn }).forEach((k) => + envVars[key].add(k) + ); + } + + if (env) { + env.forEach((k) => envVars[key].add(k)); + } + }); + }); + + return envVars; +} + +export default getEnvVarDependencies; -- cgit v1.2.3-70-g09d2