varlock 0.0.11 → 0.0.13
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/{chunk-FYLMYWUF.js → chunk-5EBVEGDW.js} +5 -24
- package/dist/chunk-5EBVEGDW.js.map +1 -0
- package/dist/{chunk-4CE75BSX.js → chunk-AS4LIW7A.js} +21 -15
- package/dist/chunk-AS4LIW7A.js.map +1 -0
- package/dist/{chunk-KCX4NC7Q.js → chunk-IML4QZHB.js} +4 -5
- package/dist/chunk-IML4QZHB.js.map +1 -0
- package/dist/{chunk-4WMY2EW3.js → chunk-LXJMZMID.js} +98 -66
- package/dist/chunk-LXJMZMID.js.map +1 -0
- package/dist/{chunk-ZW2T4C6A.js → chunk-MV5ZAKN7.js} +539 -267
- package/dist/chunk-MV5ZAKN7.js.map +1 -0
- package/dist/{chunk-LS6F7BSZ.js → chunk-MVYXWTAV.js} +4 -4
- package/dist/{chunk-LS6F7BSZ.js.map → chunk-MVYXWTAV.js.map} +1 -1
- package/dist/{chunk-PB7RWVE6.js → chunk-T3I4UFB2.js} +16 -5
- package/dist/chunk-T3I4UFB2.js.map +1 -0
- package/dist/{chunk-GWQT5VGW.js → chunk-UA3DMAAQ.js} +4 -4
- package/dist/{chunk-GWQT5VGW.js.map → chunk-UA3DMAAQ.js.map} +1 -1
- package/dist/cli/cli-executable.js +14 -15
- package/dist/cli/cli-executable.js.map +1 -1
- package/dist/{env-KH4bPru7.d.ts → env-B_LAqK4w.d.ts} +103 -64
- package/dist/index.d.ts +2 -3
- package/dist/index.js +2 -4
- package/dist/index.js.map +1 -1
- package/dist/init.command-CTO64XBL.js +8 -0
- package/dist/{init.command-ZRQOE2OK.js.map → init.command-CTO64XBL.js.map} +1 -1
- package/dist/load.command-EWIJDF55.js +8 -0
- package/dist/{load.command-YBN3BW6U.js.map → load.command-EWIJDF55.js.map} +1 -1
- package/dist/login.command-UZJJ4XTV.js +8 -0
- package/dist/{login.command-F5AWKZKA.js.map → login.command-UZJJ4XTV.js.map} +1 -1
- package/dist/run.command-T44BAZ7X.js +8 -0
- package/dist/{run.command-WWJ6ZE26.js.map → run.command-T44BAZ7X.js.map} +1 -1
- package/dist/runtime/env.d.ts +1 -1
- package/dist/telemetry.command-2C3MQA4K.js +8 -0
- package/dist/{telemetry.command-IS2JLIZM.js.map → telemetry.command-2C3MQA4K.js.map} +1 -1
- package/package.json +3 -3
- package/dist/chunk-4CE75BSX.js.map +0 -1
- package/dist/chunk-4WMY2EW3.js.map +0 -1
- package/dist/chunk-FYLMYWUF.js.map +0 -1
- package/dist/chunk-KCX4NC7Q.js.map +0 -1
- package/dist/chunk-PB7RWVE6.js.map +0 -1
- package/dist/chunk-ZUG7BEY5.js +0 -17
- package/dist/chunk-ZUG7BEY5.js.map +0 -1
- package/dist/chunk-ZW2T4C6A.js.map +0 -1
- package/dist/init.command-ZRQOE2OK.js +0 -9
- package/dist/load.command-YBN3BW6U.js +0 -9
- package/dist/login.command-F5AWKZKA.js +0 -8
- package/dist/run.command-WWJ6ZE26.js +0 -9
- package/dist/telemetry.command-IS2JLIZM.js +0 -8
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { ansis_default, joinAndCompact, my_dash_default } from './chunk-
|
|
1
|
+
import { ansis_default, joinAndCompact, my_dash_default, pathExistsSync } from './chunk-MV5ZAKN7.js';
|
|
2
2
|
import { __name } from './chunk-XN24GZXQ.js';
|
|
3
|
-
import fs, { accessSync, existsSync } from 'fs';
|
|
4
|
-
import { access } from 'fs/promises';
|
|
5
3
|
import path from 'path';
|
|
4
|
+
import fs, { existsSync } from 'fs';
|
|
6
5
|
import Debug from 'debug';
|
|
7
6
|
import { execSync } from 'child_process';
|
|
8
7
|
|
|
@@ -32,24 +31,6 @@ var CliExitError = class extends Error {
|
|
|
32
31
|
return msg;
|
|
33
32
|
}
|
|
34
33
|
};
|
|
35
|
-
async function pathExists(p) {
|
|
36
|
-
try {
|
|
37
|
-
await access(p);
|
|
38
|
-
return true;
|
|
39
|
-
} catch {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
__name(pathExists, "pathExists");
|
|
44
|
-
function pathExistsSync(p) {
|
|
45
|
-
try {
|
|
46
|
-
accessSync(p);
|
|
47
|
-
return true;
|
|
48
|
-
} catch {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
__name(pathExistsSync, "pathExistsSync");
|
|
53
34
|
var debug = Debug("varlock:js-package-manager-utils");
|
|
54
35
|
var JS_PACKAGE_MANAGERS = Object.freeze({
|
|
55
36
|
npm: {
|
|
@@ -187,6 +168,6 @@ var logLines = /* @__PURE__ */ __name((lines) => {
|
|
|
187
168
|
}
|
|
188
169
|
}, "logLines");
|
|
189
170
|
|
|
190
|
-
export { CliExitError, detectJsPackageManager, fmt, installJsDependency, logLines
|
|
191
|
-
//# sourceMappingURL=chunk-
|
|
192
|
-
//# sourceMappingURL=chunk-
|
|
171
|
+
export { CliExitError, detectJsPackageManager, fmt, installJsDependency, logLines };
|
|
172
|
+
//# sourceMappingURL=chunk-5EBVEGDW.js.map
|
|
173
|
+
//# sourceMappingURL=chunk-5EBVEGDW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/helpers/exit-error.ts","../src/cli/helpers/js-package-manager-utils.ts","../src/cli/helpers/pretty-format.ts"],"names":[],"mappings":"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","file":"chunk-5EBVEGDW.js","sourcesContent":["import ansis from 'ansis';\nimport _ from '@env-spec/utils/my-dash';\nimport { joinAndCompact } from '../../lib/formatting';\n\nexport class CliExitError extends Error {\n constructor(\n message: string,\n private more?: {\n details?: string | Array<string>,\n suggestion?: string | Array<string>,\n /** always triggers a full exit, even in watch mode - useful if problem is irrecoverable */\n forceExit?: boolean,\n },\n ) {\n super(message);\n }\n\n get forceExit() { return !!this.more?.forceExit; }\n\n getFormattedOutput() {\n let msg = `\\n💥 ${ansis.red(this.message)} 💥\\n`;\n\n if (this.more?.details) {\n msg += joinAndCompact(_.castArray(this.more?.details), '\\n');\n }\n\n if (this.more?.suggestion) {\n msg += joinAndCompact(_.castArray(this.more?.suggestion), '\\n');\n }\n\n msg += '\\n';\n return msg;\n }\n}\n","import path from 'node:path';\nimport fs, { existsSync } from 'node:fs';\nimport { pathExistsSync } from '@env-spec/utils/fs-utils';\nimport Debug from 'debug';\n\nimport { CliExitError } from './exit-error';\nimport { execSync } from 'node:child_process';\n\nconst debug = Debug('varlock:js-package-manager-utils');\n\nexport type JsPackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'deno';\n\nexport type JsPackageManagerMeta = {\n name: JsPackageManager;\n lockfile: 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 lockfile: 'package-lock.json',\n add: 'npm install', // add also works\n exec: 'npm exec --',\n dlx: 'npx',\n },\n pnpm: {\n name: 'pnpm',\n lockfile: 'pnpm-lock.yaml',\n add: 'pnpm add',\n exec: 'pnpm exec',\n dlx: 'pnpm dlx',\n },\n yarn: {\n name: 'yarn',\n lockfile: 'yarn.lock',\n add: 'yarn add',\n exec: 'yarn exec --',\n dlx: 'yarn dlx',\n },\n bun: {\n name: 'bun',\n lockfile: '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 lockfile: '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 do {\n debug(`> scanning ${cwd}`);\n let pm: JsPackageManager;\n let detectedPm: JsPackageManager | undefined;\n for (pm in JS_PACKAGE_MANAGERS) {\n const lockFilePath = path.join(\n cwd,\n JS_PACKAGE_MANAGERS[pm].lockfile,\n );\n\n if (pathExistsSync(lockFilePath)) {\n // if we find 2 lockfiles at the same level, we throw an error\n if (detectedPm) {\n throw new CliExitError('Found multiple js package manager lockfiles', {\n details: `${JS_PACKAGE_MANAGERS[pm].lockfile} and ${JS_PACKAGE_MANAGERS[detectedPm].lockfile}`,\n forceExit: true,\n });\n }\n debug(`> found ${JS_PACKAGE_MANAGERS[pm].lockfile}`);\n detectedPm = pm;\n }\n }\n if (detectedPm) return JS_PACKAGE_MANAGERS[detectedPm];\n\n cwd = path.join(cwd, '..');\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 && cwd !== '.' && 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 (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"]}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { define } from './chunk-33ROL4J5.js';
|
|
2
|
-
import { checkForSchemaErrors, checkForConfigErrors } from './chunk-
|
|
3
|
-
import {
|
|
4
|
-
import { my_dash_default, getItemSummary } from './chunk-ZW2T4C6A.js';
|
|
2
|
+
import { loadVarlockEnvGraph, checkForSchemaErrors, checkForConfigErrors } from './chunk-T3I4UFB2.js';
|
|
3
|
+
import { my_dash_default, FileBasedDataSource, getItemSummary } from './chunk-MV5ZAKN7.js';
|
|
5
4
|
import { __name } from './chunk-XN24GZXQ.js';
|
|
5
|
+
import path from 'path';
|
|
6
6
|
|
|
7
|
-
// src/cli/commands/load.command.ts
|
|
8
7
|
var commandSpec = define({
|
|
9
8
|
name: "load",
|
|
10
9
|
description: "Load env according to schema and resolve values",
|
|
@@ -32,16 +31,23 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
32
31
|
currentEnvFallback: ctx.values.env
|
|
33
32
|
});
|
|
34
33
|
checkForSchemaErrors(envGraph);
|
|
35
|
-
if (envGraph.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
if (!envGraph.rootDataSource) throw new Error("expected root data source to be set");
|
|
35
|
+
const generateTypesDecoratorsPerSource = envGraph.getRootDecorators("generateTypes");
|
|
36
|
+
if (generateTypesDecoratorsPerSource.length) {
|
|
37
|
+
for (const [source, generateTypesDecorators] of generateTypesDecoratorsPerSource) {
|
|
38
|
+
for (const generateTypesDecorator of generateTypesDecorators) {
|
|
39
|
+
const typeGenSettings = generateTypesDecorator.bareFnArgs?.simplifiedValues;
|
|
40
|
+
if (!my_dash_default.isPlainObject(typeGenSettings)) {
|
|
41
|
+
throw new Error("@generateTypes - must be a fn call with key/value args");
|
|
42
|
+
}
|
|
43
|
+
if (!typeGenSettings.lang) throw new Error("@generateTypes - must set `lang` arg");
|
|
44
|
+
if (typeGenSettings.lang !== "ts") throw new Error(`@generateTypes - unsupported language: ${typeGenSettings.lang}`);
|
|
45
|
+
if (!typeGenSettings.path) throw new Error("@generateTypes - must set `path` arg");
|
|
46
|
+
if (!my_dash_default.isString(typeGenSettings.path)) throw new Error("@generateTypes - `path` arg must be a string");
|
|
47
|
+
const outputPath = source instanceof FileBasedDataSource ? path.resolve(source.fullPath, "..", typeGenSettings.path) : typeGenSettings.path;
|
|
48
|
+
await envGraph.generateTypes(typeGenSettings.lang, outputPath);
|
|
49
|
+
}
|
|
39
50
|
}
|
|
40
|
-
if (!typeGenSettings.lang) throw new Error("@generateTypes - must set `lang` arg");
|
|
41
|
-
if (typeGenSettings.lang !== "ts") throw new Error(`@generateTypes - unsupported language: ${typeGenSettings.lang}`);
|
|
42
|
-
if (!typeGenSettings.path) throw new Error("@generateTypes - must set `path` arg");
|
|
43
|
-
if (!my_dash_default.isString(typeGenSettings.path)) throw new Error("@generateTypes - `path` arg must be a string");
|
|
44
|
-
await envGraph.generateTypes(typeGenSettings.lang, typeGenSettings.path);
|
|
45
51
|
}
|
|
46
52
|
await envGraph.resolveEnvValues();
|
|
47
53
|
checkForConfigErrors(envGraph, { showAll });
|
|
@@ -74,5 +80,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
74
80
|
}, "commandFn");
|
|
75
81
|
|
|
76
82
|
export { commandFn, commandSpec };
|
|
77
|
-
//# sourceMappingURL=chunk-
|
|
78
|
-
//# sourceMappingURL=chunk-
|
|
83
|
+
//# sourceMappingURL=chunk-AS4LIW7A.js.map
|
|
84
|
+
//# sourceMappingURL=chunk-AS4LIW7A.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/load.command.ts"],"names":[],"mappings":"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","file":"chunk-AS4LIW7A.js","sourcesContent":["import { define } from 'gunshi';\nimport _ from '@env-spec/utils/my-dash';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { getItemSummary } from '../../lib/formatting';\nimport { checkForConfigErrors, checkForSchemaErrors } from '../helpers/error-checks';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport path from 'node:path';\nimport { FileBasedDataSource } from '../../../env-graph';\n\nexport const commandSpec = define({\n name: 'load',\n description: 'Load env according to schema and resolve values',\n args: {\n format: {\n type: 'enum',\n short: 'f',\n choices: ['pretty', 'json', 'env', 'json-full'],\n description: 'Format of output',\n default: 'pretty',\n },\n 'show-all': {\n type: 'boolean',\n description: 'When load is failing, show all items rather than only failing items',\n },\n env: {\n type: 'string',\n description: 'Set the environment (e.g., production, development, etc) - will be overridden by @envFlag in the schema if present',\n },\n },\n});\n\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n const { format, 'show-all': showAll } = ctx.values;\n\n const envGraph = await loadVarlockEnvGraph({\n currentEnvFallback: ctx.values.env,\n });\n checkForSchemaErrors(envGraph);\n\n if (!envGraph.rootDataSource) throw new Error('expected root data source to be set');\n // TODO: move into a more general post-load hook system\n const generateTypesDecoratorsPerSource = envGraph.getRootDecorators('generateTypes');\n if (generateTypesDecoratorsPerSource.length) {\n for (const [source, generateTypesDecorators] of generateTypesDecoratorsPerSource) {\n for (const generateTypesDecorator of generateTypesDecorators) {\n // TODO: much of this logic should move to the definition of the decorator itself\n const typeGenSettings = generateTypesDecorator.bareFnArgs?.simplifiedValues;\n if (!_.isPlainObject(typeGenSettings)) {\n throw new Error('@generateTypes - must be a fn call with key/value args');\n }\n if (!typeGenSettings.lang) throw new Error('@generateTypes - must set `lang` arg');\n if (typeGenSettings.lang !== 'ts') throw new Error(`@generateTypes - unsupported language: ${typeGenSettings.lang}`);\n if (!typeGenSettings.path) throw new Error('@generateTypes - must set `path` arg');\n if (!_.isString(typeGenSettings.path)) throw new Error('@generateTypes - `path` arg must be a string');\n\n const outputPath = source instanceof FileBasedDataSource\n ? path.resolve(source.fullPath, '..', typeGenSettings.path)\n : typeGenSettings.path;\n\n await envGraph.generateTypes(typeGenSettings.lang, outputPath);\n }\n }\n }\n\n await envGraph.resolveEnvValues();\n checkForConfigErrors(envGraph, { showAll });\n\n if (format === 'pretty') {\n for (const itemKey in envGraph.configSchema) {\n const item = envGraph.configSchema[itemKey];\n console.log(getItemSummary(item));\n }\n } else if (format === 'json') {\n console.log(JSON.stringify(envGraph.getResolvedEnvObject(), null, 2));\n } else if (format === 'json-full') {\n console.log(JSON.stringify(envGraph.getSerializedGraph(), null, 2));\n } else if (format === 'env') {\n const resolvedEnv = envGraph.getResolvedEnvObject();\n for (const key in resolvedEnv) {\n const value = resolvedEnv[key];\n let strValue: string;\n if (value === undefined) {\n strValue = '';\n } else if (typeof value === 'string') {\n strValue = `\"${value.replaceAll('\"', '\\\\\"').replaceAll('\\n', '\\\\n')}\"`;\n } else {\n strValue = JSON.stringify(value);\n }\n console.log(`${key}=${strValue}`);\n }\n } else {\n throw new Error(`Unknown format: ${format}`);\n }\n\n // const resolvedEnv = envGraph.getResolvedEnvObject();\n // console.log(resolvedEnv);\n};\n"]}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { define } from './chunk-33ROL4J5.js';
|
|
2
|
-
import { checkForSchemaErrors, checkForConfigErrors } from './chunk-
|
|
3
|
-
import {
|
|
4
|
-
import { gracefulExit } from './chunk-ZW2T4C6A.js';
|
|
2
|
+
import { loadVarlockEnvGraph, checkForSchemaErrors, checkForConfigErrors } from './chunk-T3I4UFB2.js';
|
|
3
|
+
import { gracefulExit } from './chunk-MV5ZAKN7.js';
|
|
5
4
|
import { __name } from './chunk-XN24GZXQ.js';
|
|
6
5
|
import { execa } from 'execa';
|
|
7
6
|
import which from 'which';
|
|
@@ -82,5 +81,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
82
81
|
}, "commandFn");
|
|
83
82
|
|
|
84
83
|
export { commandFn, commandSpec };
|
|
85
|
-
//# sourceMappingURL=chunk-
|
|
86
|
-
//# sourceMappingURL=chunk-
|
|
84
|
+
//# sourceMappingURL=chunk-IML4QZHB.js.map
|
|
85
|
+
//# sourceMappingURL=chunk-IML4QZHB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/run.command.ts"],"names":[],"mappings":"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","file":"chunk-IML4QZHB.js","sourcesContent":["import { execa, type ResultPromise } from 'execa';\nimport which from 'which';\nimport { define } from 'gunshi';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { checkForConfigErrors, checkForSchemaErrors } from '../helpers/error-checks';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { gracefulExit } from 'exit-hook';\n\n\nexport const commandSpec = define({\n name: 'run',\n description: 'Run a command with your environment variables injected',\n args: {\n // watch: {\n // type: 'boolean',\n // short: 'w',\n // description: 'Watch mode',\n // },\n },\n});\n\nlet commandProcess: ResultPromise | undefined;\nlet childCommandKilledFromRestart = false;\nconst isWatchModeRestart = false; // TODO: re-enable watch mode\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // if \"--\" is present, split the args into our command and the rest, which will be another external command\n const argv = process.argv.slice(2);\n let restCommandArgs: Array<string> = [];\n if (argv.includes('--')) {\n const doubleDashIndex = argv.indexOf('--');\n restCommandArgs = argv.slice(doubleDashIndex + 1);\n } else {\n throw new Error('No command to run! Your command should look like `varlock run -- <your-command>`');\n }\n const commandToRunAsArgs = restCommandArgs;\n const commandToRunStr = restCommandArgs.join(' ');\n\n const rawCommand = commandToRunAsArgs[0];\n const commandArgsOnly = commandToRunAsArgs.slice(1);\n const pathAwareCommand = which.sync(rawCommand, { nothrow: true });\n\n // const isWatchEnabled = ctx.values.watch;\n const isWatchEnabled = false;\n\n // console.log('running command', pathAwareCommand || rawCommand, commandArgsOnly);\n\n\n const envGraph = await loadVarlockEnvGraph();\n checkForSchemaErrors(envGraph);\n await envGraph.resolveEnvValues();\n checkForConfigErrors(envGraph);\n\n // will fail above if there are any errors\n\n const resolvedEnv = envGraph.getResolvedEnvObject();\n // console.log(resolvedEnv);\n\n // needs more thought here\n const fullInjectedEnv = {\n ...process.env,\n ...resolvedEnv,\n __VARLOCK_RUN: '1', // flag for a child process to detect it is runnign via `varlock run`\n __VARLOCK_ENV: JSON.stringify(envGraph.getSerializedGraph()),\n };\n\n commandProcess = execa(pathAwareCommand || rawCommand, commandArgsOnly, {\n stdio: 'inherit',\n env: fullInjectedEnv,\n });\n // console.log('PARENT PID = ', process.pid);\n // console.log('CHILD PID = ', commandProcess.pid);\n\n // if first run, we need to attach some extra exit handling\n if (!isWatchModeRestart) {\n // try to make sure we shut down cleanly and kill the child process\n process.on('exit', (_code: any, _signal: any) => {\n // if (childCommandKilledFromRestart) {\n // childCommandKilledFromRestart = false;\n // return;\n // }\n // console.log('exit!', code, signal);\n commandProcess?.kill(9);\n });\n\n ['SIGTERM', 'SIGINT'].forEach((signal) => {\n process.on(signal, () => {\n // console.log('SIGNAL = ', signal);\n commandProcess?.kill(9);\n gracefulExit(1);\n });\n });\n // TODO: handle other signals?\n }\n\n\n let exitCode: any; // TODO: fix this any\n try {\n const commandResult = await commandProcess;\n exitCode = commandResult.exitCode;\n } catch (error) {\n // console.log('child command error!', error);\n if ((error as any).signal === 'SIGINT' && childCommandKilledFromRestart) {\n // console.log('child command failed due to being killed form restart');\n childCommandKilledFromRestart = false;\n return;\n }\n\n // console.log('child command result error', error);\n if ((error as any).signal === 'SIGINT' || (error as any).signal === 'SIGKILL') {\n gracefulExit(1);\n } else {\n console.log((error as Error).message);\n console.log(`command [${commandToRunStr}] failed`);\n console.log('try running the same command without dmno');\n console.log('if you get a different result, dmno may be the problem...');\n // console.log(`Please report issue here: <${REPORT_ISSUE_LINK}>`);\n }\n exitCode = (error as any).exitCode || 1;\n }\n\n if (isWatchEnabled) {\n if (!childCommandKilledFromRestart) {\n if (exitCode === 0) {\n console.log('\\n✅ command completed successfully');\n } else {\n console.log(`\\n💥 command failed - exit code = ${exitCode}`);\n }\n }\n }\n\n if (!isWatchEnabled) {\n return gracefulExit(exitCode);\n } else {\n console.log('... watching for changes ...');\n }\n};\n"]}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { detectJsPackageManager, logLines, fmt,
|
|
1
|
+
import { detectJsPackageManager, logLines, fmt, installJsDependency } from './chunk-5EBVEGDW.js';
|
|
2
2
|
import { define } from './chunk-33ROL4J5.js';
|
|
3
|
-
import {
|
|
4
|
-
import { StaticValueResolver, DotEnvFileDataSource, gracefulExit, checkIsFileGitIgnored, ansis_default } from './chunk-ZW2T4C6A.js';
|
|
3
|
+
import { tryCatch, gracefulExit, checkIsFileGitIgnored, ansis_default, pathExists } from './chunk-MV5ZAKN7.js';
|
|
5
4
|
import { __commonJS, __name, __toESM } from './chunk-XN24GZXQ.js';
|
|
6
|
-
import
|
|
7
|
-
import
|
|
5
|
+
import path2 from 'path';
|
|
6
|
+
import fs3 from 'fs/promises';
|
|
8
7
|
import 'util';
|
|
9
8
|
import y2, { stdin, stdout } from 'process';
|
|
10
9
|
import O from 'readline';
|
|
@@ -940,55 +939,70 @@ function inferSchemaUpdates(file) {
|
|
|
940
939
|
}
|
|
941
940
|
}
|
|
942
941
|
__name(inferSchemaUpdates, "inferSchemaUpdates");
|
|
943
|
-
function ensureAllItemsExist(
|
|
942
|
+
function ensureAllItemsExist(schemaFile, otherFiles) {
|
|
944
943
|
const addedItemKeys = [];
|
|
945
|
-
for (const
|
|
946
|
-
const item
|
|
947
|
-
|
|
948
|
-
|
|
944
|
+
for (const otherFile of otherFiles) {
|
|
945
|
+
for (const item of otherFile.parsedFile.configItems) {
|
|
946
|
+
const itemInSchema = schemaFile.configItems.find((i) => i.key === item.key);
|
|
947
|
+
if (itemInSchema) continue;
|
|
949
948
|
if (addedItemKeys.length === 0) {
|
|
950
949
|
envSpecUpdater.injectFromStr(schemaFile, [
|
|
951
950
|
"",
|
|
952
951
|
"# items added to schema by `varlock init`",
|
|
953
|
-
"# that were missing in example, but detected in other env files",
|
|
952
|
+
"# that were missing in example, but detected in other .env files",
|
|
954
953
|
"# PLEASE REVIEW THESE!",
|
|
955
954
|
"# ---",
|
|
956
955
|
""
|
|
957
956
|
].join("\n"), { location: "end" });
|
|
958
957
|
}
|
|
959
|
-
addedItemKeys.push(
|
|
960
|
-
envSpecUpdater.injectFromStr(schemaFile,
|
|
961
|
-
const itemValue = item.
|
|
962
|
-
inferItemDecorators(schemaFile,
|
|
958
|
+
addedItemKeys.push(item.key);
|
|
959
|
+
envSpecUpdater.injectFromStr(schemaFile, `${item.key}=`);
|
|
960
|
+
const itemValue = item.value instanceof ParsedEnvSpecStaticValue && item.value.value?.toString() || "";
|
|
961
|
+
inferItemDecorators(schemaFile, item.key, String(itemValue));
|
|
963
962
|
}
|
|
964
963
|
}
|
|
965
964
|
}
|
|
966
965
|
__name(ensureAllItemsExist, "ensureAllItemsExist");
|
|
967
|
-
async function detectRedundantValues(
|
|
968
|
-
const schema = envGraph.schemaDataSource;
|
|
969
|
-
if (!schema) return {};
|
|
966
|
+
async function detectRedundantValues(schemaFile, otherFiles, opts = {}) {
|
|
970
967
|
const redundantItemsBySourcePath = {};
|
|
971
|
-
const schemaValues =
|
|
972
|
-
for (const
|
|
973
|
-
if (
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
redundantItemsBySourcePath[
|
|
980
|
-
redundantItemsBySourcePath[source.fullPath].push(key);
|
|
968
|
+
const schemaValues = schemaFile.toSimpleObj();
|
|
969
|
+
for (const otherFile of Object.values(otherFiles)) {
|
|
970
|
+
if (otherFile.fileName.startsWith(".env.schema") || otherFile.fileName.startsWith(".env.example") || otherFile.fileName.startsWith(".env.sample") || otherFile.fileName.startsWith(".env.default")) continue;
|
|
971
|
+
const otherFileValues = otherFile.parsedFile.toSimpleObj();
|
|
972
|
+
for (const itemKey in otherFileValues) {
|
|
973
|
+
if (!(itemKey in schemaValues)) continue;
|
|
974
|
+
if (otherFileValues[itemKey] !== schemaValues[itemKey]) continue;
|
|
975
|
+
redundantItemsBySourcePath[otherFile.fullPath] ||= [];
|
|
976
|
+
redundantItemsBySourcePath[otherFile.fullPath].push(itemKey);
|
|
981
977
|
if (opts.delete) {
|
|
982
|
-
envSpecUpdater.deleteItem(
|
|
978
|
+
envSpecUpdater.deleteItem(otherFile.parsedFile, itemKey);
|
|
983
979
|
}
|
|
984
980
|
}
|
|
985
981
|
if (opts.delete) {
|
|
986
|
-
await
|
|
982
|
+
await fs3.writeFile(otherFile.fullPath, otherFile.parsedFile.toString(), "utf8");
|
|
987
983
|
}
|
|
988
984
|
}
|
|
989
985
|
return redundantItemsBySourcePath;
|
|
990
986
|
}
|
|
991
987
|
__name(detectRedundantValues, "detectRedundantValues");
|
|
988
|
+
var SKIP_FILE_TYPES = [".md", ".d.ts"];
|
|
989
|
+
async function findEnvFiles(opts) {
|
|
990
|
+
const cwd = opts?.cwd || process.cwd();
|
|
991
|
+
const envFiles = [];
|
|
992
|
+
const filesWithinDir = await fs3.readdir(cwd);
|
|
993
|
+
for (const fileName of filesWithinDir) {
|
|
994
|
+
if (fileName === ".env" || fileName.startsWith(".env.")) {
|
|
995
|
+
let skip = false;
|
|
996
|
+
for (const fileType of SKIP_FILE_TYPES) {
|
|
997
|
+
if (fileName.endsWith(fileType)) skip = true;
|
|
998
|
+
}
|
|
999
|
+
if (skip) continue;
|
|
1000
|
+
envFiles.push(path2.join(cwd, fileName));
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
return envFiles;
|
|
1004
|
+
}
|
|
1005
|
+
__name(findEnvFiles, "findEnvFiles");
|
|
992
1006
|
|
|
993
1007
|
// src/cli/commands/init.command.ts
|
|
994
1008
|
var commandSpec = define({
|
|
@@ -999,10 +1013,28 @@ var commandSpec = define({
|
|
|
999
1013
|
var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
1000
1014
|
const jsPackageManager = detectJsPackageManager();
|
|
1001
1015
|
console.log("\u{1F9D9} Hello and welcome to Varlock \u{1F512}\u{1F525}\u2728");
|
|
1002
|
-
|
|
1003
|
-
const
|
|
1004
|
-
|
|
1005
|
-
|
|
1016
|
+
const envFilePaths = await findEnvFiles();
|
|
1017
|
+
const parsedEnvFiles = {};
|
|
1018
|
+
for (const filePath of envFilePaths) {
|
|
1019
|
+
const fileContents = await fs3.readFile(filePath, "utf-8");
|
|
1020
|
+
const fileName = path2.basename(filePath);
|
|
1021
|
+
const parsedFile = await tryCatch(async () => parseEnvSpecDotEnvFile(fileContents), () => {
|
|
1022
|
+
logLines([
|
|
1023
|
+
"",
|
|
1024
|
+
`Unable to parse ${fmt.filePath(filePath)}`,
|
|
1025
|
+
"This file will be skipped."
|
|
1026
|
+
]);
|
|
1027
|
+
});
|
|
1028
|
+
if (!parsedFile) {
|
|
1029
|
+
continue;
|
|
1030
|
+
}
|
|
1031
|
+
parsedEnvFiles[fileName] = {
|
|
1032
|
+
fileName,
|
|
1033
|
+
fullPath: filePath,
|
|
1034
|
+
parsedFile
|
|
1035
|
+
};
|
|
1036
|
+
}
|
|
1037
|
+
const existingSchemaFile = parsedEnvFiles[".env.schema"];
|
|
1006
1038
|
if (existingSchemaFile) {
|
|
1007
1039
|
logLines([
|
|
1008
1040
|
`It looks like you already have a ${fmt.fileName(".env.schema")} file \u{1F389}`,
|
|
@@ -1011,45 +1043,45 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
1011
1043
|
"See more docs at https://varlock.dev/guides/schema"
|
|
1012
1044
|
]);
|
|
1013
1045
|
} else {
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
return dataSource instanceof DotEnvFileDataSource && dataSource.type === "example";
|
|
1046
|
+
const allExampleFileNames = Object.keys(parsedEnvFiles).filter((fileName) => {
|
|
1047
|
+
return fileName.startsWith(".env.example") || fileName.startsWith(".env.sample");
|
|
1017
1048
|
});
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1049
|
+
let exampleFileToConvert;
|
|
1050
|
+
if (allExampleFileNames.length === 1) {
|
|
1051
|
+
exampleFileToConvert = parsedEnvFiles[allExampleFileNames[0]];
|
|
1052
|
+
} else if (allExampleFileNames.length > 1) {
|
|
1021
1053
|
console.log("");
|
|
1022
1054
|
const selectedExample = await ve({
|
|
1023
1055
|
message: `We detected more than one example .env file. Which one should we use to create your new ${fmt.fileName(".env.schema")}?`,
|
|
1024
|
-
options:
|
|
1025
|
-
label:
|
|
1026
|
-
value:
|
|
1056
|
+
options: allExampleFileNames.map((fileName) => ({
|
|
1057
|
+
label: fileName,
|
|
1058
|
+
value: parsedEnvFiles[fileName]
|
|
1027
1059
|
}))
|
|
1028
1060
|
});
|
|
1029
1061
|
if (pD(selectedExample)) return gracefulExit(0);
|
|
1030
1062
|
exampleFileToConvert = selectedExample;
|
|
1031
1063
|
}
|
|
1032
|
-
const
|
|
1033
|
-
if (!
|
|
1034
|
-
envSpecUpdater.ensureHeader(
|
|
1064
|
+
const parsedEnvSchemaFile = exampleFileToConvert?.parsedFile || parseEnvSpecDotEnvFile("");
|
|
1065
|
+
if (!parsedEnvSchemaFile) throw new Error("expected parsed .env example file");
|
|
1066
|
+
envSpecUpdater.ensureHeader(parsedEnvSchemaFile, [
|
|
1035
1067
|
"This env file uses @env-spec - see https://varlock.dev/env-spec for more info",
|
|
1036
1068
|
""
|
|
1037
1069
|
// TODO: add env spec version? real links?
|
|
1038
1070
|
].join("\n"));
|
|
1039
|
-
envSpecUpdater.setRootDecorator(
|
|
1040
|
-
envSpecUpdater.setRootDecorator(
|
|
1041
|
-
envSpecUpdater.setRootDecorator(
|
|
1042
|
-
envSpecUpdater.injectFromStr(
|
|
1071
|
+
envSpecUpdater.setRootDecorator(parsedEnvSchemaFile, "defaultRequired", "false", { explicitTrue: true });
|
|
1072
|
+
envSpecUpdater.setRootDecorator(parsedEnvSchemaFile, "defaultSensitive", "false", { explicitTrue: true });
|
|
1073
|
+
envSpecUpdater.setRootDecorator(parsedEnvSchemaFile, "generateTypes", "lang=ts, path=env.d.ts", { bareFnArgs: true });
|
|
1074
|
+
envSpecUpdater.injectFromStr(parsedEnvSchemaFile, [
|
|
1043
1075
|
"",
|
|
1044
1076
|
"# example env variable injected by `varlock init` \u26A0\uFE0F DELETE THIS ITEM! \u26A0\uFE0F",
|
|
1045
1077
|
'# @required @sensitive @example="example value"',
|
|
1046
1078
|
'EXAMPLE_ITEM="delete me!"',
|
|
1047
1079
|
""
|
|
1048
1080
|
].join("\n"), { location: "after_header" });
|
|
1049
|
-
inferSchemaUpdates(
|
|
1050
|
-
ensureAllItemsExist(
|
|
1051
|
-
const schemaFilePath =
|
|
1052
|
-
await
|
|
1081
|
+
inferSchemaUpdates(parsedEnvSchemaFile);
|
|
1082
|
+
ensureAllItemsExist(parsedEnvSchemaFile, Object.values(parsedEnvFiles));
|
|
1083
|
+
const schemaFilePath = path2.join(process.cwd(), ".env.schema");
|
|
1084
|
+
await fs3.writeFile(schemaFilePath, parsedEnvSchemaFile.toString());
|
|
1053
1085
|
if (exampleFileToConvert) {
|
|
1054
1086
|
logLines([
|
|
1055
1087
|
"",
|
|
@@ -1065,7 +1097,7 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
1065
1097
|
}
|
|
1066
1098
|
if (await checkIsFileGitIgnored(schemaFilePath)) {
|
|
1067
1099
|
logLines([ansis_default.dim(`(and updated ${fmt.fileName(".gitignore")} to ensure it will be tracked by git)`)]);
|
|
1068
|
-
await
|
|
1100
|
+
await fs3.appendFile(".gitignore", "\n!.env.schema");
|
|
1069
1101
|
}
|
|
1070
1102
|
logLines([
|
|
1071
1103
|
"",
|
|
@@ -1084,8 +1116,8 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
1084
1116
|
message: `Have you reviewed and updated your new ${fmt.fileName(".env.schema")} file?`
|
|
1085
1117
|
});
|
|
1086
1118
|
if (pD(confirmReviewed)) return gracefulExit(0);
|
|
1087
|
-
|
|
1088
|
-
if (
|
|
1119
|
+
const reloadedSchemaFile = await parseEnvSpecDotEnvFile(await fs3.readFile(schemaFilePath, "utf-8"));
|
|
1120
|
+
if (reloadedSchemaFile.configItems.find((i) => i.key === "EXAMPLE_ITEM")) {
|
|
1089
1121
|
logLines([
|
|
1090
1122
|
"",
|
|
1091
1123
|
ansis_default.bold(`\u{1F6A8} Really? ${ansis_default.red("You didn't remove the EXAMPLE_ITEM!")}`),
|
|
@@ -1098,20 +1130,20 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
1098
1130
|
});
|
|
1099
1131
|
if (pD(confirmDeleteExample)) return gracefulExit(0);
|
|
1100
1132
|
if (confirmDeleteExample) {
|
|
1101
|
-
await
|
|
1133
|
+
await fs3.unlink(exampleFileToConvert.fullPath);
|
|
1102
1134
|
}
|
|
1103
1135
|
}
|
|
1104
|
-
const defaultsFile =
|
|
1105
|
-
return
|
|
1136
|
+
const defaultsFile = Object.values(parsedEnvFiles).find((f) => {
|
|
1137
|
+
return f.fileName.startsWith(".env.default");
|
|
1106
1138
|
});
|
|
1107
1139
|
if (defaultsFile) {
|
|
1108
1140
|
logLines([
|
|
1109
1141
|
"",
|
|
1110
1142
|
`\u{1F6A7} We detected a ${fmt.fileName(defaultsFile.fileName)} file in your project`,
|
|
1111
|
-
`You should migrate these default values into ${fmt.fileName(".env.schema")} and delete
|
|
1143
|
+
`You should migrate these default values into ${fmt.fileName(".env.schema")} and delete it.`
|
|
1112
1144
|
]);
|
|
1113
1145
|
}
|
|
1114
|
-
const redundantInfo = await detectRedundantValues(
|
|
1146
|
+
const redundantInfo = await detectRedundantValues(parsedEnvSchemaFile, parsedEnvFiles);
|
|
1115
1147
|
if (Object.keys(redundantInfo).length > 0) {
|
|
1116
1148
|
logLines([
|
|
1117
1149
|
"",
|
|
@@ -1126,7 +1158,7 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
1126
1158
|
});
|
|
1127
1159
|
if (pD(confirmDeleteRedundant)) return gracefulExit(0);
|
|
1128
1160
|
if (confirmDeleteRedundant) {
|
|
1129
|
-
await detectRedundantValues(
|
|
1161
|
+
await detectRedundantValues(parsedEnvSchemaFile, parsedEnvFiles, { delete: true });
|
|
1130
1162
|
}
|
|
1131
1163
|
}
|
|
1132
1164
|
logLines([
|
|
@@ -1140,7 +1172,7 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
1140
1172
|
""
|
|
1141
1173
|
]);
|
|
1142
1174
|
}
|
|
1143
|
-
if (jsPackageManager && await pathExists(
|
|
1175
|
+
if (jsPackageManager && await pathExists(path2.join(process.cwd(), "package.json"))) {
|
|
1144
1176
|
const installResult = installJsDependency({
|
|
1145
1177
|
packageManager: jsPackageManager.name,
|
|
1146
1178
|
packageName: "varlock"
|
|
@@ -1155,5 +1187,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
1155
1187
|
}, "commandFn");
|
|
1156
1188
|
|
|
1157
1189
|
export { commandFn, commandSpec };
|
|
1158
|
-
//# sourceMappingURL=chunk-
|
|
1159
|
-
//# sourceMappingURL=chunk-
|
|
1190
|
+
//# sourceMappingURL=chunk-LXJMZMID.js.map
|
|
1191
|
+
//# sourceMappingURL=chunk-LXJMZMID.js.map
|