@sanity/cli 4.3.1-next.12 → 4.3.1-next.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/_chunks-cjs/cli.js +82 -82
- package/lib/_chunks-cjs/cli.js.map +1 -1
- package/lib/_chunks-cjs/getCliConfig.js +17 -9
- package/lib/_chunks-cjs/getCliConfig.js.map +1 -1
- package/lib/_chunks-cjs/loadEnv.js +12 -14
- package/lib/_chunks-cjs/loadEnv.js.map +1 -1
- package/lib/index.mjs +10 -6
- package/lib/index.mjs.map +1 -1
- package/package.json +7 -7
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var fs = require("node:fs"), path = require("node:path"), node_worker_threads = require("node:worker_threads"), cliWorker = require("./cliWorker.js");
|
|
2
|
+
var fs = require("node:fs"), path = require("node:path"), node_worker_threads = require("node:worker_threads"), debugIt = require("debug"), cliWorker = require("./cliWorker.js");
|
|
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), path__default = /* @__PURE__ */ _interopDefaultCompat(path);
|
|
7
|
-
const requireFunc = typeof __webpack_require__ == "function" ? __non_webpack_require__ : require;
|
|
6
|
+
var fs__default = /* @__PURE__ */ _interopDefaultCompat(fs), path__default = /* @__PURE__ */ _interopDefaultCompat(path), debugIt__default = /* @__PURE__ */ _interopDefaultCompat(debugIt);
|
|
7
|
+
const debug = debugIt__default.default("sanity:cli"), requireFunc = typeof __webpack_require__ == "function" ? __non_webpack_require__ : require;
|
|
8
8
|
function dynamicRequire(request) {
|
|
9
9
|
const mod = requireFunc(request);
|
|
10
10
|
return mod.__esModule && mod.default ? mod.default : mod;
|
|
11
11
|
}
|
|
12
12
|
dynamicRequire.resolve = requireFunc.resolve;
|
|
13
|
+
dynamicRequire.cache = requireFunc.cache;
|
|
13
14
|
async function getCliConfig(cwd, { forked } = {}) {
|
|
15
|
+
let clearCache = !1;
|
|
14
16
|
if (forked)
|
|
15
17
|
try {
|
|
16
18
|
return await getCliConfigForked(cwd);
|
|
17
|
-
} catch {
|
|
19
|
+
} catch (err) {
|
|
20
|
+
debug("Error in getCliConfigForked", err), clearCache = !0;
|
|
18
21
|
}
|
|
19
22
|
const { unregister } = (
|
|
20
23
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
21
24
|
require("esbuild-register/dist/node").register({ supported: { "dynamic-import": !0 } })
|
|
22
25
|
);
|
|
23
26
|
try {
|
|
24
|
-
return getSanityCliConfig(cwd) || getSanityJsonConfig(cwd);
|
|
27
|
+
return getSanityCliConfig(cwd, clearCache) || getSanityJsonConfig(cwd);
|
|
25
28
|
} catch (err) {
|
|
26
29
|
throw err;
|
|
27
30
|
} finally {
|
|
@@ -58,14 +61,14 @@ function getSanityJsonConfig(cwd) {
|
|
|
58
61
|
version: 2
|
|
59
62
|
} : null;
|
|
60
63
|
}
|
|
61
|
-
function getSanityCliConfig(cwd) {
|
|
64
|
+
function getSanityCliConfig(cwd, clearCache = !1) {
|
|
62
65
|
const jsConfigPath = path__default.default.join(cwd, "sanity.cli.js"), tsConfigPath = path__default.default.join(cwd, "sanity.cli.ts"), [js, ts] = [fs__default.default.existsSync(jsConfigPath), fs__default.default.existsSync(tsConfigPath)];
|
|
63
66
|
return !js && !ts ? null : !js && ts ? {
|
|
64
|
-
config: importConfig(tsConfigPath),
|
|
67
|
+
config: importConfig(tsConfigPath, clearCache),
|
|
65
68
|
path: tsConfigPath,
|
|
66
69
|
version: 3
|
|
67
70
|
} : (js && ts && warn("Found both `sanity.cli.js` and `sanity.cli.ts` - using sanity.cli.js"), {
|
|
68
|
-
config: importConfig(jsConfigPath),
|
|
71
|
+
config: importConfig(jsConfigPath, clearCache),
|
|
69
72
|
path: jsConfigPath,
|
|
70
73
|
version: 3
|
|
71
74
|
});
|
|
@@ -78,8 +81,12 @@ function loadJsonConfig(filePath) {
|
|
|
78
81
|
return console.error(`Error reading "${filePath}": ${err.message}`), null;
|
|
79
82
|
}
|
|
80
83
|
}
|
|
81
|
-
function importConfig(filePath) {
|
|
84
|
+
function importConfig(filePath, clearCache) {
|
|
82
85
|
try {
|
|
86
|
+
if (clearCache) {
|
|
87
|
+
const resolvedPath = dynamicRequire.resolve(filePath);
|
|
88
|
+
delete dynamicRequire.cache[resolvedPath];
|
|
89
|
+
}
|
|
83
90
|
const config = dynamicRequire(filePath);
|
|
84
91
|
if (config === null || typeof config != "object")
|
|
85
92
|
throw new Error("Module export is not a configuration object");
|
|
@@ -91,6 +98,7 @@ function importConfig(filePath) {
|
|
|
91
98
|
function warn(warning) {
|
|
92
99
|
typeof process.send == "function" ? process.send({ type: "warning", warning }) : console.warn(warning);
|
|
93
100
|
}
|
|
101
|
+
exports.debug = debug;
|
|
94
102
|
exports.dynamicRequire = dynamicRequire;
|
|
95
103
|
exports.getCliConfig = getCliConfig;
|
|
96
104
|
exports.getCliConfigSync = getCliConfigSync;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getCliConfig.js","sources":["../../src/util/dynamicRequire.ts","../../src/util/getCliConfig.ts"],"sourcesContent":["// Prevent webpack from bundling in webpack context,\n// use regular node require for unbundled context\n\n/* eslint-disable camelcase */\ndeclare const __webpack_require__: boolean\ndeclare const __non_webpack_require__: typeof require\n\nconst requireFunc: typeof require =\n typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require\n/* eslint-enable camelcase */\n\nexport function dynamicRequire<T = any>(request: string): T {\n const mod = requireFunc(request)\n return mod.__esModule && mod.default ? mod.default : mod\n}\n\ndynamicRequire.resolve = requireFunc.resolve\n","/**\n * Reads the Sanity CLI config from one of the following files (in preferred order):\n * - sanity.cli.js\n * - sanity.cli.ts\n *\n * Note: There are two ways of using this:\n * a) `getCliConfig(cwd)`\n * b) `getCliConfig(cwd, {forked: true})`\n *\n * Approach a is generally a bit faster as it avoids the forking startup time, while\n * approach b could be considered \"safer\" since any side-effects of running the config\n * file will not bleed into the current CLI process directly.\n */\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport {Worker} from 'node:worker_threads'\n\nimport {type CliConfig, type SanityJson} from '../types'\nimport {getCliWorkerPath} from './cliWorker'\nimport {dynamicRequire} from './dynamicRequire'\n\nexport type CliMajorVersion = 2 | 3\n\nexport type CliConfigResult =\n | {config: SanityJson; path: string; version: 2}\n | {config: CliConfig; path: string; version: 3}\n | {config: null; path: string; version: CliMajorVersion}\n\nexport async function getCliConfig(\n cwd: string,\n {forked}: {forked?: boolean} = {},\n): Promise<CliConfigResult | null> {\n if (forked) {\n try {\n return await getCliConfigForked(cwd)\n } catch {\n // Intentional noop - try unforked variant\n }\n }\n\n const {unregister} = __DEV__\n ? {unregister: () => undefined}\n : // eslint-disable-next-line @typescript-eslint/no-require-imports\n require('esbuild-register/dist/node').register({supported: {'dynamic-import': true}})\n\n try {\n const v3Config = getSanityCliConfig(cwd)\n if (v3Config) {\n return v3Config\n }\n\n return getSanityJsonConfig(cwd)\n } catch (err) {\n throw err\n } finally {\n unregister()\n }\n}\n\nexport function getCliConfigSync(cwd: string): CliConfigResult | null {\n const v3Config = getSanityCliConfig(cwd)\n return v3Config ? v3Config : getSanityJsonConfig(cwd)\n}\n\nasync function getCliConfigForked(cwd: string): Promise<CliConfigResult | null> {\n const workerPath = await getCliWorkerPath('getCliConfig')\n return new Promise((resolve, reject) => {\n const worker = new Worker(workerPath, {\n workerData: cwd,\n env: process.env,\n })\n worker.on('message', (message) => {\n if (message.type === 'config') {\n resolve(message.config)\n } else {\n const error = new Error(message.error)\n ;(error as any).type = message.errorType\n reject(new Error(message.error))\n }\n })\n worker.on('error', reject)\n worker.on('exit', (code) => {\n if (code !== 0) {\n reject(new Error(`Worker stopped with exit code ${code}`))\n }\n })\n })\n}\n\nfunction getSanityJsonConfig(cwd: string): CliConfigResult | null {\n const configPath = path.join(cwd, 'sanity.json')\n\n if (!fs.existsSync(configPath)) {\n return null\n }\n\n return {\n config: loadJsonConfig(configPath),\n path: configPath,\n version: 2,\n }\n}\n\nfunction getSanityCliConfig(cwd: string): CliConfigResult | null {\n const jsConfigPath = path.join(cwd, 'sanity.cli.js')\n const tsConfigPath = path.join(cwd, 'sanity.cli.ts')\n\n const [js, ts] = [fs.existsSync(jsConfigPath), fs.existsSync(tsConfigPath)]\n\n if (!js && !ts) {\n return null\n }\n\n if (!js && ts) {\n return {\n config: importConfig(tsConfigPath),\n path: tsConfigPath,\n version: 3,\n }\n }\n\n if (js && ts) {\n warn('Found both `sanity.cli.js` and `sanity.cli.ts` - using sanity.cli.js')\n }\n\n return {\n config: importConfig(jsConfigPath),\n path: jsConfigPath,\n version: 3,\n }\n}\n\nfunction loadJsonConfig(filePath: string): SanityJson | null {\n try {\n const content = fs.readFileSync(filePath, 'utf8')\n return JSON.parse(content)\n } catch (err) {\n console.error(`Error reading \"${filePath}\": ${err.message}`)\n return null\n }\n}\n\nfunction importConfig(filePath: string): CliConfig | null {\n try {\n const config = dynamicRequire<CliConfig | {default: CliConfig} | null>(filePath)\n if (config === null || typeof config !== 'object') {\n throw new Error('Module export is not a configuration object')\n }\n\n return 'default' in config ? config.default : config\n } catch (err) {\n // If attempting to import `defineCliConfig` or similar from `sanity/cli`,\n // accept the fact that it might not be installed. Instead, let the CLI\n // give a warning about the `sanity` module not being installed\n if (err.code === 'MODULE_NOT_FOUND' && err.message.includes('sanity/cli')) {\n return null\n }\n\n console.error(`Error reading \"${filePath}\": ${err.message}`)\n return null\n }\n}\n\nfunction warn(warning: string) {\n if (typeof process.send === 'function') {\n process.send({type: 'warning', warning})\n } else {\n console.warn(warning)\n }\n}\n"],"names":["getCliWorkerPath","Worker","path","fs"],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"getCliConfig.js","sources":["../../src/debug.ts","../../src/util/dynamicRequire.ts","../../src/util/getCliConfig.ts"],"sourcesContent":["import debugIt from 'debug'\n\nexport const debug = debugIt('sanity:cli')\n","// Prevent webpack from bundling in webpack context,\n// use regular node require for unbundled context\n\n/* eslint-disable camelcase */\ndeclare const __webpack_require__: boolean\ndeclare const __non_webpack_require__: typeof require\n\nconst requireFunc: typeof require =\n typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require\n/* eslint-enable camelcase */\n\nexport function dynamicRequire<T = any>(request: string): T {\n const mod = requireFunc(request)\n return mod.__esModule && mod.default ? mod.default : mod\n}\n\ndynamicRequire.resolve = requireFunc.resolve\ndynamicRequire.cache = requireFunc.cache\n","/**\n * Reads the Sanity CLI config from one of the following files (in preferred order):\n * - sanity.cli.js\n * - sanity.cli.ts\n *\n * Note: There are two ways of using this:\n * a) `getCliConfig(cwd)`\n * b) `getCliConfig(cwd, {forked: true})`\n *\n * Approach a is generally a bit faster as it avoids the forking startup time, while\n * approach b could be considered \"safer\" since any side-effects of running the config\n * file will not bleed into the current CLI process directly.\n */\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport {Worker} from 'node:worker_threads'\n\nimport {debug} from '../debug'\nimport {type CliConfig, type SanityJson} from '../types'\nimport {getCliWorkerPath} from './cliWorker'\nimport {dynamicRequire} from './dynamicRequire'\n\nexport type CliMajorVersion = 2 | 3\n\nexport type CliConfigResult =\n | {config: SanityJson; path: string; version: 2}\n | {config: CliConfig; path: string; version: 3}\n | {config: null; path: string; version: CliMajorVersion}\n\nexport async function getCliConfig(\n cwd: string,\n {forked}: {forked?: boolean} = {},\n): Promise<CliConfigResult | null> {\n let clearCache = false\n if (forked) {\n try {\n return await getCliConfigForked(cwd)\n } catch (err) {\n debug('Error in getCliConfigForked', err)\n clearCache = true\n // Intentional noop - try unforked variant\n }\n }\n\n const {unregister} = __DEV__\n ? {unregister: () => undefined}\n : // eslint-disable-next-line @typescript-eslint/no-require-imports\n require('esbuild-register/dist/node').register({supported: {'dynamic-import': true}})\n\n try {\n // If forked execution failed, we need to clear the cache to reload the env vars\n const v3Config = getSanityCliConfig(cwd, clearCache)\n if (v3Config) {\n return v3Config\n }\n\n return getSanityJsonConfig(cwd)\n } catch (err) {\n throw err\n } finally {\n unregister()\n }\n}\n\nexport function getCliConfigSync(cwd: string): CliConfigResult | null {\n const v3Config = getSanityCliConfig(cwd)\n return v3Config ? v3Config : getSanityJsonConfig(cwd)\n}\n\nasync function getCliConfigForked(cwd: string): Promise<CliConfigResult | null> {\n const workerPath = await getCliWorkerPath('getCliConfig')\n return new Promise((resolve, reject) => {\n const worker = new Worker(workerPath, {\n workerData: cwd,\n env: process.env,\n })\n worker.on('message', (message) => {\n if (message.type === 'config') {\n resolve(message.config)\n } else {\n const error = new Error(message.error)\n ;(error as any).type = message.errorType\n reject(new Error(message.error))\n }\n })\n worker.on('error', reject)\n worker.on('exit', (code) => {\n if (code !== 0) {\n reject(new Error(`Worker stopped with exit code ${code}`))\n }\n })\n })\n}\n\nfunction getSanityJsonConfig(cwd: string): CliConfigResult | null {\n const configPath = path.join(cwd, 'sanity.json')\n\n if (!fs.existsSync(configPath)) {\n return null\n }\n\n return {\n config: loadJsonConfig(configPath),\n path: configPath,\n version: 2,\n }\n}\n\nfunction getSanityCliConfig(cwd: string, clearCache = false): CliConfigResult | null {\n const jsConfigPath = path.join(cwd, 'sanity.cli.js')\n const tsConfigPath = path.join(cwd, 'sanity.cli.ts')\n\n const [js, ts] = [fs.existsSync(jsConfigPath), fs.existsSync(tsConfigPath)]\n\n if (!js && !ts) {\n return null\n }\n\n if (!js && ts) {\n return {\n config: importConfig(tsConfigPath, clearCache),\n path: tsConfigPath,\n version: 3,\n }\n }\n\n if (js && ts) {\n warn('Found both `sanity.cli.js` and `sanity.cli.ts` - using sanity.cli.js')\n }\n\n return {\n config: importConfig(jsConfigPath, clearCache),\n path: jsConfigPath,\n version: 3,\n }\n}\n\nfunction loadJsonConfig(filePath: string): SanityJson | null {\n try {\n const content = fs.readFileSync(filePath, 'utf8')\n return JSON.parse(content)\n } catch (err) {\n console.error(`Error reading \"${filePath}\": ${err.message}`)\n return null\n }\n}\n\nfunction importConfig(filePath: string, clearCache: boolean): CliConfig | null {\n try {\n // Clear module cache if requested (needed for env var reload)\n if (clearCache) {\n const resolvedPath = dynamicRequire.resolve(filePath)\n delete dynamicRequire.cache[resolvedPath]\n }\n\n const config = dynamicRequire<CliConfig | {default: CliConfig} | null>(filePath)\n if (config === null || typeof config !== 'object') {\n throw new Error('Module export is not a configuration object')\n }\n\n return 'default' in config ? config.default : config\n } catch (err) {\n // If attempting to import `defineCliConfig` or similar from `sanity/cli`,\n // accept the fact that it might not be installed. Instead, let the CLI\n // give a warning about the `sanity` module not being installed\n if (err.code === 'MODULE_NOT_FOUND' && err.message.includes('sanity/cli')) {\n return null\n }\n\n console.error(`Error reading \"${filePath}\": ${err.message}`)\n return null\n }\n}\n\nfunction warn(warning: string) {\n if (typeof process.send === 'function') {\n process.send({type: 'warning', warning})\n } else {\n console.warn(warning)\n }\n}\n"],"names":["debugIt","getCliWorkerPath","Worker","path","fs"],"mappings":";;;;;;AAEO,MAAM,QAAQA,iBAAAA,QAAQ,YAAY,GCKnC,cACJ,OAAO,uBAAwB,aAAa,0BAA0B;AAGjE,SAAS,eAAwB,SAAoB;AAC1D,QAAM,MAAM,YAAY,OAAO;AAC/B,SAAO,IAAI,cAAc,IAAI,UAAU,IAAI,UAAU;AACvD;AAEA,eAAe,UAAU,YAAY;AACrC,eAAe,QAAQ,YAAY;ACYnC,eAAsB,aACpB,KACA,EAAC,OAAA,IAA8B,CAAA,GACE;AACjC,MAAI,aAAa;AACjB,MAAI;AACF,QAAI;AACF,aAAO,MAAM,mBAAmB,GAAG;AAAA,IACrC,SAAS,KAAK;AACZ,YAAM,+BAA+B,GAAG,GACxC,aAAa;AAAA,IAEf;AAGF,QAAM,EAAC,WAAA;AAAA;AAAA,IAGH,QAAQ,4BAA4B,EAAE,SAAS,EAAC,WAAW,EAAC,kBAAkB,KAAI,CAAE;AAAA;AAExF,MAAI;AAGF,WADiB,mBAAmB,KAAK,UAAU,KAK5C,oBAAoB,GAAG;AAAA,EAChC,SAAS,KAAK;AACZ,UAAM;AAAA,EACR,UAAA;AACE,eAAA;AAAA,EACF;AACF;AAEO,SAAS,iBAAiB,KAAqC;AAEpE,SADiB,mBAAmB,GAAG,KACV,oBAAoB,GAAG;AACtD;AAEA,eAAe,mBAAmB,KAA8C;AAC9E,QAAM,aAAa,MAAMC,UAAAA,iBAAiB,cAAc;AACxD,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAS,IAAIC,oBAAAA,OAAO,YAAY;AAAA,MACpC,YAAY;AAAA,MACZ,KAAK,QAAQ;AAAA,IAAA,CACd;AACD,WAAO,GAAG,WAAW,CAAC,YAAY;AAChC,UAAI,QAAQ,SAAS;AACnB,gBAAQ,QAAQ,MAAM;AAAA,WACjB;AACL,cAAM,QAAQ,IAAI,MAAM,QAAQ,KAAK;AACnC,cAAc,OAAO,QAAQ,WAC/B,OAAO,IAAI,MAAM,QAAQ,KAAK,CAAC;AAAA,MACjC;AAAA,IACF,CAAC,GACD,OAAO,GAAG,SAAS,MAAM,GACzB,OAAO,GAAG,QAAQ,CAAC,SAAS;AACtB,eAAS,KACX,OAAO,IAAI,MAAM,iCAAiC,IAAI,EAAE,CAAC;AAAA,IAE7D,CAAC;AAAA,EACH,CAAC;AACH;AAEA,SAAS,oBAAoB,KAAqC;AAChE,QAAM,aAAaC,cAAAA,QAAK,KAAK,KAAK,aAAa;AAE/C,SAAKC,YAAAA,QAAG,WAAW,UAAU,IAItB;AAAA,IACL,QAAQ,eAAe,UAAU;AAAA,IACjC,MAAM;AAAA,IACN,SAAS;AAAA,EAAA,IANF;AAQX;AAEA,SAAS,mBAAmB,KAAa,aAAa,IAA+B;AACnF,QAAM,eAAeD,sBAAK,KAAK,KAAK,eAAe,GAC7C,eAAeA,cAAAA,QAAK,KAAK,KAAK,eAAe,GAE7C,CAAC,IAAI,EAAE,IAAI,CAACC,oBAAG,WAAW,YAAY,GAAGA,YAAAA,QAAG,WAAW,YAAY,CAAC;AAE1E,SAAI,CAAC,MAAM,CAAC,KACH,OAGL,CAAC,MAAM,KACF;AAAA,IACL,QAAQ,aAAa,cAAc,UAAU;AAAA,IAC7C,MAAM;AAAA,IACN,SAAS;AAAA,EAAA,KAIT,MAAM,MACR,KAAK,sEAAsE,GAGtE;AAAA,IACL,QAAQ,aAAa,cAAc,UAAU;AAAA,IAC7C,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAEb;AAEA,SAAS,eAAe,UAAqC;AAC3D,MAAI;AACF,UAAM,UAAUA,YAAAA,QAAG,aAAa,UAAU,MAAM;AAChD,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B,SAAS,KAAK;AACZ,WAAA,QAAQ,MAAM,kBAAkB,QAAQ,MAAM,IAAI,OAAO,EAAE,GACpD;AAAA,EACT;AACF;AAEA,SAAS,aAAa,UAAkB,YAAuC;AAC7E,MAAI;AAEF,QAAI,YAAY;AACd,YAAM,eAAe,eAAe,QAAQ,QAAQ;AACpD,aAAO,eAAe,MAAM,YAAY;AAAA,IAC1C;AAEA,UAAM,SAAS,eAAwD,QAAQ;AAC/E,QAAI,WAAW,QAAQ,OAAO,UAAW;AACvC,YAAM,IAAI,MAAM,6CAA6C;AAG/D,WAAO,aAAa,SAAS,OAAO,UAAU;AAAA,EAChD,SAAS,KAAK;AAIZ,WAAI,IAAI,SAAS,sBAAsB,IAAI,QAAQ,SAAS,YAAY,KAIxE,QAAQ,MAAM,kBAAkB,QAAQ,MAAM,IAAI,OAAO,EAAE,GACpD;AAAA,EACT;AACF;AAEA,SAAS,KAAK,SAAiB;AACzB,SAAO,QAAQ,QAAS,aAC1B,QAAQ,KAAK,EAAC,MAAM,WAAW,QAAA,CAAQ,IAEvC,QAAQ,KAAK,OAAO;AAExB;;;;;"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var fs = require("node:fs"), path = require("node:path"),
|
|
2
|
+
var fs = require("node:fs"), path = require("node:path"), getCliConfig = require("./getCliConfig.js"), require$$0$1 = require("fs"), require$$0 = 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), path__default = /* @__PURE__ */ _interopDefaultCompat(path),
|
|
7
|
-
const debug = debugIt__default.default("sanity:cli");
|
|
6
|
+
var fs__default = /* @__PURE__ */ _interopDefaultCompat(fs), path__default = /* @__PURE__ */ _interopDefaultCompat(path), require$$0__default$1 = /* @__PURE__ */ _interopDefaultCompat(require$$0$1), require$$0__default = /* @__PURE__ */ _interopDefaultCompat(require$$0), require$$0__default$2 = /* @__PURE__ */ _interopDefaultCompat(require$$0$2), require$$3__default = /* @__PURE__ */ _interopDefaultCompat(require$$3);
|
|
8
7
|
function resolveRootDir(cwd) {
|
|
9
8
|
try {
|
|
10
9
|
return resolveProjectRoot(cwd) || cwd;
|
|
@@ -29,7 +28,7 @@ function resolveProjectRoot(basePath, iterations = 0) {
|
|
|
29
28
|
function isSanityV2StudioRoot(basePath) {
|
|
30
29
|
try {
|
|
31
30
|
const content = fs__default.default.readFileSync(path__default.default.join(basePath, "sanity.json"), "utf8"), isRoot = !!JSON.parse(content)?.root;
|
|
32
|
-
return isRoot && debug("Found Sanity v2 studio root at %s", basePath), isRoot;
|
|
31
|
+
return isRoot && getCliConfig.debug("Found Sanity v2 studio root at %s", basePath), isRoot;
|
|
33
32
|
} catch {
|
|
34
33
|
return !1;
|
|
35
34
|
}
|
|
@@ -166,8 +165,8 @@ function requireMain$1() {
|
|
|
166
165
|
return envPath[0] === "~" ? path2.join(os.homedir(), envPath.slice(1)) : envPath;
|
|
167
166
|
}
|
|
168
167
|
function _configVault(options) {
|
|
169
|
-
const
|
|
170
|
-
(
|
|
168
|
+
const debug = !!(options && options.debug), quiet = options && "quiet" in options ? options.quiet : !0;
|
|
169
|
+
(debug || !quiet) && _log("Loading env from encrypted .env.vault");
|
|
171
170
|
const parsed = DotenvModule._parseVault(options);
|
|
172
171
|
let processEnv = process.env;
|
|
173
172
|
return options && options.processEnv != null && (processEnv = options.processEnv), DotenvModule.populate(processEnv, parsed, options), { parsed };
|
|
@@ -175,8 +174,8 @@ function requireMain$1() {
|
|
|
175
174
|
function configDotenv(options) {
|
|
176
175
|
const dotenvPath = path2.resolve(process.cwd(), ".env");
|
|
177
176
|
let encoding = "utf8";
|
|
178
|
-
const
|
|
179
|
-
options && options.encoding ? encoding = options.encoding :
|
|
177
|
+
const debug = !!(options && options.debug), quiet = options && "quiet" in options ? options.quiet : !0;
|
|
178
|
+
options && options.encoding ? encoding = options.encoding : debug && _debug("No encoding is specified. UTF-8 is used by default");
|
|
180
179
|
let optionPaths = [dotenvPath];
|
|
181
180
|
if (options && options.path)
|
|
182
181
|
if (!Array.isArray(options.path))
|
|
@@ -193,17 +192,17 @@ function requireMain$1() {
|
|
|
193
192
|
const parsed = DotenvModule.parse(fs2.readFileSync(path3, { encoding }));
|
|
194
193
|
DotenvModule.populate(parsedAll, parsed, options);
|
|
195
194
|
} catch (e) {
|
|
196
|
-
|
|
195
|
+
debug && _debug(`Failed to load ${path3} ${e.message}`), lastError = e;
|
|
197
196
|
}
|
|
198
197
|
let processEnv = process.env;
|
|
199
|
-
if (options && options.processEnv != null && (processEnv = options.processEnv), DotenvModule.populate(processEnv, parsedAll, options),
|
|
198
|
+
if (options && options.processEnv != null && (processEnv = options.processEnv), DotenvModule.populate(processEnv, parsedAll, options), debug || !quiet) {
|
|
200
199
|
const keysCount = Object.keys(parsedAll).length, shortPaths = [];
|
|
201
200
|
for (const filePath of optionPaths)
|
|
202
201
|
try {
|
|
203
202
|
const relative = path2.relative(process.cwd(), filePath);
|
|
204
203
|
shortPaths.push(relative);
|
|
205
204
|
} catch (e) {
|
|
206
|
-
|
|
205
|
+
debug && _debug(`Failed to load ${filePath} ${e.message}`), lastError = e;
|
|
207
206
|
}
|
|
208
207
|
_log(`injecting env (${keysCount}) from ${shortPaths.join(",")}`);
|
|
209
208
|
}
|
|
@@ -236,13 +235,13 @@ function requireMain$1() {
|
|
|
236
235
|
}
|
|
237
236
|
}
|
|
238
237
|
function populate(processEnv, parsed, options = {}) {
|
|
239
|
-
const
|
|
238
|
+
const debug = !!(options && options.debug), override = !!(options && options.override);
|
|
240
239
|
if (typeof parsed != "object") {
|
|
241
240
|
const err = new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");
|
|
242
241
|
throw err.code = "OBJECT_REQUIRED", err;
|
|
243
242
|
}
|
|
244
243
|
for (const key of Object.keys(parsed))
|
|
245
|
-
Object.prototype.hasOwnProperty.call(processEnv, key) ? (override === !0 && (processEnv[key] = parsed[key]),
|
|
244
|
+
Object.prototype.hasOwnProperty.call(processEnv, key) ? (override === !0 && (processEnv[key] = parsed[key]), debug && _debug(override === !0 ? `"${key}" is already defined and WAS overwritten` : `"${key}" is already defined and was NOT overwritten`)) : processEnv[key] = parsed[key];
|
|
246
245
|
}
|
|
247
246
|
const DotenvModule = {
|
|
248
247
|
configDotenv,
|
|
@@ -338,7 +337,6 @@ function lookupFile(dir, formats, options) {
|
|
|
338
337
|
return lookupFile(parentDir, formats, options);
|
|
339
338
|
}
|
|
340
339
|
exports.commonjsGlobal = commonjsGlobal;
|
|
341
|
-
exports.debug = debug;
|
|
342
340
|
exports.dotenv = dotenv;
|
|
343
341
|
exports.getAugmentedNamespace = getAugmentedNamespace;
|
|
344
342
|
exports.getDefaultExportFromCjs = getDefaultExportFromCjs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadEnv.js","sources":["../../src/debug.ts","../../src/util/resolveRootDir.ts","../../../../../node_modules/.pnpm/dotenv@16.6.1/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","import 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 hasSanityConfig(basePath: string, configName: string): boolean {\n const buildConfigs = [\n fileExists(path.join(basePath, `${configName}.js`)),\n fileExists(path.join(basePath, `${configName}.ts`)),\n isSanityV2StudioRoot(basePath),\n ]\n\n return buildConfigs.some(Boolean)\n}\n\nfunction resolveProjectRoot(basePath: string, iterations = 0): string | false {\n const configName = 'sanity.config'\n if (hasSanityConfig(basePath, configName)) {\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 options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\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 _log (message) {\n console.log(`[dotenv@${version}] ${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 const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (debug || !quiet) {\n _log('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 const quiet = options && 'quiet' in options ? options.quiet : true\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 (debug || !quiet) {\n const keysCount = Object.keys(parsedAll).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n }\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\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 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]}
|
|
1
|
+
{"version":3,"file":"loadEnv.js","sources":["../../src/util/resolveRootDir.ts","../../../../../node_modules/.pnpm/dotenv@16.6.1/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 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 hasSanityConfig(basePath: string, configName: string): boolean {\n const buildConfigs = [\n fileExists(path.join(basePath, `${configName}.js`)),\n fileExists(path.join(basePath, `${configName}.ts`)),\n isSanityV2StudioRoot(basePath),\n ]\n\n return buildConfigs.some(Boolean)\n}\n\nfunction resolveProjectRoot(basePath: string, iterations = 0): string | false {\n const configName = 'sanity.config'\n if (hasSanityConfig(basePath, configName)) {\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 options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\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 _log (message) {\n console.log(`[dotenv@${version}] ${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 const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (debug || !quiet) {\n _log('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 const quiet = options && 'quiet' in options ? options.quiet : true\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 (debug || !quiet) {\n const keysCount = Object.keys(parsedAll).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n }\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\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 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":["path","fs","debug","require$$0","require$$1","require$$2","require$$3","version","mainModule","parse","expand"],"mappings":"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","x_google_ignoreList":[1,2]}
|
package/lib/index.mjs
CHANGED
|
@@ -6,12 +6,13 @@ import require$$0 from "fs";
|
|
|
6
6
|
import require$$1 from "path";
|
|
7
7
|
import require$$2 from "os";
|
|
8
8
|
import require$$3 from "crypto";
|
|
9
|
-
const requireFunc = typeof __webpack_require__ == "function" ? __non_webpack_require__ : require;
|
|
9
|
+
const debug = debugIt("sanity:cli"), requireFunc = typeof __webpack_require__ == "function" ? __non_webpack_require__ : require;
|
|
10
10
|
function dynamicRequire(request) {
|
|
11
11
|
const mod = requireFunc(request);
|
|
12
12
|
return mod.__esModule && mod.default ? mod.default : mod;
|
|
13
13
|
}
|
|
14
14
|
dynamicRequire.resolve = requireFunc.resolve;
|
|
15
|
+
dynamicRequire.cache = requireFunc.cache;
|
|
15
16
|
function getCliConfigSync(cwd) {
|
|
16
17
|
return getSanityCliConfig(cwd) || getSanityJsonConfig(cwd);
|
|
17
18
|
}
|
|
@@ -23,14 +24,14 @@ function getSanityJsonConfig(cwd) {
|
|
|
23
24
|
version: 2
|
|
24
25
|
} : null;
|
|
25
26
|
}
|
|
26
|
-
function getSanityCliConfig(cwd) {
|
|
27
|
+
function getSanityCliConfig(cwd, clearCache = !1) {
|
|
27
28
|
const jsConfigPath = path.join(cwd, "sanity.cli.js"), tsConfigPath = path.join(cwd, "sanity.cli.ts"), [js, ts] = [fs.existsSync(jsConfigPath), fs.existsSync(tsConfigPath)];
|
|
28
29
|
return !js && !ts ? null : !js && ts ? {
|
|
29
|
-
config: importConfig(tsConfigPath),
|
|
30
|
+
config: importConfig(tsConfigPath, clearCache),
|
|
30
31
|
path: tsConfigPath,
|
|
31
32
|
version: 3
|
|
32
33
|
} : (js && ts && warn("Found both `sanity.cli.js` and `sanity.cli.ts` - using sanity.cli.js"), {
|
|
33
|
-
config: importConfig(jsConfigPath),
|
|
34
|
+
config: importConfig(jsConfigPath, clearCache),
|
|
34
35
|
path: jsConfigPath,
|
|
35
36
|
version: 3
|
|
36
37
|
});
|
|
@@ -43,8 +44,12 @@ function loadJsonConfig(filePath) {
|
|
|
43
44
|
return console.error(`Error reading "${filePath}": ${err.message}`), null;
|
|
44
45
|
}
|
|
45
46
|
}
|
|
46
|
-
function importConfig(filePath) {
|
|
47
|
+
function importConfig(filePath, clearCache) {
|
|
47
48
|
try {
|
|
49
|
+
if (clearCache) {
|
|
50
|
+
const resolvedPath = dynamicRequire.resolve(filePath);
|
|
51
|
+
delete dynamicRequire.cache[resolvedPath];
|
|
52
|
+
}
|
|
48
53
|
const config = dynamicRequire(filePath);
|
|
49
54
|
if (config === null || typeof config != "object")
|
|
50
55
|
throw new Error("Module export is not a configuration object");
|
|
@@ -56,7 +61,6 @@ function importConfig(filePath) {
|
|
|
56
61
|
function warn(warning) {
|
|
57
62
|
typeof process.send == "function" ? process.send({ type: "warning", warning }) : console.warn(warning);
|
|
58
63
|
}
|
|
59
|
-
const debug = debugIt("sanity:cli");
|
|
60
64
|
function resolveRootDir(cwd) {
|
|
61
65
|
try {
|
|
62
66
|
return resolveProjectRoot(cwd) || cwd;
|
package/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/util/dynamicRequire.ts","../src/util/getCliConfig.ts","../src/debug.ts","../src/util/resolveRootDir.ts","../src/cliClient.ts","../src/config.ts","../../../../node_modules/.pnpm/dotenv@16.6.1/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":["// Prevent webpack from bundling in webpack context,\n// use regular node require for unbundled context\n\n/* eslint-disable camelcase */\ndeclare const __webpack_require__: boolean\ndeclare const __non_webpack_require__: typeof require\n\nconst requireFunc: typeof require =\n typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require\n/* eslint-enable camelcase */\n\nexport function dynamicRequire<T = any>(request: string): T {\n const mod = requireFunc(request)\n return mod.__esModule && mod.default ? mod.default : mod\n}\n\ndynamicRequire.resolve = requireFunc.resolve\n","/**\n * Reads the Sanity CLI config from one of the following files (in preferred order):\n * - sanity.cli.js\n * - sanity.cli.ts\n *\n * Note: There are two ways of using this:\n * a) `getCliConfig(cwd)`\n * b) `getCliConfig(cwd, {forked: true})`\n *\n * Approach a is generally a bit faster as it avoids the forking startup time, while\n * approach b could be considered \"safer\" since any side-effects of running the config\n * file will not bleed into the current CLI process directly.\n */\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport {Worker} from 'node:worker_threads'\n\nimport {type CliConfig, type SanityJson} from '../types'\nimport {getCliWorkerPath} from './cliWorker'\nimport {dynamicRequire} from './dynamicRequire'\n\nexport type CliMajorVersion = 2 | 3\n\nexport type CliConfigResult =\n | {config: SanityJson; path: string; version: 2}\n | {config: CliConfig; path: string; version: 3}\n | {config: null; path: string; version: CliMajorVersion}\n\nexport async function getCliConfig(\n cwd: string,\n {forked}: {forked?: boolean} = {},\n): Promise<CliConfigResult | null> {\n if (forked) {\n try {\n return await getCliConfigForked(cwd)\n } catch {\n // Intentional noop - try unforked variant\n }\n }\n\n const {unregister} = __DEV__\n ? {unregister: () => undefined}\n : // eslint-disable-next-line @typescript-eslint/no-require-imports\n require('esbuild-register/dist/node').register({supported: {'dynamic-import': true}})\n\n try {\n const v3Config = getSanityCliConfig(cwd)\n if (v3Config) {\n return v3Config\n }\n\n return getSanityJsonConfig(cwd)\n } catch (err) {\n throw err\n } finally {\n unregister()\n }\n}\n\nexport function getCliConfigSync(cwd: string): CliConfigResult | null {\n const v3Config = getSanityCliConfig(cwd)\n return v3Config ? v3Config : getSanityJsonConfig(cwd)\n}\n\nasync function getCliConfigForked(cwd: string): Promise<CliConfigResult | null> {\n const workerPath = await getCliWorkerPath('getCliConfig')\n return new Promise((resolve, reject) => {\n const worker = new Worker(workerPath, {\n workerData: cwd,\n env: process.env,\n })\n worker.on('message', (message) => {\n if (message.type === 'config') {\n resolve(message.config)\n } else {\n const error = new Error(message.error)\n ;(error as any).type = message.errorType\n reject(new Error(message.error))\n }\n })\n worker.on('error', reject)\n worker.on('exit', (code) => {\n if (code !== 0) {\n reject(new Error(`Worker stopped with exit code ${code}`))\n }\n })\n })\n}\n\nfunction getSanityJsonConfig(cwd: string): CliConfigResult | null {\n const configPath = path.join(cwd, 'sanity.json')\n\n if (!fs.existsSync(configPath)) {\n return null\n }\n\n return {\n config: loadJsonConfig(configPath),\n path: configPath,\n version: 2,\n }\n}\n\nfunction getSanityCliConfig(cwd: string): CliConfigResult | null {\n const jsConfigPath = path.join(cwd, 'sanity.cli.js')\n const tsConfigPath = path.join(cwd, 'sanity.cli.ts')\n\n const [js, ts] = [fs.existsSync(jsConfigPath), fs.existsSync(tsConfigPath)]\n\n if (!js && !ts) {\n return null\n }\n\n if (!js && ts) {\n return {\n config: importConfig(tsConfigPath),\n path: tsConfigPath,\n version: 3,\n }\n }\n\n if (js && ts) {\n warn('Found both `sanity.cli.js` and `sanity.cli.ts` - using sanity.cli.js')\n }\n\n return {\n config: importConfig(jsConfigPath),\n path: jsConfigPath,\n version: 3,\n }\n}\n\nfunction loadJsonConfig(filePath: string): SanityJson | null {\n try {\n const content = fs.readFileSync(filePath, 'utf8')\n return JSON.parse(content)\n } catch (err) {\n console.error(`Error reading \"${filePath}\": ${err.message}`)\n return null\n }\n}\n\nfunction importConfig(filePath: string): CliConfig | null {\n try {\n const config = dynamicRequire<CliConfig | {default: CliConfig} | null>(filePath)\n if (config === null || typeof config !== 'object') {\n throw new Error('Module export is not a configuration object')\n }\n\n return 'default' in config ? config.default : config\n } catch (err) {\n // If attempting to import `defineCliConfig` or similar from `sanity/cli`,\n // accept the fact that it might not be installed. Instead, let the CLI\n // give a warning about the `sanity` module not being installed\n if (err.code === 'MODULE_NOT_FOUND' && err.message.includes('sanity/cli')) {\n return null\n }\n\n console.error(`Error reading \"${filePath}\": ${err.message}`)\n return null\n }\n}\n\nfunction warn(warning: string) {\n if (typeof process.send === 'function') {\n process.send({type: 'warning', warning})\n } else {\n console.warn(warning)\n }\n}\n","import debugIt from 'debug'\n\nexport const debug = debugIt('sanity:cli')\n","import 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 hasSanityConfig(basePath: string, configName: string): boolean {\n const buildConfigs = [\n fileExists(path.join(basePath, `${configName}.js`)),\n fileExists(path.join(basePath, `${configName}.ts`)),\n isSanityV2StudioRoot(basePath),\n ]\n\n return buildConfigs.some(Boolean)\n}\n\nfunction resolveProjectRoot(basePath: string, iterations = 0): string | false {\n const configName = 'sanity.config'\n if (hasSanityConfig(basePath, configName)) {\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","import {createClient, type SanityClient} from '@sanity/client'\n\nimport {getCliConfigSync} from './util/getCliConfig'\nimport {resolveRootDir} from './util/resolveRootDir'\n\nexport interface CliClientOptions {\n cwd?: string\n\n projectId?: string\n dataset?: string\n useCdn?: boolean\n token?: string\n apiVersion?: string\n}\n\ninterface GetCliClient {\n (options?: CliClientOptions): SanityClient\n /**\n * @internal\n * @deprecated This is only for INTERNAL use, and should not be relied upon outside of official Sanity modules\n * @returns A token to use when constructing a client without a `token` explicitly defined, or undefined\n */\n __internal__getToken: () => string | undefined\n}\n\nfunction getCliClientImpl(options: CliClientOptions = {}): SanityClient {\n if (typeof process !== 'object') {\n throw new Error('getCliClient() should only be called from node.js scripts')\n }\n\n const {\n cwd = process.env.SANITY_BASE_PATH || process.cwd(),\n useCdn = false,\n apiVersion = '2022-06-06',\n projectId,\n dataset,\n token = getCliClient.__internal__getToken(),\n } = options\n\n if (projectId && dataset) {\n return createClient({projectId, dataset, apiVersion, useCdn, token})\n }\n\n const rootDir = resolveRootDir(cwd)\n const {config} = getCliConfigSync(rootDir) || {}\n if (!config) {\n throw new Error('Unable to resolve CLI configuration')\n }\n\n const apiConfig = config?.api || {}\n if (!apiConfig.projectId || !apiConfig.dataset) {\n throw new Error('Unable to resolve project ID/dataset from CLI configuration')\n }\n\n return createClient({\n projectId: apiConfig.projectId,\n dataset: apiConfig.dataset,\n apiVersion,\n useCdn,\n token,\n })\n}\n\n/* eslint-disable camelcase */\ngetCliClientImpl.__internal__getToken = (): string | undefined => undefined\n/* eslint-enable camelcase */\n\n/** @internal */\nexport const getCliClient: GetCliClient = getCliClientImpl\n","import {type CliConfig} from './types'\n\n/** @beta */\nexport function defineCliConfig(config: CliConfig): CliConfig {\n return config\n}\n\n/**\n * @deprecated Use `defineCliConfig` instead\n * @beta\n */\nexport function createCliConfig(config: CliConfig): CliConfig {\n return config\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 options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\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 _log (message) {\n console.log(`[dotenv@${version}] ${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 const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (debug || !quiet) {\n _log('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 const quiet = options && 'quiet' in options ? options.quiet : true\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 (debug || !quiet) {\n const keysCount = Object.keys(parsedAll).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n }\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\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 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":["fs","path","version","debug","mainModule","parse","expand"],"mappings":";;;;;;;;AAOA,MAAM,cACJ,OAAO,uBAAwB,aAAa,0BAA0B;AAGjE,SAAS,eAAwB,SAAoB;AAC1D,QAAM,MAAM,YAAY,OAAO;AAC/B,SAAO,IAAI,cAAc,IAAI,UAAU,IAAI,UAAU;AACvD;AAEA,eAAe,UAAU,YAAY;AC2C9B,SAAS,iBAAiB,KAAqC;AAEpE,SADiB,mBAAmB,GAAG,KACV,oBAAoB,GAAG;AACtD;AA2BA,SAAS,oBAAoB,KAAqC;AAChE,QAAM,aAAa,KAAK,KAAK,KAAK,aAAa;AAE/C,SAAK,GAAG,WAAW,UAAU,IAItB;AAAA,IACL,QAAQ,eAAe,UAAU;AAAA,IACjC,MAAM;AAAA,IACN,SAAS;AAAA,EAAA,IANF;AAQX;AAEA,SAAS,mBAAmB,KAAqC;AAC/D,QAAM,eAAe,KAAK,KAAK,KAAK,eAAe,GAC7C,eAAe,KAAK,KAAK,KAAK,eAAe,GAE7C,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,WAAW,YAAY,GAAG,GAAG,WAAW,YAAY,CAAC;AAE1E,SAAI,CAAC,MAAM,CAAC,KACH,OAGL,CAAC,MAAM,KACF;AAAA,IACL,QAAQ,aAAa,YAAY;AAAA,IACjC,MAAM;AAAA,IACN,SAAS;AAAA,EAAA,KAIT,MAAM,MACR,KAAK,sEAAsE,GAGtE;AAAA,IACL,QAAQ,aAAa,YAAY;AAAA,IACjC,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAEb;AAEA,SAAS,eAAe,UAAqC;AAC3D,MAAI;AACF,UAAM,UAAU,GAAG,aAAa,UAAU,MAAM;AAChD,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B,SAAS,KAAK;AACZ,WAAA,QAAQ,MAAM,kBAAkB,QAAQ,MAAM,IAAI,OAAO,EAAE,GACpD;AAAA,EACT;AACF;AAEA,SAAS,aAAa,UAAoC;AACxD,MAAI;AACF,UAAM,SAAS,eAAwD,QAAQ;AAC/E,QAAI,WAAW,QAAQ,OAAO,UAAW;AACvC,YAAM,IAAI,MAAM,6CAA6C;AAG/D,WAAO,aAAa,SAAS,OAAO,UAAU;AAAA,EAChD,SAAS,KAAK;AAIZ,WAAI,IAAI,SAAS,sBAAsB,IAAI,QAAQ,SAAS,YAAY,KAIxE,QAAQ,MAAM,kBAAkB,QAAQ,MAAM,IAAI,OAAO,EAAE,GACpD;AAAA,EACT;AACF;AAEA,SAAS,KAAK,SAAiB;AACzB,SAAO,QAAQ,QAAS,aAC1B,QAAQ,KAAK,EAAC,MAAM,WAAW,QAAA,CAAQ,IAEvC,QAAQ,KAAK,OAAO;AAExB;ACvKO,MAAM,QAAQ,QAAQ,YAAY;ACMlC,SAAS,eAAe,KAAqB;AAClD,MAAI;AACF,WAAO,mBAAmB,GAAG,KAAK;AAAA,EACpC,SAAS,KAAK;AACZ,UAAM,IAAI,MAAM;AAAA,EAAmD,IAAI,OAAO,EAAE;AAAA,EAClF;AACF;AAEA,SAAS,gBAAgB,UAAkB,YAA6B;AAOtE,SANqB;AAAA,IACnB,WAAW,KAAK,KAAK,UAAU,GAAG,UAAU,KAAK,CAAC;AAAA,IAClD,WAAW,KAAK,KAAK,UAAU,GAAG,UAAU,KAAK,CAAC;AAAA,IAClD,qBAAqB,QAAQ;AAAA,EAAA,EAGX,KAAK,OAAO;AAClC;AAEA,SAAS,mBAAmB,UAAkB,aAAa,GAAmB;AAE5E,MAAI,gBAAgB,UADD,eACqB;AACtC,WAAO;AAGT,QAAM,YAAY,KAAK,QAAQ,UAAU,IAAI;AAC7C,SAAI,cAAc,YAAY,aAAa,KAElC,KAGF,mBAAmB,WAAW,aAAa,CAAC;AACrD;AAEA,SAAS,qBAAqB,UAA2B;AACvD,MAAI;AACF,UAAM,UAAU,GAAG,aAAa,KAAK,KAAK,UAAU,aAAa,GAAG,MAAM,GAEpE,SAAS,CAAA,CADI,KAAK,MAAM,OAAO,GACF;AACnC,WAAI,UACF,MAAM,qCAAqC,QAAQ,GAE9C;AAAA,EACT,QAAc;AACZ,WAAO;AAAA,EACT;AACF;AAEA,SAAS,WAAW,UAA2B;AAC7C,SAAO,GAAG,WAAW,QAAQ;AAC/B;AChCA,SAAS,iBAAiB,UAA4B,IAAkB;AACtE,MAAI,OAAO,WAAY;AACrB,UAAM,IAAI,MAAM,2DAA2D;AAG7E,QAAM;AAAA,IACJ,MAAM,QAAQ,IAAI,oBAAoB,QAAQ,IAAA;AAAA,IAC9C,SAAS;AAAA,IACT,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,QAAQ,aAAa,qBAAA;AAAA,EAAqB,IACxC;AAEJ,MAAI,aAAa;AACf,WAAO,aAAa,EAAC,WAAW,SAAS,YAAY,QAAQ,OAAM;AAGrE,QAAM,UAAU,eAAe,GAAG,GAC5B,EAAC,WAAU,iBAAiB,OAAO,KAAK,CAAA;AAC9C,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,qCAAqC;AAGvD,QAAM,YAAY,QAAQ,OAAO,CAAA;AACjC,MAAI,CAAC,UAAU,aAAa,CAAC,UAAU;AACrC,UAAM,IAAI,MAAM,6DAA6D;AAG/E,SAAO,aAAa;AAAA,IAClB,WAAW,UAAU;AAAA,IACrB,SAAS,UAAU;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACH;AAGA,iBAAiB,uBAAuB,MAAuB;AAAA;AAIxD,MAAM,eAA6B;ACjEnC,SAAS,gBAAgB,QAA8B;AAC5D,SAAO;AACT;AAMO,SAAS,gBAAgB,QAA8B;AAC5D,SAAO;AACT;;;;;;;ACbA,QAAMA,MAAK,YACLC,QAAO,YACP,KAAK,YACL,SAAS,YAGTC,WAFc,WAEQ,SAEtB,OAAO;AAGb,WAAS,MAAO,KAAK;AACnB,UAAM,MAAM,CAAA;AAGZ,QAAI,QAAQ,IAAI,SAAQ;AAGxB,YAAQ,MAAM,QAAQ,WAAW;AAAA,CAAI;AAErC,QAAI;AACJ,YAAQ,QAAQ,KAAK,KAAK,KAAK,MAAM,QAAM;AACzC,YAAM,MAAM,MAAM,CAAC;AAGnB,UAAI,QAAS,MAAM,CAAC,KAAK;AAGzB,cAAQ,MAAM,KAAI;AAGlB,YAAM,aAAa,MAAM,CAAC;AAG1B,cAAQ,MAAM,QAAQ,0BAA0B,IAAI,GAGhD,eAAe,QACjB,QAAQ,MAAM,QAAQ,QAAQ;AAAA,CAAI,GAClC,QAAQ,MAAM,QAAQ,QAAQ,IAAI,IAIpC,IAAI,GAAG,IAAI;AAAA,IACf;AAEE,WAAO;AAAA,EACT;AAEA,WAAS,YAAa,SAAS;AAC7B,cAAU,WAAW,CAAA;AAErB,UAAM,YAAY,WAAW,OAAO;AACpC,YAAQ,OAAO;AACf,UAAM,SAAS,aAAa,aAAa,OAAO;AAChD,QAAI,CAAC,OAAO,QAAQ;AAClB,YAAM,MAAM,IAAI,MAAM,8BAA8B,SAAS,wBAAwB;AACrF,gBAAI,OAAO,gBACL;AAAA,IACV;AAIE,UAAM,OAAO,WAAW,OAAO,EAAE,MAAM,GAAG,GACpC,SAAS,KAAK;AAEpB,QAAI;AACJ,aAAS,IAAI,GAAG,IAAI,QAAQ;AAC1B,UAAI;AAEF,cAAM,MAAM,KAAK,CAAC,EAAE,KAAI,GAGlB,QAAQ,cAAc,QAAQ,GAAG;AAGvC,oBAAY,aAAa,QAAQ,MAAM,YAAY,MAAM,GAAG;AAE5D;AAAA,MACN,SAAa,OAAO;AAEd,YAAI,IAAI,KAAK;AACX,gBAAM;AAAA,MAGd;AAIE,WAAO,aAAa,MAAM,SAAS;AAAA,EACrC;AAEA,WAAS,MAAO,SAAS;AACvB,YAAQ,IAAI,WAAWA,QAAO,WAAW,OAAO,EAAE;AAAA,EACpD;AAEA,WAAS,OAAQ,SAAS;AACxB,YAAQ,IAAI,WAAWA,QAAO,YAAY,OAAO,EAAE;AAAA,EACrD;AAEA,WAAS,KAAM,SAAS;AACtB,YAAQ,IAAI,WAAWA,QAAO,KAAK,OAAO,EAAE;AAAA,EAC9C;AAEA,WAAS,WAAY,SAAS;AAE5B,WAAI,WAAW,QAAQ,cAAc,QAAQ,WAAW,SAAS,IACxD,QAAQ,aAIb,QAAQ,IAAI,cAAc,QAAQ,IAAI,WAAW,SAAS,IACrD,QAAQ,IAAI,aAId;AAAA,EACT;AAEA,WAAS,cAAe,QAAQ,WAAW;AAEzC,QAAI;AACJ,QAAI;AACF,YAAM,IAAI,IAAI,SAAS;AAAA,IAC3B,SAAW,OAAO;AACd,UAAI,MAAM,SAAS,mBAAmB;AACpC,cAAM,MAAM,IAAI,MAAM,4IAA4I;AAClK,kBAAI,OAAO,sBACL;AAAA,MACZ;AAEI,YAAM;AAAA,IACV;AAGE,UAAM,MAAM,IAAI;AAChB,QAAI,CAAC,KAAK;AACR,YAAM,MAAM,IAAI,MAAM,sCAAsC;AAC5D,gBAAI,OAAO,sBACL;AAAA,IACV;AAGE,UAAM,cAAc,IAAI,aAAa,IAAI,aAAa;AACtD,QAAI,CAAC,aAAa;AAChB,YAAM,MAAM,IAAI,MAAM,8CAA8C;AACpE,gBAAI,OAAO,sBACL;AAAA,IACV;AAGE,UAAM,iBAAiB,gBAAgB,YAAY,YAAW,CAAE,IAC1D,aAAa,OAAO,OAAO,cAAc;AAC/C,QAAI,CAAC,YAAY;AACf,YAAM,MAAM,IAAI,MAAM,2DAA2D,cAAc,2BAA2B;AAC1H,gBAAI,OAAO,gCACL;AAAA,IACV;AAEE,WAAO,EAAE,YAAY,IAAG;AAAA,EAC1B;AAEA,WAAS,WAAY,SAAS;AAC5B,QAAI,oBAAoB;AAExB,QAAI,WAAW,QAAQ,QAAQ,QAAQ,KAAK,SAAS;AACnD,UAAI,MAAM,QAAQ,QAAQ,IAAI;AAC5B,mBAAW,YAAY,QAAQ;AAC7B,UAAIF,IAAG,WAAW,QAAQ,MACxB,oBAAoB,SAAS,SAAS,QAAQ,IAAI,WAAW,GAAG,QAAQ;AAAA;AAI5E,4BAAoB,QAAQ,KAAK,SAAS,QAAQ,IAAI,QAAQ,OAAO,GAAG,QAAQ,IAAI;AAAA;AAGtF,0BAAoBC,MAAK,QAAQ,QAAQ,IAAG,GAAI,YAAY;AAG9D,WAAID,IAAG,WAAW,iBAAiB,IAC1B,oBAGF;AAAA,EACT;AAEA,WAAS,aAAc,SAAS;AAC9B,WAAO,QAAQ,CAAC,MAAM,MAAMC,MAAK,KAAK,GAAG,QAAO,GAAI,QAAQ,MAAM,CAAC,CAAC,IAAI;AAAA,EAC1E;AAEA,WAAS,aAAc,SAAS;AAC9B,UAAME,SAAQ,GAAQ,WAAW,QAAQ,QACnC,QAAQ,WAAW,WAAW,UAAU,QAAQ,QAAQ;AAE9D,KAAIA,UAAS,CAAC,UACZ,KAAK,uCAAuC;AAG9C,UAAM,SAAS,aAAa,YAAY,OAAO;AAE/C,QAAI,aAAa,QAAQ;AACzB,WAAI,WAAW,QAAQ,cAAc,SACnC,aAAa,QAAQ,aAGvB,aAAa,SAAS,YAAY,QAAQ,OAAO,GAE1C,EAAE,OAAM;AAAA,EACjB;AAEA,WAAS,aAAc,SAAS;AAC9B,UAAM,aAAaF,MAAK,QAAQ,QAAQ,IAAG,GAAI,MAAM;AACrD,QAAI,WAAW;AACf,UAAME,SAAQ,GAAQ,WAAW,QAAQ,QACnC,QAAQ,WAAW,WAAW,UAAU,QAAQ,QAAQ;AAE9D,IAAI,WAAW,QAAQ,WACrB,WAAW,QAAQ,WAEfA,UACF,OAAO,oDAAoD;AAI/D,QAAI,cAAc,CAAC,UAAU;AAC7B,QAAI,WAAW,QAAQ;AACrB,UAAI,CAAC,MAAM,QAAQ,QAAQ,IAAI;AAC7B,sBAAc,CAAC,aAAa,QAAQ,IAAI,CAAC;AAAA,WACpC;AACL,sBAAc,CAAA;AACd,mBAAW,YAAY,QAAQ;AAC7B,sBAAY,KAAK,aAAa,QAAQ,CAAC;AAAA,MAE/C;AAKE,QAAI;AACJ,UAAM,YAAY,CAAA;AAClB,eAAWF,SAAQ;AACjB,UAAI;AAEF,cAAM,SAAS,aAAa,MAAMD,IAAG,aAAaC,OAAM,EAAE,UAAU,CAAC;AAErE,qBAAa,SAAS,WAAW,QAAQ,OAAO;AAAA,MACtD,SAAa,GAAG;AACV,QAAIE,UACF,OAAO,kBAAkBF,KAAI,IAAI,EAAE,OAAO,EAAE,GAE9C,YAAY;AAAA,MAClB;AAGE,QAAI,aAAa,QAAQ;AAOzB,QANI,WAAW,QAAQ,cAAc,SACnC,aAAa,QAAQ,aAGvB,aAAa,SAAS,YAAY,WAAW,OAAO,GAEhDE,UAAS,CAAC,OAAO;AACnB,YAAM,YAAY,OAAO,KAAK,SAAS,EAAE,QACnC,aAAa,CAAA;AACnB,iBAAW,YAAY;AACrB,YAAI;AACF,gBAAM,WAAWF,MAAK,SAAS,QAAQ,IAAG,GAAI,QAAQ;AACtD,qBAAW,KAAK,QAAQ;AAAA,QAChC,SAAe,GAAG;AACV,UAAIE,UACF,OAAO,kBAAkB,QAAQ,IAAI,EAAE,OAAO,EAAE,GAElD,YAAY;AAAA,QACpB;AAGI,WAAK,kBAAkB,SAAS,UAAU,WAAW,KAAK,GAAG,CAAC,EAAE;AAAA,IACpE;AAEE,WAAI,YACK,EAAE,QAAQ,WAAW,OAAO,UAAS,IAErC,EAAE,QAAQ,UAAS;AAAA,EAE9B;AAGA,WAAS,OAAQ,SAAS;AAExB,QAAI,WAAW,OAAO,EAAE,WAAW;AACjC,aAAO,aAAa,aAAa,OAAO;AAG1C,UAAM,YAAY,WAAW,OAAO;AAGpC,WAAK,YAME,aAAa,aAAa,OAAO,KALtC,MAAM,+DAA+D,SAAS,+BAA+B,GAEtG,aAAa,aAAa,OAAO;AAAA,EAI5C;AAEA,WAAS,QAAS,WAAW,QAAQ;AACnC,UAAM,MAAM,OAAO,KAAK,OAAO,MAAM,GAAG,GAAG,KAAK;AAChD,QAAI,aAAa,OAAO,KAAK,WAAW,QAAQ;AAEhD,UAAM,QAAQ,WAAW,SAAS,GAAG,EAAE,GACjC,UAAU,WAAW,SAAS,GAAG;AACvC,iBAAa,WAAW,SAAS,IAAI,GAAG;AAExC,QAAI;AACF,YAAM,SAAS,OAAO,iBAAiB,eAAe,KAAK,KAAK;AAChE,oBAAO,WAAW,OAAO,GAClB,GAAG,OAAO,OAAO,UAAU,CAAC,GAAG,OAAO,OAAO;AAAA,IACxD,SAAW,OAAO;AACd,YAAM,UAAU,iBAAiB,YAC3B,mBAAmB,MAAM,YAAY,sBACrC,mBAAmB,MAAM,YAAY;AAE3C,UAAI,WAAW,kBAAkB;AAC/B,cAAM,MAAM,IAAI,MAAM,6DAA6D;AACnF,kBAAI,OAAO,sBACL;AAAA,MACZ,WAAe,kBAAkB;AAC3B,cAAM,MAAM,IAAI,MAAM,iDAAiD;AACvE,kBAAI,OAAO,qBACL;AAAA,MACZ;AACM,cAAM;AAAA,IAEZ;AAAA,EACA;AAGA,WAAS,SAAU,YAAY,QAAQ,UAAU,CAAA,GAAI;AACnD,UAAMA,SAAQ,GAAQ,WAAW,QAAQ,QACnC,WAAW,GAAQ,WAAW,QAAQ;AAE5C,QAAI,OAAO,UAAW,UAAU;AAC9B,YAAM,MAAM,IAAI,MAAM,gFAAgF;AACtG,gBAAI,OAAO,mBACL;AAAA,IACV;AAGE,eAAW,OAAO,OAAO,KAAK,MAAM;AAClC,MAAI,OAAO,UAAU,eAAe,KAAK,YAAY,GAAG,KAClD,aAAa,OACf,WAAW,GAAG,IAAI,OAAO,GAAG,IAG1BA,UAEA,OADE,aAAa,KACR,IAAI,GAAG,6CAEP,IAAI,GAAG,8CAF0C,KAM5D,WAAW,GAAG,IAAI,OAAO,GAAG;AAAA,EAGlC;AAEA,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEAC,gBAAA,QAAA,eAA8B,aAAa,cAC3CA,OAAA,QAAA,eAA8B,aAAa,cAC3CA,OAAA,QAAA,cAA6B,aAAa,aAC1CA,OAAA,QAAA,SAAwB,aAAa,QACrCA,OAAA,QAAA,UAAyB,aAAa,SACtCA,OAAA,QAAA,QAAuB,aAAa,OACpCA,OAAA,QAAA,WAA0B,aAAa,UAEvCA,OAAA,UAAiB;;;;;;AC/XjB,WAAS,aAAc,UAAU,aAAa,QAAQ;AACpD,UAAM,UAAU,SAAS,MAAM,+BAA+B,KAAK,CAAA;AAEnE,WAAO,QAAQ,OAAO,SAAU,QAAQ,OAAO,OAAO;AACpD,YAAM,QAAQ,mCAAmC,KAAK,KAAK;AAC3D,UAAI,CAAC,SAAS,MAAM,WAAW;AAC7B,eAAO;AAGT,YAAM,SAAS,MAAM,CAAC;AAEtB,UAAI,OAAO;AAEX,UAAI,WAAW;AACb,sBAAc,MAAM,CAAC,GACrB,QAAQ,YAAY,QAAQ,OAAO,GAAG;AAAA,WACjC;AACL,cAAM,WAAW,MAAM,CAAC,EAAE,MAAM,IAAI,GAC9B,MAAM,SAAS,CAAC;AAQtB,YAPA,cAAc,MAAM,CAAC,EAAE,UAAU,OAAO,MAAM,GAE9C,QAAQ,OAAO,UAAU,eAAe,KAAK,aAAa,GAAG,IACzD,YAAY,GAAG,IACd,OAAO,OAAO,GAAG,KAAK,SAAS,CAAC,KAAK,IAGtC,SAAS,SAAS,KAAK,OAAO;AAChC,gBAAM,gBAAgB,QAAQ,QAAQ,CAAC;AACvC,kBAAQ,QAAQ,CAAC,IAAI,IAErB,SAAS,OAAO,QAAQ,eAAe,EAAE;AAAA,QACjD;AAEM,gBAAQ,aAAa,OAAO,aAAa,MAAM;AAAA,MACrD;AAEI,aAAO,OAAO,QAAQ,aAAa,KAAK;AAAA,IAC5C,GAAK,QAAQ;AAAA,EACb;AAEA,WAAS,OAAQ,QAAQ;AAEvB,UAAM,cAAc,OAAO,mBAAmB,CAAA,IAAK,QAAQ;AAE3D,eAAW,aAAa,OAAO,QAAQ;AACrC,YAAM,QAAQ,OAAO,UAAU,eAAe,KAAK,aAAa,SAAS,IAAI,YAAY,SAAS,IAAI,OAAO,OAAO,SAAS;AAE7H,aAAO,OAAO,SAAS,IAAI,aAAa,OAAO,aAAa,MAAM;AAAA,IACtE;AAEE,eAAW,cAAc,OAAO;AAC9B,kBAAY,UAAU,IAAI,OAAO,OAAO,UAAU;AAGpD,WAAO;AAAA,EACT;AAEA,cAAA,SAAwB;;;AC3CjB,SAAS,QACd,MACA,QACA,WAAqB,CAAC,OAAO,GACL;AACxB,MAAI,SAAS;AACX,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAKJ,QAAM,MAA8B,CAAA,GAC9B,WAAW;AAAA;AAAA,IACK;AAAA;AAAA,IACF;AAAA;AAAA,IACD,QAAQ,IAAI;AAAA;AAAA,IACN,QAAQ,IAAI;AAAA,EAAA,GAG/B,SAAS,OAAO;AAAA,IACpB,SAAS,QAAQ,CAAC,SAAS;AACzB,YAAM,UAAU,WAAW,QAAQ,CAAC,IAAI,GAAG;AAAA,QACzC,SAAS;AAAA,MAAA,CACV;AACD,aAAK,UACE,OAAO,QAAQC,cAAAA,MAAM,GAAG,aAAa,OAAO,CAAC,CAAC,IADhC,CAAA;AAAA,IAEvB,CAAC;AAAA,EAAA;AAIC,SAAO,YAAY,QAAQ,IAAI,uBAAuB,WACxD,QAAQ,IAAI,qBAAqB,OAAO,WAGtC,OAAO,WAAW,QAAQ,IAAI,YAAY,WAC5C,QAAQ,IAAI,UAAU,OAAO,UAE3B,OAAO,gBAAgB,QAAQ,IAAI,iBAAiB,WACtD,QAAQ,IAAI,eAAe,OAAO;AAGpC,MAAI;AAEFC,gBAAAA,OAAO,EAAC,QAAO;AAAA,EACjB,SAAS,GAAG;AAGV,UAAI,EAAE,QAAQ,SAAS,OAAO,IACtB,IAAI,MAAM,wEAAwE,IAEpF;AAAA,EACR;AAGA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM;AAC1C,aAAS,KAAK,CAAC,WAAW,IAAI,WAAW,MAAM,CAAC,MAClD,IAAI,GAAG,IAAI;AAMf,aAAW,OAAO,QAAQ;AACpB,aAAS,KAAK,CAAC,WAAW,IAAI,WAAW,MAAM,CAAC,MAClD,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG;AAI9B,SAAO;AACT;AAEA,SAAS,WACP,KACA,SACA,SAGoB;AACpB,aAAW,UAAU,SAAS;AAC5B,UAAM,WAAW,KAAK,KAAK,KAAK,MAAM;AACtC,QAAI,GAAG,WAAW,QAAQ,KAAK,GAAG,SAAS,QAAQ,EAAE,OAAA;AACnD,aAAO;AAAA,EAEX;AACA,QAAM,YAAY,KAAK,QAAQ,GAAG;AAClC,MAAI,cAAc,QAAQ,CAAC,SAAS,WAAW,UAAU,WAAW,SAAS,OAAO;AAClF,WAAO,WAAW,WAAW,SAAS,OAAO;AAIjD;","x_google_ignoreList":[6,7]}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/debug.ts","../src/util/dynamicRequire.ts","../src/util/getCliConfig.ts","../src/util/resolveRootDir.ts","../src/cliClient.ts","../src/config.ts","../../../../node_modules/.pnpm/dotenv@16.6.1/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","// Prevent webpack from bundling in webpack context,\n// use regular node require for unbundled context\n\n/* eslint-disable camelcase */\ndeclare const __webpack_require__: boolean\ndeclare const __non_webpack_require__: typeof require\n\nconst requireFunc: typeof require =\n typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require\n/* eslint-enable camelcase */\n\nexport function dynamicRequire<T = any>(request: string): T {\n const mod = requireFunc(request)\n return mod.__esModule && mod.default ? mod.default : mod\n}\n\ndynamicRequire.resolve = requireFunc.resolve\ndynamicRequire.cache = requireFunc.cache\n","/**\n * Reads the Sanity CLI config from one of the following files (in preferred order):\n * - sanity.cli.js\n * - sanity.cli.ts\n *\n * Note: There are two ways of using this:\n * a) `getCliConfig(cwd)`\n * b) `getCliConfig(cwd, {forked: true})`\n *\n * Approach a is generally a bit faster as it avoids the forking startup time, while\n * approach b could be considered \"safer\" since any side-effects of running the config\n * file will not bleed into the current CLI process directly.\n */\nimport fs from 'node:fs'\nimport path from 'node:path'\nimport {Worker} from 'node:worker_threads'\n\nimport {debug} from '../debug'\nimport {type CliConfig, type SanityJson} from '../types'\nimport {getCliWorkerPath} from './cliWorker'\nimport {dynamicRequire} from './dynamicRequire'\n\nexport type CliMajorVersion = 2 | 3\n\nexport type CliConfigResult =\n | {config: SanityJson; path: string; version: 2}\n | {config: CliConfig; path: string; version: 3}\n | {config: null; path: string; version: CliMajorVersion}\n\nexport async function getCliConfig(\n cwd: string,\n {forked}: {forked?: boolean} = {},\n): Promise<CliConfigResult | null> {\n let clearCache = false\n if (forked) {\n try {\n return await getCliConfigForked(cwd)\n } catch (err) {\n debug('Error in getCliConfigForked', err)\n clearCache = true\n // Intentional noop - try unforked variant\n }\n }\n\n const {unregister} = __DEV__\n ? {unregister: () => undefined}\n : // eslint-disable-next-line @typescript-eslint/no-require-imports\n require('esbuild-register/dist/node').register({supported: {'dynamic-import': true}})\n\n try {\n // If forked execution failed, we need to clear the cache to reload the env vars\n const v3Config = getSanityCliConfig(cwd, clearCache)\n if (v3Config) {\n return v3Config\n }\n\n return getSanityJsonConfig(cwd)\n } catch (err) {\n throw err\n } finally {\n unregister()\n }\n}\n\nexport function getCliConfigSync(cwd: string): CliConfigResult | null {\n const v3Config = getSanityCliConfig(cwd)\n return v3Config ? v3Config : getSanityJsonConfig(cwd)\n}\n\nasync function getCliConfigForked(cwd: string): Promise<CliConfigResult | null> {\n const workerPath = await getCliWorkerPath('getCliConfig')\n return new Promise((resolve, reject) => {\n const worker = new Worker(workerPath, {\n workerData: cwd,\n env: process.env,\n })\n worker.on('message', (message) => {\n if (message.type === 'config') {\n resolve(message.config)\n } else {\n const error = new Error(message.error)\n ;(error as any).type = message.errorType\n reject(new Error(message.error))\n }\n })\n worker.on('error', reject)\n worker.on('exit', (code) => {\n if (code !== 0) {\n reject(new Error(`Worker stopped with exit code ${code}`))\n }\n })\n })\n}\n\nfunction getSanityJsonConfig(cwd: string): CliConfigResult | null {\n const configPath = path.join(cwd, 'sanity.json')\n\n if (!fs.existsSync(configPath)) {\n return null\n }\n\n return {\n config: loadJsonConfig(configPath),\n path: configPath,\n version: 2,\n }\n}\n\nfunction getSanityCliConfig(cwd: string, clearCache = false): CliConfigResult | null {\n const jsConfigPath = path.join(cwd, 'sanity.cli.js')\n const tsConfigPath = path.join(cwd, 'sanity.cli.ts')\n\n const [js, ts] = [fs.existsSync(jsConfigPath), fs.existsSync(tsConfigPath)]\n\n if (!js && !ts) {\n return null\n }\n\n if (!js && ts) {\n return {\n config: importConfig(tsConfigPath, clearCache),\n path: tsConfigPath,\n version: 3,\n }\n }\n\n if (js && ts) {\n warn('Found both `sanity.cli.js` and `sanity.cli.ts` - using sanity.cli.js')\n }\n\n return {\n config: importConfig(jsConfigPath, clearCache),\n path: jsConfigPath,\n version: 3,\n }\n}\n\nfunction loadJsonConfig(filePath: string): SanityJson | null {\n try {\n const content = fs.readFileSync(filePath, 'utf8')\n return JSON.parse(content)\n } catch (err) {\n console.error(`Error reading \"${filePath}\": ${err.message}`)\n return null\n }\n}\n\nfunction importConfig(filePath: string, clearCache: boolean): CliConfig | null {\n try {\n // Clear module cache if requested (needed for env var reload)\n if (clearCache) {\n const resolvedPath = dynamicRequire.resolve(filePath)\n delete dynamicRequire.cache[resolvedPath]\n }\n\n const config = dynamicRequire<CliConfig | {default: CliConfig} | null>(filePath)\n if (config === null || typeof config !== 'object') {\n throw new Error('Module export is not a configuration object')\n }\n\n return 'default' in config ? config.default : config\n } catch (err) {\n // If attempting to import `defineCliConfig` or similar from `sanity/cli`,\n // accept the fact that it might not be installed. Instead, let the CLI\n // give a warning about the `sanity` module not being installed\n if (err.code === 'MODULE_NOT_FOUND' && err.message.includes('sanity/cli')) {\n return null\n }\n\n console.error(`Error reading \"${filePath}\": ${err.message}`)\n return null\n }\n}\n\nfunction warn(warning: string) {\n if (typeof process.send === 'function') {\n process.send({type: 'warning', warning})\n } else {\n console.warn(warning)\n }\n}\n","import 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 hasSanityConfig(basePath: string, configName: string): boolean {\n const buildConfigs = [\n fileExists(path.join(basePath, `${configName}.js`)),\n fileExists(path.join(basePath, `${configName}.ts`)),\n isSanityV2StudioRoot(basePath),\n ]\n\n return buildConfigs.some(Boolean)\n}\n\nfunction resolveProjectRoot(basePath: string, iterations = 0): string | false {\n const configName = 'sanity.config'\n if (hasSanityConfig(basePath, configName)) {\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","import {createClient, type SanityClient} from '@sanity/client'\n\nimport {getCliConfigSync} from './util/getCliConfig'\nimport {resolveRootDir} from './util/resolveRootDir'\n\nexport interface CliClientOptions {\n cwd?: string\n\n projectId?: string\n dataset?: string\n useCdn?: boolean\n token?: string\n apiVersion?: string\n}\n\ninterface GetCliClient {\n (options?: CliClientOptions): SanityClient\n /**\n * @internal\n * @deprecated This is only for INTERNAL use, and should not be relied upon outside of official Sanity modules\n * @returns A token to use when constructing a client without a `token` explicitly defined, or undefined\n */\n __internal__getToken: () => string | undefined\n}\n\nfunction getCliClientImpl(options: CliClientOptions = {}): SanityClient {\n if (typeof process !== 'object') {\n throw new Error('getCliClient() should only be called from node.js scripts')\n }\n\n const {\n cwd = process.env.SANITY_BASE_PATH || process.cwd(),\n useCdn = false,\n apiVersion = '2022-06-06',\n projectId,\n dataset,\n token = getCliClient.__internal__getToken(),\n } = options\n\n if (projectId && dataset) {\n return createClient({projectId, dataset, apiVersion, useCdn, token})\n }\n\n const rootDir = resolveRootDir(cwd)\n const {config} = getCliConfigSync(rootDir) || {}\n if (!config) {\n throw new Error('Unable to resolve CLI configuration')\n }\n\n const apiConfig = config?.api || {}\n if (!apiConfig.projectId || !apiConfig.dataset) {\n throw new Error('Unable to resolve project ID/dataset from CLI configuration')\n }\n\n return createClient({\n projectId: apiConfig.projectId,\n dataset: apiConfig.dataset,\n apiVersion,\n useCdn,\n token,\n })\n}\n\n/* eslint-disable camelcase */\ngetCliClientImpl.__internal__getToken = (): string | undefined => undefined\n/* eslint-enable camelcase */\n\n/** @internal */\nexport const getCliClient: GetCliClient = getCliClientImpl\n","import {type CliConfig} from './types'\n\n/** @beta */\nexport function defineCliConfig(config: CliConfig): CliConfig {\n return config\n}\n\n/**\n * @deprecated Use `defineCliConfig` instead\n * @beta\n */\nexport function createCliConfig(config: CliConfig): CliConfig {\n return config\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 options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\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 _log (message) {\n console.log(`[dotenv@${version}] ${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 const quiet = options && 'quiet' in options ? options.quiet : true\n\n if (debug || !quiet) {\n _log('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 const quiet = options && 'quiet' in options ? options.quiet : true\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 (debug || !quiet) {\n const keysCount = Object.keys(parsedAll).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)\n }\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\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 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":["fs","path","version","debug","mainModule","parse","expand"],"mappings":";;;;;;;;AAEO,MAAM,QAAQ,QAAQ,YAAY,GCKnC,cACJ,OAAO,uBAAwB,aAAa,0BAA0B;AAGjE,SAAS,eAAwB,SAAoB;AAC1D,QAAM,MAAM,YAAY,OAAO;AAC/B,SAAO,IAAI,cAAc,IAAI,UAAU,IAAI,UAAU;AACvD;AAEA,eAAe,UAAU,YAAY;AACrC,eAAe,QAAQ,YAAY;AC+C5B,SAAS,iBAAiB,KAAqC;AAEpE,SADiB,mBAAmB,GAAG,KACV,oBAAoB,GAAG;AACtD;AA2BA,SAAS,oBAAoB,KAAqC;AAChE,QAAM,aAAa,KAAK,KAAK,KAAK,aAAa;AAE/C,SAAK,GAAG,WAAW,UAAU,IAItB;AAAA,IACL,QAAQ,eAAe,UAAU;AAAA,IACjC,MAAM;AAAA,IACN,SAAS;AAAA,EAAA,IANF;AAQX;AAEA,SAAS,mBAAmB,KAAa,aAAa,IAA+B;AACnF,QAAM,eAAe,KAAK,KAAK,KAAK,eAAe,GAC7C,eAAe,KAAK,KAAK,KAAK,eAAe,GAE7C,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,WAAW,YAAY,GAAG,GAAG,WAAW,YAAY,CAAC;AAE1E,SAAI,CAAC,MAAM,CAAC,KACH,OAGL,CAAC,MAAM,KACF;AAAA,IACL,QAAQ,aAAa,cAAc,UAAU;AAAA,IAC7C,MAAM;AAAA,IACN,SAAS;AAAA,EAAA,KAIT,MAAM,MACR,KAAK,sEAAsE,GAGtE;AAAA,IACL,QAAQ,aAAa,cAAc,UAAU;AAAA,IAC7C,MAAM;AAAA,IACN,SAAS;AAAA,EAAA;AAEb;AAEA,SAAS,eAAe,UAAqC;AAC3D,MAAI;AACF,UAAM,UAAU,GAAG,aAAa,UAAU,MAAM;AAChD,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B,SAAS,KAAK;AACZ,WAAA,QAAQ,MAAM,kBAAkB,QAAQ,MAAM,IAAI,OAAO,EAAE,GACpD;AAAA,EACT;AACF;AAEA,SAAS,aAAa,UAAkB,YAAuC;AAC7E,MAAI;AAEF,QAAI,YAAY;AACd,YAAM,eAAe,eAAe,QAAQ,QAAQ;AACpD,aAAO,eAAe,MAAM,YAAY;AAAA,IAC1C;AAEA,UAAM,SAAS,eAAwD,QAAQ;AAC/E,QAAI,WAAW,QAAQ,OAAO,UAAW;AACvC,YAAM,IAAI,MAAM,6CAA6C;AAG/D,WAAO,aAAa,SAAS,OAAO,UAAU;AAAA,EAChD,SAAS,KAAK;AAIZ,WAAI,IAAI,SAAS,sBAAsB,IAAI,QAAQ,SAAS,YAAY,KAIxE,QAAQ,MAAM,kBAAkB,QAAQ,MAAM,IAAI,OAAO,EAAE,GACpD;AAAA,EACT;AACF;AAEA,SAAS,KAAK,SAAiB;AACzB,SAAO,QAAQ,QAAS,aAC1B,QAAQ,KAAK,EAAC,MAAM,WAAW,QAAA,CAAQ,IAEvC,QAAQ,KAAK,OAAO;AAExB;AC5KO,SAAS,eAAe,KAAqB;AAClD,MAAI;AACF,WAAO,mBAAmB,GAAG,KAAK;AAAA,EACpC,SAAS,KAAK;AACZ,UAAM,IAAI,MAAM;AAAA,EAAmD,IAAI,OAAO,EAAE;AAAA,EAClF;AACF;AAEA,SAAS,gBAAgB,UAAkB,YAA6B;AAOtE,SANqB;AAAA,IACnB,WAAW,KAAK,KAAK,UAAU,GAAG,UAAU,KAAK,CAAC;AAAA,IAClD,WAAW,KAAK,KAAK,UAAU,GAAG,UAAU,KAAK,CAAC;AAAA,IAClD,qBAAqB,QAAQ;AAAA,EAAA,EAGX,KAAK,OAAO;AAClC;AAEA,SAAS,mBAAmB,UAAkB,aAAa,GAAmB;AAE5E,MAAI,gBAAgB,UADD,eACqB;AACtC,WAAO;AAGT,QAAM,YAAY,KAAK,QAAQ,UAAU,IAAI;AAC7C,SAAI,cAAc,YAAY,aAAa,KAElC,KAGF,mBAAmB,WAAW,aAAa,CAAC;AACrD;AAEA,SAAS,qBAAqB,UAA2B;AACvD,MAAI;AACF,UAAM,UAAU,GAAG,aAAa,KAAK,KAAK,UAAU,aAAa,GAAG,MAAM,GAEpE,SAAS,CAAA,CADI,KAAK,MAAM,OAAO,GACF;AACnC,WAAI,UACF,MAAM,qCAAqC,QAAQ,GAE9C;AAAA,EACT,QAAc;AACZ,WAAO;AAAA,EACT;AACF;AAEA,SAAS,WAAW,UAA2B;AAC7C,SAAO,GAAG,WAAW,QAAQ;AAC/B;AChCA,SAAS,iBAAiB,UAA4B,IAAkB;AACtE,MAAI,OAAO,WAAY;AACrB,UAAM,IAAI,MAAM,2DAA2D;AAG7E,QAAM;AAAA,IACJ,MAAM,QAAQ,IAAI,oBAAoB,QAAQ,IAAA;AAAA,IAC9C,SAAS;AAAA,IACT,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA,QAAQ,aAAa,qBAAA;AAAA,EAAqB,IACxC;AAEJ,MAAI,aAAa;AACf,WAAO,aAAa,EAAC,WAAW,SAAS,YAAY,QAAQ,OAAM;AAGrE,QAAM,UAAU,eAAe,GAAG,GAC5B,EAAC,WAAU,iBAAiB,OAAO,KAAK,CAAA;AAC9C,MAAI,CAAC;AACH,UAAM,IAAI,MAAM,qCAAqC;AAGvD,QAAM,YAAY,QAAQ,OAAO,CAAA;AACjC,MAAI,CAAC,UAAU,aAAa,CAAC,UAAU;AACrC,UAAM,IAAI,MAAM,6DAA6D;AAG/E,SAAO,aAAa;AAAA,IAClB,WAAW,UAAU;AAAA,IACrB,SAAS,UAAU;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACH;AAGA,iBAAiB,uBAAuB,MAAuB;AAAA;AAIxD,MAAM,eAA6B;ACjEnC,SAAS,gBAAgB,QAA8B;AAC5D,SAAO;AACT;AAMO,SAAS,gBAAgB,QAA8B;AAC5D,SAAO;AACT;;;;;;;ACbA,QAAMA,MAAK,YACLC,QAAO,YACP,KAAK,YACL,SAAS,YAGTC,WAFc,WAEQ,SAEtB,OAAO;AAGb,WAAS,MAAO,KAAK;AACnB,UAAM,MAAM,CAAA;AAGZ,QAAI,QAAQ,IAAI,SAAQ;AAGxB,YAAQ,MAAM,QAAQ,WAAW;AAAA,CAAI;AAErC,QAAI;AACJ,YAAQ,QAAQ,KAAK,KAAK,KAAK,MAAM,QAAM;AACzC,YAAM,MAAM,MAAM,CAAC;AAGnB,UAAI,QAAS,MAAM,CAAC,KAAK;AAGzB,cAAQ,MAAM,KAAI;AAGlB,YAAM,aAAa,MAAM,CAAC;AAG1B,cAAQ,MAAM,QAAQ,0BAA0B,IAAI,GAGhD,eAAe,QACjB,QAAQ,MAAM,QAAQ,QAAQ;AAAA,CAAI,GAClC,QAAQ,MAAM,QAAQ,QAAQ,IAAI,IAIpC,IAAI,GAAG,IAAI;AAAA,IACf;AAEE,WAAO;AAAA,EACT;AAEA,WAAS,YAAa,SAAS;AAC7B,cAAU,WAAW,CAAA;AAErB,UAAM,YAAY,WAAW,OAAO;AACpC,YAAQ,OAAO;AACf,UAAM,SAAS,aAAa,aAAa,OAAO;AAChD,QAAI,CAAC,OAAO,QAAQ;AAClB,YAAM,MAAM,IAAI,MAAM,8BAA8B,SAAS,wBAAwB;AACrF,gBAAI,OAAO,gBACL;AAAA,IACV;AAIE,UAAM,OAAO,WAAW,OAAO,EAAE,MAAM,GAAG,GACpC,SAAS,KAAK;AAEpB,QAAI;AACJ,aAAS,IAAI,GAAG,IAAI,QAAQ;AAC1B,UAAI;AAEF,cAAM,MAAM,KAAK,CAAC,EAAE,KAAI,GAGlB,QAAQ,cAAc,QAAQ,GAAG;AAGvC,oBAAY,aAAa,QAAQ,MAAM,YAAY,MAAM,GAAG;AAE5D;AAAA,MACN,SAAa,OAAO;AAEd,YAAI,IAAI,KAAK;AACX,gBAAM;AAAA,MAGd;AAIE,WAAO,aAAa,MAAM,SAAS;AAAA,EACrC;AAEA,WAAS,MAAO,SAAS;AACvB,YAAQ,IAAI,WAAWA,QAAO,WAAW,OAAO,EAAE;AAAA,EACpD;AAEA,WAAS,OAAQ,SAAS;AACxB,YAAQ,IAAI,WAAWA,QAAO,YAAY,OAAO,EAAE;AAAA,EACrD;AAEA,WAAS,KAAM,SAAS;AACtB,YAAQ,IAAI,WAAWA,QAAO,KAAK,OAAO,EAAE;AAAA,EAC9C;AAEA,WAAS,WAAY,SAAS;AAE5B,WAAI,WAAW,QAAQ,cAAc,QAAQ,WAAW,SAAS,IACxD,QAAQ,aAIb,QAAQ,IAAI,cAAc,QAAQ,IAAI,WAAW,SAAS,IACrD,QAAQ,IAAI,aAId;AAAA,EACT;AAEA,WAAS,cAAe,QAAQ,WAAW;AAEzC,QAAI;AACJ,QAAI;AACF,YAAM,IAAI,IAAI,SAAS;AAAA,IAC3B,SAAW,OAAO;AACd,UAAI,MAAM,SAAS,mBAAmB;AACpC,cAAM,MAAM,IAAI,MAAM,4IAA4I;AAClK,kBAAI,OAAO,sBACL;AAAA,MACZ;AAEI,YAAM;AAAA,IACV;AAGE,UAAM,MAAM,IAAI;AAChB,QAAI,CAAC,KAAK;AACR,YAAM,MAAM,IAAI,MAAM,sCAAsC;AAC5D,gBAAI,OAAO,sBACL;AAAA,IACV;AAGE,UAAM,cAAc,IAAI,aAAa,IAAI,aAAa;AACtD,QAAI,CAAC,aAAa;AAChB,YAAM,MAAM,IAAI,MAAM,8CAA8C;AACpE,gBAAI,OAAO,sBACL;AAAA,IACV;AAGE,UAAM,iBAAiB,gBAAgB,YAAY,YAAW,CAAE,IAC1D,aAAa,OAAO,OAAO,cAAc;AAC/C,QAAI,CAAC,YAAY;AACf,YAAM,MAAM,IAAI,MAAM,2DAA2D,cAAc,2BAA2B;AAC1H,gBAAI,OAAO,gCACL;AAAA,IACV;AAEE,WAAO,EAAE,YAAY,IAAG;AAAA,EAC1B;AAEA,WAAS,WAAY,SAAS;AAC5B,QAAI,oBAAoB;AAExB,QAAI,WAAW,QAAQ,QAAQ,QAAQ,KAAK,SAAS;AACnD,UAAI,MAAM,QAAQ,QAAQ,IAAI;AAC5B,mBAAW,YAAY,QAAQ;AAC7B,UAAIF,IAAG,WAAW,QAAQ,MACxB,oBAAoB,SAAS,SAAS,QAAQ,IAAI,WAAW,GAAG,QAAQ;AAAA;AAI5E,4BAAoB,QAAQ,KAAK,SAAS,QAAQ,IAAI,QAAQ,OAAO,GAAG,QAAQ,IAAI;AAAA;AAGtF,0BAAoBC,MAAK,QAAQ,QAAQ,IAAG,GAAI,YAAY;AAG9D,WAAID,IAAG,WAAW,iBAAiB,IAC1B,oBAGF;AAAA,EACT;AAEA,WAAS,aAAc,SAAS;AAC9B,WAAO,QAAQ,CAAC,MAAM,MAAMC,MAAK,KAAK,GAAG,QAAO,GAAI,QAAQ,MAAM,CAAC,CAAC,IAAI;AAAA,EAC1E;AAEA,WAAS,aAAc,SAAS;AAC9B,UAAME,SAAQ,GAAQ,WAAW,QAAQ,QACnC,QAAQ,WAAW,WAAW,UAAU,QAAQ,QAAQ;AAE9D,KAAIA,UAAS,CAAC,UACZ,KAAK,uCAAuC;AAG9C,UAAM,SAAS,aAAa,YAAY,OAAO;AAE/C,QAAI,aAAa,QAAQ;AACzB,WAAI,WAAW,QAAQ,cAAc,SACnC,aAAa,QAAQ,aAGvB,aAAa,SAAS,YAAY,QAAQ,OAAO,GAE1C,EAAE,OAAM;AAAA,EACjB;AAEA,WAAS,aAAc,SAAS;AAC9B,UAAM,aAAaF,MAAK,QAAQ,QAAQ,IAAG,GAAI,MAAM;AACrD,QAAI,WAAW;AACf,UAAME,SAAQ,GAAQ,WAAW,QAAQ,QACnC,QAAQ,WAAW,WAAW,UAAU,QAAQ,QAAQ;AAE9D,IAAI,WAAW,QAAQ,WACrB,WAAW,QAAQ,WAEfA,UACF,OAAO,oDAAoD;AAI/D,QAAI,cAAc,CAAC,UAAU;AAC7B,QAAI,WAAW,QAAQ;AACrB,UAAI,CAAC,MAAM,QAAQ,QAAQ,IAAI;AAC7B,sBAAc,CAAC,aAAa,QAAQ,IAAI,CAAC;AAAA,WACpC;AACL,sBAAc,CAAA;AACd,mBAAW,YAAY,QAAQ;AAC7B,sBAAY,KAAK,aAAa,QAAQ,CAAC;AAAA,MAE/C;AAKE,QAAI;AACJ,UAAM,YAAY,CAAA;AAClB,eAAWF,SAAQ;AACjB,UAAI;AAEF,cAAM,SAAS,aAAa,MAAMD,IAAG,aAAaC,OAAM,EAAE,UAAU,CAAC;AAErE,qBAAa,SAAS,WAAW,QAAQ,OAAO;AAAA,MACtD,SAAa,GAAG;AACV,QAAIE,UACF,OAAO,kBAAkBF,KAAI,IAAI,EAAE,OAAO,EAAE,GAE9C,YAAY;AAAA,MAClB;AAGE,QAAI,aAAa,QAAQ;AAOzB,QANI,WAAW,QAAQ,cAAc,SACnC,aAAa,QAAQ,aAGvB,aAAa,SAAS,YAAY,WAAW,OAAO,GAEhDE,UAAS,CAAC,OAAO;AACnB,YAAM,YAAY,OAAO,KAAK,SAAS,EAAE,QACnC,aAAa,CAAA;AACnB,iBAAW,YAAY;AACrB,YAAI;AACF,gBAAM,WAAWF,MAAK,SAAS,QAAQ,IAAG,GAAI,QAAQ;AACtD,qBAAW,KAAK,QAAQ;AAAA,QAChC,SAAe,GAAG;AACV,UAAIE,UACF,OAAO,kBAAkB,QAAQ,IAAI,EAAE,OAAO,EAAE,GAElD,YAAY;AAAA,QACpB;AAGI,WAAK,kBAAkB,SAAS,UAAU,WAAW,KAAK,GAAG,CAAC,EAAE;AAAA,IACpE;AAEE,WAAI,YACK,EAAE,QAAQ,WAAW,OAAO,UAAS,IAErC,EAAE,QAAQ,UAAS;AAAA,EAE9B;AAGA,WAAS,OAAQ,SAAS;AAExB,QAAI,WAAW,OAAO,EAAE,WAAW;AACjC,aAAO,aAAa,aAAa,OAAO;AAG1C,UAAM,YAAY,WAAW,OAAO;AAGpC,WAAK,YAME,aAAa,aAAa,OAAO,KALtC,MAAM,+DAA+D,SAAS,+BAA+B,GAEtG,aAAa,aAAa,OAAO;AAAA,EAI5C;AAEA,WAAS,QAAS,WAAW,QAAQ;AACnC,UAAM,MAAM,OAAO,KAAK,OAAO,MAAM,GAAG,GAAG,KAAK;AAChD,QAAI,aAAa,OAAO,KAAK,WAAW,QAAQ;AAEhD,UAAM,QAAQ,WAAW,SAAS,GAAG,EAAE,GACjC,UAAU,WAAW,SAAS,GAAG;AACvC,iBAAa,WAAW,SAAS,IAAI,GAAG;AAExC,QAAI;AACF,YAAM,SAAS,OAAO,iBAAiB,eAAe,KAAK,KAAK;AAChE,oBAAO,WAAW,OAAO,GAClB,GAAG,OAAO,OAAO,UAAU,CAAC,GAAG,OAAO,OAAO;AAAA,IACxD,SAAW,OAAO;AACd,YAAM,UAAU,iBAAiB,YAC3B,mBAAmB,MAAM,YAAY,sBACrC,mBAAmB,MAAM,YAAY;AAE3C,UAAI,WAAW,kBAAkB;AAC/B,cAAM,MAAM,IAAI,MAAM,6DAA6D;AACnF,kBAAI,OAAO,sBACL;AAAA,MACZ,WAAe,kBAAkB;AAC3B,cAAM,MAAM,IAAI,MAAM,iDAAiD;AACvE,kBAAI,OAAO,qBACL;AAAA,MACZ;AACM,cAAM;AAAA,IAEZ;AAAA,EACA;AAGA,WAAS,SAAU,YAAY,QAAQ,UAAU,CAAA,GAAI;AACnD,UAAMA,SAAQ,GAAQ,WAAW,QAAQ,QACnC,WAAW,GAAQ,WAAW,QAAQ;AAE5C,QAAI,OAAO,UAAW,UAAU;AAC9B,YAAM,MAAM,IAAI,MAAM,gFAAgF;AACtG,gBAAI,OAAO,mBACL;AAAA,IACV;AAGE,eAAW,OAAO,OAAO,KAAK,MAAM;AAClC,MAAI,OAAO,UAAU,eAAe,KAAK,YAAY,GAAG,KAClD,aAAa,OACf,WAAW,GAAG,IAAI,OAAO,GAAG,IAG1BA,UAEA,OADE,aAAa,KACR,IAAI,GAAG,6CAEP,IAAI,GAAG,8CAF0C,KAM5D,WAAW,GAAG,IAAI,OAAO,GAAG;AAAA,EAGlC;AAEA,QAAM,eAAe;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEAC,gBAAA,QAAA,eAA8B,aAAa,cAC3CA,OAAA,QAAA,eAA8B,aAAa,cAC3CA,OAAA,QAAA,cAA6B,aAAa,aAC1CA,OAAA,QAAA,SAAwB,aAAa,QACrCA,OAAA,QAAA,UAAyB,aAAa,SACtCA,OAAA,QAAA,QAAuB,aAAa,OACpCA,OAAA,QAAA,WAA0B,aAAa,UAEvCA,OAAA,UAAiB;;;;;;AC/XjB,WAAS,aAAc,UAAU,aAAa,QAAQ;AACpD,UAAM,UAAU,SAAS,MAAM,+BAA+B,KAAK,CAAA;AAEnE,WAAO,QAAQ,OAAO,SAAU,QAAQ,OAAO,OAAO;AACpD,YAAM,QAAQ,mCAAmC,KAAK,KAAK;AAC3D,UAAI,CAAC,SAAS,MAAM,WAAW;AAC7B,eAAO;AAGT,YAAM,SAAS,MAAM,CAAC;AAEtB,UAAI,OAAO;AAEX,UAAI,WAAW;AACb,sBAAc,MAAM,CAAC,GACrB,QAAQ,YAAY,QAAQ,OAAO,GAAG;AAAA,WACjC;AACL,cAAM,WAAW,MAAM,CAAC,EAAE,MAAM,IAAI,GAC9B,MAAM,SAAS,CAAC;AAQtB,YAPA,cAAc,MAAM,CAAC,EAAE,UAAU,OAAO,MAAM,GAE9C,QAAQ,OAAO,UAAU,eAAe,KAAK,aAAa,GAAG,IACzD,YAAY,GAAG,IACd,OAAO,OAAO,GAAG,KAAK,SAAS,CAAC,KAAK,IAGtC,SAAS,SAAS,KAAK,OAAO;AAChC,gBAAM,gBAAgB,QAAQ,QAAQ,CAAC;AACvC,kBAAQ,QAAQ,CAAC,IAAI,IAErB,SAAS,OAAO,QAAQ,eAAe,EAAE;AAAA,QACjD;AAEM,gBAAQ,aAAa,OAAO,aAAa,MAAM;AAAA,MACrD;AAEI,aAAO,OAAO,QAAQ,aAAa,KAAK;AAAA,IAC5C,GAAK,QAAQ;AAAA,EACb;AAEA,WAAS,OAAQ,QAAQ;AAEvB,UAAM,cAAc,OAAO,mBAAmB,CAAA,IAAK,QAAQ;AAE3D,eAAW,aAAa,OAAO,QAAQ;AACrC,YAAM,QAAQ,OAAO,UAAU,eAAe,KAAK,aAAa,SAAS,IAAI,YAAY,SAAS,IAAI,OAAO,OAAO,SAAS;AAE7H,aAAO,OAAO,SAAS,IAAI,aAAa,OAAO,aAAa,MAAM;AAAA,IACtE;AAEE,eAAW,cAAc,OAAO;AAC9B,kBAAY,UAAU,IAAI,OAAO,OAAO,UAAU;AAGpD,WAAO;AAAA,EACT;AAEA,cAAA,SAAwB;;;AC3CjB,SAAS,QACd,MACA,QACA,WAAqB,CAAC,OAAO,GACL;AACxB,MAAI,SAAS;AACX,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAKJ,QAAM,MAA8B,CAAA,GAC9B,WAAW;AAAA;AAAA,IACK;AAAA;AAAA,IACF;AAAA;AAAA,IACD,QAAQ,IAAI;AAAA;AAAA,IACN,QAAQ,IAAI;AAAA,EAAA,GAG/B,SAAS,OAAO;AAAA,IACpB,SAAS,QAAQ,CAAC,SAAS;AACzB,YAAM,UAAU,WAAW,QAAQ,CAAC,IAAI,GAAG;AAAA,QACzC,SAAS;AAAA,MAAA,CACV;AACD,aAAK,UACE,OAAO,QAAQC,cAAAA,MAAM,GAAG,aAAa,OAAO,CAAC,CAAC,IADhC,CAAA;AAAA,IAEvB,CAAC;AAAA,EAAA;AAIC,SAAO,YAAY,QAAQ,IAAI,uBAAuB,WACxD,QAAQ,IAAI,qBAAqB,OAAO,WAGtC,OAAO,WAAW,QAAQ,IAAI,YAAY,WAC5C,QAAQ,IAAI,UAAU,OAAO,UAE3B,OAAO,gBAAgB,QAAQ,IAAI,iBAAiB,WACtD,QAAQ,IAAI,eAAe,OAAO;AAGpC,MAAI;AAEFC,gBAAAA,OAAO,EAAC,QAAO;AAAA,EACjB,SAAS,GAAG;AAGV,UAAI,EAAE,QAAQ,SAAS,OAAO,IACtB,IAAI,MAAM,wEAAwE,IAEpF;AAAA,EACR;AAGA,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM;AAC1C,aAAS,KAAK,CAAC,WAAW,IAAI,WAAW,MAAM,CAAC,MAClD,IAAI,GAAG,IAAI;AAMf,aAAW,OAAO,QAAQ;AACpB,aAAS,KAAK,CAAC,WAAW,IAAI,WAAW,MAAM,CAAC,MAClD,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG;AAI9B,SAAO;AACT;AAEA,SAAS,WACP,KACA,SACA,SAGoB;AACpB,aAAW,UAAU,SAAS;AAC5B,UAAM,WAAW,KAAK,KAAK,KAAK,MAAM;AACtC,QAAI,GAAG,WAAW,QAAQ,KAAK,GAAG,SAAS,QAAQ,EAAE,OAAA;AACnD,aAAO;AAAA,EAEX;AACA,QAAM,YAAY,KAAK,QAAQ,GAAG;AAClC,MAAI,cAAc,QAAQ,CAAC,SAAS,WAAW,UAAU,WAAW,SAAS,OAAO;AAClF,WAAO,WAAW,WAAW,SAAS,OAAO;AAIjD;","x_google_ignoreList":[6,7]}
|