@sanity/cli 3.60.0 → 3.61.1-manifests.18

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.
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
- var fs$1 = require("node:fs"), path$1 = require("node:path"), createDebug = require("debug"), require$$0 = require("fs"), require$$0$1 = require("path"), require$$0$2 = require("os"), require$$3 = require("crypto");
2
+ var fs = require("node:fs"), path = require("node:path"), createDebug = require("debug"), require$$0 = require("fs"), require$$0$1 = require("path"), require$$0$2 = require("os"), require$$3 = require("crypto");
3
3
  function _interopDefaultCompat(e) {
4
4
  return e && typeof e == "object" && "default" in e ? e : { default: e };
5
5
  }
6
- var fs__default = /* @__PURE__ */ _interopDefaultCompat(fs$1), path__default = /* @__PURE__ */ _interopDefaultCompat(path$1), createDebug__default = /* @__PURE__ */ _interopDefaultCompat(createDebug), require$$0__default = /* @__PURE__ */ _interopDefaultCompat(require$$0), require$$0__default$1 = /* @__PURE__ */ _interopDefaultCompat(require$$0$1), require$$0__default$2 = /* @__PURE__ */ _interopDefaultCompat(require$$0$2), require$$3__default = /* @__PURE__ */ _interopDefaultCompat(require$$3);
6
+ var fs__default = /* @__PURE__ */ _interopDefaultCompat(fs), path__default = /* @__PURE__ */ _interopDefaultCompat(path), createDebug__default = /* @__PURE__ */ _interopDefaultCompat(createDebug), require$$0__default = /* @__PURE__ */ _interopDefaultCompat(require$$0), require$$0__default$1 = /* @__PURE__ */ _interopDefaultCompat(require$$0$1), require$$0__default$2 = /* @__PURE__ */ _interopDefaultCompat(require$$0$2), require$$3__default = /* @__PURE__ */ _interopDefaultCompat(require$$3);
7
7
  const debug = createDebug__default.default("sanity:cli");
8
8
  function resolveRootDir(cwd) {
9
9
  try {
@@ -60,7 +60,7 @@ function getAugmentedNamespace(n) {
60
60
  });
61
61
  }), a;
62
62
  }
63
- var main$1 = { exports: {} }, name = "dotenv", version$1 = "16.4.5", description = "Loads environment variables from .env file", main = "lib/main.js", types = "lib/main.d.ts", exports$1 = {
63
+ var main$2 = { exports: {} }, name = "dotenv", version = "16.4.5", description = "Loads environment variables from .env file", main$1 = "lib/main.js", types = "lib/main.d.ts", exports$1 = {
64
64
  ".": {
65
65
  types: "./lib/main.d.ts",
66
66
  require: "./lib/main.js",
@@ -110,9 +110,9 @@ var main$1 = { exports: {} }, name = "dotenv", version$1 = "16.4.5", description
110
110
  fs: !1
111
111
  }, require$$4 = {
112
112
  name,
113
- version: version$1,
113
+ version,
114
114
  description,
115
- main,
115
+ main: main$1,
116
116
  types,
117
117
  exports: exports$1,
118
118
  scripts,
@@ -124,215 +124,217 @@ var main$1 = { exports: {} }, name = "dotenv", version$1 = "16.4.5", description
124
124
  devDependencies,
125
125
  engines,
126
126
  browser
127
- };
128
- const fs = require$$0__default.default, path = require$$0__default$1.default, os = require$$0__default$2.default, crypto = require$$3__default.default, packageJson = require$$4, version = packageJson.version, LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;
129
- function parse(src) {
130
- const obj = {};
131
- let lines = src.toString();
132
- lines = lines.replace(/\r\n?/mg, `
127
+ }, hasRequiredMain$1;
128
+ function requireMain$1() {
129
+ if (hasRequiredMain$1) return main$2.exports;
130
+ hasRequiredMain$1 = 1;
131
+ const fs2 = require$$0__default.default, path2 = require$$0__default$1.default, os = require$$0__default$2.default, crypto = require$$3__default.default, version2 = require$$4.version, LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;
132
+ function parse(src) {
133
+ const obj = {};
134
+ let lines = src.toString();
135
+ lines = lines.replace(/\r\n?/mg, `
133
136
  `);
134
- let match;
135
- for (; (match = LINE.exec(lines)) != null; ) {
136
- const key = match[1];
137
- let value = match[2] || "";
138
- value = value.trim();
139
- const maybeQuote = value[0];
140
- value = value.replace(/^(['"`])([\s\S]*)\1$/mg, "$2"), maybeQuote === '"' && (value = value.replace(/\\n/g, `
137
+ let match;
138
+ for (; (match = LINE.exec(lines)) != null; ) {
139
+ const key = match[1];
140
+ let value = match[2] || "";
141
+ value = value.trim();
142
+ const maybeQuote = value[0];
143
+ value = value.replace(/^(['"`])([\s\S]*)\1$/mg, "$2"), maybeQuote === '"' && (value = value.replace(/\\n/g, `
141
144
  `), value = value.replace(/\\r/g, "\r")), obj[key] = value;
145
+ }
146
+ return obj;
142
147
  }
