varlock 0.0.10 → 0.0.12
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-PB7RWVE6.js → chunk-23GW4X5J.js} +3 -3
- package/dist/{chunk-PB7RWVE6.js.map → chunk-23GW4X5J.js.map} +1 -1
- package/dist/{chunk-KCX4NC7Q.js → chunk-2GR4YQFJ.js} +5 -5
- package/dist/{chunk-KCX4NC7Q.js.map → chunk-2GR4YQFJ.js.map} +1 -1
- package/dist/{chunk-UV5G2V4P.js → chunk-2SPIWTVE.js} +19 -5
- package/dist/chunk-2SPIWTVE.js.map +1 -0
- package/dist/{chunk-FYLMYWUF.js → chunk-52FLZJCQ.js} +3 -3
- package/dist/{chunk-FYLMYWUF.js.map → chunk-52FLZJCQ.js.map} +1 -1
- package/dist/{chunk-LS6F7BSZ.js → chunk-AMAUWR7O.js} +4 -4
- package/dist/{chunk-LS6F7BSZ.js.map → chunk-AMAUWR7O.js.map} +1 -1
- package/dist/{chunk-4CE75BSX.js → chunk-IBMSAOL6.js} +5 -5
- package/dist/{chunk-4CE75BSX.js.map → chunk-IBMSAOL6.js.map} +1 -1
- package/dist/{chunk-GWQT5VGW.js → chunk-LBVGWRPL.js} +4 -4
- package/dist/{chunk-GWQT5VGW.js.map → chunk-LBVGWRPL.js.map} +1 -1
- package/dist/{chunk-4WMY2EW3.js → chunk-MHDV65DI.js} +5 -5
- package/dist/{chunk-4WMY2EW3.js.map → chunk-MHDV65DI.js.map} +1 -1
- package/dist/{chunk-ZW2T4C6A.js → chunk-NXAXPMO5.js} +67 -35
- package/dist/chunk-NXAXPMO5.js.map +1 -0
- package/dist/{chunk-WA72VLVR.js → chunk-OM3JCP4E.js} +3 -3
- package/dist/{chunk-WA72VLVR.js.map → chunk-OM3JCP4E.js.map} +1 -1
- package/dist/{chunk-OSLQUOB3.js → chunk-POJECYSY.js} +3 -3
- package/dist/{chunk-OSLQUOB3.js.map → chunk-POJECYSY.js.map} +1 -1
- package/dist/chunk-TWKAUCTT.js +14 -0
- package/dist/{chunk-LSXECA6N.js.map → chunk-TWKAUCTT.js.map} +1 -1
- package/dist/{chunk-PEU3DXFM.js → chunk-UPKIHHPE.js} +3 -3
- package/dist/{chunk-PEU3DXFM.js.map → chunk-UPKIHHPE.js.map} +1 -1
- package/dist/{chunk-ZUG7BEY5.js → chunk-Y2EGAWAH.js} +3 -3
- package/dist/{chunk-ZUG7BEY5.js.map → chunk-Y2EGAWAH.js.map} +1 -1
- package/dist/cli/cli-executable.js +15 -15
- package/dist/cli/cli-executable.js.map +1 -1
- package/dist/dotenv-compat.js +5 -5
- package/dist/{env-KH4bPru7.d.ts → env-DxiD5Ylz.d.ts} +9 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +8 -8
- package/dist/init.command-ZSH7NCV7.js +9 -0
- package/dist/{init.command-ZRQOE2OK.js.map → init.command-ZSH7NCV7.js.map} +1 -1
- package/dist/load.command-U2GASZRB.js +9 -0
- package/dist/{load.command-YBN3BW6U.js.map → load.command-U2GASZRB.js.map} +1 -1
- package/dist/login.command-2WG4GZV4.js +8 -0
- package/dist/{login.command-F5AWKZKA.js.map → login.command-2WG4GZV4.js.map} +1 -1
- package/dist/run.command-IETNJ6UU.js +9 -0
- package/dist/{run.command-WWJ6ZE26.js.map → run.command-IETNJ6UU.js.map} +1 -1
- package/dist/runtime/env.d.ts +1 -1
- package/dist/runtime/env.js +1 -1
- 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/telemetry.command-US72HXMS.js +8 -0
- package/dist/{telemetry.command-IS2JLIZM.js.map → telemetry.command-US72HXMS.js.map} +1 -1
- package/package.json +2 -2
- package/dist/chunk-LSXECA6N.js +0 -14
- package/dist/chunk-UV5G2V4P.js.map +0 -1
- package/dist/chunk-ZW2T4C6A.js.map +0 -1
- package/dist/init.command-ZRQOE2OK.js +0 -9
- package/dist/load.command-YBN3BW6U.js +0 -9
- package/dist/login.command-F5AWKZKA.js +0 -8
- package/dist/run.command-WWJ6ZE26.js +0 -9
- package/dist/telemetry.command-IS2JLIZM.js +0 -8
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/ansis@4.1.0/node_modules/ansis/index.cjs","../../../node_modules/.pnpm/ansis@4.1.0/node_modules/ansis/index.mjs","../../../node_modules/.pnpm/@sindresorhus+is@7.0.2/node_modules/@sindresorhus/is/distribution/index.js","../../utils/src/my-dash.ts","../env-graph/lib/errors.ts","../../utils/src/exec-helpers.ts","../../utils/src/git-utils.ts","../../utils/src/try-catch.ts","../env-graph/lib/data-types.ts","../env-graph/lib/simple-queue.ts","../env-graph/lib/resolver.ts","../env-graph/lib/graph-utils.ts","../env-graph/lib/type-generation.ts","../env-graph/lib/env-graph.ts","../env-graph/lib/config-item.ts","../env-graph/lib/data-source.ts","../../utils/src/find-env-files.ts","../env-graph/lib/loader.ts","../src/lib/formatting.ts","../../../node_modules/.pnpm/exit-hook@4.0.0/node_modules/exit-hook/index.js"],"names":["a","e","t","r","n","l","o","i","c","p","u","s","y","_","path","isPromise","promisify","exec","EnvGraph","ConfigItem","fs","ParsedEnvSpecStaticValue","ParsedEnvSpecFunctionCall","process"],"mappings":"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","file":"chunk-ZW2T4C6A.js","sourcesContent":["let e,t,r,{defineProperty:n,setPrototypeOf:l,create:o,keys:s}=Object,i=\"\",{round:c,max:a}=Math,p=e=>{let t=/([a-f\\d]{3,6})/i.exec(e)?.[1],r=t?.length,n=parseInt(6^r?3^r?\"0\":t[0]+t[0]+t[1]+t[1]+t[2]+t[2]:t,16);return[n>>16&255,n>>8&255,255&n]},u=(e,t,r)=>e^t||t^r?16+36*c(e/51)+6*c(t/51)+c(r/51):8>e?16:e>248?231:c(24*(e-8)/247)+232,d=e=>{let t,r,n,l,o;return 8>e?30+e:16>e?e-8+90:(232>e?(o=(e-=16)%36,t=(e/36|0)/5,r=(o/6|0)/5,n=o%6/5):t=r=n=(10*(e-232)+8)/255,l=2*a(t,r,n),l?30+(c(n)<<2|c(r)<<1|c(t))+(2^l?0:60):30)},g=(()=>{let r=e=>o.some((t=>e.test(t))),n=globalThis,l=n.process??{},o=l.argv??[],i=l.env??{},c=-1;try{e=\",\"+s(i).join(\",\")}catch(e){i={},c=0}let a=\"FORCE_COLOR\",p={false:0,0:0,1:1,2:2,3:3}[i[a]]??-1,u=a in i&&p||r(/^--color=?(true|always)?$/);return u&&(c=p),~c||(c=((r,n,l)=>(t=r.TERM,{\"24bit\":3,truecolor:3,ansi256:2,ansi:1}[r.COLORTERM]||(r.CI?/,GITHUB/.test(e)?3:1:n&&\"dumb\"!==t?l?3:/-256/.test(t)?2:1:0)))(i,!!i.PM2_HOME||i.NEXT_RUNTIME?.includes(\"edge\")||!!l.stdout?.isTTY,\"win32\"===l.platform)),!p||i.NO_COLOR||r(/^--(no-color|color=(false|never))$/)?0:n.window?.chrome||u&&!c?3:c})(),f={open:i,close:i},h=39,b=49,O={},m=({p:e},{open:t,close:n})=>{let o=(e,...r)=>{if(!e){if(t&&t===n)return t;if((e??i)===i)return i}let l,s=e.raw?String.raw({raw:e},...r):i+e,c=o.p,a=c.o,p=c.c;if(s.includes(\"\u001b\"))for(;c;c=c.p){let{open:e,close:t}=c,r=t.length,n=i,o=0;if(r)for(;~(l=s.indexOf(t,o));o=l+r)n+=s.slice(o,l)+e;s=n+s.slice(o)}return a+(s.includes(\"\\n\")?s.replace(/(\\r?\\n)/g,p+\"$1\"+a):s)+p},s=t,c=n;return e&&(s=e.o+t,c=n+e.c),l(o,r),o.p={open:t,close:n,o:s,c,p:e},o.open=s,o.close=c,o};const w=function(e=g){let t={Ansis:w,level:e,isSupported:()=>s,strip:e=>e.replace(/[\u001b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,i),extend(e){for(let t in e){let r=e[t],l=(typeof r)[0],o=\"s\"===l?x(...p(r)):r;O[t]=\"f\"===l?{get(){return(...e)=>m(this,r(...e))}}:{get(){let e=m(this,o);return n(this,t,{value:e}),e}}}return r=o({},O),l(t,r),t}},s=e>0,c=(e,t)=>s?{open:`\u001b[${e}m`,close:`\u001b[${t}m`}:f,a=e=>t=>e(...p(t)),y=(e,t)=>(r,n,l)=>c(`${e}8;2;${r};${n};${l}`,t),R=(e,t)=>(r,n,l)=>c(((e,t,r)=>d(u(e,t,r)))(r,n,l)+e,t),$=e=>(t,r,n)=>e(u(t,r,n)),x=y(3,h),T=y(4,b),v=e=>c(\"38;5;\"+e,h),C=e=>c(\"48;5;\"+e,b);2===e?(x=$(v),T=$(C)):1===e&&(x=R(0,h),T=R(10,b),v=e=>c(d(e),h),C=e=>c(d(e)+10,b));let E,M={fg:v,bg:C,rgb:x,bgRgb:T,hex:a(x),bgHex:a(T),visible:f,reset:c(0,0),bold:c(1,22),dim:c(2,22),italic:c(3,23),underline:c(4,24),inverse:c(7,27),hidden:c(8,28),strikethrough:c(9,29)},I=\"Bright\";return\"black,red,green,yellow,blue,magenta,cyan,white,gray\".split(\",\").map(((e,t)=>{E=\"bg\"+e[0].toUpperCase()+e.slice(1),8>t?(M[e+I]=c(90+t,h),M[E+I]=c(100+t,b)):t=60,M[e]=c(30+t,h),M[E]=c(40+t,b)})),t.extend(M)},y=new w;module.exports=y,y.default=y;\n","import a from\"./index.cjs\";export default a;export const{Ansis,fg,bg,rgb,bgRgb,hex,bgHex,reset,inverse,hidden,visible,bold,dim,italic,underline,strikethrough,black,red,green,yellow,blue,magenta,cyan,white,gray,redBright,greenBright,yellowBright,blueBright,magentaBright,cyanBright,whiteBright,bgBlack,bgRed,bgGreen,bgYellow,bgBlue,bgMagenta,bgCyan,bgWhite,bgGray,bgRedBright,bgGreenBright,bgYellowBright,bgBlueBright,bgMagentaBright,bgCyanBright,bgWhiteBright}=a;","const 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) {\n return tagType;\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 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}\nexport function isAll(predicate, ...values) {\n return predicateOnArray(Array.prototype.every, predicate, values);\n}\nexport function isAny(predicate, ...values) {\n const predicates = isArray(predicate) ? predicate : [predicate];\n return predicates.some(singlePredicate => predicateOnArray(Array.prototype.some, singlePredicate, values));\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) && value.toString().startsWith('class ');\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 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};\nfunction keysOf(value) {\n return Object.keys(value);\n}\nconst isMethodNames = keysOf(methodTypeMap);\nfunction isIsMethodName(value) {\n return isMethodNames.includes(value);\n}\nexport function assertAll(predicate, ...values) {\n if (!isAll(predicate, ...values)) {\n const expectedType = isIsMethodName(predicate.name) ? methodTypeMap[predicate.name] : 'predicate returns truthy for all values';\n throw new TypeError(typeErrorMessageMultipleValues(expectedType, values));\n }\n}\nexport function assertAny(predicate, ...values) {\n if (!isAny(predicate, ...values)) {\n const predicates = isArray(predicate) ? predicate : [predicate];\n const expectedTypes = predicates.map(predicate => isIsMethodName(predicate.name) ? methodTypeMap[predicate.name] : 'predicate returns truthy for any value');\n throw new TypeError(typeErrorMessageMultipleValues(expectedTypes, values));\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}\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 // 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\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 /** 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 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}\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","import { spawn, exec, type SpawnOptions } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nexport class ExecError extends Error {\n constructor(\n readonly exitCode: number,\n readonly signal: NodeJS.Signals | null,\n readonly data: string = 'command gave no output',\n ) {\n super(data);\n }\n}\n\nexport function spawnAsyncHelper(\n command: string,\n args: Array<string>,\n spawnOptions?: SpawnOptions,\n) {\n const childProcess = spawn(command, args, spawnOptions || {});\n\n const deferred = new Promise((resolve, reject) => {\n let stdoutData: string = '';\n let stderrData: string = '';\n childProcess.stdout?.on('data', (data) => {\n stdoutData += data.toString();\n });\n childProcess.stderr?.on('data', (data) => {\n stderrData += data.toString();\n });\n childProcess.stdout?.on('error', (err) => {\n reject(err);\n });\n childProcess.stderr?.on('error', (err) => {\n reject(err);\n });\n childProcess.on('error', (err) => {\n reject(err);\n });\n childProcess.on('exit', (exitCode, signal) => {\n if (!exitCode) {\n resolve(stdoutData);\n } else {\n reject(\n new ExecError(exitCode, signal, stderrData),\n );\n }\n });\n });\n\n return { childProcess, execResult: deferred };\n}\n\nexport async function spawnAsync(\n command: string,\n args: Array<string>,\n opts?: SpawnOptions,\n) {\n const { execResult } = spawnAsyncHelper(command, args, opts);\n return execResult;\n}\n\nexport const asyncExec = promisify(exec);\n","import { asyncExec } from './exec-helpers';\n\nexport async function checkIsFileGitIgnored(path: string, warnIfNotGitRepo = false) {\n try {\n await asyncExec(`git check-ignore ${path} -q`);\n return true;\n } catch (err) {\n const stderr = (err as any).stderr as string;\n // git is not installed, so we don't know\n if (stderr.includes('not found')) return undefined;\n // other file related issues could throw this\n if ((err as any).code === 'ENOENT') return undefined;\n // `git check-ignore -q` exits with code 1 but no other error if is not ignored\n if (stderr === '') return false;\n if (stderr.includes('not a git repository')) {\n if (warnIfNotGitRepo) {\n // eslint-disable-next-line no-console\n console.log('🔶 Your code is not currently in a git repository - run `git init` to initialize a new repo.');\n }\n return false;\n }\n // otherwise we'll let it throw since something else is happening\n throw err;\n }\n}\n","// see https://www.npmjs.com/package/no-try for inspiration\n// although their focus was not on the typing...\n// this is more about avoiding an explicitly typed `let thing: TypeOfThingFromInsideTry;` above the try/catch scope\n\n\nfunction isPromise(obj: any) {\n return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n\n/** try-catch alternative that exposes a _typed response_ rather than having it stuck in the try's scope */\nexport async function tryCatch<T>(\n tryFn: () => T | Promise<T>,\n catchFn: (e: any) => void | Promise<void>,\n): Promise<T | undefined> {\n try {\n return await tryFn();\n } catch (err) {\n const catchResult = catchFn(err);\n if (isPromise(catchResult)) {\n await catchResult;\n }\n }\n}\n","import _ from '@env-spec/utils/my-dash';\nimport { type FallbackIfUnknown } from '@env-spec/utils/type-utils';\nimport { CoercionError, ValidationError } from './errors';\n\n\ntype EnvGraphDataTypeDef<CoerceReturnType, ValidateInputType = FallbackIfUnknown<CoerceReturnType, string>> = {\n /** this will be the name of the type, used to reference it when using it in a schema */\n name: string;\n // we might automatically prefix with a package/module name when installing plugins?\n\n /** optional description of the type itself */\n typeDescription?: string;\n\n // alias names? (ex: allow `@type=bool` and `@type=boolean` to both resolve to the same type)\n\n /** icon see https://icones.js.org for available options\n * @example mdi:aws\n * */\n icon?: string;\n /** coerce function - should take in any value and return a value of the correct type if possible */\n coerce?: (value: any) => CoerceReturnType | CoercionError | undefined;\n /**\n * validate function - we can assume that coercion has already succeded, or this will not be called\n * - if validation passes, should return true\n * - if validation fails, should return a ValidationError or array of errors - or throw an error\n * */\n validate: (value: ValidateInputType) => (true | undefined | void | Error | Array<Error>);\n\n // asyncValidate? - async validation function, meant to be called more sparingly\n // for example, when could validate an API key is currently valid\n\n // add function to validate instance settings are ok (no conflicts, missing required, etc)\n\n // do we want to allow adding settings that usually come from other decorators?\n // specific items - docs, sensitive, example, etc\n // or just a way to add arbitrary other decorators?\n};\n\n\n/**\n * holds a specific instance of a data type, along with specific settings which affect validation/coercion etc\n */\nexport class EnvGraphDataType {\n constructor(\n private def: EnvGraphDataTypeDef<any, any>,\n /** reference back to the factory function, which we can use like a constructor to check the type of the instance */\n private factory: any,\n ) {}\n\n get name() { return this.def.name; }\n get icon() { return this.def.icon; }\n\n /** @internal */\n get _rawDef() { return this.def; }\n\n coerce(val: any) {\n return this.def.coerce ? this.def.coerce(val) : val;\n }\n\n validate(val: any) {\n return this.def.validate ? this.def.validate(val) : true;\n }\n}\n// but we can pass in a function if the data type accepts additional usage options\n\nexport function createEnvGraphDataType<TsType, InstanceSettingsArgs extends Array<any>>(\n dataTypeDef:\n EnvGraphDataTypeDef<TsType>\n | ((...args: InstanceSettingsArgs) => EnvGraphDataTypeDef<TsType>),\n) {\n const typeFactoryFn = (...usageOpts: InstanceSettingsArgs) => {\n return new EnvGraphDataType(\n _.isFunction(dataTypeDef) ? dataTypeDef(...usageOpts) : dataTypeDef,\n typeFactoryFn,\n );\n };\n typeFactoryFn._isEnvGraphDataTypeFactory = true;\n // create a dummy instance just so we can get the name\n const exampleInstance = typeFactoryFn(...[] as any);\n typeFactoryFn.dataTypeName = exampleInstance.name;\n\n return typeFactoryFn;\n}\n\nexport type EnvGraphDataTypeFactory = ReturnType<typeof createEnvGraphDataType>;\n\n/// BASE DATA TYPES //////////////////////////////////////////////////////////////////////\n\nfunction coerceToString(rawVal: any) {\n if (rawVal === undefined || rawVal === null) return '';\n return _.isString(rawVal) ? rawVal : String(rawVal);\n}\n\nfunction coerceToNumber(rawVal: any) {\n let numVal!: number;\n if (_.isString(rawVal)) {\n const parsed = parseFloat(rawVal);\n if (_.isNan(parsed) || parsed === Infinity || parsed === -Infinity) {\n throw new CoercionError('Unable to coerce string to number');\n }\n numVal = parsed;\n } else if (_.isNumber(rawVal)) {\n if (numVal === Infinity || numVal === -Infinity) {\n throw new CoercionError('Inifinity is not a valid number');\n }\n numVal = rawVal;\n } else {\n throw new CoercionError(`Cannot convert ${rawVal} to number`);\n }\n return numVal;\n}\n\nconst StringDataType = createEnvGraphDataType(\n (settings?: {\n /** The minimum length of the string. */\n minLength?: number;\n /** The maximum length of the string. */\n maxLength?: number;\n /** The exact length of the string. */\n isLength?: number;\n /** The required starting substring of the string. */\n startsWith?: string;\n /** The required ending substring of the string. */\n endsWith?: string;\n\n /** The regular expression or string pattern that the string must match. */\n matches?: RegExp | string;\n\n // could add some shorthands for matching common patterns (isAlphaNumeric, etc...)\n // could add allow/deny character lists?\n\n // more stuff?\n /** converts to upper case */\n toUpperCase?: boolean;\n /** converts to lower case */\n toLowerCase?: boolean;\n\n /** allow empty string as a valid string (default is to NOT allow it) */\n allowEmpty?: boolean;\n }) => ({\n name: 'string',\n icon: 'carbon:string-text',\n coerce: (rawVal) => {\n // coerceToString will convert undefined to '', but this code should not even get called when that is the case\n let val = coerceToString(rawVal);\n // should we JSON.stringify objects?\n if (settings?.toUpperCase) val = val.toUpperCase();\n if (settings?.toLowerCase) val = val.toLowerCase();\n return val;\n },\n validate: (val) => {\n // we support returning multiple errors and our base types use this pattern\n // but many user defined types should just throw the first error they encounter\n const errors = [] as Array<ValidationError>;\n\n // TODO: not sure if we want this?\n // // special handling to not allow empty strings (unless explicitly allowed)\n // if (val === '' && !settings?.allowEmpty) {\n // return [new ValidationError('If set, string must not be empty')];\n // }\n\n if (settings?.minLength !== undefined && val.length < settings.minLength) {\n errors.push(new ValidationError(`Length must be more than ${settings.minLength}`));\n }\n if (settings?.maxLength !== undefined && val.length > settings.maxLength) {\n errors.push(new ValidationError(`Length must be less than ${settings.maxLength}`));\n }\n if (settings?.isLength !== undefined && val.length !== settings.isLength) {\n errors.push(new ValidationError(`Length must be exactly ${settings.isLength}`));\n }\n\n if (settings?.startsWith && !val.startsWith(settings.startsWith)) {\n errors.push(new ValidationError(`Value must start with \"${settings.startsWith}\"`));\n }\n if (settings?.endsWith && !val.endsWith(settings.endsWith)) {\n errors.push(new ValidationError(`Value must start with \"${settings.endsWith}\"`));\n }\n\n if (settings?.matches) {\n const regex = _.isString(settings.matches) ? new RegExp(settings.matches) : settings.matches;\n const matches = val.match(regex);\n if (!matches) {\n errors.push(new ValidationError(`Value must match regex \"${settings.matches}\"`));\n }\n }\n return errors.length ? errors : true;\n },\n }),\n);\n\n\n\n/**\n * Represents a generic number data type.\n * @category Base Types\n */\nconst NumberDataType = createEnvGraphDataType(\n (settings?: {\n /** minimum value allowed for the number */\n min?: number;\n /** maximum value allowed for the number */\n max?: number;\n /** enables coercion of the value to be within the min/max range */\n coerceToMinMaxRange?: boolean;\n /** checks if value is divisible by this number */\n isDivisibleBy?: number;\n } & (\n {\n /** checks if it's an integer */\n isInt: true;\n } | {\n isInt?: never;\n /** The number of decimal places allowed (for non-integers) */\n precision?: number\n }\n )) => ({\n name: 'number',\n icon: 'carbon:string-integer',\n coerce(rawVal) {\n let numVal = coerceToNumber(rawVal);\n if (settings?.coerceToMinMaxRange) {\n if (settings?.min !== undefined) numVal = Math.max(settings?.min, numVal);\n if (settings?.max !== undefined) numVal = Math.min(settings?.max, numVal);\n }\n\n // not sure if we want to coerce to integer by default, versus just checking\n if (settings?.isInt === true || settings?.precision === 0) {\n numVal = Math.round(numVal);\n } else if (settings?.precision) {\n const p = 10 ** settings.precision;\n numVal = Math.round(numVal * p) / p;\n }\n return numVal;\n },\n validate(val) {\n const errors = [] as Array<ValidationError>;\n if (settings?.min !== undefined && val < settings?.min) {\n errors.push(new ValidationError(`Min value is ${settings?.min}`));\n }\n if (settings?.max !== undefined && val > settings?.max) {\n errors.push(new ValidationError(`Max value is ${settings?.max}`));\n }\n if (settings?.isDivisibleBy !== undefined && val % settings.isDivisibleBy !== 0) {\n errors.push(new ValidationError(`Value must be divisible by ${settings?.isDivisibleBy}`));\n }\n return errors.length ? errors : true;\n },\n\n }),\n);\n\n\nconst BooleanDataType = createEnvGraphDataType({\n name: 'boolean',\n icon: 'carbon:boolean',\n // probably want allow some settings\n // - more strict about coercion or adding additional true/false values\n // - coercing to other values - like 0,1\n coerce(val) {\n if (_.isBoolean(val)) {\n return val;\n } else if (_.isString(val)) {\n const cleanVal = val.toLowerCase().trim();\n if (['t', 'true', 'yes', 'on', '1'].includes(cleanVal)) return true;\n if (['f', 'false', 'no', 'off', '0'].includes(cleanVal)) return false;\n throw new CoercionError('Unable to coerce string value to boolean');\n } else if (_.isNumber(val)) {\n if (val === 0) return false;\n if (val === 1) return true;\n throw new CoercionError('Unable to coerce number value to boolean (only 0 or 1 is valid)');\n } else {\n throw new CoercionError('Unable to coerce value to boolean');\n }\n },\n // TODO: add settings to be more strict, or to allow other values to coerce to true/false\n validate(val) {\n if (_.isBoolean(val)) return true;\n return new ValidationError('Value must be `true` or `false`');\n },\n});\n\n\n// Common non-primitive types ///////////////////////////////////////////////////////////////\nconst UrlDataType = createEnvGraphDataType(\n (settings?: {\n prependHttps?: boolean\n allowedDomains?: Array<string>\n }) => ({\n name: 'url',\n icon: 'carbon:url',\n coerce(rawVal) {\n const val = coerceToString(rawVal);\n if (settings?.prependHttps && !val.startsWith('https://')) return `https://${val}`;\n return val;\n },\n validate(val) {\n // if invalid, this will throw - and will be converted into a ValidationError\n const url = new URL(val);\n if (\n settings?.allowedDomains && !settings.allowedDomains.includes(url.host.toLowerCase())\n ) {\n return new ValidationError(`Domain (${url.host}) is not in allowed list: ${settings.allowedDomains.join(',')}`);\n }\n return true;\n },\n }),\n);\n\n\nconst SimpleObjectDataType = createEnvGraphDataType({\n name: 'simple-object',\n icon: 'tabler:code-dots', // curly brackets with nothing inside\n coerce(val) {\n if (_.isPlainObject(val)) return val;\n // if value is a string, we'll try to JSON.parse and see if that is an object\n if (_.isString(val)) {\n try {\n const parsedObj = JSON.parse(val);\n if (_.isPlainObject(parsedObj)) return parsedObj;\n return new CoercionError('Unable to coerce JSON parsed string to object');\n } catch (err) {\n return new CoercionError('Error parsing JSON string while coercing string to object');\n }\n }\n return new CoercionError('Cannot coerce value to object');\n },\n validate(val) {\n if (_.isPlainObject(val)) return true;\n return new ValidationError('Value must be an object');\n },\n});\n\n\n\ntype PossibleEnumValues = string | number | boolean; // do we need explicitly allow null/undefined?\n\n// might want extended enum types that include more metadata\n// also might want 1st class support for an \"array of enum\" type\n\nconst EnumDataType = createEnvGraphDataType(\n (...enumOptions: Array<PossibleEnumValues>) => ({\n name: 'enum',\n icon: 'material-symbols-light:category', // a few shapes... not sure about this one\n coerce(val) {\n if (_.isString(val) || _.isNumber(val) || _.isBoolean(val)) return val;\n return new CoercionError('Value must be a string, number, or boolean');\n },\n validate(val) {\n const possibleValues: Array<any> = enumOptions || [];\n if (!possibleValues.includes(val)) {\n throw new ValidationError('Current value is not in list of possible values', {\n tip: `Possible values are: \"${possibleValues.join('\", \"')}\"`,\n });\n }\n },\n _rawEnumOptions: enumOptions,\n }),\n);\n\nconst EMAIL_REGEX = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst EmailDataType = createEnvGraphDataType(\n (settings?: {\n normalize?: boolean\n }) => ({\n name: 'email',\n icon: 'iconoir:at-sign',\n typeDescription: 'standard email address',\n coerce(rawVal) {\n let val = coerceToString(rawVal);\n if (settings?.normalize) val = val.toLowerCase();\n return val;\n },\n validate(val) {\n // check if it's a valid email - which could def have some edge case issues\n const result = EMAIL_REGEX.test(val);\n if (result) return true;\n return new ValidationError('Value must be a valid email address');\n },\n }),\n);\n\nconst IP_V4_ADDRESS_REGEX = /^(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}$/;\nconst IP_V6_ADDRESS_REGEX = /^(?:(?:[a-fA-F\\d]{1,4}:){7}(?:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|:[a-fA-F\\d]{1,4}|:)|(?:[a-fA-F\\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,2}|:)|(?:[a-fA-F\\d]{1,4}:){4}(?:(?::[a-fA-F\\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,3}|:)|(?:[a-fA-F\\d]{1,4}:){3}(?:(?::[a-fA-F\\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,4}|:)|(?:[a-fA-F\\d]{1,4}:){2}(?:(?::[a-fA-F\\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,5}|:)|(?:[a-fA-F\\d]{1,4}:){1}(?:(?::[a-fA-F\\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}|(?::[a-fA-F\\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$/;\nconst ipAddressDataType = createEnvGraphDataType(\n (settings?: {\n version?: 4 | 6,\n normalize?: boolean,\n }) => ({\n name: 'ip',\n icon: 'iconoir:ip-address-tag',\n typeDescription: 'ip v4 or v6 address',\n coerce(rawVal) {\n let val = coerceToString(rawVal);\n if (settings?.normalize) val = val.toLowerCase();\n return val;\n },\n validate(val) {\n // default to v4\n const regex = settings?.version === 6 ? IP_V6_ADDRESS_REGEX : IP_V4_ADDRESS_REGEX;\n const result = regex.test(val);\n if (result) return true;\n return new ValidationError('Value must be a valid IP address');\n },\n }),\n);\n\nconst PortDataType = createEnvGraphDataType(\n (settings?: {\n min?: number;\n max?: number;\n }) => ({\n name: 'port',\n icon: 'material-symbols:captive-portal', //! globe with arrow - not sure about this one\n typeDescription: 'valid port number between 0 and 65535',\n coerce(rawVal) {\n if (_.isString(rawVal)) {\n if (rawVal.includes('.')) throw new CoercionError('Port number must be an integer');\n if (rawVal.includes('e')) throw new CoercionError('Port number should be an integer, not in exponential notation');\n }\n return coerceToNumber(rawVal);\n },\n validate(val) {\n if (settings?.min !== undefined && val < settings?.min) {\n return new ValidationError(`Min value is ${settings?.min}`);\n }\n if (settings?.max !== undefined && val > settings?.max) {\n return new ValidationError(`Max value is ${settings?.max}`);\n }\n if (val < 0 || val > 65535) {\n return new ValidationError('Value must be a valid port number (0-65535)');\n }\n return true;\n },\n }),\n);\n\nconst SEMVER_REGEX = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$/;\nconst SemverDataType = createEnvGraphDataType(\n (_settings?: {}) => ({\n name: 'semver',\n icon: 'simple-icons:semver',\n typeDescription: 'semantic version string',\n validate(val) {\n const result = SEMVER_REGEX.test(val);\n if (result) return true;\n return new ValidationError('Value must be a valid semantic version string');\n },\n }),\n);\n\n// https://rgxdb.com/r/526K7G5W\nconst ISO_DATE_REGEX = /^(?:[+-]?\\d{4}(?!\\d{2}\\b))(?:(-?)(?:(?:0[1-9]|1[0-2])(?:\\1(?:[12]\\d|0[1-9]|3[01]))?|W(?:[0-4]\\d|5[0-2])(?:-?[1-7])?|(?:00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[1-6])))(?:[T\\s](?:(?:(?:[01]\\d|2[0-3])(?:(:?)[0-5]\\d)?|24:?00)(?:[.,]\\d+(?!:))?)?(?:\\2[0-5]\\d(?:[.,]\\d+)?)?(?:[zZ]|(?:[+-])(?:[01]\\d|2[0-3]):?(?:[0-5]\\d)?)?)?)?$/;\nconst IsoDateDataType = createEnvGraphDataType({\n name: 'isoDate',\n icon: 'formkit:datetime',\n typeDescription: 'ISO 8601 date string with optional time and milliseconds',\n validate(val) {\n // could add options for dateonly, time only, etc...\n const result = ISO_DATE_REGEX.test(val);\n if (result) return true;\n return new ValidationError('Value must be a valid ISO 8601 date string');\n },\n});\n\n\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-5][0-9a-f]{3}-[089ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst UuidDataType = createEnvGraphDataType({\n name: 'uuid',\n icon: 'mdi:identifier',\n typeDescription: 'UUID string V1-V5 per RFC4122, including NIL',\n validate(val) {\n const result = UUID_REGEX.test(val);\n if (result) return true;\n return new ValidationError('Value must be a valid UUID string');\n },\n});\n\nconst MD5_REGEX = /^[a-f0-9]{32}$/;\nconst Md5DataType = createEnvGraphDataType({\n name: 'md5',\n typeDescription: 'MD5 hash string',\n validate(val) {\n const result = MD5_REGEX.test(val);\n if (result) return true;\n return new ValidationError('Value must be a valid MD5 hash string');\n },\n});\n\n\nexport const BaseDataTypes = {\n string: StringDataType,\n number: NumberDataType,\n boolean: BooleanDataType,\n simpleObject: SimpleObjectDataType,\n enum: EnumDataType,\n email: EmailDataType,\n url: UrlDataType,\n ipAddress: ipAddressDataType,\n port: PortDataType,\n semver: SemverDataType,\n isoDate: IsoDateDataType,\n uuid: UuidDataType,\n md5: Md5DataType,\n};\n","/** A simple queue implementation for sequential execution of async operations */\nexport class SimpleQueue {\n private queue: Array<() => Promise<any>> = [];\n private processing = false;\n\n /** Add a task to the queue and return a promise that resolves when the task is complete */\n async enqueue<T>(task: () => Promise<T>): Promise<T> {\n return new Promise((resolve, reject) => {\n this.queue.push(async () => {\n try {\n const result = await task();\n resolve(result);\n } catch (err) {\n reject(err);\n }\n });\n\n this.processQueue();\n });\n }\n\n private async processQueue() {\n if (this.processing || this.queue.length === 0) {\n return;\n }\n\n this.processing = true;\n const task = this.queue.shift();\n\n if (task) {\n try {\n await task();\n } finally {\n this.processing = false;\n this.processQueue();\n }\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-empty-function */\n\nimport { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nimport _ from '@env-spec/utils/my-dash';\n\nimport { ResolutionError, SchemaError } from './errors';\nimport { ConfigItem } from './config-item';\nimport { SimpleQueue } from './simple-queue';\n\nconst execAsync = promisify(exec);\n\nexport type ResolvedValue = undefined\n | string | number | boolean\n | RegExp; // regex is only used internally as function args, not as a final resolved value\n // TODO: will probably want to re-enable object/array values\n // { [key: string]: ConfigValue } |\n // Array<ConfigValue>;\n\n\ntype ResolverFunctionArgs = Array<Resolver | Record<string, Resolver>>;\nexport abstract class Resolver {\n static fnName?: string;\n\n constructor(readonly fnArgs: ResolverFunctionArgs) {}\n\n abstract label: string;\n abstract icon: string;\n inferredType?: string;\n _schemaErrors: Array<SchemaError> = [];\n private _depsObj: Record<string, boolean> = {};\n\n get childResolvers(): Array<Resolver> {\n return this.fnArgs.flatMap((r) => (_.isPlainObject(r) ? _.values(r) : r));\n }\n\n get schemaErrors(): Array<SchemaError> {\n return [\n ...this._schemaErrors,\n ...this.childResolvers.flatMap((r) => r.schemaErrors),\n ];\n }\n get depsObj(): Record<string, boolean> {\n const mergedDepsObj = { ...this._depsObj };\n this.childResolvers.forEach((r) => Object.assign(mergedDepsObj, r.depsObj));\n return mergedDepsObj;\n }\n get deps() {\n return Object.keys(this.depsObj);\n }\n\n protected abstract _process(ctx?: any): Promise<void | (() => void)>;\n private configItem?: ConfigItem;\n async process(configItem: ConfigItem) {\n this.configItem = configItem;\n try {\n await this._process(configItem);\n } catch (error) {\n if (error instanceof SchemaError) {\n this._schemaErrors.push(error);\n } else if (error instanceof Error) {\n this._schemaErrors.push(new SchemaError(error));\n } else {\n throw new Error(`Non-error thrown while processing resolver - ${error}`);\n }\n }\n this.childResolvers.forEach((r) => r.process(configItem));\n }\n\n // meant to be used by subclass _process methods\n protected addDep(key: string) {\n this._depsObj[key] = true;\n if (!this.configItem) throw new Error('expected configItem to be set');\n if (!this.configItem.envGraph.configSchema[key]) {\n this._schemaErrors.push(new SchemaError(`Unknown referenced key: ${key}`));\n }\n }\n\n protected abstract _resolve(): Promise<ResolvedValue>;\n async resolve() {\n const resolvedValue = await this._resolve();\n return resolvedValue;\n }\n\n // meant to be used by subclass _resolve methods\n protected getDepValue(key: string) {\n const depItem = this.configItem?.envGraph.configSchema[key];\n if (!depItem) throw new Error(`Expected to find item - ${key}`);\n return depItem.resolvedValue;\n }\n}\n\n// Built-in resolver fns ---------------------------------------------------------\n\n// special resolver class that just holds a static value\n// only used internally, not via `static(x)`\nexport class StaticValueResolver extends Resolver {\n constructor(readonly staticValue: ResolvedValue) {\n super([]);\n if (staticValue !== undefined) {\n this.inferredType = typeof staticValue;\n }\n }\n\n label = 'static';\n icon = 'bi:dash';\n\n protected async _resolve() { return this.staticValue; }\n protected async _process() {}\n}\n\n// special resolver class that represents an error when an unknown resolver is used\n// only used internally, not via `error(x)`\nexport class ErrorResolver extends Resolver {\n constructor(err: SchemaError) {\n super([]);\n this._schemaErrors.push(err);\n }\n\n label = 'error';\n icon = 'bi:dash';\n\n protected async _resolve() { return undefined; }\n protected async _process() {}\n}\n\n\nexport class ConcatResolver extends Resolver {\n static fnName = 'concat';\n label = 'concat';\n icon = 'material-symbols:join';\n inferredType = 'string';\n\n async _process() {\n if (this.fnArgs.some((arg) => _.isPlainObject(arg))) {\n throw new SchemaError('concat() does not support key-value arguments');\n }\n if (this.fnArgs.length < 2) {\n throw new SchemaError('concat() expects at least two arguments');\n }\n }\n\n protected async _resolve() {\n const resolvedValues = [];\n for (const arg of this.fnArgs) {\n // key value args come through as an object\n if (_.isPlainObject(arg)) {\n throw new Error('concat() does not support key-value arguments');\n }\n // TODO: handle child resolver failure?\n const resolvedChildValue = await arg.resolve();\n // do we need to worry about non-string-ish things here?\n resolvedValues.push(String(resolvedChildValue ?? ''));\n }\n return resolvedValues.join('');\n }\n}\n\nexport class FallbackResolver extends Resolver {\n static fnName = 'fallback';\n label = 'fallback';\n icon = 'memory:table-top-stairs-up';\n\n async _process() {\n if (this.fnArgs.some((arg) => _.isPlainObject(arg))) {\n throw new SchemaError('fallback() does not support key-value arguments');\n }\n if (this.fnArgs.length < 2) {\n throw new SchemaError('fallback() expects at least two arguments');\n }\n }\n\n protected async _resolve() {\n for (const arg of this.fnArgs) {\n if (_.isPlainObject(arg)) throw new Error('fallback() does not support key-value arguments');\n // TODO: handle child resolver failure?\n const resolvedChildValue = await arg.resolve();\n if (resolvedChildValue !== undefined && resolvedChildValue !== '') {\n return resolvedChildValue;\n }\n }\n }\n}\nexport class ExecResolver extends Resolver {\n static fnName = 'exec';\n label = 'exec';\n icon = 'iconoir:terminal';\n\n async _process() {\n if (this.fnArgs.length !== 1) {\n throw new SchemaError('exec() expects a single child arg');\n }\n if (this.fnArgs.some((arg) => _.isPlainObject(arg))) {\n throw new SchemaError('exec() does not support key-value arguments');\n }\n }\n\n static execQueue = new SimpleQueue();\n\n protected async _resolve() {\n if (_.isPlainObject(this.fnArgs[0])) throw new Error('exec() does not support key-value arguments');\n\n const commandStr = await this.fnArgs[0].resolve();\n if (typeof commandStr !== 'string') {\n throw new ResolutionError('exec() expects a string child arg');\n }\n\n try {\n // ? NOTE - putting these calls through a simple queue for now\n // this avoids multiple 1password auth popups, but it also makes multiple 1p calls very slow\n // we likely want to remove this once we have the specific 1Password plugin re-implemented\n const { stdout } = await ExecResolver.execQueue.enqueue(() => execAsync(commandStr));\n // trim trailing newline by default\n // we could allow options here?\n return stdout.replace(/\\n$/, '');\n } catch (err) {\n // eslint-disable-next-line no-console\n console.log('exec() failed', err);\n throw new ResolutionError(`exec() command failed: ${commandStr}`);\n }\n }\n}\n\nexport class RefResolver extends Resolver {\n static fnName = 'ref';\n label = 'ref';\n icon = 'mdi-light:content-duplicate';\n\n private refKey?: string;\n\n async _process() {\n if (this.fnArgs.length !== 1) {\n throw new SchemaError('ref() expects a single child arg');\n }\n if (!(this.fnArgs[0] instanceof StaticValueResolver)) {\n throw new SchemaError('ref() expects a single static value passed in');\n }\n const keyName = this.fnArgs[0].staticValue;\n if (typeof keyName !== 'string') {\n throw new SchemaError('ref() expects a string keyname passed in');\n }\n this.refKey = keyName;\n this.addDep(keyName);\n }\n\n protected async _resolve() {\n if (!this.refKey) throw new Error('expected refKey to be set');\n // TODO - need to handle resolution order\n return this.getDepValue(this.refKey);\n }\n}\n\n// regex() is only used internally as function args to be used by other functions\n// we will check final resoled values to make sure they are not regexes\nexport class RegexResolver extends Resolver {\n static fnName = 'regex';\n label = 'regex';\n icon = 'mdi:regex';\n\n private regex?: RegExp;\n\n async _process() {\n if (this.fnArgs.length !== 1) {\n throw new SchemaError('regex() expects a single child arg');\n }\n if (!(this.fnArgs[0] instanceof StaticValueResolver)) {\n throw new SchemaError('regex() expects a single static value passed in');\n }\n const regexStr = this.fnArgs[0].staticValue;\n if (typeof regexStr !== 'string') {\n throw new SchemaError('regex() expects a string');\n }\n this.regex = new RegExp(regexStr);\n }\n\n protected async _resolve() {\n if (!this.regex) throw new Error('expected regex to be set');\n return this.regex;\n }\n}\n\nexport class RemapResolver extends Resolver {\n static fnName = 'remap';\n label = 'remap';\n icon = 'codicon:replace';\n\n private remappings?: Record<string, Resolver>;\n\n async _process() {\n if (_.isPlainObject(this.fnArgs[0])) {\n throw new SchemaError('remap() expects the first arg to be the value to remap');\n }\n if (!_.isPlainObject(this.fnArgs[1])) {\n throw new SchemaError('remap() expects the all args after the first to be key-value pairs of remappings');\n }\n if (this.fnArgs.length !== 2) {\n throw new SchemaError('remap() should not have any additional non key-value args after remappings');\n }\n this.remappings = this.fnArgs[1];\n }\n\n protected async _resolve() {\n if (_.isPlainObject(this.fnArgs[0])) {\n throw new SchemaError('remap() expects the first arg to be the value to remap');\n }\n if (!_.isPlainObject(this.fnArgs[1])) {\n throw new SchemaError('remap() expects the all args after the first to be key-value pairs of remappings');\n }\n const originalValue = await this.fnArgs[0].resolve();\n\n if (!this.remappings) throw new Error('expected remappings to be set');\n for (const [remappedVal, matchValResolver] of Object.entries(this.remappings)) {\n const matchVal = await matchValResolver.resolve();\n if (matchVal instanceof RegExp && originalValue !== undefined) {\n if (matchVal.test(String(originalValue))) return remappedVal;\n } else {\n if (matchVal === originalValue) return remappedVal;\n }\n }\n return originalValue;\n }\n}\n\n\n\n\nexport type ResolverChildClass<ChildClass extends Resolver = Resolver> = (\n { new (...args: Array<any>): ChildClass } & typeof Resolver\n);\n\n// these are the resolvers which are accessible to end-users as fn calls\nexport const BaseResolvers: Array<ResolverChildClass> = [\n ConcatResolver,\n FallbackResolver,\n RefResolver,\n ExecResolver,\n RemapResolver,\n RegexResolver,\n];\n","type GraphNodeId = string;\nexport type GraphAdjacencyList = Record<GraphNodeId, Array<GraphNodeId>>;\n\nexport function findGraphCycles(graph: GraphAdjacencyList): Array<Array<GraphNodeId>> {\n const visited = new Set<GraphNodeId>();\n const recursionStack = new Set<GraphNodeId>();\n const cycles: Array<Array<GraphNodeId>> = [];\n const currentPath: Array<GraphNodeId> = [];\n\n function dfs(node: GraphNodeId) {\n // If node is in recursion stack, we found a cycle\n if (recursionStack.has(node)) {\n // Find the start of the cycle in the current path\n const cycleStart = currentPath.indexOf(node);\n // Extract the cycle from the current path\n const cycle = currentPath.slice(cycleStart);\n cycles.push(cycle);\n // cycles.push([...cycle, node]); // Add the node again to complete the cycle\n return;\n }\n\n // If node is visited and not in recursion stack, no cycle\n if (visited.has(node)) {\n return;\n }\n\n // Mark node as visited and add to recursion stack\n visited.add(node);\n recursionStack.add(node);\n currentPath.push(node);\n\n // Visit all neighbors\n for (const neighbor of graph[node] || []) {\n dfs(neighbor);\n }\n\n // Remove node from recursion stack and current path\n recursionStack.delete(node);\n currentPath.pop();\n }\n\n // Check all nodes in case graph is disconnected\n for (const node of Object.keys(graph)) {\n if (!visited.has(node)) {\n dfs(node);\n }\n }\n\n return cycles;\n}\n\n\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport _ from '@env-spec/utils/my-dash';\nimport { EnvGraph } from './env-graph';\nimport { ConfigItem } from './config-item';\n\n\nconst AUTOGENERATED_FILE_BANNER = `\n// 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑\n// 🛑 THIS IS AN AUTOGENERATED FILE - DO NOT EDIT DIRECTLY 🛑\n// 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑 🛑\n`;\n\n\nconst ICON_SIZE = 20;\n\nlet iconCacheFolderInit = false;\nconst iconInMemoryCache: Record<string, string> = {};\n\nasync function fetchIconSvg(\n iconifyName: string,\n color = '808080', // neutral gray that should appear on black or white bg\n iconCacheFolder = '/tmp/varlock-icon-cache', // TODO: maybe move icon cache to ~/.varlock dir?\n) {\n // some notes about icons\n // - using a URL that points to an svg doesn't work (but png/jpg do work)\n // - but embedding data url with an svg works fine\n // - we are fetching them on demand and caching them\n // - and then applying a color if one is set or falling back to a neutral gray that should show up on either black or white\n\n if (!iconCacheFolderInit) {\n fs.mkdirSync(iconCacheFolder, { recursive: true });\n iconCacheFolderInit = true;\n }\n\n const iconPath = `${iconCacheFolder}/${iconifyName}-${ICON_SIZE}.svg`;\n\n let svgSrc: string | undefined;\n if (iconInMemoryCache[iconPath]) {\n svgSrc = iconInMemoryCache[iconPath];\n } else if (fs.existsSync(iconPath)) {\n const svgFileBuffer = await fs.promises.readFile(iconPath, 'utf-8');\n svgSrc = svgFileBuffer.toString();\n iconInMemoryCache[iconPath] = svgSrc;\n } else {\n try {\n const iconSvg = await fetch(`https://api.iconify.design/${iconifyName.replace(':', '/')}.svg?height=${ICON_SIZE}`);\n svgSrc = await iconSvg.text();\n } catch (err) {\n return;\n }\n if (!svgSrc) return;\n\n\n // TODO: optionally re-enable svgo - but only as a peer dependency?\n // // run it through svgo to try to shrink it down a little\n // const optimizedSvgResult = optimize(svgSrc, {\n // multipass: true,\n // });\n // if (!optimizedSvgResult.data) throw new Error(`Failed to optimize SVG icon - ${iconifyName}`);\n // svgSrc = optimizedSvgResult.data as string;\n\n if (svgSrc) {\n await fs.promises.writeFile(iconPath, svgSrc, 'utf-8');\n iconInMemoryCache[iconPath] = svgSrc;\n }\n }\n\n\n const hexColor = color.startsWith('#') ? color : `#${color}`;\n const colorizedSvg = svgSrc.replaceAll('currentColor', hexColor);\n return colorizedSvg;\n}\n\n\nexport async function getTsDefinitionForItem(item: ConfigItem, indentLevel = 0) {\n const i = _.times(indentLevel, () => ' ').join('');\n const itemSrc = [];\n\n // TODO - we are assuming here that the config has been fully resolved\n // meaning if we had settings varying based on values (ex: something is required only for prod) then this wouldn't work\n // so we'll need to add a concept of fully resolving the config and triggering that first\n // also begs the question of what the types look like when the schema can vary like that...\n\n // TODO: also will need to figure out how we deal with null values\n // since we might need something like `key: string | null` rather than `key?: string`\n\n const jsDocLines = [];\n\n jsDocLines.push(`**${item.key}**${item.isSensitive ? ' 🔐 _sensitive_' : ''}`);\n\n if (item.description) jsDocLines.push(...item.description.split('\\n'));\n // type-description?\n\n const iconName = item.icon;\n if (iconName) {\n // TODO: pass through custom icon color? (already exists on fetchIconSvg)\n const iconSvg = await fetchIconSvg(iconName);\n if (iconSvg) jsDocLines.push(`}) `);\n }\n\n const docsLinks = item.docsLinks;\n if (docsLinks.length) {\n jsDocLines.push('');\n docsLinks.forEach((docsEntry) => {\n // see https://jsdoc.app/tags-see for format info\n const docsLink = _.compact([docsEntry.url, docsEntry.description]).join(' | ');\n jsDocLines.push(`📚 {@link ${docsLink}}`);\n });\n }\n\n // more ideas:\n // - we have an `exampleValue` property we could include\n // - there's also a `@example` jsdoc directive which is meant to show a code example\n // - could add info about the original source of an item if it has been picked / imported\n // - could include additional text about type settings / validations\n\n if (jsDocLines.length === 1) {\n itemSrc.push(`/** ${jsDocLines[0]} */`);\n } else if (jsDocLines.length > 1) {\n itemSrc.push(...[\n '/**',\n // extra 2 trailing spaces are needed to make line breaks visible\n ..._.flatMap(jsDocLines, (line) => [` * ${line} `]),\n ' */',\n ]);\n }\n\n // TODO: logic should probably be within the Item class(es) and we still need to figure out how to identify these types...\n const dataType = item.dataType;\n const dataTypeName = dataType?.name;\n\n let itemTsType = 'string';\n if (dataType) {\n if (dataTypeName === 'number' || dataTypeName === 'port') {\n itemTsType = 'number';\n } else if (dataTypeName === 'boolean') {\n itemTsType = 'boolean';\n } else if (dataTypeName === 'simple-object') {\n itemTsType = 'Record<string, any>';\n } else if (dataTypeName === 'enum') {\n // enums have several different formats we need to handle\n const rawEnumOptions = (dataType._rawDef as any)._rawEnumOptions;\n let enumOptions = [] as Array<any>;\n enumOptions = rawEnumOptions;\n\n // TODO: we'll likely add other formats later where enum options can have attached descriptions\n\n if (!enumOptions.length) {\n itemTsType = 'never'; // should it be any instead?\n } else {\n // we could spit out descriptions in comments here, although currently it does nothing\n // see https://github.com/microsoft/TypeScript/issues/38106\n itemTsType = _.map(enumOptions, JSON.stringify).join(' | ');\n }\n }\n // TODO: eventually handle objects, arrays, dictionaries\n }\n\n itemSrc.push(`readonly ${item.key}${item.isRequired ? '' : '?'}: ${itemTsType};`);\n itemSrc.push('');\n return _.map(itemSrc, (line) => `${i}${line}`);\n}\n\nexport async function generateTsTypesSrc(graph: EnvGraph) {\n // TODO: first check if schema is valid - we dont care if values are invalid\n\n const tsSrc = [\n AUTOGENERATED_FILE_BANNER,\n // might want to add some options to let users inject this, or somehow detect eslint, but fine for now\n '/* eslint-disable */',\n 'export type CoercedEnvSchema = {',\n ];\n\n const exposedKeys: Array<string> = [];\n const exposedNonSensitiveKeys: Array<string> = [];\n for (const itemKey in graph.configSchema) {\n const configItem = graph.configSchema[itemKey];\n // generate the TS type for the item in the full schema\n tsSrc.push(...await getTsDefinitionForItem(configItem, 1));\n\n // TODO: we will want the ability to keep some items internal and not exposed in the schema\n exposedKeys.push(itemKey);\n if (!configItem.isSensitive) exposedNonSensitiveKeys.push(itemKey);\n }\n\n tsSrc.push('};\\n');\n\n tsSrc.push(`\ndeclare module 'varlock/env' {\n export interface TypedEnvSchema extends CoercedEnvSchema {}\n export interface PublicTypedEnvSchema extends Pick<CoercedEnvSchema, '${exposedNonSensitiveKeys.join(\"' | '\")}'> {}\n}\n`);\n\n // add types for process.env too\n // remap types for process.env\n // - enums - stay string unions if all options are strings\n // - boolean -> 'true' | 'false'\n // - everything else -> string\n tsSrc.push(`\nexport type EnvSchemaAsStrings = {\n [Property in keyof CoercedEnvSchema]:\n CoercedEnvSchema[Property] extends string ? CoercedEnvSchema[Property]\n : (CoercedEnvSchema[Property] extends boolean ? ('true' | 'false') : string)\n};\n`);\n\n // TODO: allow user to pass in options to control this?\n // although because we add the @generateTypes decorator an init time\n // we may need our integrations to specify what settings they prefer\n const importMetaEnvTypes = true;\n const processEnvTypes = true;\n\n const IMPORT_META_AUGMENTATION = `\n // add types for global import.meta.env\n interface ImportMetaEnv extends EnvSchemaAsStrings {}\n interface ImportMeta {\n readonly env: ImportMetaEnv;\n }`;\n const PROCESS_ENV_AUGMENTATION = `\n // add types for global process.env\n namespace NodeJS {\n interface ProcessEnv extends EnvSchemaAsStrings {}\n }`;\n\n // TODO: should add an option to enable/disable\n tsSrc.push(...[\n 'declare global {',\n importMetaEnvTypes && IMPORT_META_AUGMENTATION,\n processEnvTypes && PROCESS_ENV_AUGMENTATION,\n '}',\n ].filter(Boolean));\n\n return tsSrc.join('\\n');\n}\n\nexport async function generateTypes(graph: EnvGraph, lang: string, outputPath: string) {\n if (lang !== 'ts') throw new Error(`Unsupported @generateTypes lang: ${lang}`);\n\n const tsSrc = await generateTsTypesSrc(graph);\n if (!graph.basePath) return;\n const typesPath = path.join(graph.basePath, outputPath);\n await fs.promises.writeFile(typesPath, tsSrc, 'utf-8');\n}\n","import _ from '@env-spec/utils/my-dash';\nimport path from 'node:path';\nimport { ConfigItem } from './config-item';\nimport { EnvGraphDataSource, FileBasedDataSource } from './data-source';\n\nimport { BaseResolvers, type ResolverChildClass } from './resolver';\nimport { BaseDataTypes, type EnvGraphDataTypeFactory } from './data-types';\nimport { findGraphCycles, type GraphAdjacencyList } from './graph-utils';\nimport { ResolutionError, SchemaError } from './errors';\nimport { generateTypes } from './type-generation';\n\nexport type SerializedEnvGraph = {\n basePath?: string;\n sources: Array<{\n label: string;\n enabled: boolean;\n path?: string;\n }>,\n settings: {\n redactLogs?: boolean;\n preventLeaks?: boolean;\n },\n config: Record<string, {\n value: any;\n isSensitive: boolean;\n }>;\n};\n\n/** container of the overall graph and current resolution attempt / values */\nexport class EnvGraph {\n // TODO: not sure if this should be the graph of _everything_ in a workspace/project\n // or just the files that are relevant to the current resolution attempt\n // (which would mean it's always through the lens of the current directory/package)\n\n basePath?: string;\n\n /** array of data sources */\n dataSources: Array<EnvGraphDataSource> = [];\n finalOverridesDataSource?: EnvGraphDataSource;\n\n /** config item key of env flag (toggles env-specific data sources enabled) */\n envFlagKey?: string;\n /** current value of the environment flag */\n envFlagValue?: string;\n\n configSchema: Record<string, ConfigItem> = {};\n\n addDataSource(dataSource: EnvGraphDataSource) {\n dataSource.graph = this;\n this.dataSources.push(dataSource);\n }\n\n get schemaDataSource() {\n const schemas = this.dataSources.filter((f) => f.type === 'schema');\n if (schemas.length > 1) throw new Error('Multiple schema data sources found');\n if (schemas.length === 0) return undefined;\n return schemas[0];\n }\n\n get sortedDataSources() {\n return _.sortBy(this.dataSources, (f) => (\n (10 * EnvGraphDataSource.DATA_SOURCE_TYPES[f.type].precedence)\n + (f.applyForEnv ? 1 : 0) // boost if for specific env\n ));\n }\n\n registeredResolverFunctions: Record<string, ResolverChildClass> = {};\n registerResolver(resolverClass: ResolverChildClass) {\n // TODO: fix ts any\n const fnName = (resolverClass as any).fnName;\n if (fnName in this.registeredResolverFunctions) {\n // TODO: do we want to allow the user to override?\n throw new Error(`Resolver ${fnName} already registered`);\n }\n this.registeredResolverFunctions[fnName] = resolverClass;\n }\n\n dataTypesRegistry: Record<string, EnvGraphDataTypeFactory> = {};\n registerDataType(factory: EnvGraphDataTypeFactory) {\n this.dataTypesRegistry[factory.dataTypeName] = factory;\n }\n\n constructor() {\n // register base data types (string, number, boolean, etc)\n for (const dataType of _.values(BaseDataTypes)) {\n this.registerDataType(dataType);\n }\n // register base resolvers (concat, ref, etc)\n for (const resolverClass of BaseResolvers) {\n this.registerResolver(resolverClass);\n }\n }\n\n async finishLoad() {\n // first pass to figure out an envFlag and enable/disable env-specific sources\n const sortedDataSources = this.sortedDataSources;\n\n for (const source of sortedDataSources) {\n // TODO: not sure how we want to surface this exactly\n // we dont necessarily always want any loading error to fail the entire load\n // but for example if the main schema is failing and we dont know the envFlag\n // we don't know which env-specific sources to enable\n if (source.loadingError) {\n throw source.loadingError;\n }\n // example files will always be ignored, except during init flow\n if (source.type === 'example') {\n source.disabled = true;\n continue;\n }\n\n // check for @envFlag so we know which item should control loading env-specific files (eg: .env.production)\n if (source.decorators?.envFlag) {\n if (source.applyForEnv) {\n throw new Error(`@envFlag cannot be set from within an env-specific data source - ${source.label}`);\n } else if (this.envFlagKey) {\n throw new Error('only a single @envFlag setting is allowed');\n } else {\n const envFlagKey = source.decorators.envFlag.simplifiedValue;\n if (!_.isString(envFlagKey)) {\n throw new Error('@envFlag must be a string');\n } else {\n this.envFlagKey = envFlagKey;\n }\n }\n }\n\n // if this is an env-specific file, check if this file should be enabled or not\n // depending on the current value of the key specified by the `@envFlag` decorator\n if (source.applyForEnv) {\n // skip the file if the env doesn't match\n if (source.applyForEnv && this.envFlagValue !== source.applyForEnv) {\n source.disabled = true;\n continue;\n }\n }\n\n // check for @disable root decorator\n if (source.decorators?.disable && source.decorators.disable.simplifiedValue) {\n source.disabled = true;\n continue;\n }\n\n // TODO: here we'll probably want to allow registering more resolvers and data types via root decorators\n\n // create config items, or update their definitions if they already exist\n for (const itemKey in source.configItemDefs) {\n // if a source is marked as `ignoreNewDefs` (like the process.env source)\n // then only items already existing in another source will take effect\n if (source.ignoreNewDefs && !this.configSchema[itemKey]) continue;\n\n const itemDef = source.configItemDefs[itemKey];\n this.configSchema[itemKey] ??= new ConfigItem(this, itemKey);\n this.configSchema[itemKey].addDef(itemDef, source);\n // TODO: we probably want to track the definition back to the source\n }\n\n // deal with resolving the `@envFlag` if we are loading .env.schema\n if (source.type === 'schema' && this.envFlagKey) {\n // we'll throw some errors later if we were expecting an envFlag and one is not set\n // but in the case we are just loading the graph, but not resolving it (like `varlock init`)\n // then we want to allow this to proceed, and no files will be marked as disabled\n\n if (!this.configSchema[this.envFlagKey]) {\n throw new Error(`@envFlag key ${this.envFlagKey} not found in schema`);\n }\n\n // we do a limited early processing and resolution to get the env flag value\n // TODO: throw errors later if these already processed items are modified in subsequent env files\n const envFlagItem = this.configSchema[this.envFlagKey];\n await envFlagItem.process();\n // process and resolve any other items our env flag depends on\n for (const depKey of envFlagItem.valueResolver?.deps || []) {\n const depItem = this.configSchema[depKey];\n if (!depItem) {\n throw new Error(`envFlag resolver is using non-existant dependency: ${depKey}`);\n }\n await depItem.process();\n // we are not going to follow a chain of dependencies here\n if (depItem.valueResolver?.deps.length) {\n // TODO: probably should allow this, even though its not going to be common\n throw new Error('envFlag cannot follow a chain of dependencies');\n }\n await depItem.resolve();\n }\n await envFlagItem.resolve();\n if (!envFlagItem.isValid) {\n const err = new Error('resolved @envFlag value is not valid');\n err.cause = envFlagItem.errors[0];\n throw err;\n }\n\n if (envFlagItem.resolvedValue) {\n if (!_.isString(envFlagItem.resolvedValue)) {\n throw new Error('expected resolved @envFlag value to be a string');\n }\n this.envFlagValue = envFlagItem.resolvedValue;\n }\n }\n\n // TODO: here we would probably want to check for `@import` statements, and load those sources as well\n }\n\n // process items - this adds dataTypes, checks resolver args, and dependencies\n for (const itemKey in this.configSchema) {\n const item = this.configSchema[itemKey];\n await item.process();\n }\n\n // check for cycles in resolver dependencies\n const cycles = findGraphCycles(this.graphAdjacencyList);\n for (const cycleItemKeys of cycles) {\n for (const itemKey of cycleItemKeys) {\n const item = this.configSchema[itemKey];\n item.schemaErrors.push(\n new SchemaError(\n cycleItemKeys.length === 1\n ? 'Item cannot have dependency on itself'\n : `Dependency cycle detected: (${cycleItemKeys.join(', ')})`,\n ),\n );\n }\n }\n }\n\n get graphAdjacencyList() {\n const adjList: GraphAdjacencyList = {};\n for (const itemKey in this.configSchema) {\n const item = this.configSchema[itemKey];\n adjList[itemKey] = item.valueResolver?.deps || [];\n }\n return adjList;\n }\n\n async resolveEnvValues(): Promise<void> {\n const adjList = this.graphAdjacencyList;\n const reverseAdjList: Record<string, Array<string>> = {};\n for (const itemKey in adjList) {\n const itemDeps = adjList[itemKey];\n for (const dep of itemDeps) {\n reverseAdjList[dep] ??= [];\n reverseAdjList[dep].push(itemKey);\n }\n }\n\n // obj tracking items left to resolve and if we've started resolving them\n // - true = in progress\n // - false = not yet started\n // - items are removed when completed\n const itemsToResolveStatus = _.mapValues(this.configSchema, () => false);\n\n // code is a bit awkward here because we are resolving items in parallel\n // and need to continue resolving dependent items as each finishes\n\n const deferred = new Promise<void>((resolve, _reject) => {\n const markItemCompleted = (itemKey: string) => {\n delete itemsToResolveStatus[itemKey];\n if (reverseAdjList[itemKey]) {\n // eslint-disable-next-line no-use-before-define\n reverseAdjList[itemKey].forEach(resolveItem);\n }\n if (_.keys(itemsToResolveStatus).length === 0) resolve();\n };\n\n const resolveItem = async (itemKey: string) => {\n // due to cycles and how we attempt items when each of their deps finishes\n // we may arrive hit this multiple times for an item, so we need to bail in some cases\n\n // true means items is already in progress, not present means it has been resolved\n if (itemsToResolveStatus[itemKey] !== false) return;\n\n const item = this.configSchema[itemKey];\n\n // if item is already invalid, we are done\n if (item.errors.length) {\n markItemCompleted(itemKey);\n return;\n }\n\n for (const depKey of adjList[itemKey]) {\n const depItem = this.configSchema[depKey];\n // if a dependency is invalid, we mark the item as invalid too\n if (depItem.validationState === 'error') {\n item.resolutionError = new ResolutionError(`Dependency ${depKey} is invalid`);\n markItemCompleted(itemKey);\n return;\n // if any dependency is not yet resolved, we need to wait for it\n } else if (depKey in itemsToResolveStatus) {\n return;\n }\n }\n\n // mark item as beginning to actually resolve\n itemsToResolveStatus[itemKey] = true; // true means in progress\n await item.resolve();\n markItemCompleted(itemKey);\n };\n\n for (const itemKey in this.configSchema) {\n resolveItem(itemKey);\n }\n });\n return deferred;\n }\n\n getResolvedEnvObject() {\n const envObject: Record<string, any> = {};\n for (const itemKey in this.configSchema) {\n const item = this.configSchema[itemKey];\n envObject[itemKey] = item.resolvedValue;\n }\n return envObject;\n }\n\n getSerializedGraph(): SerializedEnvGraph {\n const serializedGraph: SerializedEnvGraph = {\n basePath: this.basePath,\n sources: [],\n config: {},\n settings: {},\n };\n for (const source of this.sortedDataSources) {\n serializedGraph.sources.push({\n label: source.label,\n enabled: !source.disabled,\n path: source instanceof FileBasedDataSource ? path.relative(this.basePath ?? '', source.fullPath) : undefined,\n });\n }\n for (const itemKey in this.configSchema) {\n const item = this.configSchema[itemKey];\n serializedGraph.config[itemKey] = {\n value: item.resolvedValue,\n isSensitive: item.isSensitive,\n };\n }\n\n // expose a few root level settings\n serializedGraph.settings.redactLogs = this.getRootDecoratorValue('redactLogs') ?? true;\n serializedGraph.settings.preventLeaks = this.getRootDecoratorValue('preventLeaks') ?? true;\n\n return serializedGraph;\n }\n\n get isInvalid() {\n return _.some(_.values(this.configSchema), (i) => !i.isValid);\n }\n\n async generateTypes(lang: string, outputPath: string) {\n await generateTypes(this, lang, outputPath);\n }\n\n getRootDecoratorValue(decoratorName: string) {\n const dec = this.schemaDataSource?.decorators?.[decoratorName];\n return dec?.simplifiedValue;\n }\n}\n","import _ from '@env-spec/utils/my-dash';\nimport {\n ParsedEnvSpecDecorator, ParsedEnvSpecFunctionCall, ParsedEnvSpecStaticValue,\n} from '@env-spec/parser';\n\nimport { EnvGraphDataType } from './data-types';\nimport { EnvGraph } from './env-graph';\nimport {\n CoercionError, EmptyRequiredValueError, ResolutionError, SchemaError,\n ValidationError,\n} from './errors';\n\nimport { EnvGraphDataSource } from './data-source';\nimport { type ResolvedValue, type Resolver, StaticValueResolver } from './resolver';\n\nexport type ConfigItemDef = {\n description?: string;\n resolver?: Resolver;\n // TODO: translate parser decorator class into our own generic version\n decorators?: Record<string, ParsedEnvSpecDecorator>;\n};\nexport type ConfigItemDefAndSource = {\n itemDef: ConfigItemDef;\n source: EnvGraphDataSource;\n};\n\n\nexport class ConfigItem {\n // annoyingly we cannot use readonly if we want to support `erasableSyntaxOnly`\n #envGraph: EnvGraph;\n #key: string;\n\n constructor(\n _envGraph: EnvGraph,\n _key: string,\n ) {\n this.#envGraph = _envGraph;\n this.#key = _key;\n }\n\n get envGraph() { return this.#envGraph; }\n get key() { return this.#key; }\n\n defs: Array<ConfigItemDefAndSource> = [];\n addDef(itemDef: ConfigItemDef, source: EnvGraphDataSource) {\n this.defs.unshift({ itemDef, source });\n }\n\n get description() {\n for (const def of this.defs) {\n if (def.itemDef.description) return def.itemDef.description;\n }\n }\n get icon() {\n const explicitIcon = this.getDecoratorValueString('icon');\n if (explicitIcon) return explicitIcon;\n return this.dataType?.icon;\n }\n get docsLinks() {\n // matching { url, description } from OpenAPI\n const links: Array<{ url: string, description?: string }> = [];\n const docsUrl = this.getDecoratorValueString('docsUrl');\n if (docsUrl) links.push({ url: docsUrl });\n // TODO: add ability to have multiple links, set labels\n return links;\n }\n\n get valueResolver() {\n for (const def of this.defs) {\n if (def.itemDef.resolver) return def.itemDef.resolver;\n }\n }\n\n getDecorator(decoratorName: string) {\n for (const def of this.defs) {\n const defDecorators = def.itemDef.decorators || {};\n if (decoratorName in defDecorators) {\n return defDecorators[decoratorName];\n }\n }\n }\n getDecoratorValueRaw(decoratorName: string) {\n for (const def of this.defs) {\n const defDecorators = def.itemDef.decorators || {};\n if (decoratorName in defDecorators) {\n return defDecorators[decoratorName].value;\n }\n }\n }\n getDecoratorValueString(decoratorName: string) {\n const dec = this.getDecoratorValueRaw(decoratorName);\n if (dec instanceof ParsedEnvSpecStaticValue) return String(dec.value);\n }\n\n\n dataType?: EnvGraphDataType;\n schemaErrors: Array<SchemaError> = [];\n get resolverSchemaErrors() {\n return this.valueResolver?.schemaErrors || [];\n }\n\n async process() {\n // we add the final override def here so that if we process the item early (like when resolving our envFlag) it will be respected\n const finalOverrideDef = this.envGraph.finalOverridesDataSource?.configItemDefs[this.key];\n if (finalOverrideDef) {\n this.defs.unshift({ itemDef: finalOverrideDef, source: this.envGraph.finalOverridesDataSource! });\n }\n\n // process resolvers\n for (const def of this.defs) {\n await def.itemDef.resolver?.process(this);\n }\n\n const typeDecoratorValue = this.getDecoratorValueRaw('type');\n let dataTypeName: string | undefined;\n let dataTypeArgs: any;\n if (typeDecoratorValue instanceof ParsedEnvSpecStaticValue) {\n dataTypeName = typeDecoratorValue.value;\n } else if (typeDecoratorValue instanceof ParsedEnvSpecFunctionCall) {\n dataTypeName = typeDecoratorValue.name;\n dataTypeArgs = typeDecoratorValue.simplifiedArgs;\n }\n\n // if no type is set explicitly, we can try to use inferred type from the resolver\n // currently only static value resolver does this - but you can imagine another resolver knowing the type ahead of time\n // (maybe we only want to do this if the value is set in a schema file? or if all inferred types match?)\n if (!dataTypeName) {\n if (this.valueResolver?.inferredType) {\n dataTypeName = this.valueResolver.inferredType;\n }\n }\n\n dataTypeName ||= 'string';\n dataTypeArgs ||= [];\n\n if (!(dataTypeName in this.envGraph.dataTypesRegistry)) {\n this.schemaErrors.push(new SchemaError(`unknown data type: ${dataTypeName}`));\n } else {\n const dataTypeFactory = this.envGraph.dataTypesRegistry[dataTypeName];\n this.dataType = dataTypeFactory(..._.isPlainObject(dataTypeArgs) ? [dataTypeArgs] : dataTypeArgs);\n }\n }\n\n get isRequired() {\n for (const def of this.defs) {\n const defDecorators = def.itemDef.decorators || {};\n\n // Explicit per-item decorators\n if ('required' in defDecorators) {\n const val = defDecorators.required.simplifiedValue;\n if (typeof val === 'boolean') return val;\n if (typeof val === 'string') return val === 'true';\n return Boolean(val);\n }\n if ('optional' in defDecorators) {\n const val = defDecorators.optional.simplifiedValue;\n if (typeof val === 'boolean') return !val;\n if (typeof val === 'string') return val !== 'true';\n return !val;\n }\n\n // Root-level @defaultRequired\n if ('defaultRequired' in def.source.decorators) {\n const val = def.source.decorators.defaultRequired.simplifiedValue;\n if (val === 'infer') {\n // Only apply infer logic for schema source\n if (def.source.type === 'schema') {\n const resolver = def.itemDef.resolver;\n if (resolver instanceof StaticValueResolver) {\n return resolver.staticValue !== undefined && resolver.staticValue !== '';\n } else {\n return true; // function value\n }\n } else {\n // Not schema source, skip this def and continue\n continue;\n }\n }\n return val; // explicit true or false\n }\n }\n // defaults to true\n return true;\n }\n\n get isSensitive() {\n for (const def of this.defs) {\n const defDecorators = def.itemDef.decorators || {};\n if ('sensitive' in defDecorators) {\n return defDecorators.sensitive.simplifiedValue;\n // TODO: do we want an opposite decorator similar to @required/@optional -- maybe @public?\n } else if ('defaultSensitive' in def.source.decorators) {\n const dec = def.source.decorators.defaultSensitive;\n // Handle function call: inferFromPrefix(PREFIX)\n if (dec.value instanceof ParsedEnvSpecFunctionCall && dec.value.name === 'inferFromPrefix') {\n const args = dec.value.simplifiedArgs;\n // Accepts a single string prefix as first arg\n const prefix = Array.isArray(args) && args.length > 0 ? args[0] : undefined;\n if (typeof prefix === 'string' && this.key.startsWith(prefix)) {\n return false; // Not sensitive if matches prefix\n }\n return true; // Sensitive otherwise\n }\n // Fallback to static/boolean value\n return dec.simplifiedValue;\n }\n }\n return true;\n }\n\n\n get errors() {\n return _.compact([\n ...this.schemaErrors || [],\n ...this.resolverSchemaErrors || [],\n this.resolutionError,\n this.coercionError,\n ...this.validationErrors || [],\n ]);\n }\n\n get validationState(): 'warn' | 'error' | 'valid' {\n const errors = this.errors;\n if (!errors.length) return 'valid';\n return _.some(errors, (e) => !e.isWarning) ? 'error' : 'warn';\n }\n\n /** resolved value _before coercion_ */\n resolvedRawValue?: ResolvedValue;\n isResolved = false;\n /** resolved value after coercion */\n resolvedValue?: ResolvedValue;\n isValidated = false;\n\n resolutionError?: ResolutionError;\n coercionError?: CoercionError;\n validationErrors?: Array<ValidationError>;\n\n get isCoerced() {\n return this.resolvedRawValue !== this.resolvedValue;\n }\n\n async resolve() {\n // bail early if we have a schema error\n if (this.schemaErrors.length) return;\n if (this.resolverSchemaErrors.length) return;\n\n // we should always have a resolver set, even if its a static resolver with undefined value\n if (!this.valueResolver) throw new Error('Expected a resolver to be set');\n\n if (this.isResolved) {\n // previously we would throw an error, now we resolve the envFlag early, so we can just return\n // but we may want further checks, as this could help us identify buggy logic calling resolve multiple times\n return;\n }\n\n try {\n this.resolvedRawValue = await this.valueResolver.resolve();\n } catch (err) {\n this.resolutionError = new ResolutionError(`error resolving value: ${err}`);\n this.resolutionError.cause = err;\n }\n\n if (this.resolvedRawValue instanceof RegExp) {\n this.resolutionError = new ResolutionError('regex() is meant to be used within function args, not as a final resolved value');\n }\n\n // bail if we have an resolution error\n if (this.resolutionError) return;\n\n this.isResolved = true;\n\n\n // first deal with empty values and checking required\n if (this.resolvedRawValue === undefined || this.resolvedRawValue === '') {\n // we preserve undefined vs empty string - might want to change this?\n this.resolvedValue = this.resolvedRawValue;\n if (this.isRequired) {\n this.validationErrors = [new EmptyRequiredValueError(undefined)];\n }\n return;\n }\n\n if (!this.dataType) throw new Error('expected dataType to be set');\n\n // COERCE VALUE - often will do nothing, but gives us a chance to convert strings to numbers, etc\n try {\n const coerceResult = this.dataType.coerce(this.resolvedRawValue);\n if (coerceResult instanceof Error) throw coerceResult;\n this.resolvedValue = coerceResult;\n } catch (err) {\n if (err instanceof CoercionError) {\n this.coercionError = err;\n return;\n } else if (err instanceof Error) {\n this.coercionError = new CoercionError('Unexpected error coercing value');\n this.coercionError.cause = err;\n } else {\n this.coercionError = new CoercionError(`Unexpected non-error throw during coerce - ${err}`);\n }\n return;\n }\n\n // VALIDATE\n try {\n const validateResult = this.dataType.validate(this.resolvedValue);\n if (\n validateResult instanceof Error\n || (_.isArray(validateResult) && validateResult[0] instanceof Error)\n ) throw validateResult;\n // validation result is supposed to be `true` or error(s), but we'll check for `false` just in case\n if ((validateResult as any) === false) {\n throw new ValidationError('validation failed with `false` return value');\n }\n this.isValidated = true;\n } catch (err) {\n if (_.isArray(err)) {\n // could do more checking...\n this.validationErrors = err as Array<ValidationError>;\n } else if (err instanceof ValidationError) {\n this.validationErrors = [err];\n } else if (err instanceof Error) {\n const validationError = new ValidationError('Unexpected error during validation');\n validationError.cause = err;\n this.validationErrors = [validationError];\n } else {\n const validationError = new ValidationError(`Unexpected non-error thrown during validation - ${err}`);\n validationError.cause = err;\n this.validationErrors = [validationError];\n }\n return;\n }\n }\n\n get isValid() {\n return this.validationState === 'valid';\n }\n}\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nimport _ from '@env-spec/utils/my-dash';\nimport { tryCatch } from '@env-spec/utils/try-catch';\nimport { checkIsFileGitIgnored } from '@env-spec/utils/git-utils';\nimport {\n ParsedEnvSpecDecorator, ParsedEnvSpecFile, ParsedEnvSpecFunctionCall,\n ParsedEnvSpecKeyValuePair, ParsedEnvSpecStaticValue, parseEnvSpecDotEnvFile,\n} from '@env-spec/parser';\n\nimport { type ConfigItemDef } from './config-item';\nimport {\n ErrorResolver, Resolver, StaticValueResolver,\n} from './resolver';\nimport { EnvGraph } from './env-graph';\n\nimport { SchemaError } from './errors';\n\nconst DATA_SOURCE_TYPES = Object.freeze({\n schema: {\n fileSuffixes: ['schema'],\n precedence: 0,\n },\n example: {\n fileSuffixes: ['sample', 'example'],\n precedence: 1,\n },\n defaults: {\n fileSuffixes: ['default', 'defaults'],\n precedence: 2,\n },\n values: {\n fileSuffixes: [] as Array<string>,\n precedence: 3,\n },\n overrides: {\n fileSuffixes: ['local', 'override'],\n precedence: 4,\n },\n});\ntype DataSourceType = keyof typeof DATA_SOURCE_TYPES;\n\nexport abstract class EnvGraphDataSource {\n static DATA_SOURCE_TYPES = DATA_SOURCE_TYPES;\n\n // reference back to the graph\n graph?: EnvGraph;\n\n abstract typeLabel: string;\n\n type = 'values' as DataSourceType;\n applyForEnv?: string;\n disabled?: boolean = false;\n ignoreNewDefs = false;\n abstract get label(): string;\n\n /** an error encountered while loading/parsing the data source */\n loadingError?: Error;\n\n get isValid() {\n return !this.loadingError;\n }\n\n configItemDefs: Record<string, ConfigItemDef> = {};\n decorators: Record<string, ParsedEnvSpecDecorator> = {};\n\n getStaticValues() {\n const obj: Record<string, string> = {};\n for (const [key, def] of Object.entries(this.configItemDefs)) {\n if (def.resolver instanceof StaticValueResolver) {\n obj[key] = String(def.resolver.staticValue ?? '');\n }\n }\n return obj;\n }\n}\n\n\n\nexport class ProcessEnvDataSource extends EnvGraphDataSource {\n type = 'overrides' as const;\n typeLabel = 'process';\n label = 'process.env';\n ignoreNewDefs = true;\n\n static processEnvValues: Record<string, string | undefined> | undefined;\n\n // ? do we want to set decorator values from env vars here? -- ex: _ENV_FLAG_KEY\n // depends if we want those to work only within process.env\n\n constructor() {\n super();\n\n // we want to make sure we only load the original process.env values once\n // so that if we are reloading, we'll skip any new values we have added in a previous load\n if (!ProcessEnvDataSource.processEnvValues) {\n ProcessEnvDataSource.processEnvValues = {};\n for (const itemKey of Object.keys(process.env)) {\n ProcessEnvDataSource.processEnvValues[itemKey] = process.env[itemKey];\n }\n }\n\n for (const itemKey of Object.keys(ProcessEnvDataSource.processEnvValues)) {\n this.configItemDefs[itemKey] = {\n resolver: new StaticValueResolver(ProcessEnvDataSource.processEnvValues[itemKey]),\n };\n }\n }\n}\n\n\nexport class EnvSourceParseError extends Error {\n location: {\n path: string,\n lineNumber: number,\n colNumber: number,\n lineStr: string,\n };\n\n constructor(\n message: string,\n _location: EnvSourceParseError['location'],\n ) {\n super(message);\n this.location = _location;\n }\n}\n\nexport abstract class FileBasedDataSource extends EnvGraphDataSource {\n isGitIgnored?: boolean;\n fullPath: string;\n fileName: string;\n rawContents?: string;\n\n get typeLabel() {\n return (this.constructor as typeof FileBasedDataSource).format;\n }\n\n get label() { return this.fileName; }\n\n static format = 'unknown'; // no abstract static\n\n static validFileExtensions: Array<string> = [];\n get validFileExtensions() {\n return (this.constructor as typeof FileBasedDataSource).validFileExtensions;\n }\n\n constructor(fullPath: string, opts?: {\n overrideContents?: string;\n overrideGitIgnored?: boolean;\n }) {\n super();\n\n this.fullPath = fullPath;\n this.fileName = path.basename(fullPath);\n\n // easy way to allow tests to override contents or other non-standard ways of loading content\n if (opts?.overrideContents) {\n this.rawContents = opts.overrideContents;\n this.isGitIgnored = opts.overrideGitIgnored;\n }\n\n // we will infer some properties from the file name\n // so we may want to provide a way to opt out of this to set them manually\n if (!this.fileName.startsWith('.env')) {\n throw new Error('file name must start with \".env\"');\n }\n\n\n // we'll break up the filename into parts to detect some info\n // note that a file can have several parts - for example `.env.production.local`\n const fileNameParts = this.fileName.substring(1).split('.');\n const maybeExtension = fileNameParts[fileNameParts.length - 1];\n if (this.validFileExtensions.includes(maybeExtension)) {\n fileNameParts.pop(); // remove the extension\n }\n\n const maybeFileType = fileNameParts[fileNameParts.length - 1];\n for (const [possibleSourceType, possibleSourceSpec] of Object.entries(DATA_SOURCE_TYPES)) {\n if (possibleSourceSpec.fileSuffixes.includes(maybeFileType)) {\n this.type = possibleSourceType as DataSourceType;\n break;\n }\n }\n // default is already set to 'values', so we pop the last part if sometihng different\n if (this.type !== 'values') fileNameParts.pop(); // remove the type suffix\n\n // check for a specific env (ex: .env[.production])\n // ? do we want to disallow env qualifier for certain file types?\n // ? ex: .env.production.defaults\n if (fileNameParts.length > 2) {\n throw Error(`Unsure how to interpret filename - ${this.fileName}`);\n } else if (fileNameParts.length === 2) {\n this.applyForEnv = fileNameParts[1];\n\n // some tools use shorthands of dev/stage/prod\n // so we standardize those to normal env values just in case?\n // ? not sure about this - might want to leave it as the user wrote it?\n if (this.applyForEnv === 'dev') this.applyForEnv = 'development';\n if (this.applyForEnv === 'stage') this.applyForEnv = 'staging';\n if (this.applyForEnv === 'prod') this.applyForEnv = 'production';\n }\n }\n\n // no async constructors... :(\n async finishInit() {\n if (!this.rawContents) {\n // TODO: check perf on exec based check, possibly switch to `ignored` package\n this.isGitIgnored = await checkIsFileGitIgnored(this.fullPath);\n this.rawContents = await fs.readFile(this.fullPath, 'utf8');\n }\n await this._parseContents();\n }\n abstract _parseContents(): Promise<void>;\n}\n\nexport class DotEnvFileDataSource extends FileBasedDataSource {\n static format = '.env';\n static validFileExtensions = []; // no extension for dotenv files!\n\n parsedFile?: ParsedEnvSpecFile;\n\n private convertParserValueToResolvers(\n value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | undefined,\n ): Resolver {\n if (!this.graph) throw new Error('expected graph to be set');\n\n if (value === undefined) {\n return new StaticValueResolver(undefined);\n } else if (value instanceof ParsedEnvSpecStaticValue) {\n return new StaticValueResolver(value.unescapedValue);\n } else if (value instanceof ParsedEnvSpecFunctionCall) {\n // TODO: fix ts any\n const ResolverFnClass = this.graph.registeredResolverFunctions[value.name] as any;\n if (!ResolverFnClass) {\n return new ErrorResolver(new SchemaError(`Unknown resolver function: ${value.name}()`));\n }\n const argsFromParser = value.data.args.values;\n let keyValueArgs: Record<string, Resolver> | undefined;\n const argsAsResolversArray: Array<Resolver | Record<string, Resolver>> = [];\n for (const arg of argsFromParser) {\n if (arg instanceof ParsedEnvSpecKeyValuePair) {\n keyValueArgs ??= {};\n keyValueArgs[arg.key] = this.convertParserValueToResolvers(arg.value);\n } else {\n if (keyValueArgs) {\n return new ErrorResolver(new SchemaError('After switching to key-value function args, cannot switch back'));\n }\n argsAsResolversArray.push(this.convertParserValueToResolvers(arg));\n }\n }\n // add key/value args as object as last arg into array\n if (keyValueArgs) argsAsResolversArray.push(keyValueArgs);\n return new ResolverFnClass(argsAsResolversArray);\n } else {\n throw new Error('Unknown value type');\n }\n }\n\n async _parseContents() {\n const rawContents = this.rawContents!;\n\n this.parsedFile = await tryCatch(\n () => parseEnvSpecDotEnvFile(rawContents),\n (error) => {\n this.loadingError = new EnvSourceParseError(error.message, {\n path: this.fullPath,\n lineNumber: error.location.start.line,\n colNumber: error.location.start.column,\n lineStr: rawContents.split('\\n')[error.location.start.line - 1],\n });\n this.loadingError.cause = error;\n },\n );\n\n if (this.loadingError) return;\n if (!this.parsedFile) throw new Error('Failed to parse .env file');\n\n // copying the object just in case\n this.decorators = this.parsedFile.decoratorsObject;\n\n if (!this.graph) throw new Error('expected graph to be set');\n\n // TODO: if the file is a .env.example file, we should interpret the values as examples\n for (const item of this.parsedFile.configItems) {\n // triggers $ expansion (eg: \"${VAR}\" => `ref(VAR)`)\n item.processExpansion();\n\n this.configItemDefs[item.key] = {\n resolver: this.convertParserValueToResolvers(item.expandedValue!),\n description: item.description,\n decorators: item.decoratorsObject,\n };\n }\n }\n}\n","import path from 'node:path';\nimport fs from 'node:fs/promises';\n\n// our tool may generate some additional files which we want to ignore\nconst SKIP_FILE_TYPES = ['.md', '.d.ts'];\n\nexport async function findEnvFiles(opts?: {\n cwd?: string,\n}) {\n const cwd = opts?.cwd || process.cwd();\n\n const envFiles = [];\n\n const filesWithinDir = await fs.readdir(cwd);\n\n // Filter for files starting with .env and check if they exist\n for (const fileName of filesWithinDir) {\n if (fileName === '.env' || fileName.startsWith('.env.')) { // this ignores `.envrc` files\n let skip = false;\n for (const fileType of SKIP_FILE_TYPES) {\n if (fileName.endsWith(fileType)) skip = true;\n }\n if (skip) continue;\n envFiles.push(path.join(cwd, fileName));\n }\n }\n\n // TODO: we may want to look up or down the folder tree?\n // TODO: we could support looking within specific directories (\"config\", \"env\", etc)\n\n return envFiles;\n}\n","import _ from '@env-spec/utils/my-dash';\nimport { EnvGraph } from './env-graph';\nimport { DotEnvFileDataSource, ProcessEnvDataSource } from './data-source';\nimport { findEnvFiles } from '@env-spec/utils/find-env-files';\n\nfunction autoDetectBasePath() {\n const PWD = process.env.PWD;\n if (!PWD) {\n throw new Error('PWD is not set');\n }\n return PWD;\n}\n\n\nexport async function loadEnvGraph(opts?: {\n basePath?: string,\n relativePaths?: Array<string>,\n checkGitIgnored?: boolean,\n excludeDirs?: Array<string>,\n currentEnvFallback?: string,\n afterInit?: (graph: EnvGraph) => Promise<void>,\n}) {\n const graph = new EnvGraph();\n graph.basePath = opts?.basePath ?? autoDetectBasePath();\n\n if (opts?.afterInit) {\n await opts.afterInit(graph);\n }\n\n if (opts?.currentEnvFallback) {\n graph.envFlagValue = opts.currentEnvFallback;\n }\n\n const envFilePaths = await findEnvFiles({\n cwd: graph.basePath,\n });\n\n for (const envFilePath of envFilePaths) {\n const fileDataSource = new DotEnvFileDataSource(envFilePath);\n // must call before finishInit so the dataSource has a reference to the graph\n graph.addDataSource(fileDataSource);\n await fileDataSource.finishInit();\n }\n // proocss.env overrides get some special treatment\n graph.finalOverridesDataSource = new ProcessEnvDataSource();\n\n await graph.finishLoad();\n\n return graph;\n}\n\n","import ansis, { type AnsiColors, type AnsiStyles } from 'ansis';\nimport _ from '@env-spec/utils/my-dash';\n\nimport { ConfigItem, VarlockError } from '../../env-graph';\nimport { redactString } from '../runtime/lib/redaction';\n\ntype ColorMod = AnsiStyles | AnsiColors;\ntype ColorMods = ColorMod | Array<ColorMod>;\n\nfunction applyMods(str: string, mods?: ColorMods) {\n if (!mods) return str;\n if (_.isArray(mods)) {\n let modStr = str;\n mods.forEach((mod) => {\n modStr = ansis[mod](modStr);\n });\n return modStr;\n }\n return ansis[mods](str);\n}\n\nexport function formattedValue(val: any, showType = false) {\n let strVal: string = '';\n let strType: string = '';\n let mods: ColorMods | undefined;\n if (_.isBoolean(val)) {\n strVal = val.toString();\n mods = ['yellow', 'italic'];\n strType = 'boolean';\n } else if (_.isNumber(val)) {\n strVal = val.toString();\n mods = 'yellow';\n strType = 'number';\n } else if (_.isString(val)) {\n strVal = `\"${val}\"`;\n strType = 'string';\n } else if (_.isPlainObject(val)) {\n // TODO: can definitely make this better...\n strVal = JSON.stringify(val);\n strType = 'object';\n } else if (val === null) {\n strVal = 'null';\n mods = 'gray';\n } else if (val === undefined) {\n strVal = 'undefined';\n mods = 'gray';\n }\n return [\n applyMods(strVal, mods),\n showType && strType ? ansis.gray(` (${strType})`) : '',\n ].join('');\n}\n\n\nexport function formatError(err: VarlockError) {\n let whenStr = '';\n if (err.type === 'SchemaError') {\n whenStr += 'during schema initialization';\n }\n if (err.type === 'ValidationError') {\n whenStr += 'during validation';\n }\n if (err.type === 'CoercionError') {\n whenStr += 'during coercion';\n }\n if (err.type === 'ResolutionError') {\n whenStr += 'during resolution';\n }\n\n let errStr = `${err.icon} ${err.message}`;\n if (err.isUnexpected) {\n errStr += ansis.gray.italic(`\\n (unexpected error${whenStr ? ` ${whenStr}` : ''})`);\n if ('stack' in err) errStr += err.stack;\n }\n return errStr;\n}\n\nexport function joinAndCompact(strings: Array<string | number | boolean | undefined | null | false>, joinChar = ' ') {\n return strings.filter((s) => (\n // we'll not filter out empty strings - because it's useful to just add newlines\n s !== undefined && s !== null && s !== false\n )).join(joinChar);\n}\n\nconst VALIDATION_STATE_COLORS = {\n error: 'red',\n warn: 'yellow',\n valid: 'cyan',\n} as const;\n\nexport function getItemSummary(item: ConfigItem) {\n const summary: Array<string> = [];\n const itemErrors = item.errors;\n const icon = itemErrors.length ? itemErrors[0].icon : '✅';\n const isSensitive = item.isSensitive;\n const isRequired = item.isRequired;\n summary.push(joinAndCompact([\n icon,\n ansis[VALIDATION_STATE_COLORS[item.validationState]](item.key) + (isRequired ? ansis.magenta('*') : ''),\n\n // ansis.gray(`[type = ${item.type.typeLabel}]`),\n isSensitive && ` 🔐${ansis.gray.italic('sensitive')}`,\n\n // item.useAt ? ansis.gray.italic(`(${item.useAt?.join(', ')})`) : undefined,\n ]));\n\n let valAsStr = formattedValue(item.resolvedValue, false);\n if (isSensitive && item.resolvedValue && _.isString(item.resolvedValue)) {\n valAsStr = redactString(item.resolvedValue)!;\n }\n\n summary.push(joinAndCompact([\n ansis.gray(' └'),\n valAsStr,\n item.isCoerced && (\n ansis.gray.italic('< coerced from ')\n + (isSensitive ? formattedValue(item.resolvedRawValue) : formattedValue(item.resolvedRawValue, false))\n ),\n ]));\n\n // if (item.overrides?.length) {\n // const activeOverride = item.overrides[0];\n // let overrideNote = ansis.gray.italic('value set via override: ');\n // overrideNote += ansis.gray(activeOverride.sourceType);\n // if (activeOverride.sourceLabel) overrideNote += ansis.gray(` - ${activeOverride.sourceLabel}`);\n // summary.push(` ${overrideNote}`);\n // }\n\n itemErrors?.forEach((err) => {\n summary.push(ansis[err.isWarning ? 'yellow' : 'red'](` - ${err.isWarning ? '[WARNING] ' : ''}${err.message}`));\n\n // TODO: standardize here how we show parse error locations and stack info?\n\n // summary.push(...err.cleanedStack || '');\n if (err.tip) {\n summary.push(...err.tip.split('\\n').map((line) => ` ${line}`));\n }\n });\n\n // NO OBJECT/CHILDREN FOR NOW\n // for (const childItem of _.values(item.children)) {\n // const childSummary = getItemSummary(childItem);\n // summary.push(childSummary.split('\\n').map((l) => ` ${l}`).join('\\n'));\n // }\n\n return summary.join('\\n');\n}\n","import process from 'node:process';\n\nconst asyncCallbacks = new Set();\nconst callbacks = new Set();\n\nlet isCalled = false;\nlet isRegistered = false;\n\nasync function exit(shouldManuallyExit, isSynchronous, signal) {\n\tif (isCalled) {\n\t\treturn;\n\t}\n\n\tisCalled = true;\n\n\tif (asyncCallbacks.size > 0 && isSynchronous) {\n\t\tconsole.error([\n\t\t\t'SYNCHRONOUS TERMINATION NOTICE:',\n\t\t\t'When explicitly exiting the process via process.exit or via a parent process,',\n\t\t\t'asynchronous tasks in your exitHooks will not run. Either remove these tasks,',\n\t\t\t'use gracefulExit() instead of process.exit(), or ensure your parent process',\n\t\t\t'sends a SIGINT to the process running this code.',\n\t\t].join(' '));\n\t}\n\n\tconst exitCode = 128 + signal;\n\n\tconst done = (force = false) => {\n\t\tif (force === true || shouldManuallyExit === true) {\n\t\t\tprocess.exit(exitCode); // eslint-disable-line unicorn/no-process-exit\n\t\t}\n\t};\n\n\tfor (const callback of callbacks) {\n\t\tcallback(exitCode);\n\t}\n\n\tif (isSynchronous) {\n\t\tdone();\n\t\treturn;\n\t}\n\n\tconst promises = [];\n\tlet forceAfter = 0;\n\tfor (const [callback, wait] of asyncCallbacks) {\n\t\tforceAfter = Math.max(forceAfter, wait);\n\t\tpromises.push(Promise.resolve(callback(exitCode)));\n\t}\n\n\t// Force exit if we exceeded our wait value\n\tconst asyncTimer = setTimeout(() => {\n\t\tdone(true);\n\t}, forceAfter);\n\n\tawait Promise.all(promises);\n\tclearTimeout(asyncTimer);\n\tdone();\n}\n\nfunction addHook(options) {\n\tconst {onExit, wait, isSynchronous} = options;\n\tconst asyncCallbackConfig = [onExit, wait];\n\n\tif (isSynchronous) {\n\t\tcallbacks.add(onExit);\n\t} else {\n\t\tasyncCallbacks.add(asyncCallbackConfig);\n\t}\n\n\tif (!isRegistered) {\n\t\tisRegistered = true;\n\n\t\t// Exit cases that support asynchronous handling\n\t\tprocess.once('beforeExit', exit.bind(undefined, true, false, -128));\n\t\tprocess.once('SIGINT', exit.bind(undefined, true, false, 2));\n\t\tprocess.once('SIGTERM', exit.bind(undefined, true, false, 15));\n\n\t\t// Explicit exit events. Calling will force an immediate exit and run all\n\t\t// synchronous hooks. Explicit exits must not extend the node process\n\t\t// artificially. Will log errors if asynchronous calls exist.\n\t\tprocess.once('exit', exit.bind(undefined, false, true, 0));\n\n\t\t// PM2 Cluster shutdown message. Caught to support async handlers with pm2,\n\t\t// needed because explicitly calling process.exit() doesn't trigger the\n\t\t// beforeExit event, and the exit event cannot support async handlers,\n\t\t// since the event loop is never called after it.\n\t\tprocess.on('message', message => {\n\t\t\tif (message === 'shutdown') {\n\t\t\t\texit(true, true, -128);\n\t\t\t}\n\t\t});\n\t}\n\n\treturn () => {\n\t\tif (isSynchronous) {\n\t\t\tcallbacks.delete(onExit);\n\t\t} else {\n\t\t\tasyncCallbacks.delete(asyncCallbackConfig);\n\t\t}\n\t};\n}\n\nexport default function exitHook(onExit) {\n\tif (typeof onExit !== 'function') {\n\t\tthrow new TypeError('onExit must be a function');\n\t}\n\n\treturn addHook({\n\t\tonExit,\n\t\tisSynchronous: true,\n\t});\n}\n\nexport function asyncExitHook(onExit, options = {}) {\n\tif (typeof onExit !== 'function') {\n\t\tthrow new TypeError('onExit must be a function');\n\t}\n\n\tif (!(typeof options.wait === 'number' && options.wait > 0)) {\n\t\tthrow new TypeError('wait must be set to a positive numeric value');\n\t}\n\n\treturn addHook({\n\t\tonExit,\n\t\twait: options.wait,\n\t\tisSynchronous: false,\n\t});\n}\n\nexport function gracefulExit(signal = 0) {\n\texit(true, false, -128 + signal);\n}\n"]}
|