New:Socket for Asana Is Now Available.Learn more
Get Started

sandbox

Package Overview
Dependencies
Maintainers
4
Versions
107
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sandbox - npm Package Compare versions

Comparing version
4.1.0-beta.0
to
4.1.0
dist/app-6Yn0z5a0.mjs

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

+1
-1

@@ -1,2 +0,2 @@

import { r as require_cjs, t as app } from "./app-hoJDrpqk.mjs";
import { i as require_cjs, t as app } from "./app-6Yn0z5a0.mjs";
import "./string-width-D78SVDLD.mjs";

@@ -3,0 +3,0 @@ import "./cli-cursor-Dab4mDU2.mjs";

import { a as __toCommonJS, i as __require, s as __toESM, t as __commonJS } from "./chunk-btbCw1m3.mjs";
import { a as source_exports, i as init_source, n as printTopLevelError, r as require_cjs, t as app } from "./app-hoJDrpqk.mjs";
import { a as init_source, i as require_cjs, n as printTopLevelError, o as source_default, r as StyledError, s as source_exports, t as app } from "./app-6Yn0z5a0.mjs";
import "./string-width-D78SVDLD.mjs";

@@ -627,2 +627,33 @@ import "./cli-cursor-Dab4mDU2.mjs";

//#endregion
//#region src/util/steer-sh.ts
var import_dotenv_flow = /* @__PURE__ */ __toESM(require_dotenv_flow());
var import_cjs = require_cjs();
init_source();
/**
* `sandbox sh claude` is the most natural way to ask for "run this command in
* a sandbox", but `sh` takes no command. Declaring a catch-all positional on
* `sh` would advertise a command argument in its help and generated docs
* (review feedback on #295), so the steer runs here, before the parser's
* generic "Unknown arguments" rejection.
*
* The check only fires when the FIRST token after `sh` is a non-flag: that
* token can never be an option value, so a valid invocation like
* `sandbox sh --name my-box` can never be misread. Once it fires, the whole
* tail is treated as the intended command (including its own flags), so
* `sandbox sh example-command -t 0` suggests `example-command -t 0`, not a
* truncated version of it.
*/
function steerShCommand(args) {
if (args[0] !== "sh") return;
const rest = args.slice(1);
if (rest.length === 0 || rest[0].startsWith("-")) return;
const example = rest.join(" ");
throw new StyledError([
"`sh` starts a plain shell and doesn't take a command.",
`${source_default.bold("hint:")} to run ${source_default.cyan(example)} interactively in a new sandbox:`,
`╰▶ sandbox run -i ${example}`
].join("\n"));
}
//#endregion
//#region ../../node_modules/.pnpm/cmd-ts@0.15.0/node_modules/cmd-ts/dist/cjs/batteries/vercel-formatter.js