143
- return obj;
144
- }
145
- function _parseVault(options) {
146
- const vaultPath = _vaultPath(options), result = DotenvModule.configDotenv({ path: vaultPath });
147
- if (!result.parsed) {
148
- const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`);
149
- throw err.code = "MISSING_DATA", err;
148
+ function _parseVault(options) {
149
+ const vaultPath = _vaultPath(options), result = DotenvModule.configDotenv({ path: vaultPath });
150
+ if (!result.parsed) {
151
+ const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`);
152
+ throw err.code = "MISSING_DATA", err;
153
+ }
154
+ const keys = _dotenvKey(options).split(","), length = keys.length;
155
+ let decrypted;
156
+ for (let i = 0; i < length; i++)
157
+ try {
158
+ const key = keys[i].trim(), attrs = _instructions(result, key);
159
+ decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key);
160
+ break;
161
+ } catch (error) {
162
+ if (i + 1 >= length)
163
+ throw error;
164
+ }
165
+ return DotenvModule.parse(decrypted);
166
+ }
167
+ function _log(message) {
168
+ console.log(`[dotenv@${version2}][INFO] ${message}`);
169
+ }
170
+ function _warn(message) {
171
+ console.log(`[dotenv@${version2}][WARN] ${message}`);
150
172
  }
151
- const keys = _dotenvKey(options).split(","), length = keys.length;
152
- let decrypted;
153
- for (let i = 0; i < length; i++)
173
+ function _debug(message) {
174
+ console.log(`[dotenv@${version2}][DEBUG] ${message}`);
175
+ }
176
+ function _dotenvKey(options) {
177
+ return options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0 ? options.DOTENV_KEY : process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0 ? process.env.DOTENV_KEY : "";
178
+ }
179
+ function _instructions(result, dotenvKey) {
180
+ let uri;
154
181
  try {
155
- const key = keys[i].trim(), attrs = _instructions(result, key);
156
- decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key);
157
- break;
182
+ uri = new URL(dotenvKey);
158
183
  } catch (error) {
159
- if (i + 1 >= length)
160
- throw error;
184
+ if (error.code === "ERR_INVALID_URL") {
185
+ 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");
186
+ throw err.code = "INVALID_DOTENV_KEY", err;
187
+ }
188
+ throw error;
161
189
  }
162
- return DotenvModule.parse(decrypted);
163
- }
164
- function _log(message) {
165
- console.log(`[dotenv@${version}][INFO] ${message}`);
166
- }
167
- function _warn(message) {
168
- console.log(`[dotenv@${version}][WARN] ${message}`);
169
- }
170
- function _debug(message) {
171
- console.log(`[dotenv@${version}][DEBUG] ${message}`);
172
- }
173
- function _dotenvKey(options) {
174
- return options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0 ? options.DOTENV_KEY : process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0 ? process.env.DOTENV_KEY : "";
175
- }
176
- function _instructions(result, dotenvKey) {
177
- let uri;
178
- try {
179
- uri = new URL(dotenvKey);
180
- } catch (error) {
181
- if (error.code === "ERR_INVALID_URL") {
182
- 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");
190
+ const key = uri.password;
191
+ if (!key) {
192
+ const err = new Error("INVALID_DOTENV_KEY: Missing key part");
193
+ throw err.code = "INVALID_DOTENV_KEY", err;
194
+ }
195
+ const environment = uri.searchParams.get("environment");
196
+ if (!environment) {
197
+ const err = new Error("INVALID_DOTENV_KEY: Missing environment part");
183
198
  throw err.code = "INVALID_DOTENV_KEY", err;
184
199
  }
185
- throw error;
200
+ const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`, ciphertext = result.parsed[environmentKey];
201
+ if (!ciphertext) {
202
+ const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`);
203
+ throw err.code = "NOT_FOUND_DOTENV_ENVIRONMENT", err;
204
+ }
205
+ return { ciphertext, key };
206
+ }
207
+ function _vaultPath(options) {
208
+ let possibleVaultPath = null;
209
+ if (options && options.path && options.path.length > 0)
210
+ if (Array.isArray(options.path))
211
+ for (const filepath of options.path)
212
+ fs2.existsSync(filepath) && (possibleVaultPath = filepath.endsWith(".vault") ? filepath : `${filepath}.vault`);
213
+ else
214
+ possibleVaultPath = options.path.endsWith(".vault") ? options.path : `${options.path}.vault`;
215
+ else
216
+ possibleVaultPath = path2.resolve(process.cwd(), ".env.vault");
217
+ return fs2.existsSync(possibleVaultPath) ? possibleVaultPath : null;
186
218
  }
