varlock 0.2.2 → 0.3.0
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/dist/auto-load.js +1 -1
- package/dist/{chunk-HPUQ2CCN.js → chunk-26ICEAKS.js} +6 -5
- package/dist/chunk-26ICEAKS.js.map +1 -0
- package/dist/{chunk-BHHYQ7SH.js → chunk-2YPKUF3A.js} +3 -3
- package/dist/{chunk-BHHYQ7SH.js.map → chunk-2YPKUF3A.js.map} +1 -1
- package/dist/{chunk-UDXNNRWI.js → chunk-4A54P4EM.js} +10 -10
- package/dist/chunk-4A54P4EM.js.map +1 -0
- package/dist/chunk-GEJNYKR4.js +17 -0
- package/dist/chunk-GEJNYKR4.js.map +1 -0
- package/dist/{chunk-35SAMS66.js → chunk-GJ7PTJM4.js} +3 -3
- package/dist/{chunk-35SAMS66.js.map → chunk-GJ7PTJM4.js.map} +1 -1
- package/dist/{chunk-N2HZMIGS.js → chunk-IG5PPVD7.js} +430 -454
- package/dist/chunk-IG5PPVD7.js.map +1 -0
- package/dist/chunk-JDMZWNQA.js +68 -0
- package/dist/chunk-JDMZWNQA.js.map +1 -0
- package/dist/chunk-KKPD7AYU.js +34 -0
- package/dist/chunk-KKPD7AYU.js.map +1 -0
- package/dist/{chunk-3FLO3UFZ.js → chunk-LZ52O5WU.js} +13 -10
- package/dist/chunk-LZ52O5WU.js.map +1 -0
- package/dist/chunk-MHIFZAPA.js +405 -0
- package/dist/chunk-MHIFZAPA.js.map +1 -0
- package/dist/{chunk-4N3YR2QQ.js → chunk-MXZI2FC6.js} +19 -43
- package/dist/chunk-MXZI2FC6.js.map +1 -0
- package/dist/chunk-QZ6HBRJC.js +97 -0
- package/dist/chunk-QZ6HBRJC.js.map +1 -0
- package/dist/{chunk-ZUNB52KY.js → chunk-TLXFVH7P.js} +20 -17
- package/dist/chunk-TLXFVH7P.js.map +1 -0
- package/dist/chunk-VQ5I7WMP.js +331 -0
- package/dist/chunk-VQ5I7WMP.js.map +1 -0
- package/dist/chunk-WDC5CEKD.js +309 -0
- package/dist/chunk-WDC5CEKD.js.map +1 -0
- package/dist/chunk-WZW7QS6M.js +11371 -0
- package/dist/chunk-WZW7QS6M.js.map +1 -0
- package/dist/chunk-Y3ITSQA4.js +58 -0
- package/dist/chunk-Y3ITSQA4.js.map +1 -0
- package/dist/cli/cli-executable.js +56 -41
- package/dist/cli/cli-executable.js.map +1 -1
- package/dist/config-item-2AL7WF23.js +5 -0
- package/dist/config-item-2AL7WF23.js.map +1 -0
- package/dist/dotenv-compat.js +1 -1
- package/dist/{env-graph-BZwrHQbb.d.ts → env-graph-C8s2oqOJ.d.ts} +71 -4
- package/dist/help.command-7E52XAOO.js +5 -0
- package/dist/{help.command-MLH2WA5Y.js.map → help.command-7E52XAOO.js.map} +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/init.command-J4HZL3PB.js +12 -0
- package/dist/{init.command-DLPZ3R4T.js.map → init.command-J4HZL3PB.js.map} +1 -1
- package/dist/load.command-6DAP7LEX.js +11 -0
- package/dist/{load.command-4G5POJYR.js.map → load.command-6DAP7LEX.js.map} +1 -1
- package/dist/plugin-lib.d.ts +2 -3
- package/dist/plugin-lib.js +2 -1
- package/dist/printenv.command-7B7SZ2EF.js +12 -0
- package/dist/printenv.command-7B7SZ2EF.js.map +1 -0
- package/dist/run.command-HVV6XXDR.js +12 -0
- package/dist/{run.command-L5LLHOW3.js.map → run.command-HVV6XXDR.js.map} +1 -1
- package/dist/runtime/env.d.ts +1 -2
- package/dist/scan.command-Q33VJOPD.js +13 -0
- package/dist/scan.command-Q33VJOPD.js.map +1 -0
- package/dist/telemetry.command-HOJDUCKG.js +11 -0
- package/dist/{telemetry.command-JF72FOYJ.js.map → telemetry.command-HOJDUCKG.js.map} +1 -1
- package/package.json +23 -28
- package/LICENSE +0 -21
- package/dist/chunk-3FLO3UFZ.js.map +0 -1
- package/dist/chunk-4N3YR2QQ.js.map +0 -1
- package/dist/chunk-FETFVFG5.js +0 -4146
- package/dist/chunk-FETFVFG5.js.map +0 -1
- package/dist/chunk-HPUQ2CCN.js.map +0 -1
- package/dist/chunk-N2HZMIGS.js.map +0 -1
- package/dist/chunk-N4REMPVX.js +0 -135
- package/dist/chunk-N4REMPVX.js.map +0 -1
- package/dist/chunk-UDXNNRWI.js.map +0 -1
- package/dist/chunk-ZUNB52KY.js.map +0 -1
- package/dist/help.command-MLH2WA5Y.js +0 -5
- package/dist/init.command-DLPZ3R4T.js +0 -8
- package/dist/load.command-4G5POJYR.js +0 -8
- package/dist/run.command-L5LLHOW3.js +0 -9
- package/dist/telemetry.command-JF72FOYJ.js +0 -8
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/helpers/install-detection.ts","../src/cli/commands/scan.command.ts"],"names":[],"mappings":"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","file":"chunk-MHIFZAPA.js","sourcesContent":["\nexport function isBundledSEA() {\n try {\n return __VARLOCK_SEA_BUILD__;\n } catch (e) {\n return false;\n }\n}\n","import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { define } from 'gunshi';\nimport ansis from 'ansis';\nimport { gracefulExit } from 'exit-hook';\nimport _ from '@env-spec/utils/my-dash';\n\nimport { spawnAsync } from '@env-spec/utils/exec-helpers';\nimport { pathExists } from '@env-spec/utils/fs-utils';\nimport { redactString } from '../../runtime/lib/redaction';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { CliExitError } from '../helpers/exit-error';\nimport { fmt, logLines } from '../helpers/pretty-format';\nimport { detectJsPackageManager } from '../helpers/js-package-manager-utils';\nimport { isBundledSEA } from '../helpers/install-detection';\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\n\n// Directories to always skip when walking the file tree\nconst SKIP_DIRS = new Set([\n '.git',\n 'node_modules',\n 'dist',\n 'build',\n '.next',\n '.nuxt',\n 'vendor',\n '.venv',\n 'venv',\n '__pycache__',\n '.turbo',\n 'coverage',\n]);\n\n// File extensions that are binary and should be skipped\nconst BINARY_EXTENSIONS = new Set([\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.bmp',\n '.ico',\n '.mp3',\n '.mp4',\n '.wav',\n '.avi',\n '.mov',\n '.zip',\n '.tar',\n '.gz',\n '.rar',\n '.7z',\n '.exe',\n '.dll',\n '.so',\n '.dylib',\n '.bin',\n '.pdf',\n '.doc',\n '.docx',\n '.xls',\n '.xlsx',\n '.woff',\n '.woff2',\n '.ttf',\n '.eot',\n '.pyc',\n '.class',\n '.o',\n]);\n\nexport const commandSpec = define({\n name: 'scan',\n description: 'Scan files for sensitive config values that should not be in plaintext',\n args: {\n staged: {\n type: 'boolean',\n description: 'Only scan staged git files',\n },\n 'include-ignored': {\n type: 'boolean',\n description: 'Include git-ignored files in the scan',\n },\n 'install-hook': {\n type: 'boolean',\n description: 'Set up varlock scan as a git pre-commit hook',\n },\n path: {\n type: 'string',\n short: 'p',\n description: 'Path to a specific .env file (e.g. .env.prod) or directory ending with \"/\" to use as the schema entry point (default: current directory)',\n },\n },\n examples: `\nLoads your varlock config, resolves all sensitive values, then scans files to\nensure none of those sensitive values appear in plaintext.\n\nExamples:\n varlock scan # Scan non-git-ignored files in current directory\n varlock scan --staged # Only scan staged git files\n varlock scan --include-ignored # Scan all files, including git-ignored ones\n varlock scan --path .env.prod # Use a specific .env file as the schema entry point\n varlock scan --install-hook # Set up as a git pre-commit hook\n `.trim(),\n});\n\nexport interface ScanFinding {\n filePath: string;\n lineNumber: number;\n columnNumber: number;\n line: string;\n sensitiveKeyName: string;\n sensitiveValue: string;\n}\n\nexport async function getGitFiles(cwd: string, onlyStaged: boolean): Promise<Array<string> | null> {\n try {\n let output: string;\n if (onlyStaged) {\n output = await spawnAsync(\n 'git',\n ['diff', '--cached', '--name-only', '-z', '--diff-filter=ACMR'],\n { cwd },\n );\n } else {\n output = await spawnAsync(\n 'git',\n ['ls-files', '--cached', '--others', '--exclude-standard', '-z'],\n { cwd },\n );\n }\n return output.split('\\0').filter(Boolean)\n .filter((f) => !BINARY_EXTENSIONS.has(path.extname(f).toLowerCase()))\n .map((f) => path.resolve(cwd, f));\n } catch {\n return null;\n }\n}\n\nexport async function walkDirectory(dir: string): Promise<Array<string>> {\n const files: Array<string> = [];\n let entries;\n try {\n entries = await fs.readdir(dir, { withFileTypes: true });\n } catch {\n return files;\n }\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(entry.name)) continue;\n files.push(...await walkDirectory(fullPath));\n } else if (entry.isFile()) {\n const ext = path.extname(entry.name).toLowerCase();\n if (BINARY_EXTENSIONS.has(ext)) continue;\n files.push(fullPath);\n }\n }\n return files;\n}\n\n/**\n * Scans a single file for occurrences of any of the provided sensitive values.\n * sensitiveValues is a map from env key name to its resolved string value.\n */\nexport async function scanFileForValues(\n filePath: string,\n sensitiveValues: Map<string, string>,\n): Promise<Array<ScanFinding>> {\n const findings: Array<ScanFinding> = [];\n let content: string;\n try {\n content = await fs.readFile(filePath, 'utf-8');\n } catch {\n return findings;\n }\n\n // Skip binary files (contain null bytes)\n if (content.includes('\\0')) return findings;\n\n // Quick pre-check: skip the file entirely if none of the values appear\n let anyMatch = false;\n for (const val of sensitiveValues.values()) {\n if (content.includes(val)) {\n anyMatch = true;\n break;\n }\n }\n if (!anyMatch) return findings;\n\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n for (const [keyName, val] of sensitiveValues) {\n const colIdx = line.indexOf(val);\n if (colIdx !== -1) {\n findings.push({\n filePath,\n lineNumber: i + 1,\n columnNumber: colIdx + 1,\n line: line.trim(),\n sensitiveKeyName: keyName,\n sensitiveValue: val,\n });\n break; // one finding per line is enough\n }\n }\n }\n return findings;\n}\n\nconst SCAN_COMMAND = 'varlock scan';\n\n/**\n * Determines the correct command to use in a git hook script.\n * If varlock is installed as a standalone binary, uses `varlock` directly.\n * Otherwise, prefixes with the detected JS package manager's exec command.\n */\nfunction getHookCommand(): string {\n if (isBundledSEA()) return SCAN_COMMAND;\n const pm = detectJsPackageManager();\n if (pm) return `${pm.exec} ${SCAN_COMMAND}`;\n // fallback - assume varlock is available on PATH\n return SCAN_COMMAND;\n}\n\ntype HookManagerKind = 'husky' | 'lefthook' | 'simple-git-hooks';\n\nasync function detectHookManager(cwd: string): Promise<HookManagerKind | null> {\n // Check for husky\n if (await pathExists(path.join(cwd, '.husky'))) return 'husky';\n\n // Check for lefthook config files\n const lefthookFiles = ['lefthook.yml', 'lefthook.yaml', '.lefthook.yml', '.lefthook.yaml'];\n for (const file of lefthookFiles) {\n if (await pathExists(path.join(cwd, file))) return 'lefthook';\n }\n\n // Check for simple-git-hooks in package.json\n const pkgJsonPath = path.join(cwd, 'package.json');\n if (await pathExists(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(await fs.readFile(pkgJsonPath, 'utf-8'));\n if (pkgJson['simple-git-hooks']) return 'simple-git-hooks';\n } catch { /* ignore parse errors */ }\n }\n\n return null;\n}\n\nasync function findGitRoot(cwd: string): Promise<string | null> {\n try {\n const root = await spawnAsync('git', ['rev-parse', '--show-toplevel'], { cwd });\n return root.trim();\n } catch {\n return null;\n }\n}\n\nasync function installHook(cwd: string): Promise<void> {\n const gitRoot = await findGitRoot(cwd);\n if (!gitRoot) {\n throw new CliExitError('Not inside a git repository', {\n suggestion: 'Run `git init` first, or make sure you are inside a git repository.',\n });\n }\n\n const hookCommand = getHookCommand();\n const hookScript = `#!/bin/sh\\n${hookCommand}\\n`;\n const hookManager = await detectHookManager(gitRoot);\n\n if (hookManager === 'husky') {\n logLines([\n '',\n `Detected ${ansis.bold('husky')} as your git hook manager.`,\n '',\n `Add ${ansis.bold(hookCommand)} to your pre-commit hook:`,\n '',\n ansis.dim(` echo \"${hookCommand}\" >> .husky/pre-commit`),\n '',\n 'Or if creating a new hook:',\n '',\n ansis.dim(` echo \"${hookCommand}\" > .husky/pre-commit`),\n '',\n ]);\n return;\n }\n\n if (hookManager === 'lefthook') {\n logLines([\n '',\n `Detected ${ansis.bold('lefthook')} as your git hook manager.`,\n '',\n 'Add the following to your lefthook config:',\n '',\n ansis.dim(' pre-commit:'),\n ansis.dim(' commands:'),\n ansis.dim(' varlock-scan:'),\n ansis.dim(` run: ${hookCommand}`),\n '',\n ]);\n return;\n }\n\n if (hookManager === 'simple-git-hooks') {\n logLines([\n '',\n `Detected ${ansis.bold('simple-git-hooks')} in your package.json.`,\n '',\n 'Add the following to your package.json:',\n '',\n ansis.dim(' \"simple-git-hooks\": {'),\n ansis.dim(` \"pre-commit\": \"${hookCommand}\"`),\n ansis.dim(' }'),\n '',\n `Then run ${ansis.dim('npx simple-git-hooks')} to update the hooks.`,\n '',\n ]);\n return;\n }\n\n // No hook manager detected -- install directly to .git/hooks/pre-commit\n const hooksDir = path.join(gitRoot, '.git', 'hooks');\n const hookPath = path.join(hooksDir, 'pre-commit');\n\n // Ensure hooks directory exists\n await fs.mkdir(hooksDir, { recursive: true });\n\n // Check if a pre-commit hook already exists\n if (await pathExists(hookPath)) {\n const existingContent = await fs.readFile(hookPath, 'utf-8');\n if (existingContent.includes(SCAN_COMMAND)) {\n logLines([\n '',\n ansis.green(`The pre-commit hook already includes ${ansis.bold(SCAN_COMMAND)} - nothing to do!`),\n '',\n ]);\n return;\n }\n // Append to existing hook\n const updatedContent = `${existingContent.trimEnd()}\\n${hookCommand}\\n`;\n await fs.writeFile(hookPath, updatedContent);\n await fs.chmod(hookPath, 0o755);\n logLines([\n '',\n ansis.green(`Added ${ansis.bold(hookCommand)} to existing pre-commit hook.`),\n fmt.filePath(hookPath),\n '',\n ]);\n return;\n }\n\n // Create new hook\n await fs.writeFile(hookPath, hookScript);\n await fs.chmod(hookPath, 0o755);\n logLines([\n '',\n ansis.green(`Created pre-commit hook at ${fmt.filePath(hookPath)}`),\n ansis.dim('Your staged files will now be scanned for sensitive values before each commit.'),\n '',\n ]);\n}\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // Handle --install-hook before doing any scanning\n if (ctx.values['install-hook']) {\n await installHook(process.cwd());\n return;\n }\n\n const onlyStaged = ctx.values.staged ?? false;\n const includeIgnored = ctx.values['include-ignored'] ?? false;\n\n // Load the varlock env graph to get the actual sensitive values\n const envGraph = await loadVarlockEnvGraph({\n entryFilePath: ctx.values.path,\n });\n\n // Check for loading/schema errors\n for (const source of envGraph.sortedDataSources) {\n if (source.loadingError) {\n throw new CliExitError(`Error loading config: ${source.loadingError.message}`, {\n suggestion: 'Make sure your .env.schema file is valid.',\n });\n }\n }\n\n await envGraph.resolveEnvValues();\n\n // Collect all sensitive string values that are non-empty\n const sensitiveValues = new Map<string, string>();\n for (const itemKey in envGraph.configSchema) {\n const item = envGraph.configSchema[itemKey];\n if (item.isSensitive && _.isString(item.resolvedValue) && item.resolvedValue !== '') {\n sensitiveValues.set(itemKey, item.resolvedValue);\n }\n }\n\n if (sensitiveValues.size === 0) {\n logLines([ansis.green('✅ No sensitive values found in config - nothing to scan for.')]);\n return;\n }\n\n const cwd = process.cwd();\n let files: Array<string>;\n\n if (includeIgnored) {\n // Walk the full directory tree, no git filtering\n files = await walkDirectory(cwd);\n } else {\n // Try to use git to get non-ignored files\n const gitFiles = await getGitFiles(cwd, onlyStaged);\n if (gitFiles !== null) {\n files = gitFiles;\n } else {\n // Git not available - fall back to walking directory\n if (onlyStaged) {\n throw new CliExitError('Could not run git to find staged files', {\n suggestion: 'Make sure git is installed and you are inside a git repository.',\n });\n }\n files = await walkDirectory(cwd);\n }\n }\n\n if (files.length === 0) {\n if (onlyStaged) {\n console.log('No staged files to scan.');\n } else {\n console.log(ansis.green('✅ No files found to scan.'));\n }\n return;\n }\n\n const allFindings: Array<ScanFinding> = [];\n for (const filePath of files) {\n const findings = await scanFileForValues(filePath, sensitiveValues);\n allFindings.push(...findings);\n }\n\n if (allFindings.length === 0) {\n logLines([ansis.green(`✅ No sensitive values found in plaintext. (scanned ${files.length} file${files.length === 1 ? '' : 's'})`)]);\n return;\n }\n\n // Group findings by file for display\n const findingsByFile = new Map<string, Array<ScanFinding>>();\n for (const finding of allFindings) {\n const existing = findingsByFile.get(finding.filePath) ?? [];\n existing.push(finding);\n findingsByFile.set(finding.filePath, existing);\n }\n\n console.error(ansis.red(`\\n🚨 Found ${allFindings.length} sensitive value(s) in plaintext across ${findingsByFile.size} file(s):\\n`));\n for (const [filePath, findings] of findingsByFile) {\n const relPath = path.relative(cwd, filePath);\n for (const finding of findings) {\n // Redact the actual secret value in the displayed line\n const redactedLine = finding.line.replaceAll(finding.sensitiveValue, redactString(finding.sensitiveValue)!);\n const truncatedLine = redactedLine.length > 100\n ? `${redactedLine.substring(0, 100)}…`\n : redactedLine;\n console.error(` ${fmt.fileName(`${relPath}:${finding.lineNumber}:${finding.columnNumber}`)} ${ansis.yellow(finding.sensitiveKeyName)}`);\n console.error(` ${ansis.dim(truncatedLine)}`);\n }\n console.error('');\n }\n\n gracefulExit(1);\n};\n"]}
|
|
@@ -1,41 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CliExitError } from './chunk-KKPD7AYU.js';
|
|
2
|
+
import { ansis_default } from './chunk-VQ5I7WMP.js';
|
|
3
|
+
import { pathExistsSync } from './chunk-WZW7QS6M.js';
|
|
4
|
+
import { createDebug } from './chunk-QZ6HBRJC.js';
|
|
2
5
|
import { __name } from './chunk-6PEHRAEP.js';
|
|
3
6
|
import path from 'path';
|
|
4
7
|
import fs, { existsSync } from 'fs';
|
|
5
|
-
import Debug from 'debug';
|
|
6
8
|
import { execSync } from 'child_process';
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
var CliExitError = class extends Error {
|
|
10
|
-
constructor(message, more) {
|
|
11
|
-
super(message);
|
|
12
|
-
this.more = more;
|
|
13
|
-
}
|
|
14
|
-
static {
|
|
15
|
-
__name(this, "CliExitError");
|
|
16
|
-
}
|
|
17
|
-
get forceExit() {
|
|
18
|
-
return !!this.more?.forceExit;
|
|
19
|
-
}
|
|
20
|
-
getFormattedOutput() {
|
|
21
|
-
let msg = `
|
|
22
|
-
\u{1F4A5} ${ansis_default.red(this.message)} \u{1F4A5}
|
|
23
|
-
`;
|
|
24
|
-
if (this.more?.details) {
|
|
25
|
-
msg += joinAndCompact(my_dash_default.castArray(this.more?.details), "\n");
|
|
26
|
-
}
|
|
27
|
-
if (this.more?.suggestion) {
|
|
28
|
-
msg += joinAndCompact(my_dash_default.castArray(this.more?.suggestion), "\n");
|
|
29
|
-
}
|
|
30
|
-
msg += "\n";
|
|
31
|
-
return msg;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
var debug = Debug("varlock:js-package-manager-utils");
|
|
10
|
+
var debug = createDebug("varlock:js-package-manager-utils");
|
|
35
11
|
var JS_PACKAGE_MANAGERS = Object.freeze({
|
|
36
12
|
npm: {
|
|
37
13
|
name: "npm",
|
|
38
|
-
|
|
14
|
+
lockfiles: ["package-lock.json"],
|
|
39
15
|
add: "npm install",
|
|
40
16
|
// add also works
|
|
41
17
|
exec: "npm exec --",
|
|
@@ -43,21 +19,21 @@ var JS_PACKAGE_MANAGERS = Object.freeze({
|
|
|
43
19
|
},
|
|
44
20
|
pnpm: {
|
|
45
21
|
name: "pnpm",
|
|
46
|
-
|
|
22
|
+
lockfiles: ["pnpm-lock.yaml"],
|
|
47
23
|
add: "pnpm add",
|
|
48
24
|
exec: "pnpm exec",
|
|
49
25
|
dlx: "pnpm dlx"
|
|
50
26
|
},
|
|
51
27
|
yarn: {
|
|
52
28
|
name: "yarn",
|
|
53
|
-
|
|
29
|
+
lockfiles: ["yarn.lock"],
|
|
54
30
|
add: "yarn add",
|
|
55
31
|
exec: "yarn exec --",
|
|
56
32
|
dlx: "yarn dlx"
|
|
57
33
|
},
|
|
58
34
|
bun: {
|
|
59
35
|
name: "bun",
|
|
60
|
-
|
|
36
|
+
lockfiles: ["bun.lock", "bun.lockb"],
|
|
61
37
|
add: "bun add",
|
|
62
38
|
exec: "bun run",
|
|
63
39
|
dlx: "bunx"
|
|
@@ -65,7 +41,7 @@ var JS_PACKAGE_MANAGERS = Object.freeze({
|
|
|
65
41
|
deno: {
|
|
66
42
|
//! deno not fully supported yet
|
|
67
43
|
name: "deno",
|
|
68
|
-
|
|
44
|
+
lockfiles: ["deno.lock"],
|
|
69
45
|
add: "deno add",
|
|
70
46
|
// TODO: don't think these are quite right...
|
|
71
47
|
exec: "deno run",
|
|
@@ -78,20 +54,20 @@ function detectJsPackageManager(opts) {
|
|
|
78
54
|
let multipleLockfilesDetected;
|
|
79
55
|
do {
|
|
80
56
|
debug(`> scanning ${cwd}`);
|
|
57
|
+
const scanDir = cwd;
|
|
81
58
|
let pm;
|
|
82
59
|
let detectedPm;
|
|
83
60
|
for (pm in JS_PACKAGE_MANAGERS) {
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
JS_PACKAGE_MANAGERS[pm].lockfile
|
|
61
|
+
const foundLockfile = JS_PACKAGE_MANAGERS[pm].lockfiles.find(
|
|
62
|
+
(lockfile) => pathExistsSync(path.join(scanDir, lockfile))
|
|
87
63
|
);
|
|
88
|
-
if (
|
|
64
|
+
if (foundLockfile) {
|
|
89
65
|
if (detectedPm) {
|
|
90
|
-
debug(`> found multiple lockfiles: ${
|
|
66
|
+
debug(`> found multiple lockfiles: ${foundLockfile} and ${JS_PACKAGE_MANAGERS[detectedPm].lockfiles[0]}`);
|
|
91
67
|
multipleLockfilesDetected = [detectedPm, pm];
|
|
92
68
|
break;
|
|
93
69
|
}
|
|
94
|
-
debug(`> found ${
|
|
70
|
+
debug(`> found ${foundLockfile}`);
|
|
95
71
|
detectedPm = pm;
|
|
96
72
|
}
|
|
97
73
|
}
|
|
@@ -175,6 +151,6 @@ var logLines = /* @__PURE__ */ __name((lines) => {
|
|
|
175
151
|
}
|
|
176
152
|
}, "logLines");
|
|
177
153
|
|
|
178
|
-
export {
|
|
179
|
-
//# sourceMappingURL=chunk-
|
|
180
|
-
//# sourceMappingURL=chunk-
|
|
154
|
+
export { detectJsPackageManager, fmt, installJsDependency, logLines };
|
|
155
|
+
//# sourceMappingURL=chunk-MXZI2FC6.js.map
|
|
156
|
+
//# sourceMappingURL=chunk-MXZI2FC6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/helpers/js-package-manager-utils.ts","../src/cli/helpers/pretty-format.ts"],"names":[],"mappings":"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","file":"chunk-MXZI2FC6.js","sourcesContent":["import path from 'node:path';\nimport fs, { existsSync } from 'node:fs';\nimport { pathExistsSync } from '@env-spec/utils/fs-utils';\nimport { createDebug } from '../../lib/debug';\n\nimport { CliExitError } from './exit-error';\nimport { execSync } from 'node:child_process';\n\nconst debug = createDebug('varlock:js-package-manager-utils');\n\nexport type JsPackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'deno';\n\nexport type JsPackageManagerMeta = {\n name: JsPackageManager;\n lockfiles: Array<string>;\n add: string;\n exec: string;\n dlx: string;\n};\n\nexport const JS_PACKAGE_MANAGERS: Record<JsPackageManager, JsPackageManagerMeta> = Object.freeze({\n npm: {\n name: 'npm',\n lockfiles: ['package-lock.json'],\n add: 'npm install', // add also works\n exec: 'npm exec --',\n dlx: 'npx',\n },\n pnpm: {\n name: 'pnpm',\n lockfiles: ['pnpm-lock.yaml'],\n add: 'pnpm add',\n exec: 'pnpm exec',\n dlx: 'pnpm dlx',\n },\n yarn: {\n name: 'yarn',\n lockfiles: ['yarn.lock'],\n add: 'yarn add',\n exec: 'yarn exec --',\n dlx: 'yarn dlx',\n },\n bun: {\n name: 'bun',\n lockfiles: ['bun.lock', 'bun.lockb'],\n add: 'bun add',\n exec: 'bun run',\n dlx: 'bunx',\n },\n deno: { //! deno not fully supported yet\n name: 'deno',\n lockfiles: ['deno.lock'],\n add: 'deno add',\n // TODO: don't think these are quite right...\n exec: 'deno run',\n dlx: 'deno run',\n },\n});\n\n/**\n * detect js package manager\n *\n * currently go up the folder tree looking for lockfiles (ex: package-lock.json, pnpm-lock.yaml)\n * if nothing found, we'll look at process.env.npm_config_user_agent\n * */\nexport function detectJsPackageManager(opts?: {\n cwd?: string,\n workspaceRootPath?: string,\n exitIfNotFound?: boolean,\n}) {\n debug('Detecting js package manager');\n let cwd = opts?.cwd || process.cwd();\n let multipleLockfilesDetected: Array<JsPackageManager> | undefined;\n do {\n debug(`> scanning ${cwd}`);\n const scanDir = cwd;\n let pm: JsPackageManager;\n let detectedPm: JsPackageManager | undefined;\n for (pm in JS_PACKAGE_MANAGERS) {\n const foundLockfile = JS_PACKAGE_MANAGERS[pm].lockfiles.find(\n (lockfile) => pathExistsSync(path.join(scanDir, lockfile)),\n );\n\n if (foundLockfile) {\n // if we find 2 lockfiles at the same level, store them and continue\n // this can happen in monorepos or when switching package managers\n if (detectedPm) {\n debug(`> found multiple lockfiles: ${foundLockfile} and ${JS_PACKAGE_MANAGERS[detectedPm].lockfiles[0]}`);\n multipleLockfilesDetected = [detectedPm, pm];\n break;\n }\n debug(`> found ${foundLockfile}`);\n detectedPm = pm;\n }\n }\n if (detectedPm && !multipleLockfilesDetected) return JS_PACKAGE_MANAGERS[detectedPm];\n if (multipleLockfilesDetected) break;\n\n // will break when we reach the root\n const parentDir = path.dirname(cwd);\n if (parentDir === cwd) break;\n cwd = parentDir;\n\n if (opts?.workspaceRootPath) {\n if (opts.workspaceRootPath === cwd) {\n debug('> found workspace root');\n break;\n }\n } else {\n // if we don't have a workspace root path, we'll break if we hit the git repo root\n if (pathExistsSync(path.join(cwd, '.git'))) {\n debug('> found git root');\n break;\n }\n }\n } while (cwd);\n\n // if we did not find a lockfile, we'll look at env vars for other hints\n if (process.env.npm_config_user_agent) {\n const pmFromAgent = process.env.npm_config_user_agent.split('/')[0];\n if (Object.keys(JS_PACKAGE_MANAGERS).includes(pmFromAgent)) {\n debug(`> found ${pmFromAgent} using npm_config_user_agent`);\n return JS_PACKAGE_MANAGERS[pmFromAgent as JsPackageManager];\n }\n }\n\n // if we found multiple lockfiles and env var detection failed, return the first detected one\n // we choose the first one because the order is deterministic (based on the order in JS_PACKAGE_MANAGERS)\n // and this provides a reasonable fallback when we can't determine the active package manager\n if (multipleLockfilesDetected) {\n debug(`> using ${multipleLockfilesDetected[0]} from multiple detected lockfiles`);\n return JS_PACKAGE_MANAGERS[multipleLockfilesDetected[0]];\n }\n\n if (opts?.exitIfNotFound) {\n // show some hopefully useful error messaging if we hit the root folder without finding anything\n throw new CliExitError('Unable to find detect your JavaScript package manager!', {\n suggestion: 'We look for lock files (ex: package-lock.json) so you may just need to run a dependency install (ie `npm install`)',\n forceExit: true,\n });\n }\n}\n\n\n\n\nexport function installJsDependency(opts: {\n packageName: string,\n packageManager: JsPackageManager,\n packagePath?: string,\n isMonoRepoRoot?: boolean,\n}) {\n const packageJsonPath = path.join(opts.packagePath || process.cwd(), 'package.json');\n\n // for now, we'll just bail if we dont see a package.json\n if (!existsSync(packageJsonPath)) return false;\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n // bail if already installed\n if (packageJson.dependencies?.varlock) return false;\n\n // TODO: might want to check first if it's already installed?\n execSync([\n // move to the correct directory if needed\n opts.packagePath && `cd ${opts.packagePath} &&`,\n // `add` works in all of them\n `${opts.packageManager} add ${opts.packageName}`,\n // tells pnpm to either install in the workspace root explicitly\n // or to not check if we are the in the root\n opts.packageManager === 'pnpm' && (opts.isMonoRepoRoot ? '-w' : '--ignore-workspace-root-check'),\n ].filter(Boolean).join(' '));\n\n return true;\n}\n\n","import ansis from 'ansis';\nimport { detectJsPackageManager, JsPackageManagerMeta } from './js-package-manager-utils';\n\n\nexport const fmt = {\n decorator: (s: string) => ansis.magenta(s),\n filePath: (s: string) => `📂 ${ansis.cyan.italic(s)}`,\n fileName: (s: string) => `${ansis.cyan.italic(s)}`,\n command: (s: string, opts?: { jsPackageManager?: JsPackageManagerMeta | true }) => {\n let jsPackageManager: JsPackageManagerMeta | undefined;\n if (opts?.jsPackageManager === true) {\n jsPackageManager = detectJsPackageManager();\n } else if (opts?.jsPackageManager) {\n jsPackageManager = opts.jsPackageManager;\n }\n if (jsPackageManager) {\n s = `${jsPackageManager.exec} ${s}`;\n }\n return ansis.green.italic(s);\n },\n packageName: (s: string) => ansis.green.italic(s),\n};\n\nexport const logLines = (lines: Array<string | false | undefined>) => {\n for (const line of lines) {\n // skip false, null, undefined, but not empty strings\n if (!line && line !== '') continue;\n console.log(line);\n }\n};\n"]}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { __name } from './chunk-6PEHRAEP.js';
|
|
2
|
+
import { format } from 'util';
|
|
3
|
+
|
|
4
|
+
var prevTime = /* @__PURE__ */ new Map();
|
|
5
|
+
var colors = [
|
|
6
|
+
"\x1B[36m",
|
|
7
|
+
// cyan
|
|
8
|
+
"\x1B[35m",
|
|
9
|
+
// magenta
|
|
10
|
+
"\x1B[34m",
|
|
11
|
+
// blue
|
|
12
|
+
"\x1B[33m",
|
|
13
|
+
// yellow
|
|
14
|
+
"\x1B[32m",
|
|
15
|
+
// green
|
|
16
|
+
"\x1B[31m",
|
|
17
|
+
// red
|
|
18
|
+
"\x1B[96m",
|
|
19
|
+
// bright cyan
|
|
20
|
+
"\x1B[95m",
|
|
21
|
+
// bright magenta
|
|
22
|
+
"\x1B[94m",
|
|
23
|
+
// bright blue
|
|
24
|
+
"\x1B[93m",
|
|
25
|
+
// bright yellow
|
|
26
|
+
"\x1B[92m",
|
|
27
|
+
// bright green
|
|
28
|
+
"\x1B[91m"
|
|
29
|
+
// bright red
|
|
30
|
+
];
|
|
31
|
+
var resetCode = "\x1B[0m";
|
|
32
|
+
var grayCode = "\x1B[90m";
|
|
33
|
+
var selectColor = /* @__PURE__ */ __name((namespace) => {
|
|
34
|
+
let hash = 0;
|
|
35
|
+
for (let i = 0; i < namespace.length; i++) {
|
|
36
|
+
hash = (hash << 5) - hash + namespace.charCodeAt(i);
|
|
37
|
+
hash |= 0;
|
|
38
|
+
}
|
|
39
|
+
return colors[Math.abs(hash) % colors.length];
|
|
40
|
+
}, "selectColor");
|
|
41
|
+
var humanizeMs = /* @__PURE__ */ __name((ms) => {
|
|
42
|
+
if (ms >= 1e3) {
|
|
43
|
+
return `${(ms / 1e3).toFixed(1)}s`;
|
|
44
|
+
}
|
|
45
|
+
return `${Math.round(ms)}ms`;
|
|
46
|
+
}, "humanizeMs");
|
|
47
|
+
var isEnabled = /* @__PURE__ */ __name((namespace) => {
|
|
48
|
+
const debugEnv = process.env.DEBUG || "";
|
|
49
|
+
if (!debugEnv) return false;
|
|
50
|
+
const patterns = debugEnv.split(",").map((p) => p.trim());
|
|
51
|
+
let enabled = false;
|
|
52
|
+
for (const pattern of patterns) {
|
|
53
|
+
if (pattern.startsWith("-")) {
|
|
54
|
+
const excludePattern = pattern.slice(1);
|
|
55
|
+
if (excludePattern === namespace) return false;
|
|
56
|
+
if (excludePattern.endsWith("*")) {
|
|
57
|
+
const prefix = excludePattern.slice(0, -1);
|
|
58
|
+
if (namespace.startsWith(prefix)) return false;
|
|
59
|
+
}
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (pattern === "*") {
|
|
63
|
+
enabled = true;
|
|
64
|
+
} else if (pattern === namespace) {
|
|
65
|
+
enabled = true;
|
|
66
|
+
} else if (pattern.endsWith("*")) {
|
|
67
|
+
const prefix = pattern.slice(0, -1);
|
|
68
|
+
if (namespace.startsWith(prefix)) {
|
|
69
|
+
enabled = true;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return enabled;
|
|
74
|
+
}, "isEnabled");
|
|
75
|
+
function createDebug(namespace) {
|
|
76
|
+
const enabled = isEnabled(namespace);
|
|
77
|
+
if (!enabled) {
|
|
78
|
+
return () => {
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const colorCode = selectColor(namespace);
|
|
82
|
+
return (...args) => {
|
|
83
|
+
const now = Date.now();
|
|
84
|
+
const prev = prevTime.get(namespace);
|
|
85
|
+
const diff = prev ? now - prev : 0;
|
|
86
|
+
prevTime.set(namespace, now);
|
|
87
|
+
const msg = format(...args);
|
|
88
|
+
const diffStr = diff > 0 ? `${grayCode} +${humanizeMs(diff)}${resetCode}` : "";
|
|
89
|
+
const output = `${colorCode}${namespace}${resetCode} ${msg}${diffStr}`;
|
|
90
|
+
console.error(output);
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
__name(createDebug, "createDebug");
|
|
94
|
+
|
|
95
|
+
export { createDebug };
|
|
96
|
+
//# sourceMappingURL=chunk-QZ6HBRJC.js.map
|
|
97
|
+
//# sourceMappingURL=chunk-QZ6HBRJC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/debug.ts"],"names":[],"mappings":"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","file":"chunk-QZ6HBRJC.js","sourcesContent":["/* eslint-disable no-console */\n\nimport { format } from 'node:util';\n\n/**\n * Debug logger with colors, timing, and format string support\n * Enable by setting DEBUG env var with namespaces (e.g., DEBUG=varlock:*)\n */\n\ntype DebugFn = (...args: Array<any>) => void;\n\n// Track last call time per namespace for diff timing\nconst prevTime = new Map<string, number>();\n\n// ANSI color codes\nconst colors = [\n '\\x1b[36m', // cyan\n '\\x1b[35m', // magenta\n '\\x1b[34m', // blue\n '\\x1b[33m', // yellow\n '\\x1b[32m', // green\n '\\x1b[31m', // red\n '\\x1b[96m', // bright cyan\n '\\x1b[95m', // bright magenta\n '\\x1b[94m', // bright blue\n '\\x1b[93m', // bright yellow\n '\\x1b[92m', // bright green\n '\\x1b[91m', // bright red\n];\nconst resetCode = '\\x1b[0m';\nconst grayCode = '\\x1b[90m';\n\n// Simple hash function to deterministically assign colors\nconst selectColor = (namespace: string): string => {\n let hash = 0;\n for (let i = 0; i < namespace.length; i++) {\n // eslint-disable-next-line no-bitwise\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n // eslint-disable-next-line no-bitwise\n hash |= 0; // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length];\n};\n\n// Format milliseconds in human-readable form\nconst humanizeMs = (ms: number): string => {\n if (ms >= 1000) {\n return `${(ms / 1000).toFixed(1)}s`;\n }\n return `${Math.round(ms)}ms`;\n};\n\nconst isEnabled = (namespace: string): boolean => {\n const debugEnv = process.env.DEBUG || '';\n if (!debugEnv) return false;\n\n const patterns = debugEnv.split(',').map((p) => p.trim());\n let enabled = false;\n\n for (const pattern of patterns) {\n // Negative pattern (exclude)\n if (pattern.startsWith('-')) {\n const excludePattern = pattern.slice(1);\n if (excludePattern === namespace) return false;\n if (excludePattern.endsWith('*')) {\n const prefix = excludePattern.slice(0, -1);\n if (namespace.startsWith(prefix)) return false;\n }\n continue;\n }\n\n // Positive pattern (include)\n if (pattern === '*') {\n enabled = true;\n } else if (pattern === namespace) {\n enabled = true;\n } else if (pattern.endsWith('*')) {\n const prefix = pattern.slice(0, -1);\n if (namespace.startsWith(prefix)) {\n enabled = true;\n }\n }\n }\n\n return enabled;\n};\n\nexport function createDebug(namespace: string): DebugFn {\n const enabled = isEnabled(namespace);\n\n if (!enabled) {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n return () => {};\n }\n\n const colorCode = selectColor(namespace);\n\n return (...args: Array<any>) => {\n const now = Date.now();\n const prev = prevTime.get(namespace);\n const diff = prev ? now - prev : 0;\n prevTime.set(namespace, now);\n\n // Format the message with util.format for printf-style formatting\n const msg = format(...args);\n\n // Build the output with colored namespace and diff timing\n const diffStr = diff > 0 ? `${grayCode} +${humanizeMs(diff)}${resetCode}` : '';\n const output = `${colorCode}${namespace}${resetCode} ${msg}${diffStr}`;\n\n console.error(output);\n };\n}\n\nexport type Debugger = ReturnType<typeof createDebug>;\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ansis_default,
|
|
1
|
+
import { ansis_default, gracefulExit, getItemSummary, joinAndCompact } from './chunk-VQ5I7WMP.js';
|
|
2
|
+
import { VarlockError, my_dash_default } from './chunk-WZW7QS6M.js';
|
|
2
3
|
import { __name } from './chunk-6PEHRAEP.js';
|
|
3
4
|
|
|
4
5
|
// src/cli/helpers/error-checks.ts
|
|
@@ -14,6 +15,14 @@ function showErrorLocationDetails(err) {
|
|
|
14
15
|
console.log(errPreview);
|
|
15
16
|
}
|
|
16
17
|
__name(showErrorLocationDetails, "showErrorLocationDetails");
|
|
18
|
+
function checkForNoEnvFiles(envGraph) {
|
|
19
|
+
if (Object.keys(envGraph.configSchema).length === 0) {
|
|
20
|
+
console.error("\u{1F6A8} No .env or .env.schema files found\n");
|
|
21
|
+
console.error("Run `varlock init` to create a .env.schema file, or use `--path` to specify a file or directory.");
|
|
22
|
+
return gracefulExit(1);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
__name(checkForNoEnvFiles, "checkForNoEnvFiles");
|
|
17
26
|
function checkForSchemaErrors(envGraph) {
|
|
18
27
|
for (const source of envGraph.sortedDataSources) {
|
|
19
28
|
if (source.loadingError) {
|
|
@@ -58,11 +67,16 @@ function checkForConfigErrors(envGraph, opts) {
|
|
|
58
67
|
console.log(`\u{1F6A8} Root decorator error(s) in ${source.label}`);
|
|
59
68
|
for (const err of source.resolutionErrors) {
|
|
60
69
|
console.log(`- ${err.message}`);
|
|
70
|
+
if (err instanceof VarlockError && err.tip) {
|
|
71
|
+
for (const line of err.tip.split("\n")) {
|
|
72
|
+
console.log(` ${line}`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
61
75
|
showErrorLocationDetails(err);
|
|
62
76
|
}
|
|
63
77
|
}
|
|
64
78
|
}
|
|
65
|
-
const failingItems =
|
|
79
|
+
const failingItems = envGraph.sortedConfigKeys.map((k) => envGraph.configSchema[k]).filter((item) => item.validationState === "error");
|
|
66
80
|
if (failingItems.length > 0) {
|
|
67
81
|
console.error(`
|
|
68
82
|
\u{1F6A8} \u{1F6A8} \u{1F6A8} ${ansis_default.bold.underline("Configuration is currently invalid ")} \u{1F6A8} \u{1F6A8} \u{1F6A8}
|
|
@@ -79,7 +93,7 @@ function checkForConfigErrors(envGraph, opts) {
|
|
|
79
93
|
ansis_default.italic.gray("(remove `--show-all` flag to hide)")
|
|
80
94
|
]));
|
|
81
95
|
console.error();
|
|
82
|
-
const validItems =
|
|
96
|
+
const validItems = envGraph.sortedConfigKeys.map((k) => envGraph.configSchema[k]).filter((i) => !!i.isValid);
|
|
83
97
|
my_dash_default.each(validItems, (item) => {
|
|
84
98
|
console.error(getItemSummary(item));
|
|
85
99
|
});
|
|
@@ -89,17 +103,6 @@ function checkForConfigErrors(envGraph, opts) {
|
|
|
89
103
|
}
|
|
90
104
|
__name(checkForConfigErrors, "checkForConfigErrors");
|
|
91
105
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
...opts,
|
|
96
|
-
afterInit: /* @__PURE__ */ __name(async (_g) => {
|
|
97
|
-
}, "afterInit")
|
|
98
|
-
});
|
|
99
|
-
return envGraph;
|
|
100
|
-
}
|
|
101
|
-
__name(loadVarlockEnvGraph, "loadVarlockEnvGraph");
|
|
102
|
-
|
|
103
|
-
export { InvalidEnvError, checkForConfigErrors, checkForSchemaErrors, loadVarlockEnvGraph };
|
|
104
|
-
//# sourceMappingURL=chunk-ZUNB52KY.js.map
|
|
105
|
-
//# sourceMappingURL=chunk-ZUNB52KY.js.map
|
|
106
|
+
export { InvalidEnvError, checkForConfigErrors, checkForNoEnvFiles, checkForSchemaErrors };
|
|
107
|
+
//# sourceMappingURL=chunk-TLXFVH7P.js.map
|
|
108
|
+
//# sourceMappingURL=chunk-TLXFVH7P.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/helpers/error-checks.ts"],"names":[],"mappings":"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","file":"chunk-TLXFVH7P.js","sourcesContent":["import ansis from 'ansis';\nimport { gracefulExit } from 'exit-hook';\nimport _ from '@env-spec/utils/my-dash';\nimport { EnvGraph, ConfigItem } from '../../env-graph';\nimport { getItemSummary, joinAndCompact } from '../../lib/formatting';\nimport { VarlockError } from '../../env-graph/lib/errors';\n\n\nfunction showErrorLocationDetails(err: Error) {\n if (!(err instanceof VarlockError) || !err.location) return;\n const errLoc = err.location;\n const errPreview = [\n errLoc.lineStr,\n `${ansis.gray('-'.repeat(errLoc.colNumber - 1))}${ansis.red('^')}`,\n ].join('\\n');\n\n console.log('');\n console.log(`📂 ${errLoc.id}:${errLoc.lineNumber}:${errLoc.colNumber}`);\n console.log(errPreview);\n}\n\nexport function checkForNoEnvFiles(envGraph: EnvGraph) {\n if (Object.keys(envGraph.configSchema).length === 0) {\n console.error('🚨 No .env or .env.schema files found\\n');\n console.error('Run `varlock init` to create a .env.schema file, or use `--path` to specify a file or directory.');\n return gracefulExit(1);\n }\n}\n\nexport function checkForSchemaErrors(envGraph: EnvGraph) {\n // first we check for loading/parse errors - some cases we may want to let it fail silently?\n for (const source of envGraph.sortedDataSources) {\n // do we care about loading errors from disabled sources?\n // if (source.disabled) continue;\n\n if (source.loadingError) {\n console.log(`🚨 Error encountered while loading ${source.label}\\n`);\n\n console.log(source.loadingError.message);\n showErrorLocationDetails(source.loadingError);\n\n // For plugin loading errors, show the full stack trace since it's usually\n // a runtime error from executing the plugin code\n if (source.loadingError.stack && !(source.loadingError instanceof VarlockError)) {\n console.log(`\\n${ansis.dim('Stack trace:')}`);\n console.log(ansis.dim(source.loadingError.stack));\n }\n\n return gracefulExit(1);\n }\n // TODO: unify this with the above!\n if (source.schemaErrors.length) {\n console.log(`🚨 Error(s) encountered in ${source.label}`);\n\n for (const schemaErr of source.schemaErrors) {\n console.log(`- ${schemaErr.message}`);\n showErrorLocationDetails(schemaErr);\n }\n return gracefulExit(1);\n }\n }\n\n // now we check for any schema errors - where something about how things are wired up is invalid\n // NOTE - we should not have run any resolution yet\n // TODO: make sure we are calling this before attempting to resolve values\n // const failingItems = _.filter(_.values(envGraph.configSchema), (item) => item.validationState === 'error');\n // if (failingItems.length > 0) {\n // throw new CliExitError('Schema is currently invalid');\n // }\n}\n\n\nexport class InvalidEnvError extends Error {\n constructor() {\n super('Resolved config/env did not pass validation');\n }\n getFormattedOutput() {\n return `\\n💥 ${ansis.red(this.message)} 💥\\n`;\n }\n}\n\nexport function checkForConfigErrors(envGraph: EnvGraph, opts?: {\n showAll?: boolean\n}) {\n // check for root decorator \"execution\"\n for (const source of envGraph.sortedDataSources) {\n if (source.resolutionErrors.length) {\n console.log(`🚨 Root decorator error(s) in ${source.label}`);\n\n for (const err of source.resolutionErrors) {\n console.log(`- ${err.message}`);\n if (err instanceof VarlockError && err.tip) {\n for (const line of err.tip.split('\\n')) {\n console.log(` ${line}`);\n }\n }\n showErrorLocationDetails(err);\n }\n }\n }\n\n\n\n const failingItems = envGraph.sortedConfigKeys\n .map((k) => envGraph.configSchema[k])\n .filter((item) => item.validationState === 'error');\n\n // TODO: use service.isValid?\n if (failingItems.length > 0) {\n console.error(`\\n🚨 🚨 🚨 ${ansis.bold.underline('Configuration is currently invalid ')} 🚨 🚨 🚨\\n`);\n console.error('Invalid items:\\n');\n\n _.each(failingItems, (item: ConfigItem) => {\n console.error(getItemSummary(item));\n console.error();\n });\n if (opts?.showAll) {\n console.error();\n console.error(joinAndCompact([\n 'Valid items:',\n ansis.italic.gray('(remove `--show-all` flag to hide)'),\n ]));\n console.error();\n const validItems = envGraph.sortedConfigKeys\n .map((k) => envGraph.configSchema[k])\n .filter((i) => !!i.isValid);\n _.each(validItems, (item: ConfigItem) => {\n console.error(getItemSummary(item));\n });\n }\n\n throw new InvalidEnvError();\n }\n}\n"]}
|