@@ -768,4 +799,2 @@ var require_vercel_formatter = /* @__PURE__ */ __commonJS({ "../../node_modules/.pnpm/cmd-ts@0.15.0/node_modules/cmd-ts/dist/cjs/batteries/vercel-formatter.js": ((exports) => {

//#region src/sandbox.ts
var import_cjs = require_cjs();
var import_dotenv_flow = /* @__PURE__ */ __toESM(require_dotenv_flow());
var import_vercel_formatter = require_vercel_formatter();

@@ -776,2 +805,3 @@ import_dotenv_flow.default.config({ silent: true });

try {
steerShCommand(process.argv.slice(2));
await (0, import_cjs.run)(app(), process.argv.slice(2));

@@ -778,0 +808,0 @@ } catch (e) {

@@ -1,1 +0,1 @@

{"version":3,"file":"sandbox.mjs","names":["fs","version","parse","debug","path","config","dotenv","path","config","path","dotenv","vercelFormatter"],"sources":["../../../node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv/package.json","../../../node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv/lib/main.js","../../../node_modules/.pnpm/dotenv-flow@4.1.0/node_modules/dotenv-flow/package.json","../../../node_modules/.pnpm/dotenv-flow@4.1.0/node_modules/dotenv-flow/lib/dotenv-flow.js","../../../node_modules/.pnpm/cmd-ts@0.15.0/node_modules/cmd-ts/dist/cjs/batteries/vercel-formatter.js","../src/sandbox.ts"],"sourcesContent":["{\n \"name\": \"dotenv\",\n \"version\": \"16.5.0\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n const vaultPath = _vaultPath(options)\n\n // Parse .env.vault\n const result = DotenvModule.configDotenv({ path: vaultPath })\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = Boolean(options && options.debug)\n if (debug) {\n _debug('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n const debug = Boolean(options && options.debug)\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsedAll, options)\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n }\n }\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","{\n \"name\": \"dotenv-flow\",\n \"version\": \"4.1.0\",\n \"description\": \"Loads environment variables from `.env.[development|test|production][.local]` files\",\n \"keywords\": [\n \"dotenv\",\n \"node_env\",\n \"development\",\n \"test\",\n \"production\",\n \"local\",\n \"env\",\n \"environment\",\n \"variables\"\n ],\n \"homepage\": \"https://github.com/kerimdzhanov/dotenv-flow#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/kerimdzhanov/dotenv-flow.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/kerimdzhanov/dotenv-flow/issues\"\n },\n \"main\": \"lib/dotenv-flow.js\",\n \"types\": \"lib/dotenv-flow.d.ts\",\n \"exports\": {\n \".\": \"./lib/dotenv-flow.js\",\n \"./config\": {\n \"require\": \"./config.js\",\n \"node\": \"./config.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"lib/cli-options.js\",\n \"lib/dotenv-flow.d.ts\",\n \"lib/env-options.js\",\n \"config.d.ts\",\n \"config.js\"\n ],\n \"dependencies\": {\n \"dotenv\": \"^16.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^20.6.2\",\n \"chai\": \"^4.3.7\",\n \"conventional-changelog-cli\": \"^2.0.35\",\n \"mocha\": \"^10.2.0\",\n \"sinon\": \"^15.2.0\",\n \"sinon-chai\": \"^3.7.0\",\n \"tmp\": \"^0.2.1\",\n \"typescript\": \"^5.2.2\"\n },\n \"engines\": {\n \"node\": \">= 12.0.0\"\n },\n \"scripts\": {\n \"test\": \"yarn run test:unit && yarn run test:integration && yarn run test:types\",\n \"test:unit\": \"mocha -r mocha.conf.js test/unit/*.spec.js\",\n \"test:integration\": \"mocha -r mocha.conf.js test/integration/*.spec.{m,}js\",\n \"test:types\": \"tsc\",\n \"changelog\": \"conventional-changelog -p angular -i CHANGELOG.md -s\"\n },\n \"author\": \"Dan Kerimdzhanov\",\n \"license\": \"MIT\"\n}\n","'use strict';\n\nconst fs = require('fs');\nconst p = require('path');\nconst dotenv = require('dotenv');\nconst {version} = require('../package.json');\n\nconst DEFAULT_PATTERN = '.env[.node_env][.local]';\n\nconst LOCAL_PLACEHOLDER_REGEX = /\\[(\\W*\\blocal\\b\\W*)]/g;\nconst NODE_ENV_PLACEHOLDER_REGEX = /\\[(\\W*\\b)node_env(\\b\\W*)]/g;\n\n/**\n * Compose a filename from a given `patten`.\n *\n * @param {string} pattern\n * @param {object} [options]\n * @param {boolean} [options.local]\n * @param {string} [options.node_env]\n * @return {string} filename\n */\nfunction composeFilename(pattern, options) {\n let filename = pattern;\n\n filename = filename.replace(\n LOCAL_PLACEHOLDER_REGEX,\n (options && options.local) ? '$1' : ''\n );\n\n filename = filename.replace(\n NODE_ENV_PLACEHOLDER_REGEX,\n (options && options.node_env) ? `$1${options.node_env}$2` : ''\n );\n\n return filename;\n}\n\n/**\n * Returns a list of existing `.env*` filenames depending on the given `options`.\n *\n * The resulting list is ordered by the env files'\n * variables overwriting priority from lowest to highest.\n *\n * This can also be referenced as \"env files' environment cascade\"\n * or \"order of ascending priority.\"\n *\n * ⚠️ Note that the `.env.local` file is not listed for \"test\" environment,\n * since normally you expect tests to produce the same results for everyone.\n *\n * @param {object} [options] - `.env*` files listing options\n * @param {string} [options.node_env] - node environment (development/test/production/etc.)\n * @param {string} [options.path] - path to the working directory (default: `process.cwd()`)\n * @param {string} [options.pattern] - `.env*` files' naming convention pattern\n * (default: \".env[.node_env][.local]\")\n * @param {boolean} [options.debug] - turn on debug messages\n * @return {string[]}\n */\nfunction listFiles(options = {}) {\n options.debug && debug('listing effective `.env*` files…');\n\n const {\n node_env,\n path = process.cwd(),\n pattern = DEFAULT_PATTERN,\n } = options;\n\n const hasLocalPlaceholder = LOCAL_PLACEHOLDER_REGEX.test(pattern);\n\n const filenames = {};\n\n if (pattern === DEFAULT_PATTERN) {\n filenames['.env.defaults'] = '.env.defaults'; // for seamless transition from \".env + .env.defaults\"\n }\n\n filenames['.env'] = composeFilename(pattern);\n\n if (hasLocalPlaceholder) {\n const envlocal = composeFilename(pattern, { local: true });\n\n if (node_env !== 'test') {\n filenames['.env.local'] = envlocal;\n }\n else if (options.debug && fs.existsSync(p.resolve(path, envlocal))) {\n debug(\n '[!] note that `%s` is being skipped for \"test\" environment',\n envlocal\n );\n }\n }\n\n if (node_env && NODE_ENV_PLACEHOLDER_REGEX.test(pattern)) {\n filenames['.env.node_env'] = composeFilename(pattern, { node_env });\n\n if (hasLocalPlaceholder) {\n filenames['.env.node_env.local'] = composeFilename(pattern, { node_env, local: true });\n }\n }\n\n return [\n '.env.defaults',\n '.env',\n '.env.local',\n '.env.node_env',\n '.env.node_env.local'\n ]\n .reduce((list, basename) => {\n if (!filenames[basename]) {\n return list;\n }\n\n const filename = p.resolve(path, filenames[basename]);\n if (fs.existsSync(filename)) {\n options.debug && debug('>> %s', filename);\n list.push(filename);\n }\n\n return list;\n }, []);\n}\n\n/**\n * Parses a given file or a list of files.\n *\n * When a list of filenames is given, the files will be parsed and merged in the same order as given.\n *\n * @param {string|string[]} filenames - filename or a list of filenames to parse and merge\n * @param {{ encoding?: string, debug?: boolean }} [options] - parse options\n * @return {Object<string, string>} the resulting map of `{ env_var: value }` as an object\n */\nfunction parse(filenames, options = {}) {\n if (typeof filenames === 'string') {\n options.debug && debug('parsing \"%s\"…', filenames);\n\n const parsed = dotenv.parse(\n fs.readFileSync(\n filenames,\n options.encoding && { encoding: options.encoding }\n )\n );\n\n if (options.debug) {\n Object.keys(parsed)\n .forEach(varname => debug('>> %s', varname));\n }\n\n return parsed;\n }\n\n return filenames.reduce((result, filename) => {\n const parsed = parse(filename, options);\n\n if (options.debug) {\n Object.keys(parsed)\n .filter(varname => result.hasOwnProperty(varname))\n .forEach(varname => debug('`%s` is being overwritten by merge from \"%s\"', varname, filename));\n }\n\n return Object.assign(result, parsed);\n }, {});\n}\n\n/**\n * Parses variables defined in given file(s) and assigns them to `process.env`.\n *\n * Variables that are already defined in `process.env` will not be overwritten,\n * thus giving a higher priority to environment variables predefined by the shell.\n *\n * If the loading is successful, an object with `parsed` property is returned.\n * The `parsed` property contains parsed variables' `key => value` pairs merged in order using\n * the \"overwrite merge\" strategy.\n *\n * If parsing fails for any of the given files, `process.env` is being left untouched,\n * and an object with `error` property is returned.\n * The `error` property, if present, references to the occurred error.\n *\n * @param {string|string[]} filenames - filename or a list of filenames to parse and merge\n * @param {object} [options] - file loading options\n * @param {string} [options.encoding=\"utf8\"] - encoding of `.env*` files\n * @param {boolean} [options.debug=false] - turn on debug messages\n * @param {boolean} [options.silent=false] - suppress console errors and warnings\n * @return {{ error: Error } | { parsed: Object<string, string> }}\n */\nfunction load(filenames, options = {}) {\n try {\n const parsed = parse(filenames, {\n encoding: options.encoding,\n debug: options.debug\n });\n\n options.debug && debug('safe-merging parsed environment variables into `process.env`…');\n\n for (const varname of Object.keys(parsed)) {\n if (!process.env.hasOwnProperty(varname)) {\n options.debug && debug('>> process.env.%s', varname);\n process.env[varname] = parsed[varname];\n }\n else if (options.debug && process.env[varname] !== parsed[varname]) {\n debug('environment variable `%s` is predefined and not being overwritten', varname);\n }\n }\n\n return { parsed };\n }\n catch (error) {\n return failure(error, options);\n }\n}\n\n/**\n * Unload variables defined in a given file(s) from `process.env`.\n *\n * This function can gracefully resolve the following issue:\n *\n * In some cases, the original \"dotenv\" library can be used by one of the dependent npm modules.\n * It causes calling the original `dotenv.config()` that loads the `.env` file from your project before you can call `dotenv-flow.config()`.\n * Such cases break `.env*` files priority because the previously loaded environment variables are treated as shell-defined thus having a higher priority.\n *\n * Unloading the previously loaded `.env` file can be activated when using the `dotenv-flow.config()` with the `purge_dotenv` option set to `true`.\n *\n * @param {string|string[]} filenames - filename or a list of filenames to unload\n * @param {object} [options] - `fs.readFileSync` options\n */\nfunction unload(filenames, options = {}) {\n const parsed = parse(filenames, options);\n\n Object.keys(parsed).forEach((key) => {\n if (process.env[key] === parsed[key]) {\n delete process.env[key];\n }\n });\n}\n\n/**\n * Returns effective (computed) `node_env`.\n *\n * @param {object} [options]\n * @param {string} [options.node_env]\n * @param {string} [options.default_node_env]\n * @param {boolean} [options.debug]\n * @return {string|undefined} node_env\n */\nfunction getEffectiveNodeEnv(options = {}) {\n if (options.node_env) {\n options.debug && debug(\n `operating in \"${options.node_env}\" environment (set by \\`options.node_env\\`)`\n );\n return options.node_env;\n }\n\n if (process.env.NODE_ENV) {\n options.debug && debug(\n `operating in \"${process.env.NODE_ENV}\" environment (as per \\`process.env.NODE_ENV\\`)`\n );\n return process.env.NODE_ENV;\n }\n\n if (options.default_node_env) {\n options.debug && debug(\n `operating in \"${options.default_node_env}\" environment (taken from \\`options.default_node_env\\`)`\n );\n return options.default_node_env;\n }\n\n options.debug && debug(\n 'operating in \"no environment\" mode (no environment-related options are set)'\n );\n return undefined;\n}\n\nconst CONFIG_OPTION_KEYS = [\n 'node_env',\n 'default_node_env',\n 'path',\n 'pattern',\n 'files',\n 'encoding',\n 'purge_dotenv',\n 'silent'\n];\n\n/**\n * \"dotenv-flow\" initialization function (API entry point).\n *\n * Allows configuring dotenv-flow programmatically.\n *\n * @param {object} [options] - configuration options\n * @param {string} [options.node_env=process.env.NODE_ENV] - node environment (development/test/production/etc.)\n * @param {string} [options.default_node_env] - the default node environment\n * @param {string} [options.path=process.cwd()] - path to `.env*` files directory\n * @param {string} [options.pattern=\".env[.node_env][.local]\"] - `.env*` files' naming convention pattern\n * @param {string[]} [options.files] - an explicit list of `.env*` files to load (note that `options.[default_]node_env` and `options.pattern` are ignored in this case)\n * @param {string} [options.encoding=\"utf8\"] - encoding of `.env*` files\n * @param {boolean} [options.purge_dotenv=false] - perform the `.env` file {@link unload}\n * @param {boolean} [options.debug=false] - turn on detailed logging to help debug why certain variables are not being set as you expect\n * @param {boolean} [options.silent=false] - suppress all kinds of warnings including \".env*\" files' loading errors\n * @return {{ parsed?: object, error?: Error }} with a `parsed` key containing the loaded content or an `error` key with an error that is occurred\n */\nfunction config(options = {}) {\n if (options.debug) {\n debug('initializing…');\n\n CONFIG_OPTION_KEYS\n .filter(key => key in options)\n .forEach(key => debug(`| options.${key} =`, options[key]));\n }\n\n const {\n path = process.cwd(),\n pattern = DEFAULT_PATTERN\n } = options;\n\n if (options.purge_dotenv) {\n options.debug && debug(\n '`options.purge_dotenv` is enabled, unloading potentially pre-loaded `.env`…'\n );\n\n const dotenvFile = p.resolve(path, '.env');\n try {\n fs.existsSync(dotenvFile) && unload(dotenvFile, { encoding: options.encoding });\n }\n catch (error) {\n !options.silent && warn('unloading failed: ', error);\n }\n }\n\n try {\n let filenames;\n\n if (options.files) {\n options.debug && debug(\n 'using explicit list of `.env*` files: %s…',\n options.files.join(', ')\n );\n\n filenames = options.files\n .reduce((list, basename) => {\n const filename = p.resolve(path, basename);\n\n if (fs.existsSync(filename)) {\n list.push(filename);\n }\n else if (options.debug) {\n debug('>> %s does not exist, skipping…', filename);\n }\n\n return list;\n }, []);\n }\n else {\n const node_env = getEffectiveNodeEnv(options);\n\n filenames = listFiles({ node_env, path, pattern, debug: options.debug });\n\n if (filenames.length === 0) {\n const _pattern = node_env\n ? pattern.replace(NODE_ENV_PLACEHOLDER_REGEX, `[$1${node_env}$2]`)\n : pattern;\n\n return failure(\n new Error(`no \".env*\" files matching pattern \"${_pattern}\" in \"${path}\" dir`),\n options\n );\n }\n }\n\n const result = load(filenames, {\n encoding: options.encoding,\n debug: options.debug,\n silent: options.silent\n });\n\n options.debug && debug('initialization completed.');\n\n return result;\n }\n catch (error) {\n return failure(error, options);\n }\n}\n\nfunction failure(error, options) {\n if (!options.silent) {\n warn(`\".env*\" files loading failed: ${error.message || error}`);\n }\n\n return { error };\n}\n\nfunction warn(message, error) {\n if (error) {\n message += ': %s';\n }\n\n console.warn(`[dotenv-flow@${version}]: ${message}`, error);\n}\n\nfunction debug(message, ...values) {\n console.debug(`[dotenv-flow@${version}]: ${message}`, ...values);\n}\n\nmodule.exports = {\n DEFAULT_PATTERN,\n listFiles,\n parse,\n load,\n unload,\n config\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.vercelFormatter = void 0;\nexports.createVercelFormatter = createVercelFormatter;\nconst chalk_1 = __importDefault(require(\"chalk\"));\n/**\n * Extract argument hints from help topics.\n * Returns a string like \"[cmd]\" or \"[src] [dst]\" based on positional arguments.\n */\nfunction getArgHint(helpTopics) {\n return helpTopics\n .filter((t) => t.category === \"arguments\")\n .map((t) => t.usage)\n .join(\" \");\n}\n/**\n * Format command name with aliases in \"alias | name\" style.\n * Prefers shorter alias first for display.\n */\nfunction formatCommandName(name, aliases) {\n if (!(aliases === null || aliases === void 0 ? void 0 : aliases.length)) {\n return name;\n }\n // Sort aliases by length to prefer shorter ones first\n const sortedAliases = [...aliases].sort((a, b) => a.length - b.length);\n return `${sortedAliases[0]} | ${name}`;\n}\n/**\n * Create a Vercel-style help formatter.\n *\n * This formatter produces output similar to the Vercel CLI with:\n * - A header with CLI name and version\n * - Logo symbol before the command name\n * - Column-aligned commands with aliases shown as \"short | long\"\n * - Argument hints derived from positional arguments\n * - Examples section with highlighted commands\n *\n * @example\n * ```ts\n * import { setDefaultHelpFormatter } from \"cmd-ts\";\n * import { createVercelFormatter } from \"cmd-ts/batteries/vercelFormatter\";\n *\n * setDefaultHelpFormatter(createVercelFormatter({\n * cliName: \"Vercel Sandbox CLI\",\n * logo: \"▲\",\n * }));\n * ```\n */\nfunction createVercelFormatter(config = {}) {\n const { cliName, logo = \"▲\" } = config;\n return {\n formatCommand(data, _context) {\n var _a;\n const lines = [];\n const displayName = cliName !== null && cliName !== void 0 ? cliName : data.name;\n let header = displayName;\n if (data.version) {\n header += ` ${data.version}`;\n }\n lines.push(chalk_1.default.grey(header));\n // Command usage line\n lines.push(\"\");\n const path = data.path.length > 0 ? data.path.join(\" \") : data.name;\n lines.push(`${logo} ${chalk_1.default.bold(path)} [options]`);\n // Description\n if (data.description) {\n lines.push(\"\");\n lines.push(chalk_1.default.dim(data.description));\n }\n // Group help topics by category\n const byCategory = new Map();\n for (const topic of data.helpTopics) {\n const existing = (_a = byCategory.get(topic.category)) !== null && _a !== void 0 ? _a : [];\n existing.push(topic);\n byCategory.set(topic.category, existing);\n }\n // Render each category\n for (const [category, topics] of byCategory) {\n lines.push(\"\");\n lines.push(chalk_1.default.dim(`${capitalize(category)}:`));\n lines.push(\"\");\n // Calculate max width for alignment\n const maxUsageWidth = Math.max(...topics.map((t) => t.usage.length));\n for (const topic of topics) {\n const defaults = topic.defaults.length > 0\n ? chalk_1.default.dim(` [${topic.defaults.join(\", \")}]`)\n : \"\";\n lines.push(` ${topic.usage.padEnd(maxUsageWidth + 2)}${chalk_1.default.dim(topic.description)}${defaults}`);\n }\n }\n // Examples\n if (data.examples && data.examples.length > 0) {\n lines.push(\"\");\n lines.push(chalk_1.default.dim(\"Examples:\"));\n for (const example of data.examples) {\n lines.push(\"\");\n lines.push(`${chalk_1.default.gray(\"–\")} ${example.description}`);\n lines.push(\"\");\n lines.push(chalk_1.default.cyan(` $ ${example.command}`));\n }\n }\n lines.push(\"\");\n return lines.join(\"\\n\");\n },\n formatSubcommands(data, _context) {\n var _a;\n const lines = [];\n const path = data.path.length > 0 ? data.path.join(\" \") : data.name;\n const displayName = cliName !== null && cliName !== void 0 ? cliName : path;\n // Header\n if (data.version) {\n lines.push(chalk_1.default.grey(`${displayName} ${data.version}`));\n }\n else {\n lines.push(chalk_1.default.grey(displayName));\n }\n // Command usage line\n lines.push(\"\");\n lines.push(`${logo} ${chalk_1.default.bold(path)} [options] <command>`);\n // Help hint\n lines.push(\"\");\n lines.push(chalk_1.default.dim(`For command help, run \\`${path} <command> --help\\``));\n // Commands section\n lines.push(\"\");\n lines.push(chalk_1.default.dim(\"Commands:\"));\n lines.push(\"\");\n // Calculate column widths\n const commandNames = data.commands.map((cmd) => formatCommandName(cmd.name, cmd.aliases));\n const maxNameWidth = Math.max(...commandNames.map((n) => n.length));\n const argHints = data.commands.map((cmd) => getArgHint(cmd.helpTopics));\n const maxArgWidth = Math.max(...argHints.map((a) => a.length), 0);\n // Render commands\n for (let i = 0; i < data.commands.length; i++) {\n const cmd = data.commands[i];\n const displayCommandName = commandNames[i];\n const argHint = argHints[i];\n lines.push(` ${displayCommandName.padEnd(maxNameWidth + 2)}${chalk_1.default.dim(argHint.padEnd(maxArgWidth + 2))}${chalk_1.default.dim((_a = cmd.description) !== null && _a !== void 0 ? _a : \"\")}`);\n }\n // Examples\n if (data.examples && data.examples.length > 0) {\n lines.push(\"\");\n lines.push(chalk_1.default.dim(\"Examples:\"));\n for (const example of data.examples) {\n lines.push(\"\");\n lines.push(`${chalk_1.default.gray(\"–\")} ${example.description}`);\n lines.push(\"\");\n lines.push(chalk_1.default.cyan(` $ ${example.command}`));\n }\n }\n lines.push(\"\");\n return lines.join(\"\\n\");\n },\n };\n}\nfunction capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n/**\n * A pre-configured Vercel-style formatter with default settings.\n * Uses \"▲\" as the logo and derives the CLI name from the command name.\n */\nexports.vercelFormatter = createVercelFormatter();\n//# sourceMappingURL=vercel-formatter.js.map","import { run, setDefaultHelpFormatter } from \"cmd-ts\";\nimport { app } from \"./app\";\nimport dotenv from \"dotenv-flow\";\nimport { printTopLevelError } from \"./util/format-error\";\nimport { vercelFormatter } from \"cmd-ts/batteries/vercel-formatter\";\n\ndotenv.config({\n silent: true,\n});\n\nasync function main() {\n setDefaultHelpFormatter(vercelFormatter);\n\n try {\n await run(app(), process.argv.slice(2));\n } catch (e) {\n await printTopLevelError(e);\n process.exit(1);\n }\n}\n\nmain();\n"],"x_google_ignoreList":[0,1,2,3,4],"mappings":"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"}
{"version":3,"file":"sandbox.mjs","names":["fs","version","parse","debug","path","config","dotenv","path","chalk","config","path","dotenv","vercelFormatter"],"sources":["../../../node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv/package.json","../../../node_modules/.pnpm/dotenv@16.5.0/node_modules/dotenv/lib/main.js","../../../node_modules/.pnpm/dotenv-flow@4.1.0/node_modules/dotenv-flow/package.json","../../../node_modules/.pnpm/dotenv-flow@4.1.0/node_modules/dotenv-flow/lib/dotenv-flow.js","../src/util/steer-sh.ts","../../../node_modules/.pnpm/cmd-ts@0.15.0/node_modules/cmd-ts/dist/cjs/batteries/vercel-formatter.js","../src/sandbox.ts"],"sourcesContent":["{\n \"name\": \"dotenv\",\n \"version\": \"16.5.0\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run --show-full-coverage --timeout=60000 --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n const vaultPath = _vaultPath(options)\n\n // Parse .env.vault\n const result = DotenvModule.configDotenv({ path: vaultPath })\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.log(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = Boolean(options && options.debug)\n if (debug) {\n _debug('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n const debug = Boolean(options && options.debug)\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsedAll, options)\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n }\n }\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","{\n \"name\": \"dotenv-flow\",\n \"version\": \"4.1.0\",\n \"description\": \"Loads environment variables from `.env.[development|test|production][.local]` files\",\n \"keywords\": [\n \"dotenv\",\n \"node_env\",\n \"development\",\n \"test\",\n \"production\",\n \"local\",\n \"env\",\n \"environment\",\n \"variables\"\n ],\n \"homepage\": \"https://github.com/kerimdzhanov/dotenv-flow#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/kerimdzhanov/dotenv-flow.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/kerimdzhanov/dotenv-flow/issues\"\n },\n \"main\": \"lib/dotenv-flow.js\",\n \"types\": \"lib/dotenv-flow.d.ts\",\n \"exports\": {\n \".\": \"./lib/dotenv-flow.js\",\n \"./config\": {\n \"require\": \"./config.js\",\n \"node\": \"./config.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"files\": [\n \"lib/cli-options.js\",\n \"lib/dotenv-flow.d.ts\",\n \"lib/env-options.js\",\n \"config.d.ts\",\n \"config.js\"\n ],\n \"dependencies\": {\n \"dotenv\": \"^16.0.0\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^20.6.2\",\n \"chai\": \"^4.3.7\",\n \"conventional-changelog-cli\": \"^2.0.35\",\n \"mocha\": \"^10.2.0\",\n \"sinon\": \"^15.2.0\",\n \"sinon-chai\": \"^3.7.0\",\n \"tmp\": \"^0.2.1\",\n \"typescript\": \"^5.2.2\"\n },\n \"engines\": {\n \"node\": \">= 12.0.0\"\n },\n \"scripts\": {\n \"test\": \"yarn run test:unit && yarn run test:integration && yarn run test:types\",\n \"test:unit\": \"mocha -r mocha.conf.js test/unit/*.spec.js\",\n \"test:integration\": \"mocha -r mocha.conf.js test/integration/*.spec.{m,}js\",\n \"test:types\": \"tsc\",\n \"changelog\": \"conventional-changelog -p angular -i CHANGELOG.md -s\"\n },\n \"author\": \"Dan Kerimdzhanov\",\n \"license\": \"MIT\"\n}\n","'use strict';\n\nconst fs = require('fs');\nconst p = require('path');\nconst dotenv = require('dotenv');\nconst {version} = require('../package.json');\n\nconst DEFAULT_PATTERN = '.env[.node_env][.local]';\n\nconst LOCAL_PLACEHOLDER_REGEX = /\\[(\\W*\\blocal\\b\\W*)]/g;\nconst NODE_ENV_PLACEHOLDER_REGEX = /\\[(\\W*\\b)node_env(\\b\\W*)]/g;\n\n/**\n * Compose a filename from a given `patten`.\n *\n * @param {string} pattern\n * @param {object} [options]\n * @param {boolean} [options.local]\n * @param {string} [options.node_env]\n * @return {string} filename\n */\nfunction composeFilename(pattern, options) {\n let filename = pattern;\n\n filename = filename.replace(\n LOCAL_PLACEHOLDER_REGEX,\n (options && options.local) ? '$1' : ''\n );\n\n filename = filename.replace(\n NODE_ENV_PLACEHOLDER_REGEX,\n (options && options.node_env) ? `$1${options.node_env}$2` : ''\n );\n\n return filename;\n}\n\n/**\n * Returns a list of existing `.env*` filenames depending on the given `options`.\n *\n * The resulting list is ordered by the env files'\n * variables overwriting priority from lowest to highest.\n *\n * This can also be referenced as \"env files' environment cascade\"\n * or \"order of ascending priority.\"\n *\n * ⚠️ Note that the `.env.local` file is not listed for \"test\" environment,\n * since normally you expect tests to produce the same results for everyone.\n *\n * @param {object} [options] - `.env*` files listing options\n * @param {string} [options.node_env] - node environment (development/test/production/etc.)\n * @param {string} [options.path] - path to the working directory (default: `process.cwd()`)\n * @param {string} [options.pattern] - `.env*` files' naming convention pattern\n * (default: \".env[.node_env][.local]\")\n * @param {boolean} [options.debug] - turn on debug messages\n * @return {string[]}\n */\nfunction listFiles(options = {}) {\n options.debug && debug('listing effective `.env*` files…');\n\n const {\n node_env,\n path = process.cwd(),\n pattern = DEFAULT_PATTERN,\n } = options;\n\n const hasLocalPlaceholder = LOCAL_PLACEHOLDER_REGEX.test(pattern);\n\n const filenames = {};\n\n if (pattern === DEFAULT_PATTERN) {\n filenames['.env.defaults'] = '.env.defaults'; // for seamless transition from \".env + .env.defaults\"\n }\n\n filenames['.env'] = composeFilename(pattern);\n\n if (hasLocalPlaceholder) {\n const envlocal = composeFilename(pattern, { local: true });\n\n if (node_env !== 'test') {\n filenames['.env.local'] = envlocal;\n }\n else if (options.debug && fs.existsSync(p.resolve(path, envlocal))) {\n debug(\n '[!] note that `%s` is being skipped for \"test\" environment',\n envlocal\n );\n }\n }\n\n if (node_env && NODE_ENV_PLACEHOLDER_REGEX.test(pattern)) {\n filenames['.env.node_env'] = composeFilename(pattern, { node_env });\n\n if (hasLocalPlaceholder) {\n filenames['.env.node_env.local'] = composeFilename(pattern, { node_env, local: true });\n }\n }\n\n return [\n '.env.defaults',\n '.env',\n '.env.local',\n '.env.node_env',\n '.env.node_env.local'\n ]\n .reduce((list, basename) => {\n if (!filenames[basename]) {\n return list;\n }\n\n const filename = p.resolve(path, filenames[basename]);\n if (fs.existsSync(filename)) {\n options.debug && debug('>> %s', filename);\n list.push(filename);\n }\n\n return list;\n }, []);\n}\n\n/**\n * Parses a given file or a list of files.\n *\n * When a list of filenames is given, the files will be parsed and merged in the same order as given.\n *\n * @param {string|string[]} filenames - filename or a list of filenames to parse and merge\n * @param {{ encoding?: string, debug?: boolean }} [options] - parse options\n * @return {Object<string, string>} the resulting map of `{ env_var: value }` as an object\n */\nfunction parse(filenames, options = {}) {\n if (typeof filenames === 'string') {\n options.debug && debug('parsing \"%s\"…', filenames);\n\n const parsed = dotenv.parse(\n fs.readFileSync(\n filenames,\n options.encoding && { encoding: options.encoding }\n )\n );\n\n if (options.debug) {\n Object.keys(parsed)\n .forEach(varname => debug('>> %s', varname));\n }\n\n return parsed;\n }\n\n return filenames.reduce((result, filename) => {\n const parsed = parse(filename, options);\n\n if (options.debug) {\n Object.keys(parsed)\n .filter(varname => result.hasOwnProperty(varname))\n .forEach(varname => debug('`%s` is being overwritten by merge from \"%s\"', varname, filename));\n }\n\n return Object.assign(result, parsed);\n }, {});\n}\n\n/**\n * Parses variables defined in given file(s) and assigns them to `process.env`.\n *\n * Variables that are already defined in `process.env` will not be overwritten,\n * thus giving a higher priority to environment variables predefined by the shell.\n *\n * If the loading is successful, an object with `parsed` property is returned.\n * The `parsed` property contains parsed variables' `key => value` pairs merged in order using\n * the \"overwrite merge\" strategy.\n *\n * If parsing fails for any of the given files, `process.env` is being left untouched,\n * and an object with `error` property is returned.\n * The `error` property, if present, references to the occurred error.\n *\n * @param {string|string[]} filenames - filename or a list of filenames to parse and merge\n * @param {object} [options] - file loading options\n * @param {string} [options.encoding=\"utf8\"] - encoding of `.env*` files\n * @param {boolean} [options.debug=false] - turn on debug messages\n * @param {boolean} [options.silent=false] - suppress console errors and warnings\n * @return {{ error: Error } | { parsed: Object<string, string> }}\n */\nfunction load(filenames, options = {}) {\n try {\n const parsed = parse(filenames, {\n encoding: options.encoding,\n debug: options.debug\n });\n\n options.debug && debug('safe-merging parsed environment variables into `process.env`…');\n\n for (const varname of Object.keys(parsed)) {\n if (!process.env.hasOwnProperty(varname)) {\n options.debug && debug('>> process.env.%s', varname);\n process.env[varname] = parsed[varname];\n }\n else if (options.debug && process.env[varname] !== parsed[varname]) {\n debug('environment variable `%s` is predefined and not being overwritten', varname);\n }\n }\n\n return { parsed };\n }\n catch (error) {\n return failure(error, options);\n }\n}\n\n/**\n * Unload variables defined in a given file(s) from `process.env`.\n *\n * This function can gracefully resolve the following issue:\n *\n * In some cases, the original \"dotenv\" library can be used by one of the dependent npm modules.\n * It causes calling the original `dotenv.config()` that loads the `.env` file from your project before you can call `dotenv-flow.config()`.\n * Such cases break `.env*` files priority because the previously loaded environment variables are treated as shell-defined thus having a higher priority.\n *\n * Unloading the previously loaded `.env` file can be activated when using the `dotenv-flow.config()` with the `purge_dotenv` option set to `true`.\n *\n * @param {string|string[]} filenames - filename or a list of filenames to unload\n * @param {object} [options] - `fs.readFileSync` options\n */\nfunction unload(filenames, options = {}) {\n const parsed = parse(filenames, options);\n\n Object.keys(parsed).forEach((key) => {\n if (process.env[key] === parsed[key]) {\n delete process.env[key];\n }\n });\n}\n\n/**\n * Returns effective (computed) `node_env`.\n *\n * @param {object} [options]\n * @param {string} [options.node_env]\n * @param {string} [options.default_node_env]\n * @param {boolean} [options.debug]\n * @return {string|undefined} node_env\n */\nfunction getEffectiveNodeEnv(options = {}) {\n if (options.node_env) {\n options.debug && debug(\n `operating in \"${options.node_env}\" environment (set by \\`options.node_env\\`)`\n );\n return options.node_env;\n }\n\n if (process.env.NODE_ENV) {\n options.debug && debug(\n `operating in \"${process.env.NODE_ENV}\" environment (as per \\`process.env.NODE_ENV\\`)`\n );\n return process.env.NODE_ENV;\n }\n\n if (options.default_node_env) {\n options.debug && debug(\n `operating in \"${options.default_node_env}\" environment (taken from \\`options.default_node_env\\`)`\n );\n return options.default_node_env;\n }\n\n options.debug && debug(\n 'operating in \"no environment\" mode (no environment-related options are set)'\n );\n return undefined;\n}\n\nconst CONFIG_OPTION_KEYS = [\n 'node_env',\n 'default_node_env',\n 'path',\n 'pattern',\n 'files',\n 'encoding',\n 'purge_dotenv',\n 'silent'\n];\n\n/**\n * \"dotenv-flow\" initialization function (API entry point).\n *\n * Allows configuring dotenv-flow programmatically.\n *\n * @param {object} [options] - configuration options\n * @param {string} [options.node_env=process.env.NODE_ENV] - node environment (development/test/production/etc.)\n * @param {string} [options.default_node_env] - the default node environment\n * @param {string} [options.path=process.cwd()] - path to `.env*` files directory\n * @param {string} [options.pattern=\".env[.node_env][.local]\"] - `.env*` files' naming convention pattern\n * @param {string[]} [options.files] - an explicit list of `.env*` files to load (note that `options.[default_]node_env` and `options.pattern` are ignored in this case)\n * @param {string} [options.encoding=\"utf8\"] - encoding of `.env*` files\n * @param {boolean} [options.purge_dotenv=false] - perform the `.env` file {@link unload}\n * @param {boolean} [options.debug=false] - turn on detailed logging to help debug why certain variables are not being set as you expect\n * @param {boolean} [options.silent=false] - suppress all kinds of warnings including \".env*\" files' loading errors\n * @return {{ parsed?: object, error?: Error }} with a `parsed` key containing the loaded content or an `error` key with an error that is occurred\n */\nfunction config(options = {}) {\n if (options.debug) {\n debug('initializing…');\n\n CONFIG_OPTION_KEYS\n .filter(key => key in options)\n .forEach(key => debug(`| options.${key} =`, options[key]));\n }\n\n const {\n path = process.cwd(),\n pattern = DEFAULT_PATTERN\n } = options;\n\n if (options.purge_dotenv) {\n options.debug && debug(\n '`options.purge_dotenv` is enabled, unloading potentially pre-loaded `.env`…'\n );\n\n const dotenvFile = p.resolve(path, '.env');\n try {\n fs.existsSync(dotenvFile) && unload(dotenvFile, { encoding: options.encoding });\n }\n catch (error) {\n !options.silent && warn('unloading failed: ', error);\n }\n }\n\n try {\n let filenames;\n\n if (options.files) {\n options.debug && debug(\n 'using explicit list of `.env*` files: %s…',\n options.files.join(', ')\n );\n\n filenames = options.files\n .reduce((list, basename) => {\n const filename = p.resolve(path, basename);\n\n if (fs.existsSync(filename)) {\n list.push(filename);\n }\n else if (options.debug) {\n debug('>> %s does not exist, skipping…', filename);\n }\n\n return list;\n }, []);\n }\n else {\n const node_env = getEffectiveNodeEnv(options);\n\n filenames = listFiles({ node_env, path, pattern, debug: options.debug });\n\n if (filenames.length === 0) {\n const _pattern = node_env\n ? pattern.replace(NODE_ENV_PLACEHOLDER_REGEX, `[$1${node_env}$2]`)\n : pattern;\n\n return failure(\n new Error(`no \".env*\" files matching pattern \"${_pattern}\" in \"${path}\" dir`),\n options\n );\n }\n }\n\n const result = load(filenames, {\n encoding: options.encoding,\n debug: options.debug,\n silent: options.silent\n });\n\n options.debug && debug('initialization completed.');\n\n return result;\n }\n catch (error) {\n return failure(error, options);\n }\n}\n\nfunction failure(error, options) {\n if (!options.silent) {\n warn(`\".env*\" files loading failed: ${error.message || error}`);\n }\n\n return { error };\n}\n\nfunction warn(message, error) {\n if (error) {\n message += ': %s';\n }\n\n console.warn(`[dotenv-flow@${version}]: ${message}`, error);\n}\n\nfunction debug(message, ...values) {\n console.debug(`[dotenv-flow@${version}]: ${message}`, ...values);\n}\n\nmodule.exports = {\n DEFAULT_PATTERN,\n listFiles,\n parse,\n load,\n unload,\n config\n};\n","import chalk from \"chalk\";\nimport { StyledError } from \"../error\";\n\n/**\n * `sandbox sh claude` is the most natural way to ask for \"run this command in\n * a sandbox\", but `sh` takes no command. Declaring a catch-all positional on\n * `sh` would advertise a command argument in its help and generated docs\n * (review feedback on #295), so the steer runs here, before the parser's\n * generic \"Unknown arguments\" rejection.\n *\n * The check only fires when the FIRST token after `sh` is a non-flag: that\n * token can never be an option value, so a valid invocation like\n * `sandbox sh --name my-box` can never be misread. Once it fires, the whole\n * tail is treated as the intended command (including its own flags), so\n * `sandbox sh example-command -t 0` suggests `example-command -t 0`, not a\n * truncated version of it.\n */\nexport function steerShCommand(args: string[]): void {\n if (args[0] !== \"sh\") {\n return;\n }\n const rest = args.slice(1);\n if (rest.length === 0 || rest[0].startsWith(\"-\")) {\n return;\n }\n const example = rest.join(\" \");\n throw new StyledError(\n [\n \"`sh` starts a plain shell and doesn't take a command.\",\n `${chalk.bold(\"hint:\")} to run ${chalk.cyan(example)} interactively in a new sandbox:`,\n `╰▶ sandbox run -i ${example}`,\n ].join(\"\\n\"),\n );\n}\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.vercelFormatter = void 0;\nexports.createVercelFormatter = createVercelFormatter;\nconst chalk_1 = __importDefault(require(\"chalk\"));\n/**\n * Extract argument hints from help topics.\n * Returns a string like \"[cmd]\" or \"[src] [dst]\" based on positional arguments.\n */\nfunction getArgHint(helpTopics) {\n return helpTopics\n .filter((t) => t.category === \"arguments\")\n .map((t) => t.usage)\n .join(\" \");\n}\n/**\n * Format command name with aliases in \"alias | name\" style.\n * Prefers shorter alias first for display.\n */\nfunction formatCommandName(name, aliases) {\n if (!(aliases === null || aliases === void 0 ? void 0 : aliases.length)) {\n return name;\n }\n // Sort aliases by length to prefer shorter ones first\n const sortedAliases = [...aliases].sort((a, b) => a.length - b.length);\n return `${sortedAliases[0]} | ${name}`;\n}\n/**\n * Create a Vercel-style help formatter.\n *\n * This formatter produces output similar to the Vercel CLI with:\n * - A header with CLI name and version\n * - Logo symbol before the command name\n * - Column-aligned commands with aliases shown as \"short | long\"\n * - Argument hints derived from positional arguments\n * - Examples section with highlighted commands\n *\n * @example\n * ```ts\n * import { setDefaultHelpFormatter } from \"cmd-ts\";\n * import { createVercelFormatter } from \"cmd-ts/batteries/vercelFormatter\";\n *\n * setDefaultHelpFormatter(createVercelFormatter({\n * cliName: \"Vercel Sandbox CLI\",\n * logo: \"▲\",\n * }));\n * ```\n */\nfunction createVercelFormatter(config = {}) {\n const { cliName, logo = \"▲\" } = config;\n return {\n formatCommand(data, _context) {\n var _a;\n const lines = [];\n const displayName = cliName !== null && cliName !== void 0 ? cliName : data.name;\n let header = displayName;\n if (data.version) {\n header += ` ${data.version}`;\n }\n lines.push(chalk_1.default.grey(header));\n // Command usage line\n lines.push(\"\");\n const path = data.path.length > 0 ? data.path.join(\" \") : data.name;\n lines.push(`${logo} ${chalk_1.default.bold(path)} [options]`);\n // Description\n if (data.description) {\n lines.push(\"\");\n lines.push(chalk_1.default.dim(data.description));\n }\n // Group help topics by category\n const byCategory = new Map();\n for (const topic of data.helpTopics) {\n const existing = (_a = byCategory.get(topic.category)) !== null && _a !== void 0 ? _a : [];\n existing.push(topic);\n byCategory.set(topic.category, existing);\n }\n // Render each category\n for (const [category, topics] of byCategory) {\n lines.push(\"\");\n lines.push(chalk_1.default.dim(`${capitalize(category)}:`));\n lines.push(\"\");\n // Calculate max width for alignment\n const maxUsageWidth = Math.max(...topics.map((t) => t.usage.length));\n for (const topic of topics) {\n const defaults = topic.defaults.length > 0\n ? chalk_1.default.dim(` [${topic.defaults.join(\", \")}]`)\n : \"\";\n lines.push(` ${topic.usage.padEnd(maxUsageWidth + 2)}${chalk_1.default.dim(topic.description)}${defaults}`);\n }\n }\n // Examples\n if (data.examples && data.examples.length > 0) {\n lines.push(\"\");\n lines.push(chalk_1.default.dim(\"Examples:\"));\n for (const example of data.examples) {\n lines.push(\"\");\n lines.push(`${chalk_1.default.gray(\"–\")} ${example.description}`);\n lines.push(\"\");\n lines.push(chalk_1.default.cyan(` $ ${example.command}`));\n }\n }\n lines.push(\"\");\n return lines.join(\"\\n\");\n },\n formatSubcommands(data, _context) {\n var _a;\n const lines = [];\n const path = data.path.length > 0 ? data.path.join(\" \") : data.name;\n const displayName = cliName !== null && cliName !== void 0 ? cliName : path;\n // Header\n if (data.version) {\n lines.push(chalk_1.default.grey(`${displayName} ${data.version}`));\n }\n else {\n lines.push(chalk_1.default.grey(displayName));\n }\n // Command usage line\n lines.push(\"\");\n lines.push(`${logo} ${chalk_1.default.bold(path)} [options] <command>`);\n // Help hint\n lines.push(\"\");\n lines.push(chalk_1.default.dim(`For command help, run \\`${path} <command> --help\\``));\n // Commands section\n lines.push(\"\");\n lines.push(chalk_1.default.dim(\"Commands:\"));\n lines.push(\"\");\n // Calculate column widths\n const commandNames = data.commands.map((cmd) => formatCommandName(cmd.name, cmd.aliases));\n const maxNameWidth = Math.max(...commandNames.map((n) => n.length));\n const argHints = data.commands.map((cmd) => getArgHint(cmd.helpTopics));\n const maxArgWidth = Math.max(...argHints.map((a) => a.length), 0);\n // Render commands\n for (let i = 0; i < data.commands.length; i++) {\n const cmd = data.commands[i];\n const displayCommandName = commandNames[i];\n const argHint = argHints[i];\n lines.push(` ${displayCommandName.padEnd(maxNameWidth + 2)}${chalk_1.default.dim(argHint.padEnd(maxArgWidth + 2))}${chalk_1.default.dim((_a = cmd.description) !== null && _a !== void 0 ? _a : \"\")}`);\n }\n // Examples\n if (data.examples && data.examples.length > 0) {\n lines.push(\"\");\n lines.push(chalk_1.default.dim(\"Examples:\"));\n for (const example of data.examples) {\n lines.push(\"\");\n lines.push(`${chalk_1.default.gray(\"–\")} ${example.description}`);\n lines.push(\"\");\n lines.push(chalk_1.default.cyan(` $ ${example.command}`));\n }\n }\n lines.push(\"\");\n return lines.join(\"\\n\");\n },\n };\n}\nfunction capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n/**\n * A pre-configured Vercel-style formatter with default settings.\n * Uses \"▲\" as the logo and derives the CLI name from the command name.\n */\nexports.vercelFormatter = createVercelFormatter();\n//# sourceMappingURL=vercel-formatter.js.map","import { run, setDefaultHelpFormatter } from \"cmd-ts\";\nimport { app } from \"./app\";\nimport dotenv from \"dotenv-flow\";\nimport { printTopLevelError } from \"./util/format-error\";\nimport { steerShCommand } from \"./util/steer-sh\";\nimport { vercelFormatter } from \"cmd-ts/batteries/vercel-formatter\";\n\ndotenv.config({\n silent: true,\n});\n\nasync function main() {\n setDefaultHelpFormatter(vercelFormatter);\n\n try {\n steerShCommand(process.argv.slice(2));\n await run(app(), process.argv.slice(2));\n } catch (e) {\n await printTopLevelError(e);\n process.exit(1);\n }\n}\n\nmain();\n"],"x_google_ignoreList":[0,1,2,3,5],"mappings":"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"}
{
"name": "sandbox",
"description": "Command line interface for Vercel Sandbox",
"version": "4.1.0-beta.0",
"version": "4.1.0",
"keywords": [

@@ -32,3 +32,3 @@ "vercel",

"zod": "^4.1.1",
"@vercel/sandbox": "3.1.0-beta.0"
"@vercel/sandbox": "3.1.0"
},

@@ -53,3 +53,3 @@ "devDependencies": {

"xdg-app-paths": "5.1.0",
"@vercel/sandbox": "3.1.0-beta.0"
"@vercel/sandbox": "3.1.0"
},

@@ -56,0 +56,0 @@ "scripts": {

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display