187
- const key = uri.password;
188
- if (!key) {
189
- const err = new Error("INVALID_DOTENV_KEY: Missing key part");
190
- throw err.code = "INVALID_DOTENV_KEY", err;
219
+ function _resolveHome(envPath) {
220
+ return envPath[0] === "~" ? path2.join(os.homedir(), envPath.slice(1)) : envPath;
191
221
  }
192
- const environment = uri.searchParams.get("environment");
193
- if (!environment) {
194
- const err = new Error("INVALID_DOTENV_KEY: Missing environment part");
195
- throw err.code = "INVALID_DOTENV_KEY", err;
222
+ function _configVault(options) {
223
+ _log("Loading env from encrypted .env.vault");
224
+ const parsed = DotenvModule._parseVault(options);
225
+ let processEnv = process.env;
226
+ return options && options.processEnv != null && (processEnv = options.processEnv), DotenvModule.populate(processEnv, parsed, options), { parsed };
196
227
  }
197
- const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`, ciphertext = result.parsed[environmentKey];
198
- if (!ciphertext) {
199
- const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`);
200
- throw err.code = "NOT_FOUND_DOTENV_ENVIRONMENT", err;
228
+ function configDotenv(options) {
229
+ const dotenvPath = path2.resolve(process.cwd(), ".env");
230
+ let encoding = "utf8";
231
+ const debug2 = !!(options && options.debug);
232
+ options && options.encoding ? encoding = options.encoding : debug2 && _debug("No encoding is specified. UTF-8 is used by default");
233
+ let optionPaths = [dotenvPath];
234
+ if (options && options.path)
235
+ if (!Array.isArray(options.path))
236
+ optionPaths = [_resolveHome(options.path)];
237
+ else {
238
+ optionPaths = [];
239
+ for (const filepath of options.path)
240
+ optionPaths.push(_resolveHome(filepath));
241
+ }
242
+ let lastError;
243
+ const parsedAll = {};
244
+ for (const path3 of optionPaths)
245
+ try {
246
+ const parsed = DotenvModule.parse(fs2.readFileSync(path3, { encoding }));
247
+ DotenvModule.populate(parsedAll, parsed, options);
248
+ } catch (e) {
249
+ debug2 && _debug(`Failed to load ${path3} ${e.message}`), lastError = e;
250
+ }
251
+ let processEnv = process.env;
252
+ return options && options.processEnv != null && (processEnv = options.processEnv), DotenvModule.populate(processEnv, parsedAll, options), lastError ? { parsed: parsedAll, error: lastError } : { parsed: parsedAll };
201
253
  }
202
- return { ciphertext, key };
203
- }
204
- function _vaultPath(options) {
205
- let possibleVaultPath = null;
206
- if (options && options.path && options.path.length > 0)
207
- if (Array.isArray(options.path))
208
- for (const filepath of options.path)
209
- fs.existsSync(filepath) && (possibleVaultPath = filepath.endsWith(".vault") ? filepath : `${filepath}.vault`);
210
- else
211
- possibleVaultPath = options.path.endsWith(".vault") ? options.path : `${options.path}.vault`;
212
- else
213
- possibleVaultPath = path.resolve(process.cwd(), ".env.vault");
214
- return fs.existsSync(possibleVaultPath) ? possibleVaultPath : null;
215
- }
216
- function _resolveHome(envPath) {
217
- return envPath[0] === "~" ? path.join(os.homedir(), envPath.slice(1)) : envPath;
218
- }
219
- function _configVault(options) {
220
- _log("Loading env from encrypted .env.vault");
221
- const parsed = DotenvModule._parseVault(options);
222
- let processEnv = process.env;
223
- return options && options.processEnv != null && (processEnv = options.processEnv), DotenvModule.populate(processEnv, parsed, options), { parsed };
224
- }
225
- function configDotenv(options) {
226
- const dotenvPath = path.resolve(process.cwd(), ".env");
227
- let encoding = "utf8";
228
- const debug2 = !!(options && options.debug);
229
- options && options.encoding ? encoding = options.encoding : debug2 && _debug("No encoding is specified. UTF-8 is used by default");
230
- let optionPaths = [dotenvPath];
231
- if (options && options.path)
232
- if (!Array.isArray(options.path))
233
- optionPaths = [_resolveHome(options.path)];
234
- else {
235
- optionPaths = [];
236
- for (const filepath of options.path)
237
- optionPaths.push(_resolveHome(filepath));
238
- }
239
- let lastError;
240
- const parsedAll = {};
241
- for (const path2 of optionPaths)
254
+ function config(options) {
255
+ if (_dotenvKey(options).length === 0)
256
+ return DotenvModule.configDotenv(options);
257
+ const vaultPath = _vaultPath(options);
258
+ return vaultPath ? DotenvModule._configVault(options) : (_warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`), DotenvModule.configDotenv(options));
259
+ }
260
+ function decrypt(encrypted, keyStr) {
261
+ const key = Buffer.from(keyStr.slice(-64), "hex");
262
+ let ciphertext = Buffer.from(encrypted, "base64");
263
+ const nonce = ciphertext.subarray(0, 12), authTag = ciphertext.subarray(-16);
264
+ ciphertext = ciphertext.subarray(12, -16);
242
265
  try {
243
- const parsed = DotenvModule.parse(fs.readFileSync(path2, { encoding }));
244
- DotenvModule.populate(parsedAll, parsed, options);
245
- } catch (e) {
246
- debug2 && _debug(`Failed to load ${path2} ${e.message}`), lastError = e;
266
+ const aesgcm = crypto.createDecipheriv("aes-256-gcm", key, nonce);
267
+ return aesgcm.setAuthTag(authTag), `${aesgcm.update(ciphertext)}${aesgcm.final()}`;
268
+ } catch (error) {
269
+ const isRange = error instanceof RangeError, invalidKeyLength = error.message === "Invalid key length", decryptionFailed = error.message === "Unsupported state or unable to authenticate data";
270
+ if (isRange || invalidKeyLength) {
271
+ const err = new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");
272
+ throw err.code = "INVALID_DOTENV_KEY", err;
273
+ } else if (decryptionFailed) {
274
+ const err = new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");
275
+ throw err.code = "DECRYPTION_FAILED", err;
276
+ } else
277
+ throw error;
247
278
  }
248
- let processEnv = process.env;
249
- return options && options.processEnv != null && (processEnv = options.processEnv), DotenvModule.populate(processEnv, parsedAll, options), lastError ? { parsed: parsedAll, error: lastError } : { parsed: parsedAll };
250
- }
251
- function config(options) {
252
- if (_dotenvKey(options).length === 0)
253
- return DotenvModule.configDotenv(options);
254
- const vaultPath = _vaultPath(options);
255
- return vaultPath ? DotenvModule._configVault(options) : (_warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`), DotenvModule.configDotenv(options));
256
- }
257
- function decrypt(encrypted, keyStr) {
258
- const key = Buffer.from(keyStr.slice(-64), "hex");
259
- let ciphertext = Buffer.from(encrypted, "base64");
260
- const nonce = ciphertext.subarray(0, 12), authTag = ciphertext.subarray(-16);
261
- ciphertext = ciphertext.subarray(12, -16);
262
- try {
263
- const aesgcm = crypto.createDecipheriv("aes-256-gcm", key, nonce);
264
- return aesgcm.setAuthTag(authTag), `${aesgcm.update(ciphertext)}${aesgcm.final()}`;
265
- } catch (error) {
266
- const isRange = error instanceof RangeError, invalidKeyLength = error.message === "Invalid key length", decryptionFailed = error.message === "Unsupported state or unable to authenticate data";
267
- if (isRange || invalidKeyLength) {
268
- const err = new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");
269
- throw err.code = "INVALID_DOTENV_KEY", err;
270
- } else if (decryptionFailed) {
271
- const err = new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");
272
- throw err.code = "DECRYPTION_FAILED", err;
273
- } else
274
- throw error;
275
279
  }
276
- }
277
- function populate(processEnv, parsed, options = {}) {
278
- const debug2 = !!(options && options.debug), override = !!(options && options.override);
279
- if (typeof parsed != "object") {
280
- const err = new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");
281
- throw err.code = "OBJECT_REQUIRED", err;
280
+ function populate(processEnv, parsed, options = {}) {
281
+ const debug2 = !!(options && options.debug), override = !!(options && options.override);
282
+ if (typeof parsed != "object") {
283
+ const err = new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");
284
+ throw err.code = "OBJECT_REQUIRED", err;
285
+ }
286
+ for (const key of Object.keys(parsed))
287
+ Object.prototype.hasOwnProperty.call(processEnv, key) ? (override === !0 && (processEnv[key] = parsed[key]), debug2 && _debug(override === !0 ? `"${key}" is already defined and WAS overwritten` : `"${key}" is already defined and was NOT overwritten`)) : processEnv[key] = parsed[key];
282
288
  }
283
- for (const key of Object.keys(parsed))
284
- Object.prototype.hasOwnProperty.call(processEnv, key) ? (override === !0 && (processEnv[key] = parsed[key]), debug2 && _debug(override === !0 ? `"${key}" is already defined and WAS overwritten` : `"${key}" is already defined and was NOT overwritten`)) : processEnv[key] = parsed[key];
289
+ const DotenvModule = {
290
+ configDotenv,
291
+ _configVault,
292
+ _parseVault,
293
+ config,
294
+ decrypt,
295
+ parse,
296
+ populate
297
+ };
298
+ return main$2.exports.configDotenv = DotenvModule.configDotenv, main$2.exports._configVault = DotenvModule._configVault, main$2.exports._parseVault = DotenvModule._parseVault, main$2.exports.config = DotenvModule.config, main$2.exports.decrypt = DotenvModule.decrypt, main$2.exports.parse = DotenvModule.parse, main$2.exports.populate = DotenvModule.populate, main$2.exports = DotenvModule, main$2.exports;
285
299
  }
286
- const DotenvModule = {
287
- configDotenv,
288
- _configVault,
289
- _parseVault,
290
- config,
291
- decrypt,
292
- parse,
293
- populate
294
- };
295
- main$1.exports.configDotenv = DotenvModule.configDotenv;
296
- main$1.exports._configVault = DotenvModule._configVault;
297
- main$1.exports._parseVault = DotenvModule._parseVault;
298
- main$1.exports.config = DotenvModule.config;
299
- main$1.exports.decrypt = DotenvModule.decrypt;
300
- var parse_1 = main$1.exports.parse = DotenvModule.parse;
301
- main$1.exports.populate = DotenvModule.populate;
302
- main$1.exports = DotenvModule;
303
- var mainExports = main$1.exports, dotenv = /* @__PURE__ */ getDefaultExportFromCjs(mainExports);
304
- function _interpolate(envValue, environment, config2) {
305
- const matches = envValue.match(/(.?\${*[\w]*(?::-[\w/]*)?}*)/g) || [];
306
- return matches.reduce(function(newEnv, match, index) {
307
- const parts = /(.?)\${*([\w]*(?::-[\w/]*)?)?}*/g.exec(match);
308
- if (!parts || parts.length === 0)
309
- return newEnv;
310
- const prefix = parts[1];
311
- let value, replacePart;
312
- if (prefix === "\\")
313
- replacePart = parts[0], value = replacePart.replace("\\$", "$");
314
- else {
315
- const keyParts = parts[2].split(":-"), key = keyParts[0];
316
- if (replacePart = parts[0].substring(prefix.length), value = Object.prototype.hasOwnProperty.call(environment, key) ? environment[key] : config2.parsed[key] || keyParts[1] || "", keyParts.length > 1 && value) {
317
- const replaceNested = matches[index + 1];
318
- matches[index + 1] = "", newEnv = newEnv.replace(replaceNested, "");
300
+ var mainExports$1 = requireMain$1(), dotenv = /* @__PURE__ */ getDefaultExportFromCjs(mainExports$1), main = {}, hasRequiredMain;
301
+ function requireMain() {
302
+ if (hasRequiredMain) return main;
303
+ hasRequiredMain = 1;
304
+ function _interpolate(envValue, environment, config) {
305
+ const matches = envValue.match(/(.?\${*[\w]*(?::-[\w/]*)?}*)/g) || [];
306
+ return matches.reduce(function(newEnv, match, index) {
307
+ const parts = /(.?)\${*([\w]*(?::-[\w/]*)?)?}*/g.exec(match);
308
+ if (!parts || parts.length === 0)
309
+ return newEnv;
310
+ const prefix = parts[1];
311
+ let value, replacePart;
312
+ if (prefix === "\\")
313
+ replacePart = parts[0], value = replacePart.replace("\\$", "$");
314
+ else {
315
+ const keyParts = parts[2].split(":-"), key = keyParts[0];
316
+ if (replacePart = parts[0].substring(prefix.length), value = Object.prototype.hasOwnProperty.call(environment, key) ? environment[key] : config.parsed[key] || keyParts[1] || "", keyParts.length > 1 && value) {
317
+ const replaceNested = matches[index + 1];
318
+ matches[index + 1] = "", newEnv = newEnv.replace(replaceNested, "");
319
+ }
320
+ value = _interpolate(value, environment, config);
319
321
  }
320
- value = _interpolate(value, environment, config2);
322
+ return newEnv.replace(replacePart, value);
323
+ }, envValue);
324
+ }
325
+ function expand(config) {
326
+ const environment = config.ignoreProcessEnv ? {} : process.env;
327
+ for (const configKey in config.parsed) {
328
+ const value = Object.prototype.hasOwnProperty.call(environment, configKey) ? environment[configKey] : config.parsed[configKey];
329
+ config.parsed[configKey] = _interpolate(value, environment, config);
321
330
  }
322
- return newEnv.replace(replacePart, value);
323
- }, envValue);
324
- }
325
- function expand(config2) {
326
- const environment = config2.ignoreProcessEnv ? {} : process.env;
327
- for (const configKey in config2.parsed) {
328
- const value = Object.prototype.hasOwnProperty.call(environment, configKey) ? environment[configKey] : config2.parsed[configKey];
329
- config2.parsed[configKey] = _interpolate(value, environment, config2);
331
+ for (const processKey in config.parsed)
332
+ environment[processKey] = config.parsed[processKey];
333
+ return config;
330
334
  }
331
- for (const processKey in config2.parsed)
332
- environment[processKey] = config2.parsed[processKey];
333
- return config2;
335
+ return main.expand = expand, main;
334
336
  }
335
- var expand_1 = expand;
337
+ var mainExports = requireMain();
336
338
  function loadEnv(mode, envDir, prefixes = ["VITE_"]) {
337
339
  if (mode === "local")
338
340
  throw new Error(
@@ -352,12 +354,12 @@ function loadEnv(mode, envDir, prefixes = ["VITE_"]) {
352
354
  const envPath = lookupFile(envDir, [file], {
353
355
  rootDir: envDir
354
356
  });
355
- return envPath ? Object.entries(parse_1(fs__default.default.readFileSync(envPath))) : [];
357
+ return envPath ? Object.entries(mainExports$1.parse(fs__default.default.readFileSync(envPath))) : [];
356
358
  })
357
359
  );
358
360
  parsed.NODE_ENV && process.env.VITE_USER_NODE_ENV === void 0 && (process.env.VITE_USER_NODE_ENV = parsed.NODE_ENV), parsed.BROWSER && process.env.BROWSER === void 0 && (process.env.BROWSER = parsed.BROWSER), parsed.BROWSER_ARGS && process.env.BROWSER_ARGS === void 0 && (process.env.BROWSER_ARGS = parsed.BROWSER_ARGS);
359
361
  try {
360
- expand_1({ parsed });
362
+ mainExports.expand({ parsed });
361
363
  } catch (e) {
362
364
  throw e.message.includes("split") ? new Error("dotenv-expand failed to expand env vars. Maybe you need to escape `$`?") : e;
363
365
  }
@@ -1 +1 @@
1
- {"version":3,"file":"loadEnv.js","sources":["../../src/debug.ts","../../src/util/resolveRootDir.ts","../../../../../node_modules/.pnpm/dotenv@16.4.5/node_modules/dotenv/lib/main.js","../../../../../node_modules/.pnpm/dotenv-expand@9.0.0/node_modules/dotenv-expand/lib/main.js","../../src/util/loadEnv.ts"],"sourcesContent":["import debugIt from 'debug'\n\nexport const debug = debugIt('sanity:cli')\n","/* eslint-disable no-sync */\nimport fs from 'node:fs'\nimport path from 'node:path'\n\nimport {debug} from '../debug'\n\n/**\n * Resolve project root directory, falling back to cwd if it cannot be found\n */\nexport function resolveRootDir(cwd: string): string {\n try {\n return resolveProjectRoot(cwd) || cwd\n } catch (err) {\n throw new Error(`Error occurred trying to resolve project root:\\n${err.message}`)\n }\n}\n\nfunction hasStudioConfig(basePath: string): boolean {\n const buildConfigs = [\n fileExists(path.join(basePath, 'sanity.config.js')),\n fileExists(path.join(basePath, 'sanity.config.ts')),\n isSanityV2StudioRoot(basePath),\n ]\n\n return buildConfigs.some(Boolean)\n}\n\nfunction resolveProjectRoot(basePath: string, iterations = 0): string | false {\n if (hasStudioConfig(basePath)) {\n return basePath\n }\n\n const parentDir = path.resolve(basePath, '..')\n if (parentDir === basePath || iterations > 30) {\n // Reached root (or max depth), give up\n return false\n }\n\n return resolveProjectRoot(parentDir, iterations + 1)\n}\n\nfunction isSanityV2StudioRoot(basePath: string): boolean {\n try {\n const content = fs.readFileSync(path.join(basePath, 'sanity.json'), 'utf8')\n const sanityJson = JSON.parse(content)\n const isRoot = Boolean(sanityJson?.root)\n if (isRoot) {\n debug('Found Sanity v2 studio root at %s', basePath)\n }\n return isRoot\n } catch (err) {\n return false\n }\n}\n\nfunction fileExists(filePath: string): boolean {\n return fs.existsSync(filePath)\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 _log (message) {\n console.log(`[dotenv@${version}][INFO] ${message}`)\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 _log('Loading env from encrypted .env.vault')\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","'use strict'\n\nfunction _interpolate (envValue, environment, config) {\n const matches = envValue.match(/(.?\\${*[\\w]*(?::-[\\w/]*)?}*)/g) || []\n\n return matches.reduce(function (newEnv, match, index) {\n const parts = /(.?)\\${*([\\w]*(?::-[\\w/]*)?)?}*/g.exec(match)\n if (!parts || parts.length === 0) {\n return newEnv\n }\n\n const prefix = parts[1]\n\n let value, replacePart\n\n if (prefix === '\\\\') {\n replacePart = parts[0]\n value = replacePart.replace('\\\\$', '$')\n } else {\n const keyParts = parts[2].split(':-')\n const key = keyParts[0]\n replacePart = parts[0].substring(prefix.length)\n // process.env value 'wins' over .env file's value\n value = Object.prototype.hasOwnProperty.call(environment, key)\n ? environment[key]\n : (config.parsed[key] || keyParts[1] || '')\n\n // If the value is found, remove nested expansions.\n if (keyParts.length > 1 && value) {\n const replaceNested = matches[index + 1]\n matches[index + 1] = ''\n\n newEnv = newEnv.replace(replaceNested, '')\n }\n // Resolve recursive interpolations\n value = _interpolate(value, environment, config)\n }\n\n return newEnv.replace(replacePart, value)\n }, envValue)\n}\n\nfunction expand (config) {\n // if ignoring process.env, use a blank object\n const environment = config.ignoreProcessEnv ? {} : process.env\n\n for (const configKey in config.parsed) {\n const value = Object.prototype.hasOwnProperty.call(environment, configKey) ? environment[configKey] : config.parsed[configKey]\n\n config.parsed[configKey] = _interpolate(value, environment, config)\n }\n\n for (const processKey in config.parsed) {\n environment[processKey] = config.parsed[processKey]\n }\n\n return config\n}\n\nmodule.exports.expand = expand\n","/**\n * This is an \"inlined\" version of Vite's `loadEnv` function,\n * simplified somewhat to only support our use case.\n *\n * Ideally we'd just use `loadEnv` from Vite, but importing it\n * causes bundling issues due to node APIs and downstream dependencies.\n *\n * Vite is MIT licensed, copyright (c) Yuxi (Evan) You and Vite contributors.\n */\n\n/* eslint-disable no-process-env */\nimport fs from 'node:fs'\nimport path from 'node:path'\n\nimport {parse} from 'dotenv'\nimport {expand} from 'dotenv-expand'\n\nexport function loadEnv(\n mode: string,\n envDir: string,\n prefixes: string[] = ['VITE_'],\n): Record<string, string> {\n if (mode === 'local') {\n throw new Error(\n `\"local\" cannot be used as a mode name because it conflicts with ` +\n `the .local postfix for .env files.`,\n )\n }\n\n const env: Record<string, string> = {}\n const envFiles = [\n /** default file */ `.env`,\n /** local file */ `.env.local`,\n /** mode file */ `.env.${mode}`,\n /** mode local file */ `.env.${mode}.local`,\n ]\n\n const parsed = Object.fromEntries(\n envFiles.flatMap((file) => {\n const envPath = lookupFile(envDir, [file], {\n rootDir: envDir,\n })\n if (!envPath) return []\n return Object.entries(parse(fs.readFileSync(envPath)))\n }),\n )\n\n // test NODE_ENV override before expand as otherwise process.env.NODE_ENV would override this\n if (parsed.NODE_ENV && process.env.VITE_USER_NODE_ENV === undefined) {\n process.env.VITE_USER_NODE_ENV = parsed.NODE_ENV\n }\n // support BROWSER and BROWSER_ARGS env variables\n if (parsed.BROWSER && process.env.BROWSER === undefined) {\n process.env.BROWSER = parsed.BROWSER\n }\n if (parsed.BROWSER_ARGS && process.env.BROWSER_ARGS === undefined) {\n process.env.BROWSER_ARGS = parsed.BROWSER_ARGS\n }\n\n try {\n // let environment variables use each other\n expand({parsed})\n } catch (e) {\n // custom error handling until https://github.com/motdotla/dotenv-expand/issues/65 is fixed upstream\n // check for message \"TypeError: Cannot read properties of undefined (reading 'split')\"\n if (e.message.includes('split')) {\n throw new Error('dotenv-expand failed to expand env vars. Maybe you need to escape `$`?')\n }\n throw e\n }\n\n // only keys that start with prefix are exposed to client\n for (const [key, value] of Object.entries(parsed)) {\n if (prefixes.some((prefix) => key.startsWith(prefix))) {\n env[key] = value\n }\n }\n\n // check if there are actual env variables starting with VITE_*\n // these are typically provided inline and should be prioritized\n for (const key in process.env) {\n if (prefixes.some((prefix) => key.startsWith(prefix))) {\n env[key] = process.env[key] as string\n }\n }\n\n return env\n}\n\nfunction lookupFile(\n dir: string,\n formats: string[],\n options?: {\n rootDir?: string\n },\n): string | undefined {\n for (const format of formats) {\n const fullPath = path.join(dir, format)\n // eslint-disable-next-line no-sync\n if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {\n return fullPath\n }\n }\n const parentDir = path.dirname(dir)\n if (parentDir !== dir && (!options?.rootDir || parentDir.startsWith(options?.rootDir))) {\n return lookupFile(parentDir, formats, options)\n }\n\n return undefined\n}\n"],"names":["debugIt","path","fs","require$$0","require$$1","require$$2","require$$3","debug","mainModule","config","parse","expand"],"mappings":"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","x_google_ignoreList":[2,3]}
1
+ {"version":3,"file":"loadEnv.js","sources":["../../src/debug.ts","../../src/util/resolveRootDir.ts","../../../../../node_modules/.pnpm/dotenv@16.4.5/node_modules/dotenv/lib/main.js","../../../../../node_modules/.pnpm/dotenv-expand@9.0.0/node_modules/dotenv-expand/lib/main.js","../../src/util/loadEnv.ts"],"sourcesContent":["import debugIt from 'debug'\n\nexport const debug = debugIt('sanity:cli')\n","/* eslint-disable no-sync */\nimport fs from 'node:fs'\nimport path from 'node:path'\n\nimport {debug} from '../debug'\n\n/**\n * Resolve project root directory, falling back to cwd if it cannot be found\n */\nexport function resolveRootDir(cwd: string): string {\n try {\n return resolveProjectRoot(cwd) || cwd\n } catch (err) {\n throw new Error(`Error occurred trying to resolve project root:\\n${err.message}`)\n }\n}\n\nfunction hasStudioConfig(basePath: string): boolean {\n const buildConfigs = [\n fileExists(path.join(basePath, 'sanity.config.js')),\n fileExists(path.join(basePath, 'sanity.config.ts')),\n isSanityV2StudioRoot(basePath),\n ]\n\n return buildConfigs.some(Boolean)\n}\n\nfunction resolveProjectRoot(basePath: string, iterations = 0): string | false {\n if (hasStudioConfig(basePath)) {\n return basePath\n }\n\n const parentDir = path.resolve(basePath, '..')\n if (parentDir === basePath || iterations > 30) {\n // Reached root (or max depth), give up\n return false\n }\n\n return resolveProjectRoot(parentDir, iterations + 1)\n}\n\nfunction isSanityV2StudioRoot(basePath: string): boolean {\n try {\n const content = fs.readFileSync(path.join(basePath, 'sanity.json'), 'utf8')\n const sanityJson = JSON.parse(content)\n const isRoot = Boolean(sanityJson?.root)\n if (isRoot) {\n debug('Found Sanity v2 studio root at %s', basePath)\n }\n return isRoot\n } catch (err) {\n return false\n }\n}\n\nfunction fileExists(filePath: string): boolean {\n return fs.existsSync(filePath)\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 _log (message) {\n console.log(`[dotenv@${version}][INFO] ${message}`)\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 _log('Loading env from encrypted .env.vault')\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","'use strict'\n\nfunction _interpolate (envValue, environment, config) {\n const matches = envValue.match(/(.?\\${*[\\w]*(?::-[\\w/]*)?}*)/g) || []\n\n return matches.reduce(function (newEnv, match, index) {\n const parts = /(.?)\\${*([\\w]*(?::-[\\w/]*)?)?}*/g.exec(match)\n if (!parts || parts.length === 0) {\n return newEnv\n }\n\n const prefix = parts[1]\n\n let value, replacePart\n\n if (prefix === '\\\\') {\n replacePart = parts[0]\n value = replacePart.replace('\\\\$', '$')\n } else {\n const keyParts = parts[2].split(':-')\n const key = keyParts[0]\n replacePart = parts[0].substring(prefix.length)\n // process.env value 'wins' over .env file's value\n value = Object.prototype.hasOwnProperty.call(environment, key)\n ? environment[key]\n : (config.parsed[key] || keyParts[1] || '')\n\n // If the value is found, remove nested expansions.\n if (keyParts.length > 1 && value) {\n const replaceNested = matches[index + 1]\n matches[index + 1] = ''\n\n newEnv = newEnv.replace(replaceNested, '')\n }\n // Resolve recursive interpolations\n value = _interpolate(value, environment, config)\n }\n\n return newEnv.replace(replacePart, value)\n }, envValue)\n}\n\nfunction expand (config) {\n // if ignoring process.env, use a blank object\n const environment = config.ignoreProcessEnv ? {} : process.env\n\n for (const configKey in config.parsed) {\n const value = Object.prototype.hasOwnProperty.call(environment, configKey) ? environment[configKey] : config.parsed[configKey]\n\n config.parsed[configKey] = _interpolate(value, environment, config)\n }\n\n for (const processKey in config.parsed) {\n environment[processKey] = config.parsed[processKey]\n }\n\n return config\n}\n\nmodule.exports.expand = expand\n","/**\n * This is an \"inlined\" version of Vite's `loadEnv` function,\n * simplified somewhat to only support our use case.\n *\n * Ideally we'd just use `loadEnv` from Vite, but importing it\n * causes bundling issues due to node APIs and downstream dependencies.\n *\n * Vite is MIT licensed, copyright (c) Yuxi (Evan) You and Vite contributors.\n */\n\n/* eslint-disable no-process-env */\nimport fs from 'node:fs'\nimport path from 'node:path'\n\nimport {parse} from 'dotenv'\nimport {expand} from 'dotenv-expand'\n\nexport function loadEnv(\n mode: string,\n envDir: string,\n prefixes: string[] = ['VITE_'],\n): Record<string, string> {\n if (mode === 'local') {\n throw new Error(\n `\"local\" cannot be used as a mode name because it conflicts with ` +\n `the .local postfix for .env files.`,\n )\n }\n\n const env: Record<string, string> = {}\n const envFiles = [\n /** default file */ `.env`,\n /** local file */ `.env.local`,\n /** mode file */ `.env.${mode}`,\n /** mode local file */ `.env.${mode}.local`,\n ]\n\n const parsed = Object.fromEntries(\n envFiles.flatMap((file) => {\n const envPath = lookupFile(envDir, [file], {\n rootDir: envDir,\n })\n if (!envPath) return []\n return Object.entries(parse(fs.readFileSync(envPath)))\n }),\n )\n\n // test NODE_ENV override before expand as otherwise process.env.NODE_ENV would override this\n if (parsed.NODE_ENV && process.env.VITE_USER_NODE_ENV === undefined) {\n process.env.VITE_USER_NODE_ENV = parsed.NODE_ENV\n }\n // support BROWSER and BROWSER_ARGS env variables\n if (parsed.BROWSER && process.env.BROWSER === undefined) {\n process.env.BROWSER = parsed.BROWSER\n }\n if (parsed.BROWSER_ARGS && process.env.BROWSER_ARGS === undefined) {\n process.env.BROWSER_ARGS = parsed.BROWSER_ARGS\n }\n\n try {\n // let environment variables use each other\n expand({parsed})\n } catch (e) {\n // custom error handling until https://github.com/motdotla/dotenv-expand/issues/65 is fixed upstream\n // check for message \"TypeError: Cannot read properties of undefined (reading 'split')\"\n if (e.message.includes('split')) {\n throw new Error('dotenv-expand failed to expand env vars. Maybe you need to escape `$`?')\n }\n throw e\n }\n\n // only keys that start with prefix are exposed to client\n for (const [key, value] of Object.entries(parsed)) {\n if (prefixes.some((prefix) => key.startsWith(prefix))) {\n env[key] = value\n }\n }\n\n // check if there are actual env variables starting with VITE_*\n // these are typically provided inline and should be prioritized\n for (const key in process.env) {\n if (prefixes.some((prefix) => key.startsWith(prefix))) {\n env[key] = process.env[key] as string\n }\n }\n\n return env\n}\n\nfunction lookupFile(\n dir: string,\n formats: string[],\n options?: {\n rootDir?: string\n },\n): string | undefined {\n for (const format of formats) {\n const fullPath = path.join(dir, format)\n // eslint-disable-next-line no-sync\n if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {\n return fullPath\n }\n }\n const parentDir = path.dirname(dir)\n if (parentDir !== dir && (!options?.rootDir || parentDir.startsWith(options?.rootDir))) {\n return lookupFile(parentDir, formats, options)\n }\n\n return undefined\n}\n"],"names":["debugIt","path","fs","require$$0","require$$1","require$$2","require$$3","version","debug","mainModule","parse","expand"],"mappings":"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","x_google_ignoreList":[2,3]}