varlock 0.8.2 → 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auto-load.js +5 -5
- package/dist/{chunk-YUPV6MIL.js → chunk-253NGIPN.js} +3 -3
- package/dist/{chunk-YUPV6MIL.js.map → chunk-253NGIPN.js.map} +1 -1
- package/dist/{chunk-6CCHLM3U.js → chunk-2PFIYNFA.js} +3 -2
- package/dist/chunk-2PFIYNFA.js.map +1 -0
- package/dist/{chunk-6W4P3ESY.js → chunk-4VC5S7NB.js} +5 -5
- package/dist/{chunk-6W4P3ESY.js.map → chunk-4VC5S7NB.js.map} +1 -1
- package/dist/{chunk-MYHVSJ3X.js → chunk-5DUWGI2N.js} +3 -3
- package/dist/{chunk-MYHVSJ3X.js.map → chunk-5DUWGI2N.js.map} +1 -1
- package/dist/{chunk-YK3J3EOI.js → chunk-7P3SVUZ5.js} +80 -10
- package/dist/chunk-7P3SVUZ5.js.map +1 -0
- package/dist/{chunk-ZH3NIFSS.js → chunk-BFRONY2O.js} +7 -7
- package/dist/{chunk-ZH3NIFSS.js.map → chunk-BFRONY2O.js.map} +1 -1
- package/dist/{chunk-LVZSZAKN.js → chunk-F6RTQ5QX.js} +3 -3
- package/dist/{chunk-LVZSZAKN.js.map → chunk-F6RTQ5QX.js.map} +1 -1
- package/dist/{chunk-PBBUUBNG.js → chunk-FSLTOPCT.js} +5 -5
- package/dist/{chunk-PBBUUBNG.js.map → chunk-FSLTOPCT.js.map} +1 -1
- package/dist/{chunk-VH76CEVH.js → chunk-FWJAZMC7.js} +4 -4
- package/dist/{chunk-VH76CEVH.js.map → chunk-FWJAZMC7.js.map} +1 -1
- package/dist/{chunk-JA2AIGGX.js → chunk-GH73MG2H.js} +14 -7
- package/dist/chunk-GH73MG2H.js.map +1 -0
- package/dist/{chunk-CZXCAKEV.js → chunk-LOGMWG5X.js} +5 -5
- package/dist/{chunk-CZXCAKEV.js.map → chunk-LOGMWG5X.js.map} +1 -1
- package/dist/{chunk-IMB5QAZS.js → chunk-MGWUDHT5.js} +6 -2
- package/dist/chunk-MGWUDHT5.js.map +1 -0
- package/dist/{chunk-WG4YIOKM.js → chunk-MIMMYDBC.js} +5 -5
- package/dist/{chunk-WG4YIOKM.js.map → chunk-MIMMYDBC.js.map} +1 -1
- package/dist/{chunk-Z5OLYLN5.js → chunk-NWKETKFP.js} +5 -5
- package/dist/{chunk-Z5OLYLN5.js.map → chunk-NWKETKFP.js.map} +1 -1
- package/dist/{chunk-I2BC7NCA.js → chunk-QHIRGHGG.js} +5 -4
- package/dist/chunk-QHIRGHGG.js.map +1 -0
- package/dist/{chunk-BC7LU4LG.js → chunk-R73FENLU.js} +3 -3
- package/dist/{chunk-BC7LU4LG.js.map → chunk-R73FENLU.js.map} +1 -1
- package/dist/{chunk-NUSBE7ZT.js → chunk-UG4RTI6V.js} +9 -9
- package/dist/{chunk-NUSBE7ZT.js.map → chunk-UG4RTI6V.js.map} +1 -1
- package/dist/{chunk-CAJTCWYA.js → chunk-US7YQTJZ.js} +5 -5
- package/dist/{chunk-CAJTCWYA.js.map → chunk-US7YQTJZ.js.map} +1 -1
- package/dist/{chunk-5224KHFW.js → chunk-UUDTMOJS.js} +6 -6
- package/dist/{chunk-5224KHFW.js.map → chunk-UUDTMOJS.js.map} +1 -1
- package/dist/{chunk-FOA6LP5C.js → chunk-W3GUFLIV.js} +821 -745
- package/dist/chunk-W3GUFLIV.js.map +1 -0
- package/dist/{chunk-CZ7QQE6H.js → chunk-ZRHT6QHO.js} +5 -5
- package/dist/{chunk-CZ7QQE6H.js.map → chunk-ZRHT6QHO.js.map} +1 -1
- package/dist/cli/cli-executable.js +27 -27
- package/dist/cli/cli-executable.js.map +1 -1
- package/dist/config-item-IK3DUE5F.js +5 -0
- package/dist/{config-item-SR7HN6CU.js.map → config-item-IK3DUE5F.js.map} +1 -1
- package/dist/dotenv-compat.js +5 -5
- package/dist/explain.command-5DG3ACIH.js +12 -0
- package/dist/{explain.command-AQR6BA2T.js.map → explain.command-5DG3ACIH.js.map} +1 -1
- package/dist/index.js +12 -12
- package/dist/init.command-EWCFF2D5.js +11 -0
- package/dist/{init.command-7YURBLWN.js.map → init.command-EWCFF2D5.js.map} +1 -1
- package/dist/install-plugin.command-6ESRFNKI.js +11 -0
- package/dist/{install-plugin.command-PQTP6RHA.js.map → install-plugin.command-6ESRFNKI.js.map} +1 -1
- package/dist/load.command-QNDTE2VK.js +12 -0
- package/dist/{load.command-R2HLBFAO.js.map → load.command-QNDTE2VK.js.map} +1 -1
- package/dist/plugin-lib.js +2 -2
- package/dist/printenv.command-SBCXAVQT.js +12 -0
- package/dist/{printenv.command-U7ULTREK.js.map → printenv.command-SBCXAVQT.js.map} +1 -1
- package/dist/run.command-64JM27VM.js +13 -0
- package/dist/{run.command-COOPCDSU.js.map → run.command-64JM27VM.js.map} +1 -1
- package/dist/runtime/env.js +1 -1
- package/dist/runtime/init-edge.cjs +4 -0
- package/dist/runtime/init-server.cjs +4 -0
- package/dist/runtime/patch-console.js +2 -2
- package/dist/runtime/patch-response.js +2 -2
- package/dist/runtime/patch-server-response.js +2 -2
- package/dist/scan.command-YFM7VO2I.js +13 -0
- package/dist/{scan.command-OUVXZFQD.js.map → scan.command-YFM7VO2I.js.map} +1 -1
- package/dist/telemetry.command-4AEVBTVE.js +11 -0
- package/dist/{telemetry.command-LI6PESQP.js.map → telemetry.command-4AEVBTVE.js.map} +1 -1
- package/dist/typegen.command-27OCEPZM.js +12 -0
- package/dist/{typegen.command-INHZ55RL.js.map → typegen.command-27OCEPZM.js.map} +1 -1
- package/package.json +1 -1
- package/dist/chunk-6CCHLM3U.js.map +0 -1
- package/dist/chunk-FOA6LP5C.js.map +0 -1
- package/dist/chunk-I2BC7NCA.js.map +0 -1
- package/dist/chunk-IMB5QAZS.js.map +0 -1
- package/dist/chunk-JA2AIGGX.js.map +0 -1
- package/dist/chunk-YK3J3EOI.js.map +0 -1
- package/dist/config-item-SR7HN6CU.js +0 -5
- package/dist/explain.command-AQR6BA2T.js +0 -12
- package/dist/init.command-7YURBLWN.js +0 -11
- package/dist/install-plugin.command-PQTP6RHA.js +0 -11
- package/dist/load.command-R2HLBFAO.js +0 -12
- package/dist/printenv.command-U7ULTREK.js +0 -12
- package/dist/run.command-COOPCDSU.js +0 -13
- package/dist/scan.command-OUVXZFQD.js +0 -13
- package/dist/telemetry.command-LI6PESQP.js +0 -11
- package/dist/typegen.command-INHZ55RL.js +0 -12
package/dist/auto-load.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import './chunk-
|
|
1
|
+
import './chunk-UUDTMOJS.js';
|
|
2
|
+
import './chunk-F6RTQ5QX.js';
|
|
3
|
+
import './chunk-5DUWGI2N.js';
|
|
4
4
|
import './chunk-YHOWSHVH.js';
|
|
5
|
-
import './chunk-
|
|
6
|
-
import './chunk-
|
|
5
|
+
import './chunk-R73FENLU.js';
|
|
6
|
+
import './chunk-MGWUDHT5.js';
|
|
7
7
|
import './chunk-XLYSNOR3.js';
|
|
8
8
|
import './chunk-6PEHRAEP.js';
|
|
9
9
|
//# sourceMappingURL=auto-load.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { require_semver } from './chunk-
|
|
1
|
+
import { require_semver } from './chunk-W3GUFLIV.js';
|
|
2
2
|
import { __toESM, __name } from './chunk-6PEHRAEP.js';
|
|
3
3
|
|
|
4
4
|
// src/lib/check-bun-version.ts
|
|
@@ -18,5 +18,5 @@ Bun ${MIN_BUN_VERSION} introduced the \`--no-env-file\` flag which is required t
|
|
|
18
18
|
__name(checkBunVersion, "checkBunVersion");
|
|
19
19
|
|
|
20
20
|
export { checkBunVersion };
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
22
|
-
//# sourceMappingURL=chunk-
|
|
21
|
+
//# sourceMappingURL=chunk-253NGIPN.js.map
|
|
22
|
+
//# sourceMappingURL=chunk-253NGIPN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/check-bun-version.ts"],"names":["semver"],"mappings":";;;;AAAA,IAAA,aAAA,GAAmB,OAAA,CAAA,cAAA,EAAA,EAAA,CAAA,CAAA;AAQZ,IAAM,eAAA,GAAkB,OAAA;AAMxB,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,UAAA,GAAa,QAAQ,QAAA,CAAS,GAAA;AACpC,EAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,EAAA,IAAI,CAAC,aAAA,CAAAA,OAAAA,CAAO,GAAA,CAAI,UAAA,EAAY,eAAe,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,wBAAA,EAA2B,eAAe,CAAA,wBAAA,EAA2B,UAAU,CAAA;AAAA;AAAA,IAAA,EAEtE,eAAe,CAAA,8GAAA;AAAA,KAE1B;AAAA,EACF;AACF;AAZgB,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/lib/check-bun-version.ts"],"names":["semver"],"mappings":";;;;AAAA,IAAA,aAAA,GAAmB,OAAA,CAAA,cAAA,EAAA,EAAA,CAAA,CAAA;AAQZ,IAAM,eAAA,GAAkB,OAAA;AAMxB,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,UAAA,GAAa,QAAQ,QAAA,CAAS,GAAA;AACpC,EAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,EAAA,IAAI,CAAC,aAAA,CAAAA,OAAAA,CAAO,GAAA,CAAI,UAAA,EAAY,eAAe,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,wBAAA,EAA2B,eAAe,CAAA,wBAAA,EAA2B,UAAU,CAAA;AAAA;AAAA,IAAA,EAEtE,eAAe,CAAA,8GAAA;AAAA,KAE1B;AAAA,EACF;AACF;AAZgB,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA","file":"chunk-253NGIPN.js","sourcesContent":["import semver from 'semver';\n\n/**\n * Minimum Bun version required for varlock to work correctly.\n * Bun v1.3.3 introduced the ability to disable built-in .env file loading\n * via `--no-env-file` flag or `env = false` in bunfig.toml, which is necessary\n * to prevent conflicts with varlock's own .env loading.\n */\nexport const MIN_BUN_VERSION = '1.3.3';\n\n/**\n * Checks if the current Bun version meets the minimum requirement.\n * Throws an error if running on an unsupported Bun version.\n */\nexport function checkBunVersion() {\n const bunVersion = process.versions.bun;\n if (!bunVersion) return;\n\n if (!semver.gte(bunVersion, MIN_BUN_VERSION)) {\n throw new Error(\n `Varlock requires Bun >= ${MIN_BUN_VERSION}, but you are using Bun ${bunVersion}.\\n`\n + 'Please upgrade Bun by running: `bun upgrade`\\n'\n + `Bun ${MIN_BUN_VERSION} introduced the \\`--no-env-file\\` flag which is required to prevent `\n + 'conflicts with varlock\\'s own .env loading.',\n );\n }\n}\n"]}
|
|
@@ -812,6 +812,7 @@ var VarlockError = class extends Error {
|
|
|
812
812
|
if (more?.isWarning) this.isWarning = true;
|
|
813
813
|
this.icon ||= this.constructor.defaultIcon;
|
|
814
814
|
}
|
|
815
|
+
more;
|
|
815
816
|
static {
|
|
816
817
|
__name(this, "VarlockError");
|
|
817
818
|
}
|
|
@@ -1047,5 +1048,5 @@ var pluginProxy = new Proxy({}, {
|
|
|
1047
1048
|
//! these are probably not relevant anymore, or needs to move to a plugin layer?
|
|
1048
1049
|
|
|
1049
1050
|
export { CoercionError, ConfigLoadError, EmptyRequiredValueError, ParseError, ResolutionError, SchemaError, ValidationError, VarlockError, activatePlugin, createDebug, deactivatePlugin, my_dash_default, pluginProxy };
|
|
1050
|
-
//# sourceMappingURL=chunk-
|
|
1051
|
-
//# sourceMappingURL=chunk-
|
|
1051
|
+
//# sourceMappingURL=chunk-2PFIYNFA.js.map
|
|
1052
|
+
//# sourceMappingURL=chunk-2PFIYNFA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.bun/@sindresorhus+is@7.2.0/node_modules/@sindresorhus/is/distribution/utilities.js","../../../node_modules/.bun/@sindresorhus+is@7.2.0/node_modules/@sindresorhus/is/distribution/index.js","../../utils/src/my-dash.ts","../src/env-graph/lib/errors.ts","../src/lib/debug.ts","../src/plugin-context.ts"],"names":["_"],"mappings":"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","file":"chunk-2PFIYNFA.js","sourcesContent":["export function keysOf(value) {\n return Object.keys(value);\n}\n","import { keysOf } from './utilities.js';\nconst typedArrayTypeNames = [\n 'Int8Array',\n 'Uint8Array',\n 'Uint8ClampedArray',\n 'Int16Array',\n 'Uint16Array',\n 'Int32Array',\n 'Uint32Array',\n 'Float32Array',\n 'Float64Array',\n 'BigInt64Array',\n 'BigUint64Array',\n];\nfunction isTypedArrayName(name) {\n return typedArrayTypeNames.includes(name);\n}\nconst objectTypeNames = [\n 'Function',\n 'Generator',\n 'AsyncGenerator',\n 'GeneratorFunction',\n 'AsyncGeneratorFunction',\n 'AsyncFunction',\n 'Observable',\n 'Array',\n 'Buffer',\n 'Blob',\n 'Object',\n 'RegExp',\n 'Date',\n 'Error',\n 'Map',\n 'Set',\n 'WeakMap',\n 'WeakSet',\n 'WeakRef',\n 'ArrayBuffer',\n 'SharedArrayBuffer',\n 'DataView',\n 'Promise',\n 'URL',\n 'FormData',\n 'URLSearchParams',\n 'HTMLElement',\n 'NaN',\n ...typedArrayTypeNames,\n];\nfunction isObjectTypeName(name) {\n return objectTypeNames.includes(name);\n}\nconst primitiveTypeNames = [\n 'null',\n 'undefined',\n 'string',\n 'number',\n 'bigint',\n 'boolean',\n 'symbol',\n];\nfunction isPrimitiveTypeName(name) {\n return primitiveTypeNames.includes(name);\n}\nconst assertionTypeDescriptions = [\n 'positive number',\n 'negative number',\n 'Class',\n 'string with a number',\n 'null or undefined',\n 'Iterable',\n 'AsyncIterable',\n 'native Promise',\n 'EnumCase',\n 'string with a URL',\n 'truthy',\n 'falsy',\n 'primitive',\n 'integer',\n 'plain object',\n 'TypedArray',\n 'array-like',\n 'tuple-like',\n 'Node.js Stream',\n 'infinite number',\n 'empty array',\n 'non-empty array',\n 'empty string',\n 'empty string or whitespace',\n 'non-empty string',\n 'non-empty string and not whitespace',\n 'empty object',\n 'non-empty object',\n 'empty set',\n 'non-empty set',\n 'empty map',\n 'non-empty map',\n 'PropertyKey',\n 'even integer',\n 'odd integer',\n 'T',\n 'in range',\n 'predicate returns truthy for any value',\n 'predicate returns truthy for all values',\n 'valid Date',\n 'valid length',\n 'whitespace string',\n ...objectTypeNames,\n ...primitiveTypeNames,\n];\nconst getObjectType = (value) => {\n const objectTypeName = Object.prototype.toString.call(value).slice(8, -1);\n if (/HTML\\w+Element/.test(objectTypeName) && isHtmlElement(value)) {\n return 'HTMLElement';\n }\n if (isObjectTypeName(objectTypeName)) {\n return objectTypeName;\n }\n return undefined;\n};\nfunction detect(value) {\n if (value === null) {\n return 'null';\n }\n switch (typeof value) {\n case 'undefined': {\n return 'undefined';\n }\n case 'string': {\n return 'string';\n }\n case 'number': {\n return Number.isNaN(value) ? 'NaN' : 'number';\n }\n case 'boolean': {\n return 'boolean';\n }\n case 'function': {\n return 'Function';\n }\n case 'bigint': {\n return 'bigint';\n }\n case 'symbol': {\n return 'symbol';\n }\n default:\n }\n if (isObservable(value)) {\n return 'Observable';\n }\n if (isArray(value)) {\n return 'Array';\n }\n if (isBuffer(value)) {\n return 'Buffer';\n }\n const tagType = getObjectType(value);\n if (tagType && tagType !== 'Object') {\n return tagType;\n }\n if (hasPromiseApi(value)) {\n return 'Promise';\n }\n if (value instanceof String || value instanceof Boolean || value instanceof Number) {\n throw new TypeError('Please don\\'t use object wrappers for primitive types');\n }\n return 'Object';\n}\nfunction hasPromiseApi(value) {\n return isFunction(value?.then) && isFunction(value?.catch);\n}\nconst is = Object.assign(detect, {\n all: isAll,\n any: isAny,\n array: isArray,\n arrayBuffer: isArrayBuffer,\n arrayLike: isArrayLike,\n asyncFunction: isAsyncFunction,\n asyncGenerator: isAsyncGenerator,\n asyncGeneratorFunction: isAsyncGeneratorFunction,\n asyncIterable: isAsyncIterable,\n bigint: isBigint,\n bigInt64Array: isBigInt64Array,\n bigUint64Array: isBigUint64Array,\n blob: isBlob,\n boolean: isBoolean,\n boundFunction: isBoundFunction,\n buffer: isBuffer,\n class: isClass,\n dataView: isDataView,\n date: isDate,\n detect,\n directInstanceOf: isDirectInstanceOf,\n emptyArray: isEmptyArray,\n emptyMap: isEmptyMap,\n emptyObject: isEmptyObject,\n emptySet: isEmptySet,\n emptyString: isEmptyString,\n emptyStringOrWhitespace: isEmptyStringOrWhitespace,\n enumCase: isEnumCase,\n error: isError,\n evenInteger: isEvenInteger,\n falsy: isFalsy,\n float32Array: isFloat32Array,\n float64Array: isFloat64Array,\n formData: isFormData,\n function: isFunction,\n generator: isGenerator,\n generatorFunction: isGeneratorFunction,\n htmlElement: isHtmlElement,\n infinite: isInfinite,\n inRange: isInRange,\n int16Array: isInt16Array,\n int32Array: isInt32Array,\n int8Array: isInt8Array,\n integer: isInteger,\n iterable: isIterable,\n map: isMap,\n nan: isNan,\n nativePromise: isNativePromise,\n negativeNumber: isNegativeNumber,\n nodeStream: isNodeStream,\n nonEmptyArray: isNonEmptyArray,\n nonEmptyMap: isNonEmptyMap,\n nonEmptyObject: isNonEmptyObject,\n nonEmptySet: isNonEmptySet,\n nonEmptyString: isNonEmptyString,\n nonEmptyStringAndNotWhitespace: isNonEmptyStringAndNotWhitespace,\n null: isNull,\n nullOrUndefined: isNullOrUndefined,\n number: isNumber,\n numericString: isNumericString,\n object: isObject,\n observable: isObservable,\n oddInteger: isOddInteger,\n plainObject: isPlainObject,\n positiveNumber: isPositiveNumber,\n primitive: isPrimitive,\n promise: isPromise,\n propertyKey: isPropertyKey,\n regExp: isRegExp,\n safeInteger: isSafeInteger,\n set: isSet,\n sharedArrayBuffer: isSharedArrayBuffer,\n string: isString,\n symbol: isSymbol,\n truthy: isTruthy,\n tupleLike: isTupleLike,\n typedArray: isTypedArray,\n uint16Array: isUint16Array,\n uint32Array: isUint32Array,\n uint8Array: isUint8Array,\n uint8ClampedArray: isUint8ClampedArray,\n undefined: isUndefined,\n urlInstance: isUrlInstance,\n urlSearchParams: isUrlSearchParams,\n urlString: isUrlString,\n optional: isOptional,\n validDate: isValidDate,\n validLength: isValidLength,\n weakMap: isWeakMap,\n weakRef: isWeakRef,\n weakSet: isWeakSet,\n whitespaceString: isWhitespaceString,\n});\nfunction isAbsoluteModule2(remainder) {\n return (value) => isInteger(value) && Math.abs(value % 2) === remainder;\n}\nfunction validatePredicateArray(predicateArray, allowEmpty) {\n if (predicateArray.length === 0) {\n if (allowEmpty) {\n // Next major release: throw for empty predicate arrays to avoid vacuous results.\n // throw new TypeError('Invalid predicate array');\n }\n else {\n throw new TypeError('Invalid predicate array');\n }\n return;\n }\n for (const predicate of predicateArray) {\n if (!isFunction(predicate)) {\n throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`);\n }\n }\n}\nexport function isAll(predicate, ...values) {\n if (Array.isArray(predicate)) {\n const predicateArray = predicate;\n validatePredicateArray(predicateArray, values.length === 0);\n const combinedPredicate = (value) => predicateArray.every(singlePredicate => singlePredicate(value));\n if (values.length === 0) {\n return combinedPredicate;\n }\n return predicateOnArray(Array.prototype.every, combinedPredicate, values);\n }\n return predicateOnArray(Array.prototype.every, predicate, values);\n}\nexport function isAny(predicate, ...values) {\n if (Array.isArray(predicate)) {\n const predicateArray = predicate;\n validatePredicateArray(predicateArray, values.length === 0);\n const combinedPredicate = (value) => predicateArray.some(singlePredicate => singlePredicate(value));\n if (values.length === 0) {\n return combinedPredicate;\n }\n return predicateOnArray(Array.prototype.some, combinedPredicate, values);\n }\n return predicateOnArray(Array.prototype.some, predicate, values);\n}\nexport function isOptional(value, predicate) {\n return isUndefined(value) || predicate(value);\n}\nexport function isArray(value, assertion) {\n if (!Array.isArray(value)) {\n return false;\n }\n if (!isFunction(assertion)) {\n return true;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return value.every(element => assertion(element));\n}\nexport function isArrayBuffer(value) {\n return getObjectType(value) === 'ArrayBuffer';\n}\nexport function isArrayLike(value) {\n return !isNullOrUndefined(value) && !isFunction(value) && isValidLength(value.length);\n}\nexport function isAsyncFunction(value) {\n return getObjectType(value) === 'AsyncFunction';\n}\nexport function isAsyncGenerator(value) {\n return isAsyncIterable(value) && isFunction(value.next) && isFunction(value.throw);\n}\nexport function isAsyncGeneratorFunction(value) {\n return getObjectType(value) === 'AsyncGeneratorFunction';\n}\nexport function isAsyncIterable(value) {\n return isFunction(value?.[Symbol.asyncIterator]);\n}\nexport function isBigint(value) {\n return typeof value === 'bigint';\n}\nexport function isBigInt64Array(value) {\n return getObjectType(value) === 'BigInt64Array';\n}\nexport function isBigUint64Array(value) {\n return getObjectType(value) === 'BigUint64Array';\n}\nexport function isBlob(value) {\n return getObjectType(value) === 'Blob';\n}\nexport function isBoolean(value) {\n return value === true || value === false;\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isBoundFunction(value) {\n return isFunction(value) && !Object.hasOwn(value, 'prototype');\n}\n/**\nNote: [Prefer using `Uint8Array` instead of `Buffer`.](https://sindresorhus.com/blog/goodbye-nodejs-buffer)\n*/\nexport function isBuffer(value) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n return value?.constructor?.isBuffer?.(value) ?? false;\n}\nexport function isClass(value) {\n return isFunction(value) && /^class(\\s+|{)/.test(value.toString());\n}\nexport function isDataView(value) {\n return getObjectType(value) === 'DataView';\n}\nexport function isDate(value) {\n return getObjectType(value) === 'Date';\n}\nexport function isDirectInstanceOf(instance, class_) {\n if (instance === undefined || instance === null) {\n return false;\n }\n return Object.getPrototypeOf(instance) === class_.prototype;\n}\nexport function isEmptyArray(value) {\n return isArray(value) && value.length === 0;\n}\nexport function isEmptyMap(value) {\n return isMap(value) && value.size === 0;\n}\nexport function isEmptyObject(value) {\n return isObject(value) && !isMap(value) && !isSet(value) && Object.keys(value).length === 0;\n}\nexport function isEmptySet(value) {\n return isSet(value) && value.size === 0;\n}\nexport function isEmptyString(value) {\n return isString(value) && value.length === 0;\n}\nexport function isEmptyStringOrWhitespace(value) {\n return isEmptyString(value) || isWhitespaceString(value);\n}\nexport function isEnumCase(value, targetEnum) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return Object.values(targetEnum).includes(value);\n}\nexport function isError(value) {\n // TODO: Use `Error.isError` when targeting Node.js 24.`\n return getObjectType(value) === 'Error';\n}\nexport function isEvenInteger(value) {\n return isAbsoluteModule2(0)(value);\n}\n// Example: `is.falsy = (value: unknown): value is (not true | 0 | '' | undefined | null) => Boolean(value);`\nexport function isFalsy(value) {\n return !value;\n}\n// TODO: Support detecting Float16Array when targeting Node.js 24.\nexport function isFloat32Array(value) {\n return getObjectType(value) === 'Float32Array';\n}\nexport function isFloat64Array(value) {\n return getObjectType(value) === 'Float64Array';\n}\nexport function isFormData(value) {\n return getObjectType(value) === 'FormData';\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isFunction(value) {\n return typeof value === 'function';\n}\nexport function isGenerator(value) {\n return isIterable(value) && isFunction(value?.next) && isFunction(value?.throw);\n}\nexport function isGeneratorFunction(value) {\n return getObjectType(value) === 'GeneratorFunction';\n}\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst NODE_TYPE_ELEMENT = 1;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst DOM_PROPERTIES_TO_CHECK = [\n 'innerHTML',\n 'ownerDocument',\n 'style',\n 'attributes',\n 'nodeValue',\n];\nexport function isHtmlElement(value) {\n return isObject(value)\n && value.nodeType === NODE_TYPE_ELEMENT\n && isString(value.nodeName)\n && !isPlainObject(value)\n && DOM_PROPERTIES_TO_CHECK.every(property => property in value);\n}\nexport function isInfinite(value) {\n return value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY;\n}\nexport function isInRange(value, range) {\n if (isNumber(range)) {\n return value >= Math.min(0, range) && value <= Math.max(range, 0);\n }\n if (isArray(range) && range.length === 2) {\n return value >= Math.min(...range) && value <= Math.max(...range);\n }\n throw new TypeError(`Invalid range: ${JSON.stringify(range)}`);\n}\nexport function isInt16Array(value) {\n return getObjectType(value) === 'Int16Array';\n}\nexport function isInt32Array(value) {\n return getObjectType(value) === 'Int32Array';\n}\nexport function isInt8Array(value) {\n return getObjectType(value) === 'Int8Array';\n}\nexport function isInteger(value) {\n return Number.isInteger(value);\n}\nexport function isIterable(value) {\n return isFunction(value?.[Symbol.iterator]);\n}\nexport function isMap(value) {\n return getObjectType(value) === 'Map';\n}\nexport function isNan(value) {\n return Number.isNaN(value);\n}\nexport function isNativePromise(value) {\n return getObjectType(value) === 'Promise';\n}\nexport function isNegativeNumber(value) {\n return isNumber(value) && value < 0;\n}\nexport function isNodeStream(value) {\n return isObject(value) && isFunction(value.pipe) && !isObservable(value);\n}\nexport function isNonEmptyArray(value) {\n return isArray(value) && value.length > 0;\n}\nexport function isNonEmptyMap(value) {\n return isMap(value) && value.size > 0;\n}\n// TODO: Use `not` operator here to remove `Map` and `Set` from type guard:\n// - https://github.com/Microsoft/TypeScript/pull/29317\nexport function isNonEmptyObject(value) {\n return isObject(value) && !isMap(value) && !isSet(value) && Object.keys(value).length > 0;\n}\nexport function isNonEmptySet(value) {\n return isSet(value) && value.size > 0;\n}\n// TODO: Use `not ''` when the `not` operator is available.\nexport function isNonEmptyString(value) {\n return isString(value) && value.length > 0;\n}\n// TODO: Use `not ''` when the `not` operator is available.\nexport function isNonEmptyStringAndNotWhitespace(value) {\n return isString(value) && !isEmptyStringOrWhitespace(value);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNull(value) {\n return value === null;\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNullOrUndefined(value) {\n return isNull(value) || isUndefined(value);\n}\nexport function isNumber(value) {\n return typeof value === 'number' && !Number.isNaN(value);\n}\nexport function isNumericString(value) {\n return isString(value) && !isEmptyStringOrWhitespace(value) && !Number.isNaN(Number(value));\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isObject(value) {\n return !isNull(value) && (typeof value === 'object' || isFunction(value));\n}\nexport function isObservable(value) {\n if (!value) {\n return false;\n }\n // eslint-disable-next-line no-use-extend-native/no-use-extend-native, @typescript-eslint/no-unsafe-call\n if (Symbol.observable !== undefined && value === value[Symbol.observable]?.()) {\n return true;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (value === value['@@observable']?.()) {\n return true;\n }\n return false;\n}\nexport function isOddInteger(value) {\n return isAbsoluteModule2(1)(value);\n}\nexport function isPlainObject(value) {\n // From: https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const prototype = Object.getPrototypeOf(value);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\nexport function isPositiveNumber(value) {\n return isNumber(value) && value > 0;\n}\nexport function isPrimitive(value) {\n return isNull(value) || isPrimitiveTypeName(typeof value);\n}\nexport function isPromise(value) {\n return isNativePromise(value) || hasPromiseApi(value);\n}\n// `PropertyKey` is any value that can be used as an object key (string, number, or symbol)\nexport function isPropertyKey(value) {\n return isAny([isString, isNumber, isSymbol], value);\n}\nexport function isRegExp(value) {\n return getObjectType(value) === 'RegExp';\n}\nexport function isSafeInteger(value) {\n return Number.isSafeInteger(value);\n}\nexport function isSet(value) {\n return getObjectType(value) === 'Set';\n}\nexport function isSharedArrayBuffer(value) {\n return getObjectType(value) === 'SharedArrayBuffer';\n}\nexport function isString(value) {\n return typeof value === 'string';\n}\nexport function isSymbol(value) {\n return typeof value === 'symbol';\n}\n// Example: `is.truthy = (value: unknown): value is (not false | not 0 | not '' | not undefined | not null) => Boolean(value);`\n// eslint-disable-next-line unicorn/prefer-native-coercion-functions\nexport function isTruthy(value) {\n return Boolean(value);\n}\nexport function isTupleLike(value, guards) {\n if (isArray(guards) && isArray(value) && guards.length === value.length) {\n return guards.every((guard, index) => guard(value[index]));\n }\n return false;\n}\nexport function isTypedArray(value) {\n return isTypedArrayName(getObjectType(value));\n}\nexport function isUint16Array(value) {\n return getObjectType(value) === 'Uint16Array';\n}\nexport function isUint32Array(value) {\n return getObjectType(value) === 'Uint32Array';\n}\nexport function isUint8Array(value) {\n return getObjectType(value) === 'Uint8Array';\n}\nexport function isUint8ClampedArray(value) {\n return getObjectType(value) === 'Uint8ClampedArray';\n}\nexport function isUndefined(value) {\n return value === undefined;\n}\nexport function isUrlInstance(value) {\n return getObjectType(value) === 'URL';\n}\n// eslint-disable-next-line unicorn/prevent-abbreviations\nexport function isUrlSearchParams(value) {\n return getObjectType(value) === 'URLSearchParams';\n}\nexport function isUrlString(value) {\n if (!isString(value)) {\n return false;\n }\n try {\n new URL(value); // eslint-disable-line no-new\n return true;\n }\n catch {\n return false;\n }\n}\nexport function isValidDate(value) {\n return isDate(value) && !isNan(Number(value));\n}\nexport function isValidLength(value) {\n return isSafeInteger(value) && value >= 0;\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isWeakMap(value) {\n return getObjectType(value) === 'WeakMap';\n}\n// eslint-disable-next-line @typescript-eslint/ban-types, unicorn/prevent-abbreviations\nexport function isWeakRef(value) {\n return getObjectType(value) === 'WeakRef';\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isWeakSet(value) {\n return getObjectType(value) === 'WeakSet';\n}\nexport function isWhitespaceString(value) {\n return isString(value) && /^\\s+$/.test(value);\n}\nfunction predicateOnArray(method, predicate, values) {\n if (!isFunction(predicate)) {\n throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`);\n }\n if (values.length === 0) {\n throw new TypeError('Invalid number of values');\n }\n return method.call(values, predicate);\n}\nfunction typeErrorMessage(description, value) {\n return `Expected value which is \\`${description}\\`, received value of type \\`${is(value)}\\`.`;\n}\nfunction unique(values) {\n // eslint-disable-next-line unicorn/prefer-spread\n return Array.from(new Set(values));\n}\nconst andFormatter = new Intl.ListFormat('en', { style: 'long', type: 'conjunction' });\nconst orFormatter = new Intl.ListFormat('en', { style: 'long', type: 'disjunction' });\nfunction typeErrorMessageMultipleValues(expectedType, values) {\n const uniqueExpectedTypes = unique((isArray(expectedType) ? expectedType : [expectedType]).map(value => `\\`${value}\\``));\n const uniqueValueTypes = unique(values.map(value => `\\`${is(value)}\\``));\n return `Expected values which are ${orFormatter.format(uniqueExpectedTypes)}. Received values of type${uniqueValueTypes.length > 1 ? 's' : ''} ${andFormatter.format(uniqueValueTypes)}.`;\n}\nexport const assert = {\n all: assertAll,\n any: assertAny,\n optional: assertOptional,\n array: assertArray,\n arrayBuffer: assertArrayBuffer,\n arrayLike: assertArrayLike,\n asyncFunction: assertAsyncFunction,\n asyncGenerator: assertAsyncGenerator,\n asyncGeneratorFunction: assertAsyncGeneratorFunction,\n asyncIterable: assertAsyncIterable,\n bigint: assertBigint,\n bigInt64Array: assertBigInt64Array,\n bigUint64Array: assertBigUint64Array,\n blob: assertBlob,\n boolean: assertBoolean,\n boundFunction: assertBoundFunction,\n buffer: assertBuffer,\n class: assertClass,\n dataView: assertDataView,\n date: assertDate,\n directInstanceOf: assertDirectInstanceOf,\n emptyArray: assertEmptyArray,\n emptyMap: assertEmptyMap,\n emptyObject: assertEmptyObject,\n emptySet: assertEmptySet,\n emptyString: assertEmptyString,\n emptyStringOrWhitespace: assertEmptyStringOrWhitespace,\n enumCase: assertEnumCase,\n error: assertError,\n evenInteger: assertEvenInteger,\n falsy: assertFalsy,\n float32Array: assertFloat32Array,\n float64Array: assertFloat64Array,\n formData: assertFormData,\n function: assertFunction,\n generator: assertGenerator,\n generatorFunction: assertGeneratorFunction,\n htmlElement: assertHtmlElement,\n infinite: assertInfinite,\n inRange: assertInRange,\n int16Array: assertInt16Array,\n int32Array: assertInt32Array,\n int8Array: assertInt8Array,\n integer: assertInteger,\n iterable: assertIterable,\n map: assertMap,\n nan: assertNan,\n nativePromise: assertNativePromise,\n negativeNumber: assertNegativeNumber,\n nodeStream: assertNodeStream,\n nonEmptyArray: assertNonEmptyArray,\n nonEmptyMap: assertNonEmptyMap,\n nonEmptyObject: assertNonEmptyObject,\n nonEmptySet: assertNonEmptySet,\n nonEmptyString: assertNonEmptyString,\n nonEmptyStringAndNotWhitespace: assertNonEmptyStringAndNotWhitespace,\n null: assertNull,\n nullOrUndefined: assertNullOrUndefined,\n number: assertNumber,\n numericString: assertNumericString,\n object: assertObject,\n observable: assertObservable,\n oddInteger: assertOddInteger,\n plainObject: assertPlainObject,\n positiveNumber: assertPositiveNumber,\n primitive: assertPrimitive,\n promise: assertPromise,\n propertyKey: assertPropertyKey,\n regExp: assertRegExp,\n safeInteger: assertSafeInteger,\n set: assertSet,\n sharedArrayBuffer: assertSharedArrayBuffer,\n string: assertString,\n symbol: assertSymbol,\n truthy: assertTruthy,\n tupleLike: assertTupleLike,\n typedArray: assertTypedArray,\n uint16Array: assertUint16Array,\n uint32Array: assertUint32Array,\n uint8Array: assertUint8Array,\n uint8ClampedArray: assertUint8ClampedArray,\n undefined: assertUndefined,\n urlInstance: assertUrlInstance,\n urlSearchParams: assertUrlSearchParams,\n urlString: assertUrlString,\n validDate: assertValidDate,\n validLength: assertValidLength,\n weakMap: assertWeakMap,\n weakRef: assertWeakRef,\n weakSet: assertWeakSet,\n whitespaceString: assertWhitespaceString,\n};\nconst methodTypeMap = {\n isArray: 'Array',\n isArrayBuffer: 'ArrayBuffer',\n isArrayLike: 'array-like',\n isAsyncFunction: 'AsyncFunction',\n isAsyncGenerator: 'AsyncGenerator',\n isAsyncGeneratorFunction: 'AsyncGeneratorFunction',\n isAsyncIterable: 'AsyncIterable',\n isBigint: 'bigint',\n isBigInt64Array: 'BigInt64Array',\n isBigUint64Array: 'BigUint64Array',\n isBlob: 'Blob',\n isBoolean: 'boolean',\n isBoundFunction: 'Function',\n isBuffer: 'Buffer',\n isClass: 'Class',\n isDataView: 'DataView',\n isDate: 'Date',\n isDirectInstanceOf: 'T',\n isEmptyArray: 'empty array',\n isEmptyMap: 'empty map',\n isEmptyObject: 'empty object',\n isEmptySet: 'empty set',\n isEmptyString: 'empty string',\n isEmptyStringOrWhitespace: 'empty string or whitespace',\n isEnumCase: 'EnumCase',\n isError: 'Error',\n isEvenInteger: 'even integer',\n isFalsy: 'falsy',\n isFloat32Array: 'Float32Array',\n isFloat64Array: 'Float64Array',\n isFormData: 'FormData',\n isFunction: 'Function',\n isGenerator: 'Generator',\n isGeneratorFunction: 'GeneratorFunction',\n isHtmlElement: 'HTMLElement',\n isInfinite: 'infinite number',\n isInRange: 'in range',\n isInt16Array: 'Int16Array',\n isInt32Array: 'Int32Array',\n isInt8Array: 'Int8Array',\n isInteger: 'integer',\n isIterable: 'Iterable',\n isMap: 'Map',\n isNan: 'NaN',\n isNativePromise: 'native Promise',\n isNegativeNumber: 'negative number',\n isNodeStream: 'Node.js Stream',\n isNonEmptyArray: 'non-empty array',\n isNonEmptyMap: 'non-empty map',\n isNonEmptyObject: 'non-empty object',\n isNonEmptySet: 'non-empty set',\n isNonEmptyString: 'non-empty string',\n isNonEmptyStringAndNotWhitespace: 'non-empty string and not whitespace',\n isNull: 'null',\n isNullOrUndefined: 'null or undefined',\n isNumber: 'number',\n isNumericString: 'string with a number',\n isObject: 'Object',\n isObservable: 'Observable',\n isOddInteger: 'odd integer',\n isPlainObject: 'plain object',\n isPositiveNumber: 'positive number',\n isPrimitive: 'primitive',\n isPromise: 'Promise',\n isPropertyKey: 'PropertyKey',\n isRegExp: 'RegExp',\n isSafeInteger: 'integer',\n isSet: 'Set',\n isSharedArrayBuffer: 'SharedArrayBuffer',\n isString: 'string',\n isSymbol: 'symbol',\n isTruthy: 'truthy',\n isTupleLike: 'tuple-like',\n isTypedArray: 'TypedArray',\n isUint16Array: 'Uint16Array',\n isUint32Array: 'Uint32Array',\n isUint8Array: 'Uint8Array',\n isUint8ClampedArray: 'Uint8ClampedArray',\n isUndefined: 'undefined',\n isUrlInstance: 'URL',\n isUrlSearchParams: 'URLSearchParams',\n isUrlString: 'string with a URL',\n isValidDate: 'valid Date',\n isValidLength: 'valid length',\n isWeakMap: 'WeakMap',\n isWeakRef: 'WeakRef',\n isWeakSet: 'WeakSet',\n isWhitespaceString: 'whitespace string',\n};\nconst isMethodNames = keysOf(methodTypeMap);\nfunction isIsMethodName(value) {\n return isMethodNames.includes(value);\n}\nexport function assertAll(predicate, ...values) {\n if (values.length === 0) {\n throw new TypeError('Invalid number of values');\n }\n if (!isAll(predicate, ...values)) {\n const predicateFunction = predicate;\n const expectedType = !Array.isArray(predicate) && isIsMethodName(predicateFunction.name) ? methodTypeMap[predicateFunction.name] : 'predicate returns truthy for all values';\n throw new TypeError(typeErrorMessageMultipleValues(expectedType, values));\n }\n}\nexport function assertAny(predicate, ...values) {\n if (values.length === 0) {\n throw new TypeError('Invalid number of values');\n }\n if (!isAny(predicate, ...values)) {\n const predicates = Array.isArray(predicate) ? predicate : [predicate];\n const expectedTypes = predicates.map(singlePredicate => isIsMethodName(singlePredicate.name) ? methodTypeMap[singlePredicate.name] : 'predicate returns truthy for any value');\n throw new TypeError(typeErrorMessageMultipleValues(expectedTypes, values));\n }\n}\nexport function assertOptional(value, assertion, message) {\n if (!isUndefined(value)) {\n assertion(value, message);\n }\n}\nexport function assertArray(value, assertion, message) {\n if (!isArray(value)) {\n throw new TypeError(message ?? typeErrorMessage('Array', value));\n }\n if (assertion) {\n for (const element of value) {\n // @ts-expect-error: \"Assertions require every name in the call target to be declared with an explicit type annotation.\"\n assertion(element, message);\n }\n }\n}\nexport function assertArrayBuffer(value, message) {\n if (!isArrayBuffer(value)) {\n throw new TypeError(message ?? typeErrorMessage('ArrayBuffer', value));\n }\n}\nexport function assertArrayLike(value, message) {\n if (!isArrayLike(value)) {\n throw new TypeError(message ?? typeErrorMessage('array-like', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertAsyncFunction(value, message) {\n if (!isAsyncFunction(value)) {\n throw new TypeError(message ?? typeErrorMessage('AsyncFunction', value));\n }\n}\nexport function assertAsyncGenerator(value, message) {\n if (!isAsyncGenerator(value)) {\n throw new TypeError(message ?? typeErrorMessage('AsyncGenerator', value));\n }\n}\nexport function assertAsyncGeneratorFunction(value, message) {\n if (!isAsyncGeneratorFunction(value)) {\n throw new TypeError(message ?? typeErrorMessage('AsyncGeneratorFunction', value));\n }\n}\nexport function assertAsyncIterable(value, message) {\n if (!isAsyncIterable(value)) {\n throw new TypeError(message ?? typeErrorMessage('AsyncIterable', value));\n }\n}\nexport function assertBigint(value, message) {\n if (!isBigint(value)) {\n throw new TypeError(message ?? typeErrorMessage('bigint', value));\n }\n}\nexport function assertBigInt64Array(value, message) {\n if (!isBigInt64Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('BigInt64Array', value));\n }\n}\nexport function assertBigUint64Array(value, message) {\n if (!isBigUint64Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('BigUint64Array', value));\n }\n}\nexport function assertBlob(value, message) {\n if (!isBlob(value)) {\n throw new TypeError(message ?? typeErrorMessage('Blob', value));\n }\n}\nexport function assertBoolean(value, message) {\n if (!isBoolean(value)) {\n throw new TypeError(message ?? typeErrorMessage('boolean', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertBoundFunction(value, message) {\n if (!isBoundFunction(value)) {\n throw new TypeError(message ?? typeErrorMessage('Function', value));\n }\n}\n/**\nNote: [Prefer using `Uint8Array` instead of `Buffer`.](https://sindresorhus.com/blog/goodbye-nodejs-buffer)\n*/\nexport function assertBuffer(value, message) {\n if (!isBuffer(value)) {\n throw new TypeError(message ?? typeErrorMessage('Buffer', value));\n }\n}\nexport function assertClass(value, message) {\n if (!isClass(value)) {\n throw new TypeError(message ?? typeErrorMessage('Class', value));\n }\n}\nexport function assertDataView(value, message) {\n if (!isDataView(value)) {\n throw new TypeError(message ?? typeErrorMessage('DataView', value));\n }\n}\nexport function assertDate(value, message) {\n if (!isDate(value)) {\n throw new TypeError(message ?? typeErrorMessage('Date', value));\n }\n}\nexport function assertDirectInstanceOf(instance, class_, message) {\n if (!isDirectInstanceOf(instance, class_)) {\n throw new TypeError(message ?? typeErrorMessage('T', instance));\n }\n}\nexport function assertEmptyArray(value, message) {\n if (!isEmptyArray(value)) {\n throw new TypeError(message ?? typeErrorMessage('empty array', value));\n }\n}\nexport function assertEmptyMap(value, message) {\n if (!isEmptyMap(value)) {\n throw new TypeError(message ?? typeErrorMessage('empty map', value));\n }\n}\nexport function assertEmptyObject(value, message) {\n if (!isEmptyObject(value)) {\n throw new TypeError(message ?? typeErrorMessage('empty object', value));\n }\n}\nexport function assertEmptySet(value, message) {\n if (!isEmptySet(value)) {\n throw new TypeError(message ?? typeErrorMessage('empty set', value));\n }\n}\nexport function assertEmptyString(value, message) {\n if (!isEmptyString(value)) {\n throw new TypeError(message ?? typeErrorMessage('empty string', value));\n }\n}\nexport function assertEmptyStringOrWhitespace(value, message) {\n if (!isEmptyStringOrWhitespace(value)) {\n throw new TypeError(message ?? typeErrorMessage('empty string or whitespace', value));\n }\n}\nexport function assertEnumCase(value, targetEnum, message) {\n if (!isEnumCase(value, targetEnum)) {\n throw new TypeError(message ?? typeErrorMessage('EnumCase', value));\n }\n}\nexport function assertError(value, message) {\n if (!isError(value)) {\n throw new TypeError(message ?? typeErrorMessage('Error', value));\n }\n}\nexport function assertEvenInteger(value, message) {\n if (!isEvenInteger(value)) {\n throw new TypeError(message ?? typeErrorMessage('even integer', value));\n }\n}\nexport function assertFalsy(value, message) {\n if (!isFalsy(value)) {\n throw new TypeError(message ?? typeErrorMessage('falsy', value));\n }\n}\nexport function assertFloat32Array(value, message) {\n if (!isFloat32Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Float32Array', value));\n }\n}\nexport function assertFloat64Array(value, message) {\n if (!isFloat64Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Float64Array', value));\n }\n}\nexport function assertFormData(value, message) {\n if (!isFormData(value)) {\n throw new TypeError(message ?? typeErrorMessage('FormData', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertFunction(value, message) {\n if (!isFunction(value)) {\n throw new TypeError(message ?? typeErrorMessage('Function', value));\n }\n}\nexport function assertGenerator(value, message) {\n if (!isGenerator(value)) {\n throw new TypeError(message ?? typeErrorMessage('Generator', value));\n }\n}\nexport function assertGeneratorFunction(value, message) {\n if (!isGeneratorFunction(value)) {\n throw new TypeError(message ?? typeErrorMessage('GeneratorFunction', value));\n }\n}\nexport function assertHtmlElement(value, message) {\n if (!isHtmlElement(value)) {\n throw new TypeError(message ?? typeErrorMessage('HTMLElement', value));\n }\n}\nexport function assertInfinite(value, message) {\n if (!isInfinite(value)) {\n throw new TypeError(message ?? typeErrorMessage('infinite number', value));\n }\n}\nexport function assertInRange(value, range, message) {\n if (!isInRange(value, range)) {\n throw new TypeError(message ?? typeErrorMessage('in range', value));\n }\n}\nexport function assertInt16Array(value, message) {\n if (!isInt16Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Int16Array', value));\n }\n}\nexport function assertInt32Array(value, message) {\n if (!isInt32Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Int32Array', value));\n }\n}\nexport function assertInt8Array(value, message) {\n if (!isInt8Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Int8Array', value));\n }\n}\nexport function assertInteger(value, message) {\n if (!isInteger(value)) {\n throw new TypeError(message ?? typeErrorMessage('integer', value));\n }\n}\nexport function assertIterable(value, message) {\n if (!isIterable(value)) {\n throw new TypeError(message ?? typeErrorMessage('Iterable', value));\n }\n}\nexport function assertMap(value, message) {\n if (!isMap(value)) {\n throw new TypeError(message ?? typeErrorMessage('Map', value));\n }\n}\nexport function assertNan(value, message) {\n if (!isNan(value)) {\n throw new TypeError(message ?? typeErrorMessage('NaN', value));\n }\n}\nexport function assertNativePromise(value, message) {\n if (!isNativePromise(value)) {\n throw new TypeError(message ?? typeErrorMessage('native Promise', value));\n }\n}\nexport function assertNegativeNumber(value, message) {\n if (!isNegativeNumber(value)) {\n throw new TypeError(message ?? typeErrorMessage('negative number', value));\n }\n}\nexport function assertNodeStream(value, message) {\n if (!isNodeStream(value)) {\n throw new TypeError(message ?? typeErrorMessage('Node.js Stream', value));\n }\n}\nexport function assertNonEmptyArray(value, message) {\n if (!isNonEmptyArray(value)) {\n throw new TypeError(message ?? typeErrorMessage('non-empty array', value));\n }\n}\nexport function assertNonEmptyMap(value, message) {\n if (!isNonEmptyMap(value)) {\n throw new TypeError(message ?? typeErrorMessage('non-empty map', value));\n }\n}\nexport function assertNonEmptyObject(value, message) {\n if (!isNonEmptyObject(value)) {\n throw new TypeError(message ?? typeErrorMessage('non-empty object', value));\n }\n}\nexport function assertNonEmptySet(value, message) {\n if (!isNonEmptySet(value)) {\n throw new TypeError(message ?? typeErrorMessage('non-empty set', value));\n }\n}\nexport function assertNonEmptyString(value, message) {\n if (!isNonEmptyString(value)) {\n throw new TypeError(message ?? typeErrorMessage('non-empty string', value));\n }\n}\nexport function assertNonEmptyStringAndNotWhitespace(value, message) {\n if (!isNonEmptyStringAndNotWhitespace(value)) {\n throw new TypeError(message ?? typeErrorMessage('non-empty string and not whitespace', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertNull(value, message) {\n if (!isNull(value)) {\n throw new TypeError(message ?? typeErrorMessage('null', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertNullOrUndefined(value, message) {\n if (!isNullOrUndefined(value)) {\n throw new TypeError(message ?? typeErrorMessage('null or undefined', value));\n }\n}\nexport function assertNumber(value, message) {\n if (!isNumber(value)) {\n throw new TypeError(message ?? typeErrorMessage('number', value));\n }\n}\nexport function assertNumericString(value, message) {\n if (!isNumericString(value)) {\n throw new TypeError(message ?? typeErrorMessage('string with a number', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertObject(value, message) {\n if (!isObject(value)) {\n throw new TypeError(message ?? typeErrorMessage('Object', value));\n }\n}\nexport function assertObservable(value, message) {\n if (!isObservable(value)) {\n throw new TypeError(message ?? typeErrorMessage('Observable', value));\n }\n}\nexport function assertOddInteger(value, message) {\n if (!isOddInteger(value)) {\n throw new TypeError(message ?? typeErrorMessage('odd integer', value));\n }\n}\nexport function assertPlainObject(value, message) {\n if (!isPlainObject(value)) {\n throw new TypeError(message ?? typeErrorMessage('plain object', value));\n }\n}\nexport function assertPositiveNumber(value, message) {\n if (!isPositiveNumber(value)) {\n throw new TypeError(message ?? typeErrorMessage('positive number', value));\n }\n}\nexport function assertPrimitive(value, message) {\n if (!isPrimitive(value)) {\n throw new TypeError(message ?? typeErrorMessage('primitive', value));\n }\n}\nexport function assertPromise(value, message) {\n if (!isPromise(value)) {\n throw new TypeError(message ?? typeErrorMessage('Promise', value));\n }\n}\nexport function assertPropertyKey(value, message) {\n if (!isPropertyKey(value)) {\n throw new TypeError(message ?? typeErrorMessage('PropertyKey', value));\n }\n}\nexport function assertRegExp(value, message) {\n if (!isRegExp(value)) {\n throw new TypeError(message ?? typeErrorMessage('RegExp', value));\n }\n}\nexport function assertSafeInteger(value, message) {\n if (!isSafeInteger(value)) {\n throw new TypeError(message ?? typeErrorMessage('integer', value));\n }\n}\nexport function assertSet(value, message) {\n if (!isSet(value)) {\n throw new TypeError(message ?? typeErrorMessage('Set', value));\n }\n}\nexport function assertSharedArrayBuffer(value, message) {\n if (!isSharedArrayBuffer(value)) {\n throw new TypeError(message ?? typeErrorMessage('SharedArrayBuffer', value));\n }\n}\nexport function assertString(value, message) {\n if (!isString(value)) {\n throw new TypeError(message ?? typeErrorMessage('string', value));\n }\n}\nexport function assertSymbol(value, message) {\n if (!isSymbol(value)) {\n throw new TypeError(message ?? typeErrorMessage('symbol', value));\n }\n}\nexport function assertTruthy(value, message) {\n if (!isTruthy(value)) {\n throw new TypeError(message ?? typeErrorMessage('truthy', value));\n }\n}\nexport function assertTupleLike(value, guards, message) {\n if (!isTupleLike(value, guards)) {\n throw new TypeError(message ?? typeErrorMessage('tuple-like', value));\n }\n}\nexport function assertTypedArray(value, message) {\n if (!isTypedArray(value)) {\n throw new TypeError(message ?? typeErrorMessage('TypedArray', value));\n }\n}\nexport function assertUint16Array(value, message) {\n if (!isUint16Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Uint16Array', value));\n }\n}\nexport function assertUint32Array(value, message) {\n if (!isUint32Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Uint32Array', value));\n }\n}\nexport function assertUint8Array(value, message) {\n if (!isUint8Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Uint8Array', value));\n }\n}\nexport function assertUint8ClampedArray(value, message) {\n if (!isUint8ClampedArray(value)) {\n throw new TypeError(message ?? typeErrorMessage('Uint8ClampedArray', value));\n }\n}\nexport function assertUndefined(value, message) {\n if (!isUndefined(value)) {\n throw new TypeError(message ?? typeErrorMessage('undefined', value));\n }\n}\nexport function assertUrlInstance(value, message) {\n if (!isUrlInstance(value)) {\n throw new TypeError(message ?? typeErrorMessage('URL', value));\n }\n}\n// eslint-disable-next-line unicorn/prevent-abbreviations\nexport function assertUrlSearchParams(value, message) {\n if (!isUrlSearchParams(value)) {\n throw new TypeError(message ?? typeErrorMessage('URLSearchParams', value));\n }\n}\nexport function assertUrlString(value, message) {\n if (!isUrlString(value)) {\n throw new TypeError(message ?? typeErrorMessage('string with a URL', value));\n }\n}\nexport function assertValidDate(value, message) {\n if (!isValidDate(value)) {\n throw new TypeError(message ?? typeErrorMessage('valid Date', value));\n }\n}\nexport function assertValidLength(value, message) {\n if (!isValidLength(value)) {\n throw new TypeError(message ?? typeErrorMessage('valid length', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertWeakMap(value, message) {\n if (!isWeakMap(value)) {\n throw new TypeError(message ?? typeErrorMessage('WeakMap', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types, unicorn/prevent-abbreviations\nexport function assertWeakRef(value, message) {\n if (!isWeakRef(value)) {\n throw new TypeError(message ?? typeErrorMessage('WeakRef', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertWeakSet(value, message) {\n if (!isWeakSet(value)) {\n throw new TypeError(message ?? typeErrorMessage('WeakSet', value));\n }\n}\nexport function assertWhitespaceString(value, message) {\n if (!isWhitespaceString(value)) {\n throw new TypeError(message ?? typeErrorMessage('whitespace string', value));\n }\n}\nexport default is;\n","/**\n * Small utility library instead of using lodash\n * but still providing the convenience of a single `_.XXX` style import\n */\n\n\n// we'll rely on sindresorhus/is for type checking, but we'll build it into the final bundle\nimport {\n isBoolean, isError, isString, isPromise, isFunction,\n isNumber, isPlainObject, isArray, isInteger, isNan,\n} from '@sindresorhus/is';\n\nfunction keyBy<T>(array: Array<T>, key: keyof T) {\n return (array || []).reduce((r, x) => ({ ...r, [String(x[key])]: x }), {});\n}\n\n/**\n * Simple sortBy utility\n * Returns a new array sorted by the given key or function\n */\nfunction sortBy<T>(\n array: Array<T>,\n compareBy: keyof T | ((item: T) => number),\n) {\n // handle comparison using function that returns a number\n if (typeof compareBy === 'function') {\n const compareMap = new Map();\n array.forEach((item) => {\n compareMap.set(item, compareBy(item));\n });\n return array.concat().sort(\n (a, b) => compareMap.get(a)! - compareMap.get(b)!,\n );\n // handle comparison by key\n } else {\n return array.concat().sort(\n (a, b) => {\n if (a[compareBy] > b[compareBy]) return 1;\n return (b[compareBy] > a[compareBy]) ? -1 : 0;\n },\n );\n }\n}\n\nfunction compact<T>(array: Array<T | undefined | false | null>) {\n return array.filter((item) => item !== undefined && item !== false && item !== null) as Array<T>;\n}\n\nfunction filter<T>(array: Array<T>, fn: (item: T) => boolean) {\n return array.filter(fn);\n}\n\nfunction each<T>(\n array: Array<T> | Record<string, T>,\n fn: (\n ((item: T, key: string) => void)\n | ((item: T) => void)\n ),\n) {\n if (Array.isArray(array)) {\n array.forEach((item, index) => fn(item, String(index)));\n } else {\n Object.entries(array).forEach(([key, value]) => fn(value, key));\n }\n}\n\nfunction castArray<T>(value: T | Array<T>) {\n return Array.isArray(value) ? value : [value];\n}\n\nfunction mapValues<T, U>(obj: Record<string, T>, fn: (value: T) => U) {\n return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, fn(value)]));\n}\n\nfunction times<T>(count: number, fn: (index: number) => T): Array<T> {\n return Array.from({ length: count }, (_, i) => fn(i));\n}\n\nfunction map<T, U>(array: Array<T>, fn: (item: T) => U): Array<U> {\n return array.map(fn);\n}\nfunction flatMap<T, U>(array: Array<T>, fn: (item: T) => Array<U>): Array<U> {\n return array.flatMap(fn);\n}\nfunction intersection<T>(...arrays: Array<Array<T>>): Array<T> {\n return arrays.reduce((a, b) => a.filter((value) => b.includes(value)));\n}\nfunction pick<T>(obj: Record<string, T>, keys: Array<string>) {\n return Object.fromEntries(Object.entries(obj).filter(([key]) => keys.includes(key)));\n}\nfunction uniq<T>(array: Array<T>): Array<T> {\n return Array.from(new Set(array));\n}\nfunction fromPairs<T>(pairs: Array<[string, T]>): Record<string, T> {\n return Object.fromEntries(pairs);\n}\n\n\nconst _ = {\n keyBy,\n sortBy,\n compact,\n keys: Object.keys,\n values: Object.values,\n some: (a: Array<any>, fn: (item: any) => boolean) => a.some(fn),\n filter,\n each,\n castArray,\n mapValues,\n times,\n map,\n flatMap,\n intersection,\n pick,\n uniq,\n fromPairs,\n // type checks\n isString,\n isBoolean,\n isError,\n isPromise,\n isFunction,\n isNan,\n isNumber,\n isPlainObject,\n isArray,\n isInteger,\n};\n\nexport default _;\n","import _ from '@env-spec/utils/my-dash';\n// copied these error types from Astro\n// and we will try to keep it compatible so we can interact with their error overlay\n\nexport type ErrorLocation = {\n file?: string;\n line?: number;\n column?: number;\n};\n\n/**\n * Generic object representing an error with all possible data\n * Compatible with both Astro's and Vite's errors\n */\nexport type ErrorWithMetadata = {\n [name: string]: any;\n name: string;\n title?: string;\n // type?: ErrorTypes; // these are astro's error types\n message: string;\n stack: string;\n hint?: string;\n id?: string;\n frame?: string;\n plugin?: string;\n pluginCode?: string;\n fullCode?: string;\n loc?: ErrorLocation;\n cause?: any;\n};\n\n\nexport type VarlockErrorLocationDetails = {\n /** file path or url */\n id: string;\n /** 1-based line number */\n lineNumber: number;\n /** 1-based column number */\n colNumber: number;\n /** full line string */\n lineStr: string;\n};\n\n\nexport class VarlockError extends Error {\n originalError?: Error;\n get isUnexpected() { return !!this.originalError; }\n\n get type() { return this.name; }\n\n\n static defaultIcon = '❌';\n icon: string;\n\n _isWarning = false;\n\n constructor(errOrMessage: string | Error, readonly more?: {\n tip?: string | Array<string>,\n err?: Error,\n isWarning?: boolean,\n /** machine-friendly error code if needed for anything else */\n code?: string,\n location?: VarlockErrorLocationDetails,\n /** free-form additional metadata */\n extraMetadata?: Record<string, any>,\n }) {\n // super must be root level statement\n super(_.isError(errOrMessage) ? errOrMessage.message : errOrMessage);\n if (_.isError(errOrMessage)) {\n this.originalError = errOrMessage;\n this.icon = '💥';\n } else { // string\n this.originalError = more?.err;\n }\n if (_.isArray(more?.tip)) more.tip = more.tip.join('\\n');\n this.name = this.constructor.name;\n if (more?.isWarning) this.isWarning = true;\n\n this.icon ||= (this.constructor as any).defaultIcon;\n }\n\n get tip() {\n if (!this.more?.tip) return undefined;\n if (_.isArray(this.more.tip)) return this.more.tip.join('\\n');\n return this.more.tip;\n }\n\n get location() {\n return this.more?.location;\n }\n\n get code() {\n return this.more?.code;\n }\n get extraMetadata() {\n return this.more?.extraMetadata;\n }\n\n set isWarning(w: boolean) {\n this._isWarning = w;\n if (this._isWarning) {\n this.icon = '🧐';\n }\n }\n get isWarning() { return this._isWarning; }\n\n toJSON() {\n return {\n icon: this.icon,\n type: this.type,\n name: this.name,\n message: this.message,\n isUnexpected: this.isUnexpected,\n ...this.tip && { tip: this.tip },\n ...this.isWarning && { isWarning: this.isWarning },\n };\n }\n}\n\nexport class ConfigLoadError extends VarlockError {\n readonly cleanedStack: Array<string>;\n constructor(err: Error) {\n super(err);\n\n // remove first line since its the error message\n let stackLines = (err.stack?.split('\\n') || []).slice(1);\n stackLines = stackLines.filter((l) => {\n // filter out unimportant lines related to just running/loading\n // we could filter out more of dmno/core code once things stabilize\n //! these are probably not relevant anymore, or needs to move to a plugin layer?\n if (l.includes(' at ViteNodeRunner.')) return false;\n if (l.includes('core/src/config-loader/config-loader.ts')) return false;\n return true;\n });\n\n\n this.message = `${err.name}: ${err.message}`;\n\n\n\n this.cleanedStack = stackLines || [];\n }\n toJSON() {\n return {\n ...super.toJSON(),\n cleanedStack: this.cleanedStack,\n };\n }\n}\n\nexport class ParseError extends VarlockError {\n static defaultIcon = '😵💫';\n}\nexport class SchemaError extends VarlockError {\n static defaultIcon = '🧰';\n}\nexport class ValidationError extends VarlockError {\n static defaultIcon = '❌';\n}\nexport class CoercionError extends VarlockError {\n static defaultIcon = '🛑';\n}\nexport class ResolutionError extends VarlockError {\n static defaultIcon = '⛔';\n protected _retryable?: boolean = false;\n set retryable(val: boolean) { this._retryable = val; }\n get retryable() {\n if (this._retryable) return true;\n if (this.originalError instanceof ResolutionError) return this.originalError.retryable;\n return false;\n }\n}\n\nexport class EmptyRequiredValueError extends ValidationError {\n icon = '❓';\n constructor(_val: undefined | null | '') {\n super('Value is required but is currently empty');\n }\n}\n","/* eslint-disable no-console */\n\nimport { format } from 'node:util';\n\n/**\n * Debug logger with colors, timing, and format string support\n * Enable by setting DEBUG env var with namespaces (e.g., DEBUG=varlock:*)\n */\n\ntype DebugFn = (...args: Array<any>) => void;\n\n// Track last call time per namespace for diff timing\nconst prevTime = new Map<string, number>();\n\n// ANSI color codes\nconst colors = [\n '\\x1b[36m', // cyan\n '\\x1b[35m', // magenta\n '\\x1b[34m', // blue\n '\\x1b[33m', // yellow\n '\\x1b[32m', // green\n '\\x1b[31m', // red\n '\\x1b[96m', // bright cyan\n '\\x1b[95m', // bright magenta\n '\\x1b[94m', // bright blue\n '\\x1b[93m', // bright yellow\n '\\x1b[92m', // bright green\n '\\x1b[91m', // bright red\n];\nconst resetCode = '\\x1b[0m';\nconst grayCode = '\\x1b[90m';\n\n// Simple hash function to deterministically assign colors\nconst selectColor = (namespace: string): string => {\n let hash = 0;\n for (let i = 0; i < namespace.length; i++) {\n // eslint-disable-next-line no-bitwise\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n // eslint-disable-next-line no-bitwise\n hash |= 0; // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length];\n};\n\n// Format milliseconds in human-readable form\nconst humanizeMs = (ms: number): string => {\n if (ms >= 1000) {\n return `${(ms / 1000).toFixed(1)}s`;\n }\n return `${Math.round(ms)}ms`;\n};\n\nconst isEnabled = (namespace: string): boolean => {\n const debugEnv = process.env.DEBUG || '';\n if (!debugEnv) return false;\n\n const patterns = debugEnv.split(',').map((p) => p.trim());\n let enabled = false;\n\n for (const pattern of patterns) {\n // Negative pattern (exclude)\n if (pattern.startsWith('-')) {\n const excludePattern = pattern.slice(1);\n if (excludePattern === namespace) return false;\n if (excludePattern.endsWith('*')) {\n const prefix = excludePattern.slice(0, -1);\n if (namespace.startsWith(prefix)) return false;\n }\n continue;\n }\n\n // Positive pattern (include)\n if (pattern === '*') {\n enabled = true;\n } else if (pattern === namespace) {\n enabled = true;\n } else if (pattern.endsWith('*')) {\n const prefix = pattern.slice(0, -1);\n if (namespace.startsWith(prefix)) {\n enabled = true;\n }\n }\n }\n\n return enabled;\n};\n\nexport function createDebug(namespace: string): DebugFn {\n const enabled = isEnabled(namespace);\n\n if (!enabled) {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n return () => {};\n }\n\n const colorCode = selectColor(namespace);\n\n return (...args: Array<any>) => {\n const now = Date.now();\n const prev = prevTime.get(namespace);\n const diff = prev ? now - prev : 0;\n prevTime.set(namespace, now);\n\n // Format the message with util.format for printf-style formatting\n const msg = format(...args);\n\n // Build the output with colored namespace and diff timing\n const diffStr = diff > 0 ? `${grayCode} +${humanizeMs(diff)}${resetCode}` : '';\n const output = `${colorCode}${namespace}${resetCode} ${msg}${diffStr}`;\n\n console.error(output);\n };\n}\n\nexport type Debugger = ReturnType<typeof createDebug>;\n","/**\n * Shared mutable plugin context used during plugin module execution.\n *\n * Kept in its own file to avoid a circular dependency between plugins.ts\n * (which sets the active plugin) and plugin-lib.ts (which exposes it to\n * plugin authors) — both of which would otherwise need to import each other.\n *\n * plugins.ts calls activatePlugin / deactivatePlugin around each load.\n * plugin-lib.ts re-exports `plugin` as a Proxy that delegates to whatever\n * is currently active.\n */\n\n\nconst ctx: { active: any } = { active: undefined };\n\nexport function activatePlugin(p: unknown): void {\n ctx.active = p;\n}\n\nexport function deactivatePlugin(): void {\n ctx.active = undefined;\n}\n\n/**\n * A proxy that always delegates to the currently-loading plugin instance.\n * Plugin code can import this and use it as if it were the plugin directly.\n *\n * Valid only between activatePlugin() and deactivatePlugin() calls.\n */\n\nexport const pluginProxy: any = new Proxy({} as any, {\n get(_, key) {\n if (!ctx.active) throw new Error('[varlock] No active plugin context — are you importing plugin-lib outside of a plugin module?');\n const val = ctx.active[key];\n return typeof val === 'function' ? val.bind(ctx.active) : val;\n },\n set(_, key, value) {\n if (!ctx.active) throw new Error('[varlock] No active plugin context');\n ctx.active[key] = value;\n return true;\n },\n});\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { define } from './chunk-4A54P4EM.js';
|
|
2
|
-
import { checkForSchemaErrors, checkForNoEnvFiles } from './chunk-
|
|
3
|
-
import { loadVarlockEnvGraph } from './chunk-
|
|
4
|
-
import { CliExitError } from './chunk-
|
|
2
|
+
import { checkForSchemaErrors, checkForNoEnvFiles } from './chunk-FSLTOPCT.js';
|
|
3
|
+
import { loadVarlockEnvGraph } from './chunk-MIMMYDBC.js';
|
|
4
|
+
import { CliExitError } from './chunk-QHIRGHGG.js';
|
|
5
5
|
import { __name } from './chunk-6PEHRAEP.js';
|
|
6
6
|
|
|
7
7
|
// src/cli/commands/typegen.command.ts
|
|
@@ -45,5 +45,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
45
45
|
}, "commandFn");
|
|
46
46
|
|
|
47
47
|
export { commandFn, commandSpec };
|
|
48
|
-
//# sourceMappingURL=chunk-
|
|
49
|
-
//# sourceMappingURL=chunk-
|
|
48
|
+
//# sourceMappingURL=chunk-4VC5S7NB.js.map
|
|
49
|
+
//# sourceMappingURL=chunk-4VC5S7NB.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/commands/typegen.command.ts"],"names":[],"mappings":";;;;;;;AAOO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,SAAA;AAAA,EACN,WAAA,EAAa,gDAAA;AAAA,EACb,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,GAAA;AAAA,MACP,QAAA,EAAU,IAAA;AAAA,MACV,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,QAAA,EAAU;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA,CAWV,IAAA;AACF,CAAC;AAGM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAChF,EAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB;AAAA,IACzC,cAAA,EAAgB,IAAI,MAAA,CAAO;AAAA,GAC5B,CAAA;AACD,EAAA,oBAAA,CAAqB,QAAQ,CAAA;AAC7B,EAAA,kBAAA,CAAmB,QAAQ,CAAA;AAG3B,EAAA,MAAM,iBAAiB,MAAM,QAAA,CAAS,sBAAsB,EAAE,eAAA,EAAiB,MAAM,CAAA;AAErF,EAAA,IAAI,mBAAmB,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,aAAa,kDAAA,EAAoD;AAAA,MACzE,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,OAAA,CAAQ,IAAI,qCAAgC,CAAA;AAC9C,CAAA,EAjBmE,WAAA","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/typegen.command.ts"],"names":[],"mappings":";;;;;;;AAOO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,SAAA;AAAA,EACN,WAAA,EAAa,gDAAA;AAAA,EACb,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,GAAA;AAAA,MACP,QAAA,EAAU,IAAA;AAAA,MACV,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,QAAA,EAAU;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA,CAWV,IAAA;AACF,CAAC;AAGM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAChF,EAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB;AAAA,IACzC,cAAA,EAAgB,IAAI,MAAA,CAAO;AAAA,GAC5B,CAAA;AACD,EAAA,oBAAA,CAAqB,QAAQ,CAAA;AAC7B,EAAA,kBAAA,CAAmB,QAAQ,CAAA;AAG3B,EAAA,MAAM,iBAAiB,MAAM,QAAA,CAAS,sBAAsB,EAAE,eAAA,EAAiB,MAAM,CAAA;AAErF,EAAA,IAAI,mBAAmB,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,aAAa,kDAAA,EAAoD;AAAA,MACzE,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,OAAA,CAAQ,IAAI,qCAAgC,CAAA;AAC9C,CAAA,EAjBmE,WAAA","file":"chunk-4VC5S7NB.js","sourcesContent":["import { define } from 'gunshi';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { checkForNoEnvFiles, checkForSchemaErrors } from '../helpers/error-checks';\nimport { CliExitError } from '../helpers/exit-error';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'typegen',\n description: 'Generate TypeScript types from your env schema',\n args: {\n path: {\n type: 'string',\n short: 'p',\n multiple: true,\n description: 'Path to a specific .env file or directory to use as the entry point (can be specified multiple times)',\n },\n },\n examples: `\nGenerates TypeScript type definitions from your .env schema files.\nUses only non-environment-specific schema info, so output is deterministic\nregardless of which environment is active.\n\nThis is useful when you have \\`@generateTypes(lang=ts, path=env.d.ts, auto=false)\\`\nin your schema to disable automatic type generation during \\`varlock load\\` or \\`varlock run\\`.\n\nExamples:\n varlock typegen # Generate types using default schema\n varlock typegen --path .env.prod # Generate types from a specific .env file\n`.trim(),\n});\n\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n const envGraph = await loadVarlockEnvGraph({\n entryFilePaths: ctx.values.path,\n });\n checkForSchemaErrors(envGraph);\n checkForNoEnvFiles(envGraph);\n\n // Force type generation even if auto=false is set\n const generatedCount = await envGraph.generateTypesIfNeeded({ ignoreAutoFalse: true });\n\n if (generatedCount === 0) {\n throw new CliExitError('No @generateTypes decorator found in your schema', {\n suggestion: 'Add `@generateTypes(lang=ts, path=env.d.ts)` to your .env.schema file.',\n });\n }\n\n console.log('✅ Types generated successfully');\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { debug, varlockSettings, scanForLeaks, redactSensitiveConfig } from './chunk-
|
|
1
|
+
import { debug, varlockSettings, scanForLeaks, redactSensitiveConfig } from './chunk-MGWUDHT5.js';
|
|
2
2
|
import { __name } from './chunk-6PEHRAEP.js';
|
|
3
3
|
import zlib from 'zlib';
|
|
4
4
|
import { ServerResponse } from 'http';
|
|
@@ -88,5 +88,5 @@ function patchGlobalServerResponse(opts) {
|
|
|
88
88
|
__name(patchGlobalServerResponse, "patchGlobalServerResponse");
|
|
89
89
|
|
|
90
90
|
export { patchGlobalServerResponse };
|
|
91
|
-
//# sourceMappingURL=chunk-
|
|
92
|
-
//# sourceMappingURL=chunk-
|
|
91
|
+
//# sourceMappingURL=chunk-5DUWGI2N.js.map
|
|
92
|
+
//# sourceMappingURL=chunk-5DUWGI2N.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/patch-server-response.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/runtime/patch-server-response.ts"],"names":[],"mappings":";;;;;AAUA,IAAM,UAAA,GAAa,mBAAA;AACZ,SAAS,0BAA0B,IAAA,EAGvC;AACD,EAAA,KAAA,CAAM,6CAAmC,CAAA;AACzC,EAAA,IAAI,MAAA,CAAO,wBAAA,CAAyB,cAAA,CAAe,SAAA,EAAW,UAAU,CAAA,EAAG;AACzE,IAAA,KAAA,CAAM,mBAAmB,CAAA;AACzB,IAAA;AAAA,EACF;AACA,EAAA,IAAI,eAAA,CAAgB,iBAAiB,KAAA,EAAO;AAC1C,IAAA,KAAA,CAAM,wBAAwB,CAAA;AAC9B,IAAA;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,eAAe,cAAA,CAAe,SAAA,EAAW,YAAY,EAAE,KAAA,EAAO,MAAM,CAAA;AAE3E,EAAA,MAAM,mBAAA,GAAsB,eAAe,SAAA,CAAU,KAAA;AAGrD,EAAA,cAAA,CAAe,SAAA,CAAU,KAAA,mBAAQ,MAAA,CAAA,SAAS,iCAAA,CAAA,GAAqC,IAAA,EAAM;AAGnF,IAAA,MAAM,QAAA,GAAW,KAAK,CAAC,CAAA;AAKvB,IAAA,MAAM,cAAc,IAAA,CAAK,SAAA,CAAU,cAAc,CAAA,EAAG,UAAS,IAAK,EAAA;AAElE,IAAA,IAAI,OAAA,GACF,WAAA,CAAY,UAAA,CAAW,OAAO,CAAA,IAC3B,WAAA,CAAY,UAAA,CAAW,kBAAkB,CAAA,IACxC,CAAC,WAAA,IAAe,OAAO,QAAA,KAAa,QAAA;AAI1C,IAAA,MAAM,MAAA,GAAU,KAAa,GAAA,CAAI,GAAA;AAEjC,IAAA,IAAI,OAAA,IAAW,MAAA,IAAU,IAAA,EAAM,iBAAA,EAAmB,IAAA,CAAK,CAAC,OAAA,KAAY,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA,EAAG;AACzF,MAAA,OAAA,GAAU,KAAA;AAAA,IACZ;AAIA,IAAA,IAAI,CAAC,OAAA,EAAS;AAEZ,MAAA,OAAO,mBAAA,CAAoB,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,IAC7C;AAGA,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,SAAA,CAAU,kBAAkB,CAAA;AACzD,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,SAAA,GAAkD,IAAA;AACtD,IAAA,IAAI,OAAO,aAAa,QAAA,EAAU;AAChC,MAAA,SAAA,GAAY,QAAA;AACZ,MAAA,QAAA,GAAW,QAAA;AAAA,IACb,CAAA,MAAA,IAAW,CAAC,eAAA,EAAiB;AAC3B,MAAA,SAAA,GAAY,SAAA;AACZ,MAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,MAAA,QAAA,GAAW,OAAA,CAAQ,OAAO,QAAQ,CAAA;AAAA,IACpC,CAAA,MAAA,IAAW,oBAAoB,MAAA,EAAQ;AACrC,MAAA,SAAA,GAAY,MAAA;AAEZ,MAAA,IAAI,CAAE,KAAa,WAAA,EAAa;AAE9B,QAAC,IAAA,CAAa,WAAA,GAAc,CAAC,QAAQ,CAAA;AAAA,MACvC,CAAA,MAAO;AAEL,QAAC,IAAA,CAAa,WAAA,EAAa,IAAA,CAAK,QAAQ,CAAA;AACxC,QAAA,IAAI;AACF,UAAA,MAAM,aAAA,GAAgB,KAAK,SAAA,CAAU,MAAA,CAAO,OAAQ,IAAA,CAAa,WAAA,IAAe,EAAE,CAAA,EAAG;AAAA,YACnF,KAAA,EAAO,KAAK,SAAA,CAAU,YAAA;AAAA,YACtB,WAAA,EAAa,KAAK,SAAA,CAAU;AAAA,WAC7B,CAAA;AACD,UAAA,MAAM,gBAAA,GAAmB,aAAA,CAAc,QAAA,CAAS,OAAO,CAAA;AACvD,UAAA,QAAA,GAAW,gBAAA,CAAiB,SAAA,CAAW,IAAA,CAAa,kBAAA,IAAsB,CAAC,CAAA;AAC3E,UAAC,IAAA,CAAa,qBAAqB,gBAAA,CAAiB,MAAA;AAAA,QACtD,SAAS,GAAA,EAAK;AAAA,QAEd;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,EAAU;AAIZ,MAAA,IAAI;AACF,QAAA,YAAA,CAAa,QAAA,EAAU,EAAE,MAAA,EAAQ,8BAAA,EAAgC,MAAO,IAAA,CAAa,GAAA,CAAI,KAAK,CAAA;AAAA,MAChG,SAAS,GAAA,EAAK;AAGZ,QAAA,IAAI,MAAM,oBAAA,EAAsB;AAC9B,UAAA,QAAA,GAAW,sBAAsB,QAAQ,CAAA;AACzC,UAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,YAAA,IAAA,CAAK,CAAC,CAAA,GAAI,QAAA;AAAA,UACZ,CAAA,MAAA,IAAW,cAAc,SAAA,EAAW;AAClC,YAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,YAAA,IAAA,CAAK,CAAC,CAAA,GAAI,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA;AAAA,UACnC,CAAA,MAAA,IAAW,cAAc,MAAA,EAAQ,CAQjC,MAAO;AACL,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,SAAS,CAAA,CAAE,CAAA;AAAA,UACrE;AAAA,QACF,CAAA,MAAO;AACL,UAAA,MAAM,GAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAGA,IAAA,OAAO,mBAAA,CAAoB,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAC7C,CAAA,EAnGiC,mCAAA,CAAA;AAsGjC,EAAA,MAAM,iBAAA,GAAoB,eAAe,SAAA,CAAU,GAAA;AAEnD,EAAA,cAAA,CAAe,SAAA,CAAU,GAAA,mBAAM,MAAA,CAAA,SAAS,wBAAA,CAAA,GAA4B,IAAA,EAAM;AAExE,IAAA,MAAM,QAAA,GAAW,KAAK,CAAC,CAAA;AAEvB,IAAA,IAAI,QAAA,IAAY,OAAO,QAAA,KAAa,QAAA,EAAU;AAE5C,MAAA,YAAA,CAAa,QAAA,EAAU,EAAE,MAAA,EAAQ,4BAAA,EAA8B,CAAA;AAAA,IACjE;AAEA,IAAA,OAAO,iBAAA,CAAkB,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,EAC3C,CAAA,EAV+B,0BAAA,CAAA;AAWjC;AAtIgB,MAAA,CAAA,yBAAA,EAAA,2BAAA,CAAA","file":"chunk-5DUWGI2N.js","sourcesContent":["/*\n This patches the global ServerResponse object to scan for secret leaks - currently used for next.js and remix\n*/\n\nimport zlib from 'node:zlib';\nimport { ServerResponse } from 'node:http';\nimport { redactSensitiveConfig, scanForLeaks, varlockSettings } from './env';\nimport { debug } from './lib/debug';\n\n// NOTE - previously was using a symbol but got weird because of multiple builds and contexts...\nconst patchedKey = '_patchedByVarlock';\nexport function patchGlobalServerResponse(opts?: {\n ignoreUrlPatterns?: Array<RegExp>,\n redactInsteadOfThrow?: boolean,\n}) {\n debug('⚡️ PATCHING global ServerResponse');\n if (Object.getOwnPropertyDescriptor(ServerResponse.prototype, patchedKey)) {\n debug('> already patched');\n return;\n }\n if (varlockSettings.preventLeaks === false) {\n debug('> disabled by settings');\n return;\n }\n\n Object.defineProperty(ServerResponse.prototype, patchedKey, { value: true });\n\n const serverResponseWrite = ServerResponse.prototype.write;\n\n // @ts-ignore\n ServerResponse.prototype.write = function varlockPatchedServerResponseWrite(...args) {\n // TODO: do we want to filter out some requests here? maybe based on the file type?\n\n const rawChunk = args[0];\n // console.log('⚡️ patched ServerResponse.write', rawChunk);\n\n // for now, we only scan rendered html... may need to change this though for server components?\n // so we bail if it looks like this response does not contain html\n const contentType = this.getHeader('content-type')?.toString() || '';\n // console.log('patched ServerResponse.write', contentType);\n let runScan = (\n contentType.startsWith('text/')\n || contentType.startsWith('application/json')\n || (!contentType && typeof rawChunk === 'string')\n // || contentType.startsWith('application/javascript')\n );\n\n const reqUrl = (this as any).req.url;\n // console.log('> scan ServerResponse.write', contentType, reqUrl);\n if (runScan && reqUrl && opts?.ignoreUrlPatterns?.some((pattern) => pattern.test(reqUrl))) {\n runScan = false;\n }\n\n // we want to run the scanner on text/html and text/x-component (server actions)\n // TODO: anything else?\n if (!runScan) {\n // @ts-ignore\n return serverResponseWrite.apply(this, args);\n }\n\n // have to deal with compressed data, which is awkward but possible\n const compressionType = this.getHeader('Content-Encoding');\n let chunkStr;\n let chunkType: 'string' | 'encoded' | 'gzip' | null = null;\n if (typeof rawChunk === 'string') {\n chunkType = 'string';\n chunkStr = rawChunk;\n } else if (!compressionType) {\n chunkType = 'encoded';\n const decoder = new TextDecoder();\n chunkStr = decoder.decode(rawChunk);\n } else if (compressionType === 'gzip') {\n chunkType = 'gzip';\n // first chunk of data contains only compression headers\n if (!(this as any)._zlibChunks) {\n // (this as any)._zlibHeadersChunk = rawChunk;\n (this as any)._zlibChunks = [rawChunk];\n } else {\n // TODO: figure out how we can unzip one chunk at a time instead of storing everything\n (this as any)._zlibChunks?.push(rawChunk);\n try {\n const unzippedChunk = zlib.unzipSync(Buffer.concat((this as any)._zlibChunks || []), {\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n const fullUnzippedData = unzippedChunk.toString('utf-8');\n chunkStr = fullUnzippedData.substring((this as any)._lastChunkEndIndex || 0);\n (this as any)._lastChunkEndIndex = fullUnzippedData.length;\n } catch (err) {\n // console.log('error unzipping chunk', err);\n }\n }\n }\n // TODO: we may want to support other compression schemes? but currently only used in nextjs which is using gzip\n if (chunkStr) {\n // console.log('scanning!', chunkStr.substring(0, 1000));\n\n\n try {\n scanForLeaks(chunkStr, { method: 'patched ServerResponse.write', file: (this as any).req.url });\n } catch (err) {\n // console.log('found secret in chunk', chunkType, chunkStr);\n // console.log(this)\n if (opts?.redactInsteadOfThrow) {\n chunkStr = redactSensitiveConfig(chunkStr);\n if (chunkType === 'string') {\n args[0] = chunkStr;\n } else if (chunkType === 'encoded') {\n const encoder = new TextEncoder();\n args[0] = encoder.encode(chunkStr);\n } else if (chunkType === 'gzip') {\n // currently unable to scrub gzip chunks\n // this works sometimes, but othertimes causes decoding error\n // we'll need to pass through chunks from a new gzip stream, because we don't have access to the underlying one\n // args[0] = zlib.gzipSync(chunkStr, {\n // flush: zlib.constants.Z_SYNC_FLUSH,\n // finishFlush: zlib.constants.Z_SYNC_FLUSH,\n // });\n } else {\n throw new Error(`unable to scrub - unknown chunk type ${chunkType}`);\n }\n } else {\n throw err;\n }\n }\n }\n\n // @ts-ignore\n return serverResponseWrite.apply(this, args);\n };\n\n // calling `res.json()` in the api routes on pages router calls `res.end` without called `res.write`\n const serverResponseEnd = ServerResponse.prototype.end;\n // @ts-ignore\n ServerResponse.prototype.end = function patchedServerResponseEnd(...args) {\n // console.log('⚡️ patched ServerResponse.end');\n const endChunk = args[0];\n // this just needs to work (so far) for nextjs sending json bodies, so does not need to handle all cases...\n if (endChunk && typeof endChunk === 'string') {\n // TODO: currently this throws the error and then things just hang... do we want to try to return an error type response instead?\n scanForLeaks(endChunk, { method: 'patched ServerResponse.end' });\n }\n // @ts-ignore\n return serverResponseEnd.apply(this, args);\n };\n}\n\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { isBundledSEA } from './chunk-GXNQVEXD.js';
|
|
2
|
-
import { detectJsPackageManager, logLines, fmt } from './chunk-
|
|
2
|
+
import { detectJsPackageManager, logLines, fmt } from './chunk-FWJAZMC7.js';
|
|
3
3
|
import { define } from './chunk-4A54P4EM.js';
|
|
4
|
-
import { loadVarlockEnvGraph } from './chunk-
|
|
4
|
+
import { loadVarlockEnvGraph } from './chunk-MIMMYDBC.js';
|
|
5
5
|
import { gracefulExit } from './chunk-CHQDS2PI.js';
|
|
6
|
-
import { CliExitError } from './chunk-
|
|
7
|
-
import { spawnAsync, pathExists, ansis_default } from './chunk-
|
|
8
|
-
import { my_dash_default } from './chunk-
|
|
6
|
+
import { CliExitError } from './chunk-QHIRGHGG.js';
|
|
7
|
+
import { spawnAsync, pathExists, ansis_default } from './chunk-W3GUFLIV.js';
|
|
8
|
+
import { my_dash_default } from './chunk-2PFIYNFA.js';
|
|
9
9
|
import { redactString } from './chunk-XLYSNOR3.js';
|
|
10
10
|
import { __name } from './chunk-6PEHRAEP.js';
|
|
11
11
|
import path from 'path';
|
|
@@ -94,6 +94,9 @@ Examples:
|
|
|
94
94
|
varlock scan --path .env.prod # Use a specific .env file as the schema entry point
|
|
95
95
|
varlock scan -p ./envs -p ./overrides # Use multiple schema entry points
|
|
96
96
|
varlock scan --install-hook # Set up as a git pre-commit hook
|
|
97
|
+
varlock scan ./dist # Scan a specific directory (e.g. a build output folder)
|
|
98
|
+
varlock scan ./dist ./public # Scan multiple directories
|
|
99
|
+
varlock scan './dist/**/*.js' # Scan files matching a glob pattern
|
|
97
100
|
`.trim()
|
|
98
101
|
});
|
|
99
102
|
async function getGitFiles(cwd, onlyStaged) {
|
|
@@ -140,6 +143,68 @@ async function walkDirectory(dir) {
|
|
|
140
143
|
return files;
|
|
141
144
|
}
|
|
142
145
|
__name(walkDirectory, "walkDirectory");
|
|
146
|
+
async function walkDirectoryAll(dir) {
|
|
147
|
+
const files = [];
|
|
148
|
+
let entries;
|
|
149
|
+
try {
|
|
150
|
+
entries = await fs.readdir(dir, { withFileTypes: true });
|
|
151
|
+
} catch {
|
|
152
|
+
return files;
|
|
153
|
+
}
|
|
154
|
+
for (const entry of entries) {
|
|
155
|
+
const fullPath = path.join(dir, entry.name);
|
|
156
|
+
if (entry.isDirectory()) {
|
|
157
|
+
files.push(...await walkDirectoryAll(fullPath));
|
|
158
|
+
} else if (entry.isFile()) {
|
|
159
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
160
|
+
if (BINARY_EXTENSIONS.has(ext)) continue;
|
|
161
|
+
files.push(fullPath);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return files;
|
|
165
|
+
}
|
|
166
|
+
__name(walkDirectoryAll, "walkDirectoryAll");
|
|
167
|
+
var GLOB_CHARS = /[*?{}[\]]/;
|
|
168
|
+
async function resolveTargetPaths(targets, cwd) {
|
|
169
|
+
const seen = /* @__PURE__ */ new Set();
|
|
170
|
+
const files = [];
|
|
171
|
+
async function addFile(absPath) {
|
|
172
|
+
if (seen.has(absPath)) return;
|
|
173
|
+
seen.add(absPath);
|
|
174
|
+
files.push(absPath);
|
|
175
|
+
}
|
|
176
|
+
__name(addFile, "addFile");
|
|
177
|
+
async function addPath(absPath) {
|
|
178
|
+
let stat;
|
|
179
|
+
try {
|
|
180
|
+
stat = await fs.stat(absPath);
|
|
181
|
+
} catch {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
if (stat.isDirectory()) {
|
|
185
|
+
for (const f of await walkDirectoryAll(absPath)) {
|
|
186
|
+
await addFile(f);
|
|
187
|
+
}
|
|
188
|
+
} else if (stat.isFile()) {
|
|
189
|
+
const ext = path.extname(absPath).toLowerCase();
|
|
190
|
+
if (!BINARY_EXTENSIONS.has(ext)) {
|
|
191
|
+
await addFile(absPath);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
__name(addPath, "addPath");
|
|
196
|
+
for (const target of targets) {
|
|
197
|
+
if (GLOB_CHARS.test(target)) {
|
|
198
|
+
for await (const match of fs.glob(target, { cwd })) {
|
|
199
|
+
await addPath(path.resolve(cwd, match));
|
|
200
|
+
}
|
|
201
|
+
} else {
|
|
202
|
+
await addPath(path.resolve(cwd, target));
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return files;
|
|
206
|
+
}
|
|
207
|
+
__name(resolveTargetPaths, "resolveTargetPaths");
|
|
143
208
|
async function scanFileForValues(filePath, sensitiveValues) {
|
|
144
209
|
const findings = [];
|
|
145
210
|
let content;
|
|
@@ -314,6 +379,7 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
314
379
|
}
|
|
315
380
|
const onlyStaged = ctx.values.staged ?? false;
|
|
316
381
|
const includeIgnored = ctx.values["include-ignored"] ?? false;
|
|
382
|
+
const scanTargets = (ctx.positionals ?? []).slice(ctx.commandPath?.length ?? 0);
|
|
317
383
|
const envGraph = await loadVarlockEnvGraph({
|
|
318
384
|
entryFilePaths: ctx.values.path
|
|
319
385
|
});
|
|
@@ -338,7 +404,9 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
338
404
|
}
|
|
339
405
|
const cwd = process.cwd();
|
|
340
406
|
let files;
|
|
341
|
-
if (
|
|
407
|
+
if (scanTargets.length > 0) {
|
|
408
|
+
files = await resolveTargetPaths(scanTargets, cwd);
|
|
409
|
+
} else if (includeIgnored) {
|
|
342
410
|
files = await walkDirectory(cwd);
|
|
343
411
|
} else {
|
|
344
412
|
const gitFiles = await getGitFiles(cwd, onlyStaged);
|
|
@@ -354,7 +422,9 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
354
422
|
}
|
|
355
423
|
}
|
|
356
424
|
if (files.length === 0) {
|
|
357
|
-
if (
|
|
425
|
+
if (scanTargets.length > 0) {
|
|
426
|
+
console.log(ansis_default.green("\u2705 No files found at the specified path(s)."));
|
|
427
|
+
} else if (onlyStaged) {
|
|
358
428
|
console.log("No staged files to scan.");
|
|
359
429
|
} else {
|
|
360
430
|
console.log(ansis_default.green("\u2705 No files found to scan."));
|
|
@@ -392,6 +462,6 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
392
462
|
gracefulExit(1);
|
|
393
463
|
}, "commandFn");
|
|
394
464
|
|
|
395
|
-
export { commandFn, commandSpec, getGitFiles, scanFileForValues, walkDirectory };
|
|
396
|
-
//# sourceMappingURL=chunk-
|
|
397
|
-
//# sourceMappingURL=chunk-
|
|
465
|
+
export { commandFn, commandSpec, getGitFiles, resolveTargetPaths, scanFileForValues, walkDirectory, walkDirectoryAll };
|
|
466
|
+
//# sourceMappingURL=chunk-7P3SVUZ5.js.map
|
|
467
|
+
//# sourceMappingURL=chunk-7P3SVUZ5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/scan.command.ts"],"names":[],"mappings":"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","file":"chunk-7P3SVUZ5.js","sourcesContent":["import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport { define } from 'gunshi';\nimport ansis from 'ansis';\nimport { gracefulExit } from 'exit-hook';\nimport _ from '@env-spec/utils/my-dash';\n\nimport { spawnAsync } from '@env-spec/utils/exec-helpers';\nimport { pathExists } from '@env-spec/utils/fs-utils';\nimport { redactString } from '../../runtime/lib/redaction';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { CliExitError } from '../helpers/exit-error';\nimport { fmt, logLines } from '../helpers/pretty-format';\nimport { detectJsPackageManager } from '../helpers/js-package-manager-utils';\nimport { isBundledSEA } from '../helpers/install-detection';\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\n\n// Directories to always skip when walking the file tree\nconst SKIP_DIRS = new Set([\n '.git',\n 'node_modules',\n 'dist',\n 'build',\n '.next',\n '.nuxt',\n 'vendor',\n '.venv',\n 'venv',\n '__pycache__',\n '.turbo',\n 'coverage',\n]);\n\n// File extensions that are binary and should be skipped\nconst BINARY_EXTENSIONS = new Set([\n '.png',\n '.jpg',\n '.jpeg',\n '.gif',\n '.bmp',\n '.ico',\n '.mp3',\n '.mp4',\n '.wav',\n '.avi',\n '.mov',\n '.zip',\n '.tar',\n '.gz',\n '.rar',\n '.7z',\n '.exe',\n '.dll',\n '.so',\n '.dylib',\n '.bin',\n '.pdf',\n '.doc',\n '.docx',\n '.xls',\n '.xlsx',\n '.woff',\n '.woff2',\n '.ttf',\n '.eot',\n '.pyc',\n '.class',\n '.o',\n]);\n\nexport const commandSpec = define({\n name: 'scan',\n description: 'Scan files for sensitive config values that should not be in plaintext',\n args: {\n staged: {\n type: 'boolean',\n description: 'Only scan staged git files',\n },\n 'include-ignored': {\n type: 'boolean',\n description: 'Include git-ignored files in the scan',\n },\n 'install-hook': {\n type: 'boolean',\n description: 'Set up varlock scan as a git pre-commit hook',\n },\n path: {\n type: 'string',\n short: 'p',\n multiple: true,\n description: 'Path to a specific .env file (e.g. .env.prod) or directory ending with \"/\" to use as the schema entry point (can be specified multiple times)',\n },\n },\n examples: `\nLoads your varlock config, resolves all sensitive values, then scans files to\nensure none of those sensitive values appear in plaintext.\n\nExamples:\n varlock scan # Scan non-git-ignored files in current directory\n varlock scan --staged # Only scan staged git files\n varlock scan --include-ignored # Scan all files, including git-ignored ones\n varlock scan --path .env.prod # Use a specific .env file as the schema entry point\n varlock scan -p ./envs -p ./overrides # Use multiple schema entry points\n varlock scan --install-hook # Set up as a git pre-commit hook\n varlock scan ./dist # Scan a specific directory (e.g. a build output folder)\n varlock scan ./dist ./public # Scan multiple directories\n varlock scan './dist/**/*.js' # Scan files matching a glob pattern\n `.trim(),\n});\n\nexport interface ScanFinding {\n filePath: string;\n lineNumber: number;\n columnNumber: number;\n line: string;\n sensitiveKeyName: string;\n sensitiveValue: string;\n}\n\nexport async function getGitFiles(cwd: string, onlyStaged: boolean): Promise<Array<string> | null> {\n try {\n let output: string;\n if (onlyStaged) {\n output = await spawnAsync(\n 'git',\n ['diff', '--cached', '--name-only', '-z', '--diff-filter=ACMR'],\n { cwd },\n );\n } else {\n output = await spawnAsync(\n 'git',\n ['ls-files', '--cached', '--others', '--exclude-standard', '-z'],\n { cwd },\n );\n }\n return output.split('\\0').filter(Boolean)\n .filter((f) => !BINARY_EXTENSIONS.has(path.extname(f).toLowerCase()))\n .map((f) => path.resolve(cwd, f));\n } catch {\n return null;\n }\n}\n\nexport async function walkDirectory(dir: string): Promise<Array<string>> {\n const files: Array<string> = [];\n let entries;\n try {\n entries = await fs.readdir(dir, { withFileTypes: true });\n } catch {\n return files;\n }\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(entry.name)) continue;\n files.push(...await walkDirectory(fullPath));\n } else if (entry.isFile()) {\n const ext = path.extname(entry.name).toLowerCase();\n if (BINARY_EXTENSIONS.has(ext)) continue;\n files.push(fullPath);\n }\n }\n return files;\n}\n\n/**\n * Like walkDirectory but does NOT skip entries in SKIP_DIRS.\n * Used when users explicitly pass a target directory to scan\n * (e.g. a build output folder like `dist` or `.next`).\n */\nexport async function walkDirectoryAll(dir: string): Promise<Array<string>> {\n const files: Array<string> = [];\n let entries;\n try {\n entries = await fs.readdir(dir, { withFileTypes: true });\n } catch {\n return files;\n }\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n files.push(...await walkDirectoryAll(fullPath));\n } else if (entry.isFile()) {\n const ext = path.extname(entry.name).toLowerCase();\n if (BINARY_EXTENSIONS.has(ext)) continue;\n files.push(fullPath);\n }\n }\n return files;\n}\n\nconst GLOB_CHARS = /[*?{}[\\]]/;\n\n/**\n * Resolves an array of path/glob strings (as provided by the user on the CLI)\n * into a deduplicated list of absolute file paths to scan.\n *\n * - Glob patterns (containing `*`, `?`, `{`, `[`) are expanded with `fs.glob`.\n * - Explicit directories are walked (without skipping build-output dirs).\n * - Explicit files are included directly (if not a binary extension).\n */\nexport async function resolveTargetPaths(targets: Array<string>, cwd: string): Promise<Array<string>> {\n const seen = new Set<string>();\n const files: Array<string> = [];\n\n async function addFile(absPath: string) {\n if (seen.has(absPath)) return;\n seen.add(absPath);\n files.push(absPath);\n }\n\n async function addPath(absPath: string) {\n let stat;\n try {\n stat = await fs.stat(absPath);\n } catch {\n return; // path doesn't exist — silently skip\n }\n if (stat.isDirectory()) {\n for (const f of await walkDirectoryAll(absPath)) {\n await addFile(f);\n }\n } else if (stat.isFile()) {\n const ext = path.extname(absPath).toLowerCase();\n if (!BINARY_EXTENSIONS.has(ext)) {\n await addFile(absPath);\n }\n }\n }\n\n for (const target of targets) {\n if (GLOB_CHARS.test(target)) {\n // Expand glob pattern; paths returned by fsGlob are relative to cwd\n for await (const match of fs.glob(target, { cwd })) {\n await addPath(path.resolve(cwd, match));\n }\n } else {\n await addPath(path.resolve(cwd, target));\n }\n }\n\n return files;\n}\n\n/**\n * Scans a single file for occurrences of any of the provided sensitive values.\n * sensitiveValues is a map from env key name to its resolved string value.\n */\nexport async function scanFileForValues(\n filePath: string,\n sensitiveValues: Map<string, string>,\n): Promise<Array<ScanFinding>> {\n const findings: Array<ScanFinding> = [];\n let content: string;\n try {\n content = await fs.readFile(filePath, 'utf-8');\n } catch {\n return findings;\n }\n\n // Skip binary files (contain null bytes)\n if (content.includes('\\0')) return findings;\n\n // Quick pre-check: skip the file entirely if none of the values appear\n let anyMatch = false;\n for (const val of sensitiveValues.values()) {\n if (content.includes(val)) {\n anyMatch = true;\n break;\n }\n }\n if (!anyMatch) return findings;\n\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n for (const [keyName, val] of sensitiveValues) {\n const colIdx = line.indexOf(val);\n if (colIdx !== -1) {\n findings.push({\n filePath,\n lineNumber: i + 1,\n columnNumber: colIdx + 1,\n line: line.trim(),\n sensitiveKeyName: keyName,\n sensitiveValue: val,\n });\n break; // one finding per line is enough\n }\n }\n }\n return findings;\n}\n\nconst SCAN_COMMAND = 'varlock scan';\n\n/**\n * Determines the correct command to use in a git hook script.\n * If varlock is installed as a standalone binary, uses `varlock` directly.\n * Otherwise, prefixes with the detected JS package manager's exec command.\n */\nfunction getHookCommand(): string {\n if (isBundledSEA()) return SCAN_COMMAND;\n const pm = detectJsPackageManager();\n if (pm) return `${pm.exec} ${SCAN_COMMAND}`;\n // fallback - assume varlock is available on PATH\n return SCAN_COMMAND;\n}\n\ntype HookManagerKind = 'husky' | 'lefthook' | 'simple-git-hooks';\n\nasync function detectHookManager(cwd: string): Promise<HookManagerKind | null> {\n // Check for husky\n if (await pathExists(path.join(cwd, '.husky'))) return 'husky';\n\n // Check for lefthook config files\n const lefthookFiles = ['lefthook.yml', 'lefthook.yaml', '.lefthook.yml', '.lefthook.yaml'];\n for (const file of lefthookFiles) {\n if (await pathExists(path.join(cwd, file))) return 'lefthook';\n }\n\n // Check for simple-git-hooks in package.json\n const pkgJsonPath = path.join(cwd, 'package.json');\n if (await pathExists(pkgJsonPath)) {\n try {\n const pkgJson = JSON.parse(await fs.readFile(pkgJsonPath, 'utf-8'));\n if (pkgJson['simple-git-hooks']) return 'simple-git-hooks';\n } catch { /* ignore parse errors */ }\n }\n\n return null;\n}\n\nasync function findGitRoot(cwd: string): Promise<string | null> {\n try {\n const root = await spawnAsync('git', ['rev-parse', '--show-toplevel'], { cwd });\n return root.trim();\n } catch {\n return null;\n }\n}\n\nasync function installHook(cwd: string): Promise<void> {\n const gitRoot = await findGitRoot(cwd);\n if (!gitRoot) {\n throw new CliExitError('Not inside a git repository', {\n suggestion: 'Run `git init` first, or make sure you are inside a git repository.',\n });\n }\n\n const hookCommand = getHookCommand();\n const hookScript = `#!/bin/sh\\n${hookCommand}\\n`;\n const hookManager = await detectHookManager(gitRoot);\n\n if (hookManager === 'husky') {\n logLines([\n '',\n `Detected ${ansis.bold('husky')} as your git hook manager.`,\n '',\n `Add ${ansis.bold(hookCommand)} to your pre-commit hook:`,\n '',\n ansis.dim(` echo \"${hookCommand}\" >> .husky/pre-commit`),\n '',\n 'Or if creating a new hook:',\n '',\n ansis.dim(` echo \"${hookCommand}\" > .husky/pre-commit`),\n '',\n ]);\n return;\n }\n\n if (hookManager === 'lefthook') {\n logLines([\n '',\n `Detected ${ansis.bold('lefthook')} as your git hook manager.`,\n '',\n 'Add the following to your lefthook config:',\n '',\n ansis.dim(' pre-commit:'),\n ansis.dim(' commands:'),\n ansis.dim(' varlock-scan:'),\n ansis.dim(` run: ${hookCommand}`),\n '',\n ]);\n return;\n }\n\n if (hookManager === 'simple-git-hooks') {\n logLines([\n '',\n `Detected ${ansis.bold('simple-git-hooks')} in your package.json.`,\n '',\n 'Add the following to your package.json:',\n '',\n ansis.dim(' \"simple-git-hooks\": {'),\n ansis.dim(` \"pre-commit\": \"${hookCommand}\"`),\n ansis.dim(' }'),\n '',\n `Then run ${ansis.dim('npx simple-git-hooks')} to update the hooks.`,\n '',\n ]);\n return;\n }\n\n // No hook manager detected -- install directly to .git/hooks/pre-commit\n const hooksDir = path.join(gitRoot, '.git', 'hooks');\n const hookPath = path.join(hooksDir, 'pre-commit');\n\n // Ensure hooks directory exists\n await fs.mkdir(hooksDir, { recursive: true });\n\n // Check if a pre-commit hook already exists\n if (await pathExists(hookPath)) {\n const existingContent = await fs.readFile(hookPath, 'utf-8');\n if (existingContent.includes(SCAN_COMMAND)) {\n logLines([\n '',\n ansis.green(`The pre-commit hook already includes ${ansis.bold(SCAN_COMMAND)} - nothing to do!`),\n '',\n ]);\n return;\n }\n // Append to existing hook\n const updatedContent = `${existingContent.trimEnd()}\\n${hookCommand}\\n`;\n await fs.writeFile(hookPath, updatedContent);\n await fs.chmod(hookPath, 0o755);\n logLines([\n '',\n ansis.green(`Added ${ansis.bold(hookCommand)} to existing pre-commit hook.`),\n fmt.filePath(hookPath),\n '',\n ]);\n return;\n }\n\n // Create new hook\n await fs.writeFile(hookPath, hookScript);\n await fs.chmod(hookPath, 0o755);\n logLines([\n '',\n ansis.green(`Created pre-commit hook at ${fmt.filePath(hookPath)}`),\n ansis.dim('Your staged files will now be scanned for sensitive values before each commit.'),\n '',\n ]);\n}\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // Handle --install-hook before doing any scanning\n if (ctx.values['install-hook']) {\n await installHook(process.cwd());\n return;\n }\n\n const onlyStaged = ctx.values.staged ?? false;\n const includeIgnored = ctx.values['include-ignored'] ?? false;\n\n // Positional arguments are treated as explicit paths/globs to scan\n const scanTargets = (ctx.positionals ?? []).slice(ctx.commandPath?.length ?? 0);\n\n // Load the varlock env graph to get the actual sensitive values\n const envGraph = await loadVarlockEnvGraph({\n entryFilePaths: ctx.values.path,\n });\n\n // Check for loading/schema errors\n for (const source of envGraph.sortedDataSources) {\n if (source.loadingError) {\n throw new CliExitError(`Error loading config: ${source.loadingError.message}`, {\n suggestion: 'Make sure your .env.schema file is valid.',\n });\n }\n }\n\n await envGraph.resolveEnvValues();\n\n // Collect all sensitive string values that are non-empty\n const sensitiveValues = new Map<string, string>();\n for (const itemKey in envGraph.configSchema) {\n const item = envGraph.configSchema[itemKey];\n if (item.isSensitive && _.isString(item.resolvedValue) && item.resolvedValue !== '') {\n sensitiveValues.set(itemKey, item.resolvedValue);\n }\n }\n\n if (sensitiveValues.size === 0) {\n logLines([ansis.green('✅ No sensitive values found in config - nothing to scan for.')]);\n return;\n }\n\n const cwd = process.cwd();\n let files: Array<string>;\n\n if (scanTargets.length > 0) {\n // Explicit paths/globs provided — scan only those targets.\n // We skip git-aware filtering so the user gets exactly what they asked for,\n // and we do NOT apply SKIP_DIRS (e.g. `dist`, `.next`) since the whole point\n // is often to scan a build output directory.\n files = await resolveTargetPaths(scanTargets, cwd);\n } else if (includeIgnored) {\n // Walk the full directory tree, no git filtering\n files = await walkDirectory(cwd);\n } else {\n // Try to use git to get non-ignored files\n const gitFiles = await getGitFiles(cwd, onlyStaged);\n if (gitFiles !== null) {\n files = gitFiles;\n } else {\n // Git not available - fall back to walking directory\n if (onlyStaged) {\n throw new CliExitError('Could not run git to find staged files', {\n suggestion: 'Make sure git is installed and you are inside a git repository.',\n });\n }\n files = await walkDirectory(cwd);\n }\n }\n\n if (files.length === 0) {\n if (scanTargets.length > 0) {\n console.log(ansis.green('✅ No files found at the specified path(s).'));\n } else if (onlyStaged) {\n console.log('No staged files to scan.');\n } else {\n console.log(ansis.green('✅ No files found to scan.'));\n }\n return;\n }\n\n const allFindings: Array<ScanFinding> = [];\n for (const filePath of files) {\n const findings = await scanFileForValues(filePath, sensitiveValues);\n allFindings.push(...findings);\n }\n\n if (allFindings.length === 0) {\n logLines([ansis.green(`✅ No sensitive values found in plaintext. (scanned ${files.length} file${files.length === 1 ? '' : 's'})`)]);\n return;\n }\n\n // Group findings by file for display\n const findingsByFile = new Map<string, Array<ScanFinding>>();\n for (const finding of allFindings) {\n const existing = findingsByFile.get(finding.filePath) ?? [];\n existing.push(finding);\n findingsByFile.set(finding.filePath, existing);\n }\n\n console.error(ansis.red(`\\n🚨 Found ${allFindings.length} sensitive value(s) in plaintext across ${findingsByFile.size} file(s):\\n`));\n for (const [filePath, findings] of findingsByFile) {\n const relPath = path.relative(cwd, filePath);\n for (const finding of findings) {\n // Redact the actual secret value in the displayed line\n const redactedLine = finding.line.replaceAll(finding.sensitiveValue, redactString(finding.sensitiveValue)!);\n const truncatedLine = redactedLine.length > 100\n ? `${redactedLine.substring(0, 100)}…`\n : redactedLine;\n console.error(` ${fmt.fileName(`${relPath}:${finding.lineNumber}:${finding.columnNumber}`)} ${ansis.yellow(finding.sensitiveKeyName)}`);\n console.error(` ${ansis.dim(truncatedLine)}`);\n }\n console.error('');\n }\n\n gracefulExit(1);\n};\n"]}
|