varlock 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/auto-load.js +5 -5
  2. package/dist/{chunk-2SPIWTVE.js → chunk-2JGPOSVQ.js} +2 -2
  3. package/dist/chunk-2JGPOSVQ.js.map +1 -0
  4. package/dist/{chunk-LIIRL4NK.js → chunk-2VZORH2Y.js} +4 -4
  5. package/dist/{chunk-LIIRL4NK.js.map → chunk-2VZORH2Y.js.map} +1 -1
  6. package/dist/{chunk-NMJ5YL5I.js → chunk-5NNVZXCM.js} +6 -6
  7. package/dist/{chunk-NMJ5YL5I.js.map → chunk-5NNVZXCM.js.map} +1 -1
  8. package/dist/{chunk-OM3JCP4E.js → chunk-7FI2PPMC.js} +3 -3
  9. package/dist/{chunk-OM3JCP4E.js.map → chunk-7FI2PPMC.js.map} +1 -1
  10. package/dist/{chunk-MLIGQWID.js → chunk-7UWLKQXP.js} +13 -21
  11. package/dist/chunk-7UWLKQXP.js.map +1 -0
  12. package/dist/{chunk-GY623P3W.js → chunk-D7YI7IQX.js} +4 -4
  13. package/dist/{chunk-GY623P3W.js.map → chunk-D7YI7IQX.js.map} +1 -1
  14. package/dist/{chunk-NGDIT6C3.js → chunk-H3R4W3XK.js} +3 -3
  15. package/dist/chunk-H3R4W3XK.js.map +1 -0
  16. package/dist/{chunk-DTNPJJH4.js → chunk-IBAUYNXV.js} +3 -3
  17. package/dist/{chunk-DTNPJJH4.js.map → chunk-IBAUYNXV.js.map} +1 -1
  18. package/dist/{chunk-7L3IF2MK.js → chunk-R66KFGSX.js} +4 -4
  19. package/dist/chunk-R66KFGSX.js.map +1 -0
  20. package/dist/{chunk-C5BEZMSO.js → chunk-RWBSXJV6.js} +3 -3
  21. package/dist/{chunk-C5BEZMSO.js.map → chunk-RWBSXJV6.js.map} +1 -1
  22. package/dist/{chunk-MITVWKKH.js → chunk-VYAOZFZB.js} +4 -4
  23. package/dist/{chunk-MITVWKKH.js.map → chunk-VYAOZFZB.js.map} +1 -1
  24. package/dist/{chunk-7JMYT62X.js → chunk-WDC67GVB.js} +3 -3
  25. package/dist/{chunk-7JMYT62X.js.map → chunk-WDC67GVB.js.map} +1 -1
  26. package/dist/cli/cli-executable.js +124 -58
  27. package/dist/cli/cli-executable.js.map +1 -1
  28. package/dist/dotenv-compat.js +5 -5
  29. package/dist/index.js +7 -7
  30. package/dist/index.js.map +1 -1
  31. package/dist/init.command-A52ZWKL2.js +8 -0
  32. package/dist/{init.command-ASK74XBV.js.map → init.command-A52ZWKL2.js.map} +1 -1
  33. package/dist/load.command-C75DTSKP.js +8 -0
  34. package/dist/{load.command-VUKBSBEV.js.map → load.command-C75DTSKP.js.map} +1 -1
  35. package/dist/run.command-YSQDB4GE.js +8 -0
  36. package/dist/{run.command-XQ64Z2TN.js.map → run.command-YSQDB4GE.js.map} +1 -1
  37. package/dist/runtime/env.js +1 -1
  38. package/dist/runtime/patch-console.js +2 -2
  39. package/dist/runtime/patch-response.js +2 -2
  40. package/dist/runtime/patch-server-response.js +2 -2
  41. package/dist/telemetry.command-JIHKG3ZH.js +8 -0
  42. package/dist/{telemetry.command-HHZVBFC7.js.map → telemetry.command-JIHKG3ZH.js.map} +1 -1
  43. package/package.json +2 -1
  44. package/dist/chunk-2SPIWTVE.js.map +0 -1
  45. package/dist/chunk-7L3IF2MK.js.map +0 -1
  46. package/dist/chunk-MLIGQWID.js.map +0 -1
  47. package/dist/chunk-NGDIT6C3.js.map +0 -1
  48. package/dist/init.command-ASK74XBV.js +0 -8
  49. package/dist/load.command-VUKBSBEV.js +0 -8
  50. package/dist/run.command-XQ64Z2TN.js +0 -8
  51. package/dist/telemetry.command-HHZVBFC7.js +0 -8
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/ansis@4.2.0/node_modules/ansis/index.cjs","../../../node_modules/.pnpm/ansis@4.2.0/node_modules/ansis/index.mjs","../../../node_modules/.pnpm/exit-hook@4.0.0/node_modules/exit-hook/index.js","../../../node_modules/.pnpm/@sindresorhus+is@7.1.1/node_modules/@sindresorhus/is/distribution/utilities.js","../../../node_modules/.pnpm/@sindresorhus+is@7.1.1/node_modules/@sindresorhus/is/distribution/index.js","../../utils/src/my-dash.ts","../src/env-graph/lib/errors.ts","../../utils/src/try-catch.ts","../../utils/src/exec-helpers.ts","../../utils/src/git-utils.ts","../../utils/src/fs-utils.ts","../src/env-graph/lib/data-types.ts","../src/env-graph/lib/simple-queue.ts","../src/env-graph/lib/decorators.ts","../src/env-graph/lib/resolver.ts","../src/env-graph/lib/graph-utils.ts","../src/env-graph/lib/type-generation.ts","../src/env-graph/lib/error-location.ts","../src/env-graph/lib/env-graph.ts","../src/env-graph/lib/config-item.ts","../src/env-graph/lib/plugins.ts","../src/env-graph/lib/data-source.ts","../src/env-graph/lib/loader.ts","../src/lib/formatting.ts"],"names":["a","e","t","r","l","n","o","i","c","p","u","s","_","w","process","isPromise","path","promisify","exec","ParsedEnvSpecFunctionCall","EnvGraph","ParsedEnvSpecStaticValue","reset","fs","execCb","fsSync","EnvGraphDataSource","source"],"mappings":"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","file":"chunk-7UWLKQXP.js","sourcesContent":["let e,t,r,{defineProperty:l,setPrototypeOf:n,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,l=parseInt(6^r?3^r?\"0\":t[0]+t[0]+t[1]+t[1]+t[2]+t[2]:t,16);return[l>>16&255,l>>8&255,255&l]},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,l,n,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,l=o%6/5):t=r=l=(10*(e-232)+8)/255,n=2*a(t,r,l),n?30+(c(l)<<2|c(r)<<1|c(t))+(2^n?0:60):30)},f=(()=>{let r=e=>o.some((t=>e.test(t))),l=globalThis,n=l.process??{},o=n.argv??[],i=n.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,l,n)=>(t=r.TERM,{\"24bit\":3,truecolor:3,ansi256:2,ansi:1}[r.COLORTERM]||(r.CI?/,GITHUB/.test(e)?3:1:l&&\"dumb\"!==t?n?3:/-256/.test(t)?2:1:0)))(i,!!i.PM2_HOME||i.NEXT_RUNTIME?.includes(\"edge\")||!!n.stdout?.isTTY,\"win32\"===n.platform)),!p||i.NO_COLOR||r(/^--(no-color|color=(false|never))$/)?0:l.window?.chrome||u&&!c?3:c})(),g={open:i,close:i},h=39,b=49,O={},m=({p:e},{open:t,close:l})=>{let o=(e,...r)=>{if(!e){if(t&&t===l)return t;if((e??i)===i)return i}let n,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,l=i,o=0;if(r)for(;~(n=s.indexOf(t,o));o=n+r)l+=s.slice(o,n)+e;s=l+s.slice(o)}return a+(s.includes(\"\\n\")?s.replace(/(\\r?\\n)/g,p+\"$1\"+a):s)+p},s=t,c=l;return e&&(s=e.o+t,c=l+e.c),n(o,r),o.p={open:t,close:l,o:s,c,p:e},o.open=s,o.close=c,o};const w=new function e(t=f){let s={Ansis:e,level:t,isSupported:()=>a,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];\"s\"===l?(c(t,T(...p(r))),c(_(t),v(...p(r)))):c(t,r,\"f\"===l)}return r=o({},O),n(s,r),s}},c=(e,t,r)=>{O[e]={get(){let n=r?(...e)=>m(this,t(...e)):m(this,t);return l(this,e,{value:n}),n}}},a=t>0,w=(e,t)=>a?{open:`\u001b[${e}m`,close:`\u001b[${t}m`}:g,y=e=>t=>e(...p(t)),R=(e,t)=>(r,l,n)=>w(`${e}8;2;${r};${l};${n}`,t),$=(e,t)=>(r,l,n)=>w(((e,t,r)=>d(u(e,t,r)))(r,l,n)+e,t),x=e=>(t,r,l)=>e(u(t,r,l)),T=R(3,h),v=R(4,b),C=e=>w(\"38;5;\"+e,h),E=e=>w(\"48;5;\"+e,b);2===t?(T=x(C),v=x(E)):1===t&&(T=$(0,h),v=$(10,b),C=e=>w(d(e),h),E=e=>w(d(e)+10,b));let M,I={fg:C,bg:E,rgb:T,bgRgb:v,hex:y(T),bgHex:y(v),visible:g,reset:w(0,0),bold:w(1,22),dim:w(2,22),italic:w(3,23),underline:w(4,24),inverse:w(7,27),hidden:w(8,28),strikethrough:w(9,29)},_=e=>\"bg\"+e[0].toUpperCase()+e.slice(1),k=\"Bright\";return\"black,red,green,yellow,blue,magenta,cyan,white,gray\".split(\",\").map(((e,t)=>{M=_(e),8>t?(I[e+k]=w(90+t,h),I[M+k]=w(100+t,b)):t=60,I[e]=w(30+t,h),I[M]=w(40+t,b)})),s.extend(I)};module.exports=w,w.default=w;\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;","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","export function keysOf(value) {\n return Object.keys(value);\n}\n","import { keysOf } from './utilities.js';\nconst typedArrayTypeNames = [\n 'Int8Array',\n 'Uint8Array',\n 'Uint8ClampedArray',\n 'Int16Array',\n 'Uint16Array',\n 'Int32Array',\n 'Uint32Array',\n 'Float32Array',\n 'Float64Array',\n 'BigInt64Array',\n 'BigUint64Array',\n];\nfunction isTypedArrayName(name) {\n return typedArrayTypeNames.includes(name);\n}\nconst objectTypeNames = [\n 'Function',\n 'Generator',\n 'AsyncGenerator',\n 'GeneratorFunction',\n 'AsyncGeneratorFunction',\n 'AsyncFunction',\n 'Observable',\n 'Array',\n 'Buffer',\n 'Blob',\n 'Object',\n 'RegExp',\n 'Date',\n 'Error',\n 'Map',\n 'Set',\n 'WeakMap',\n 'WeakSet',\n 'WeakRef',\n 'ArrayBuffer',\n 'SharedArrayBuffer',\n 'DataView',\n 'Promise',\n 'URL',\n 'FormData',\n 'URLSearchParams',\n 'HTMLElement',\n 'NaN',\n ...typedArrayTypeNames,\n];\nfunction isObjectTypeName(name) {\n return objectTypeNames.includes(name);\n}\nconst primitiveTypeNames = [\n 'null',\n 'undefined',\n 'string',\n 'number',\n 'bigint',\n 'boolean',\n 'symbol',\n];\nfunction isPrimitiveTypeName(name) {\n return primitiveTypeNames.includes(name);\n}\nconst assertionTypeDescriptions = [\n 'positive number',\n 'negative number',\n 'Class',\n 'string with a number',\n 'null or undefined',\n 'Iterable',\n 'AsyncIterable',\n 'native Promise',\n 'EnumCase',\n 'string with a URL',\n 'truthy',\n 'falsy',\n 'primitive',\n 'integer',\n 'plain object',\n 'TypedArray',\n 'array-like',\n 'tuple-like',\n 'Node.js Stream',\n 'infinite number',\n 'empty array',\n 'non-empty array',\n 'empty string',\n 'empty string or whitespace',\n 'non-empty string',\n 'non-empty string and not whitespace',\n 'empty object',\n 'non-empty object',\n 'empty set',\n 'non-empty set',\n 'empty map',\n 'non-empty map',\n 'PropertyKey',\n 'even integer',\n 'odd integer',\n 'T',\n 'in range',\n 'predicate returns truthy for any value',\n 'predicate returns truthy for all values',\n 'valid Date',\n 'valid length',\n 'whitespace string',\n ...objectTypeNames,\n ...primitiveTypeNames,\n];\nconst getObjectType = (value) => {\n const objectTypeName = Object.prototype.toString.call(value).slice(8, -1);\n if (/HTML\\w+Element/.test(objectTypeName) && isHtmlElement(value)) {\n return 'HTMLElement';\n }\n if (isObjectTypeName(objectTypeName)) {\n return objectTypeName;\n }\n return undefined;\n};\nfunction detect(value) {\n if (value === null) {\n return 'null';\n }\n switch (typeof value) {\n case 'undefined': {\n return 'undefined';\n }\n case 'string': {\n return 'string';\n }\n case 'number': {\n return Number.isNaN(value) ? 'NaN' : 'number';\n }\n case 'boolean': {\n return 'boolean';\n }\n case 'function': {\n return 'Function';\n }\n case 'bigint': {\n return 'bigint';\n }\n case 'symbol': {\n return 'symbol';\n }\n default:\n }\n if (isObservable(value)) {\n return 'Observable';\n }\n if (isArray(value)) {\n return 'Array';\n }\n if (isBuffer(value)) {\n return 'Buffer';\n }\n const tagType = getObjectType(value);\n if (tagType && tagType !== 'Object') {\n return tagType;\n }\n if (hasPromiseApi(value)) {\n return 'Promise';\n }\n if (value instanceof String || value instanceof Boolean || value instanceof Number) {\n throw new TypeError('Please don\\'t use object wrappers for primitive types');\n }\n return 'Object';\n}\nfunction hasPromiseApi(value) {\n return isFunction(value?.then) && isFunction(value?.catch);\n}\nconst is = Object.assign(detect, {\n all: isAll,\n any: isAny,\n array: isArray,\n arrayBuffer: isArrayBuffer,\n arrayLike: isArrayLike,\n asyncFunction: isAsyncFunction,\n asyncGenerator: isAsyncGenerator,\n asyncGeneratorFunction: isAsyncGeneratorFunction,\n asyncIterable: isAsyncIterable,\n bigint: isBigint,\n bigInt64Array: isBigInt64Array,\n bigUint64Array: isBigUint64Array,\n blob: isBlob,\n boolean: isBoolean,\n boundFunction: isBoundFunction,\n buffer: isBuffer,\n class: isClass,\n dataView: isDataView,\n date: isDate,\n detect,\n directInstanceOf: isDirectInstanceOf,\n emptyArray: isEmptyArray,\n emptyMap: isEmptyMap,\n emptyObject: isEmptyObject,\n emptySet: isEmptySet,\n emptyString: isEmptyString,\n emptyStringOrWhitespace: isEmptyStringOrWhitespace,\n enumCase: isEnumCase,\n error: isError,\n evenInteger: isEvenInteger,\n falsy: isFalsy,\n float32Array: isFloat32Array,\n float64Array: isFloat64Array,\n formData: isFormData,\n function: isFunction,\n generator: isGenerator,\n generatorFunction: isGeneratorFunction,\n htmlElement: isHtmlElement,\n infinite: isInfinite,\n inRange: isInRange,\n int16Array: isInt16Array,\n int32Array: isInt32Array,\n int8Array: isInt8Array,\n integer: isInteger,\n iterable: isIterable,\n map: isMap,\n nan: isNan,\n nativePromise: isNativePromise,\n negativeNumber: isNegativeNumber,\n nodeStream: isNodeStream,\n nonEmptyArray: isNonEmptyArray,\n nonEmptyMap: isNonEmptyMap,\n nonEmptyObject: isNonEmptyObject,\n nonEmptySet: isNonEmptySet,\n nonEmptyString: isNonEmptyString,\n nonEmptyStringAndNotWhitespace: isNonEmptyStringAndNotWhitespace,\n null: isNull,\n nullOrUndefined: isNullOrUndefined,\n number: isNumber,\n numericString: isNumericString,\n object: isObject,\n observable: isObservable,\n oddInteger: isOddInteger,\n plainObject: isPlainObject,\n positiveNumber: isPositiveNumber,\n primitive: isPrimitive,\n promise: isPromise,\n propertyKey: isPropertyKey,\n regExp: isRegExp,\n safeInteger: isSafeInteger,\n set: isSet,\n sharedArrayBuffer: isSharedArrayBuffer,\n string: isString,\n symbol: isSymbol,\n truthy: isTruthy,\n tupleLike: isTupleLike,\n typedArray: isTypedArray,\n uint16Array: isUint16Array,\n uint32Array: isUint32Array,\n uint8Array: isUint8Array,\n uint8ClampedArray: isUint8ClampedArray,\n undefined: isUndefined,\n urlInstance: isUrlInstance,\n urlSearchParams: isUrlSearchParams,\n urlString: isUrlString,\n optional: isOptional,\n validDate: isValidDate,\n validLength: isValidLength,\n weakMap: isWeakMap,\n weakRef: isWeakRef,\n weakSet: isWeakSet,\n whitespaceString: isWhitespaceString,\n});\nfunction isAbsoluteModule2(remainder) {\n return (value) => isInteger(value) && Math.abs(value % 2) === remainder;\n}\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 isOptional(value, predicate) {\n return isUndefined(value) || predicate(value);\n}\nexport function isArray(value, assertion) {\n if (!Array.isArray(value)) {\n return false;\n }\n if (!isFunction(assertion)) {\n return true;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return value.every(element => assertion(element));\n}\nexport function isArrayBuffer(value) {\n return getObjectType(value) === 'ArrayBuffer';\n}\nexport function isArrayLike(value) {\n return !isNullOrUndefined(value) && !isFunction(value) && isValidLength(value.length);\n}\nexport function isAsyncFunction(value) {\n return getObjectType(value) === 'AsyncFunction';\n}\nexport function isAsyncGenerator(value) {\n return isAsyncIterable(value) && isFunction(value.next) && isFunction(value.throw);\n}\nexport function isAsyncGeneratorFunction(value) {\n return getObjectType(value) === 'AsyncGeneratorFunction';\n}\nexport function isAsyncIterable(value) {\n return isFunction(value?.[Symbol.asyncIterator]);\n}\nexport function isBigint(value) {\n return typeof value === 'bigint';\n}\nexport function isBigInt64Array(value) {\n return getObjectType(value) === 'BigInt64Array';\n}\nexport function isBigUint64Array(value) {\n return getObjectType(value) === 'BigUint64Array';\n}\nexport function isBlob(value) {\n return getObjectType(value) === 'Blob';\n}\nexport function isBoolean(value) {\n return value === true || value === false;\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isBoundFunction(value) {\n return isFunction(value) && !Object.hasOwn(value, 'prototype');\n}\n/**\nNote: [Prefer using `Uint8Array` instead of `Buffer`.](https://sindresorhus.com/blog/goodbye-nodejs-buffer)\n*/\nexport function isBuffer(value) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call\n return value?.constructor?.isBuffer?.(value) ?? false;\n}\nexport function isClass(value) {\n return isFunction(value) && /^class(\\s+|{)/.test(value.toString());\n}\nexport function isDataView(value) {\n return getObjectType(value) === 'DataView';\n}\nexport function isDate(value) {\n return getObjectType(value) === 'Date';\n}\nexport function isDirectInstanceOf(instance, class_) {\n if (instance === undefined || instance === null) {\n return false;\n }\n return Object.getPrototypeOf(instance) === class_.prototype;\n}\nexport function isEmptyArray(value) {\n return isArray(value) && value.length === 0;\n}\nexport function isEmptyMap(value) {\n return isMap(value) && value.size === 0;\n}\nexport function isEmptyObject(value) {\n return isObject(value) && !isMap(value) && !isSet(value) && Object.keys(value).length === 0;\n}\nexport function isEmptySet(value) {\n return isSet(value) && value.size === 0;\n}\nexport function isEmptyString(value) {\n return isString(value) && value.length === 0;\n}\nexport function isEmptyStringOrWhitespace(value) {\n return isEmptyString(value) || isWhitespaceString(value);\n}\nexport function isEnumCase(value, targetEnum) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return Object.values(targetEnum).includes(value);\n}\nexport function isError(value) {\n // TODO: Use `Error.isError` when targeting Node.js 24.`\n return getObjectType(value) === 'Error';\n}\nexport function isEvenInteger(value) {\n return isAbsoluteModule2(0)(value);\n}\n// Example: `is.falsy = (value: unknown): value is (not true | 0 | '' | undefined | null) => Boolean(value);`\nexport function isFalsy(value) {\n return !value;\n}\n// TODO: Support detecting Float16Array when targeting Node.js 24.\nexport function isFloat32Array(value) {\n return getObjectType(value) === 'Float32Array';\n}\nexport function isFloat64Array(value) {\n return getObjectType(value) === 'Float64Array';\n}\nexport function isFormData(value) {\n return getObjectType(value) === 'FormData';\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isFunction(value) {\n return typeof value === 'function';\n}\nexport function isGenerator(value) {\n return isIterable(value) && isFunction(value?.next) && isFunction(value?.throw);\n}\nexport function isGeneratorFunction(value) {\n return getObjectType(value) === 'GeneratorFunction';\n}\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst NODE_TYPE_ELEMENT = 1;\n// eslint-disable-next-line @typescript-eslint/naming-convention\nconst DOM_PROPERTIES_TO_CHECK = [\n 'innerHTML',\n 'ownerDocument',\n 'style',\n 'attributes',\n 'nodeValue',\n];\nexport function isHtmlElement(value) {\n return isObject(value)\n && value.nodeType === NODE_TYPE_ELEMENT\n && isString(value.nodeName)\n && !isPlainObject(value)\n && DOM_PROPERTIES_TO_CHECK.every(property => property in value);\n}\nexport function isInfinite(value) {\n return value === Number.POSITIVE_INFINITY || value === Number.NEGATIVE_INFINITY;\n}\nexport function isInRange(value, range) {\n if (isNumber(range)) {\n return value >= Math.min(0, range) && value <= Math.max(range, 0);\n }\n if (isArray(range) && range.length === 2) {\n return value >= Math.min(...range) && value <= Math.max(...range);\n }\n throw new TypeError(`Invalid range: ${JSON.stringify(range)}`);\n}\nexport function isInt16Array(value) {\n return getObjectType(value) === 'Int16Array';\n}\nexport function isInt32Array(value) {\n return getObjectType(value) === 'Int32Array';\n}\nexport function isInt8Array(value) {\n return getObjectType(value) === 'Int8Array';\n}\nexport function isInteger(value) {\n return Number.isInteger(value);\n}\nexport function isIterable(value) {\n return isFunction(value?.[Symbol.iterator]);\n}\nexport function isMap(value) {\n return getObjectType(value) === 'Map';\n}\nexport function isNan(value) {\n return Number.isNaN(value);\n}\nexport function isNativePromise(value) {\n return getObjectType(value) === 'Promise';\n}\nexport function isNegativeNumber(value) {\n return isNumber(value) && value < 0;\n}\nexport function isNodeStream(value) {\n return isObject(value) && isFunction(value.pipe) && !isObservable(value);\n}\nexport function isNonEmptyArray(value) {\n return isArray(value) && value.length > 0;\n}\nexport function isNonEmptyMap(value) {\n return isMap(value) && value.size > 0;\n}\n// TODO: Use `not` operator here to remove `Map` and `Set` from type guard:\n// - https://github.com/Microsoft/TypeScript/pull/29317\nexport function isNonEmptyObject(value) {\n return isObject(value) && !isMap(value) && !isSet(value) && Object.keys(value).length > 0;\n}\nexport function isNonEmptySet(value) {\n return isSet(value) && value.size > 0;\n}\n// TODO: Use `not ''` when the `not` operator is available.\nexport function isNonEmptyString(value) {\n return isString(value) && value.length > 0;\n}\n// TODO: Use `not ''` when the `not` operator is available.\nexport function isNonEmptyStringAndNotWhitespace(value) {\n return isString(value) && !isEmptyStringOrWhitespace(value);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNull(value) {\n return value === null;\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isNullOrUndefined(value) {\n return isNull(value) || isUndefined(value);\n}\nexport function isNumber(value) {\n return typeof value === 'number' && !Number.isNaN(value);\n}\nexport function isNumericString(value) {\n return isString(value) && !isEmptyStringOrWhitespace(value) && !Number.isNaN(Number(value));\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isObject(value) {\n return !isNull(value) && (typeof value === 'object' || isFunction(value));\n}\nexport function isObservable(value) {\n if (!value) {\n return false;\n }\n // eslint-disable-next-line no-use-extend-native/no-use-extend-native, @typescript-eslint/no-unsafe-call\n if (Symbol.observable !== undefined && value === value[Symbol.observable]?.()) {\n return true;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n if (value === value['@@observable']?.()) {\n return true;\n }\n return false;\n}\nexport function isOddInteger(value) {\n return isAbsoluteModule2(1)(value);\n}\nexport function isPlainObject(value) {\n // From: https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const prototype = Object.getPrototypeOf(value);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\nexport function isPositiveNumber(value) {\n return isNumber(value) && value > 0;\n}\nexport function isPrimitive(value) {\n return isNull(value) || isPrimitiveTypeName(typeof value);\n}\nexport function isPromise(value) {\n return isNativePromise(value) || hasPromiseApi(value);\n}\n// `PropertyKey` is any value that can be used as an object key (string, number, or symbol)\nexport function isPropertyKey(value) {\n return isAny([isString, isNumber, isSymbol], value);\n}\nexport function isRegExp(value) {\n return getObjectType(value) === 'RegExp';\n}\nexport function isSafeInteger(value) {\n return Number.isSafeInteger(value);\n}\nexport function isSet(value) {\n return getObjectType(value) === 'Set';\n}\nexport function isSharedArrayBuffer(value) {\n return getObjectType(value) === 'SharedArrayBuffer';\n}\nexport function isString(value) {\n return typeof value === 'string';\n}\nexport function isSymbol(value) {\n return typeof value === 'symbol';\n}\n// Example: `is.truthy = (value: unknown): value is (not false | not 0 | not '' | not undefined | not null) => Boolean(value);`\n// eslint-disable-next-line unicorn/prefer-native-coercion-functions\nexport function isTruthy(value) {\n return Boolean(value);\n}\nexport function isTupleLike(value, guards) {\n if (isArray(guards) && isArray(value) && guards.length === value.length) {\n return guards.every((guard, index) => guard(value[index]));\n }\n return false;\n}\nexport function isTypedArray(value) {\n return isTypedArrayName(getObjectType(value));\n}\nexport function isUint16Array(value) {\n return getObjectType(value) === 'Uint16Array';\n}\nexport function isUint32Array(value) {\n return getObjectType(value) === 'Uint32Array';\n}\nexport function isUint8Array(value) {\n return getObjectType(value) === 'Uint8Array';\n}\nexport function isUint8ClampedArray(value) {\n return getObjectType(value) === 'Uint8ClampedArray';\n}\nexport function isUndefined(value) {\n return value === undefined;\n}\nexport function isUrlInstance(value) {\n return getObjectType(value) === 'URL';\n}\n// eslint-disable-next-line unicorn/prevent-abbreviations\nexport function isUrlSearchParams(value) {\n return getObjectType(value) === 'URLSearchParams';\n}\nexport function isUrlString(value) {\n if (!isString(value)) {\n return false;\n }\n try {\n new URL(value); // eslint-disable-line no-new\n return true;\n }\n catch {\n return false;\n }\n}\nexport function isValidDate(value) {\n return isDate(value) && !isNan(Number(value));\n}\nexport function isValidLength(value) {\n return isSafeInteger(value) && value >= 0;\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isWeakMap(value) {\n return getObjectType(value) === 'WeakMap';\n}\n// eslint-disable-next-line @typescript-eslint/ban-types, unicorn/prevent-abbreviations\nexport function isWeakRef(value) {\n return getObjectType(value) === 'WeakRef';\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function isWeakSet(value) {\n return getObjectType(value) === 'WeakSet';\n}\nexport function isWhitespaceString(value) {\n return isString(value) && /^\\s+$/.test(value);\n}\nfunction predicateOnArray(method, predicate, values) {\n if (!isFunction(predicate)) {\n throw new TypeError(`Invalid predicate: ${JSON.stringify(predicate)}`);\n }\n if (values.length === 0) {\n throw new TypeError('Invalid number of values');\n }\n return method.call(values, predicate);\n}\nfunction typeErrorMessage(description, value) {\n return `Expected value which is \\`${description}\\`, received value of type \\`${is(value)}\\`.`;\n}\nfunction unique(values) {\n // eslint-disable-next-line unicorn/prefer-spread\n return Array.from(new Set(values));\n}\nconst andFormatter = new Intl.ListFormat('en', { style: 'long', type: 'conjunction' });\nconst orFormatter = new Intl.ListFormat('en', { style: 'long', type: 'disjunction' });\nfunction typeErrorMessageMultipleValues(expectedType, values) {\n const uniqueExpectedTypes = unique((isArray(expectedType) ? expectedType : [expectedType]).map(value => `\\`${value}\\``));\n const uniqueValueTypes = unique(values.map(value => `\\`${is(value)}\\``));\n return `Expected values which are ${orFormatter.format(uniqueExpectedTypes)}. Received values of type${uniqueValueTypes.length > 1 ? 's' : ''} ${andFormatter.format(uniqueValueTypes)}.`;\n}\nexport const assert = {\n all: assertAll,\n any: assertAny,\n optional: assertOptional,\n array: assertArray,\n arrayBuffer: assertArrayBuffer,\n arrayLike: assertArrayLike,\n asyncFunction: assertAsyncFunction,\n asyncGenerator: assertAsyncGenerator,\n asyncGeneratorFunction: assertAsyncGeneratorFunction,\n asyncIterable: assertAsyncIterable,\n bigint: assertBigint,\n bigInt64Array: assertBigInt64Array,\n bigUint64Array: assertBigUint64Array,\n blob: assertBlob,\n boolean: assertBoolean,\n boundFunction: assertBoundFunction,\n buffer: assertBuffer,\n class: assertClass,\n dataView: assertDataView,\n date: assertDate,\n directInstanceOf: assertDirectInstanceOf,\n emptyArray: assertEmptyArray,\n emptyMap: assertEmptyMap,\n emptyObject: assertEmptyObject,\n emptySet: assertEmptySet,\n emptyString: assertEmptyString,\n emptyStringOrWhitespace: assertEmptyStringOrWhitespace,\n enumCase: assertEnumCase,\n error: assertError,\n evenInteger: assertEvenInteger,\n falsy: assertFalsy,\n float32Array: assertFloat32Array,\n float64Array: assertFloat64Array,\n formData: assertFormData,\n function: assertFunction,\n generator: assertGenerator,\n generatorFunction: assertGeneratorFunction,\n htmlElement: assertHtmlElement,\n infinite: assertInfinite,\n inRange: assertInRange,\n int16Array: assertInt16Array,\n int32Array: assertInt32Array,\n int8Array: assertInt8Array,\n integer: assertInteger,\n iterable: assertIterable,\n map: assertMap,\n nan: assertNan,\n nativePromise: assertNativePromise,\n negativeNumber: assertNegativeNumber,\n nodeStream: assertNodeStream,\n nonEmptyArray: assertNonEmptyArray,\n nonEmptyMap: assertNonEmptyMap,\n nonEmptyObject: assertNonEmptyObject,\n nonEmptySet: assertNonEmptySet,\n nonEmptyString: assertNonEmptyString,\n nonEmptyStringAndNotWhitespace: assertNonEmptyStringAndNotWhitespace,\n null: assertNull,\n nullOrUndefined: assertNullOrUndefined,\n number: assertNumber,\n numericString: assertNumericString,\n object: assertObject,\n observable: assertObservable,\n oddInteger: assertOddInteger,\n plainObject: assertPlainObject,\n positiveNumber: assertPositiveNumber,\n primitive: assertPrimitive,\n promise: assertPromise,\n propertyKey: assertPropertyKey,\n regExp: assertRegExp,\n safeInteger: assertSafeInteger,\n set: assertSet,\n sharedArrayBuffer: assertSharedArrayBuffer,\n string: assertString,\n symbol: assertSymbol,\n truthy: assertTruthy,\n tupleLike: assertTupleLike,\n typedArray: assertTypedArray,\n uint16Array: assertUint16Array,\n uint32Array: assertUint32Array,\n uint8Array: assertUint8Array,\n uint8ClampedArray: assertUint8ClampedArray,\n undefined: assertUndefined,\n urlInstance: assertUrlInstance,\n urlSearchParams: assertUrlSearchParams,\n urlString: assertUrlString,\n validDate: assertValidDate,\n validLength: assertValidLength,\n weakMap: assertWeakMap,\n weakRef: assertWeakRef,\n weakSet: assertWeakSet,\n whitespaceString: assertWhitespaceString,\n};\nconst methodTypeMap = {\n isArray: 'Array',\n isArrayBuffer: 'ArrayBuffer',\n isArrayLike: 'array-like',\n isAsyncFunction: 'AsyncFunction',\n isAsyncGenerator: 'AsyncGenerator',\n isAsyncGeneratorFunction: 'AsyncGeneratorFunction',\n isAsyncIterable: 'AsyncIterable',\n isBigint: 'bigint',\n isBigInt64Array: 'BigInt64Array',\n isBigUint64Array: 'BigUint64Array',\n isBlob: 'Blob',\n isBoolean: 'boolean',\n isBoundFunction: 'Function',\n isBuffer: 'Buffer',\n isClass: 'Class',\n isDataView: 'DataView',\n isDate: 'Date',\n isDirectInstanceOf: 'T',\n isEmptyArray: 'empty array',\n isEmptyMap: 'empty map',\n isEmptyObject: 'empty object',\n isEmptySet: 'empty set',\n isEmptyString: 'empty string',\n isEmptyStringOrWhitespace: 'empty string or whitespace',\n isEnumCase: 'EnumCase',\n isError: 'Error',\n isEvenInteger: 'even integer',\n isFalsy: 'falsy',\n isFloat32Array: 'Float32Array',\n isFloat64Array: 'Float64Array',\n isFormData: 'FormData',\n isFunction: 'Function',\n isGenerator: 'Generator',\n isGeneratorFunction: 'GeneratorFunction',\n isHtmlElement: 'HTMLElement',\n isInfinite: 'infinite number',\n isInRange: 'in range',\n isInt16Array: 'Int16Array',\n isInt32Array: 'Int32Array',\n isInt8Array: 'Int8Array',\n isInteger: 'integer',\n isIterable: 'Iterable',\n isMap: 'Map',\n isNan: 'NaN',\n isNativePromise: 'native Promise',\n isNegativeNumber: 'negative number',\n isNodeStream: 'Node.js Stream',\n isNonEmptyArray: 'non-empty array',\n isNonEmptyMap: 'non-empty map',\n isNonEmptyObject: 'non-empty object',\n isNonEmptySet: 'non-empty set',\n isNonEmptyString: 'non-empty string',\n isNonEmptyStringAndNotWhitespace: 'non-empty string and not whitespace',\n isNull: 'null',\n isNullOrUndefined: 'null or undefined',\n isNumber: 'number',\n isNumericString: 'string with a number',\n isObject: 'Object',\n isObservable: 'Observable',\n isOddInteger: 'odd integer',\n isPlainObject: 'plain object',\n isPositiveNumber: 'positive number',\n isPrimitive: 'primitive',\n isPromise: 'Promise',\n isPropertyKey: 'PropertyKey',\n isRegExp: 'RegExp',\n isSafeInteger: 'integer',\n isSet: 'Set',\n isSharedArrayBuffer: 'SharedArrayBuffer',\n isString: 'string',\n isSymbol: 'symbol',\n isTruthy: 'truthy',\n isTupleLike: 'tuple-like',\n isTypedArray: 'TypedArray',\n isUint16Array: 'Uint16Array',\n isUint32Array: 'Uint32Array',\n isUint8Array: 'Uint8Array',\n isUint8ClampedArray: 'Uint8ClampedArray',\n isUndefined: 'undefined',\n isUrlInstance: 'URL',\n isUrlSearchParams: 'URLSearchParams',\n isUrlString: 'string with a URL',\n isValidDate: 'valid Date',\n isValidLength: 'valid length',\n isWeakMap: 'WeakMap',\n isWeakRef: 'WeakRef',\n isWeakSet: 'WeakSet',\n isWhitespaceString: 'whitespace string',\n};\nconst isMethodNames = keysOf(methodTypeMap);\nfunction isIsMethodName(value) {\n return isMethodNames.includes(value);\n}\nexport function assertAll(predicate, ...values) {\n if (!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 assertOptional(value, assertion, message) {\n if (!isUndefined(value)) {\n assertion(value, message);\n }\n}\nexport function assertArray(value, assertion, message) {\n if (!isArray(value)) {\n throw new TypeError(message ?? typeErrorMessage('Array', value));\n }\n if (assertion) {\n for (const element of value) {\n // @ts-expect-error: \"Assertions require every name in the call target to be declared with an explicit type annotation.\"\n assertion(element, message);\n }\n }\n}\nexport function assertArrayBuffer(value, message) {\n if (!isArrayBuffer(value)) {\n throw new TypeError(message ?? typeErrorMessage('ArrayBuffer', value));\n }\n}\nexport function assertArrayLike(value, message) {\n if (!isArrayLike(value)) {\n throw new TypeError(message ?? typeErrorMessage('array-like', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertAsyncFunction(value, message) {\n if (!isAsyncFunction(value)) {\n throw new TypeError(message ?? typeErrorMessage('AsyncFunction', value));\n }\n}\nexport function assertAsyncGenerator(value, message) {\n if (!isAsyncGenerator(value)) {\n throw new TypeError(message ?? typeErrorMessage('AsyncGenerator', value));\n }\n}\nexport function assertAsyncGeneratorFunction(value, message) {\n if (!isAsyncGeneratorFunction(value)) {\n throw new TypeError(message ?? typeErrorMessage('AsyncGeneratorFunction', value));\n }\n}\nexport function assertAsyncIterable(value, message) {\n if (!isAsyncIterable(value)) {\n throw new TypeError(message ?? typeErrorMessage('AsyncIterable', value));\n }\n}\nexport function assertBigint(value, message) {\n if (!isBigint(value)) {\n throw new TypeError(message ?? typeErrorMessage('bigint', value));\n }\n}\nexport function assertBigInt64Array(value, message) {\n if (!isBigInt64Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('BigInt64Array', value));\n }\n}\nexport function assertBigUint64Array(value, message) {\n if (!isBigUint64Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('BigUint64Array', value));\n }\n}\nexport function assertBlob(value, message) {\n if (!isBlob(value)) {\n throw new TypeError(message ?? typeErrorMessage('Blob', value));\n }\n}\nexport function assertBoolean(value, message) {\n if (!isBoolean(value)) {\n throw new TypeError(message ?? typeErrorMessage('boolean', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertBoundFunction(value, message) {\n if (!isBoundFunction(value)) {\n throw new TypeError(message ?? typeErrorMessage('Function', value));\n }\n}\n/**\nNote: [Prefer using `Uint8Array` instead of `Buffer`.](https://sindresorhus.com/blog/goodbye-nodejs-buffer)\n*/\nexport function assertBuffer(value, message) {\n if (!isBuffer(value)) {\n throw new TypeError(message ?? typeErrorMessage('Buffer', value));\n }\n}\nexport function assertClass(value, message) {\n if (!isClass(value)) {\n throw new TypeError(message ?? typeErrorMessage('Class', value));\n }\n}\nexport function assertDataView(value, message) {\n if (!isDataView(value)) {\n throw new TypeError(message ?? typeErrorMessage('DataView', value));\n }\n}\nexport function assertDate(value, message) {\n if (!isDate(value)) {\n throw new TypeError(message ?? typeErrorMessage('Date', value));\n }\n}\nexport function assertDirectInstanceOf(instance, class_, message) {\n if (!isDirectInstanceOf(instance, class_)) {\n throw new TypeError(message ?? typeErrorMessage('T', instance));\n }\n}\nexport function assertEmptyArray(value, message) {\n if (!isEmptyArray(value)) {\n throw new TypeError(message ?? typeErrorMessage('empty array', value));\n }\n}\nexport function assertEmptyMap(value, message) {\n if (!isEmptyMap(value)) {\n throw new TypeError(message ?? typeErrorMessage('empty map', value));\n }\n}\nexport function assertEmptyObject(value, message) {\n if (!isEmptyObject(value)) {\n throw new TypeError(message ?? typeErrorMessage('empty object', value));\n }\n}\nexport function assertEmptySet(value, message) {\n if (!isEmptySet(value)) {\n throw new TypeError(message ?? typeErrorMessage('empty set', value));\n }\n}\nexport function assertEmptyString(value, message) {\n if (!isEmptyString(value)) {\n throw new TypeError(message ?? typeErrorMessage('empty string', value));\n }\n}\nexport function assertEmptyStringOrWhitespace(value, message) {\n if (!isEmptyStringOrWhitespace(value)) {\n throw new TypeError(message ?? typeErrorMessage('empty string or whitespace', value));\n }\n}\nexport function assertEnumCase(value, targetEnum, message) {\n if (!isEnumCase(value, targetEnum)) {\n throw new TypeError(message ?? typeErrorMessage('EnumCase', value));\n }\n}\nexport function assertError(value, message) {\n if (!isError(value)) {\n throw new TypeError(message ?? typeErrorMessage('Error', value));\n }\n}\nexport function assertEvenInteger(value, message) {\n if (!isEvenInteger(value)) {\n throw new TypeError(message ?? typeErrorMessage('even integer', value));\n }\n}\nexport function assertFalsy(value, message) {\n if (!isFalsy(value)) {\n throw new TypeError(message ?? typeErrorMessage('falsy', value));\n }\n}\nexport function assertFloat32Array(value, message) {\n if (!isFloat32Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Float32Array', value));\n }\n}\nexport function assertFloat64Array(value, message) {\n if (!isFloat64Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Float64Array', value));\n }\n}\nexport function assertFormData(value, message) {\n if (!isFormData(value)) {\n throw new TypeError(message ?? typeErrorMessage('FormData', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertFunction(value, message) {\n if (!isFunction(value)) {\n throw new TypeError(message ?? typeErrorMessage('Function', value));\n }\n}\nexport function assertGenerator(value, message) {\n if (!isGenerator(value)) {\n throw new TypeError(message ?? typeErrorMessage('Generator', value));\n }\n}\nexport function assertGeneratorFunction(value, message) {\n if (!isGeneratorFunction(value)) {\n throw new TypeError(message ?? typeErrorMessage('GeneratorFunction', value));\n }\n}\nexport function assertHtmlElement(value, message) {\n if (!isHtmlElement(value)) {\n throw new TypeError(message ?? typeErrorMessage('HTMLElement', value));\n }\n}\nexport function assertInfinite(value, message) {\n if (!isInfinite(value)) {\n throw new TypeError(message ?? typeErrorMessage('infinite number', value));\n }\n}\nexport function assertInRange(value, range, message) {\n if (!isInRange(value, range)) {\n throw new TypeError(message ?? typeErrorMessage('in range', value));\n }\n}\nexport function assertInt16Array(value, message) {\n if (!isInt16Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Int16Array', value));\n }\n}\nexport function assertInt32Array(value, message) {\n if (!isInt32Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Int32Array', value));\n }\n}\nexport function assertInt8Array(value, message) {\n if (!isInt8Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Int8Array', value));\n }\n}\nexport function assertInteger(value, message) {\n if (!isInteger(value)) {\n throw new TypeError(message ?? typeErrorMessage('integer', value));\n }\n}\nexport function assertIterable(value, message) {\n if (!isIterable(value)) {\n throw new TypeError(message ?? typeErrorMessage('Iterable', value));\n }\n}\nexport function assertMap(value, message) {\n if (!isMap(value)) {\n throw new TypeError(message ?? typeErrorMessage('Map', value));\n }\n}\nexport function assertNan(value, message) {\n if (!isNan(value)) {\n throw new TypeError(message ?? typeErrorMessage('NaN', value));\n }\n}\nexport function assertNativePromise(value, message) {\n if (!isNativePromise(value)) {\n throw new TypeError(message ?? typeErrorMessage('native Promise', value));\n }\n}\nexport function assertNegativeNumber(value, message) {\n if (!isNegativeNumber(value)) {\n throw new TypeError(message ?? typeErrorMessage('negative number', value));\n }\n}\nexport function assertNodeStream(value, message) {\n if (!isNodeStream(value)) {\n throw new TypeError(message ?? typeErrorMessage('Node.js Stream', value));\n }\n}\nexport function assertNonEmptyArray(value, message) {\n if (!isNonEmptyArray(value)) {\n throw new TypeError(message ?? typeErrorMessage('non-empty array', value));\n }\n}\nexport function assertNonEmptyMap(value, message) {\n if (!isNonEmptyMap(value)) {\n throw new TypeError(message ?? typeErrorMessage('non-empty map', value));\n }\n}\nexport function assertNonEmptyObject(value, message) {\n if (!isNonEmptyObject(value)) {\n throw new TypeError(message ?? typeErrorMessage('non-empty object', value));\n }\n}\nexport function assertNonEmptySet(value, message) {\n if (!isNonEmptySet(value)) {\n throw new TypeError(message ?? typeErrorMessage('non-empty set', value));\n }\n}\nexport function assertNonEmptyString(value, message) {\n if (!isNonEmptyString(value)) {\n throw new TypeError(message ?? typeErrorMessage('non-empty string', value));\n }\n}\nexport function assertNonEmptyStringAndNotWhitespace(value, message) {\n if (!isNonEmptyStringAndNotWhitespace(value)) {\n throw new TypeError(message ?? typeErrorMessage('non-empty string and not whitespace', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertNull(value, message) {\n if (!isNull(value)) {\n throw new TypeError(message ?? typeErrorMessage('null', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertNullOrUndefined(value, message) {\n if (!isNullOrUndefined(value)) {\n throw new TypeError(message ?? typeErrorMessage('null or undefined', value));\n }\n}\nexport function assertNumber(value, message) {\n if (!isNumber(value)) {\n throw new TypeError(message ?? typeErrorMessage('number', value));\n }\n}\nexport function assertNumericString(value, message) {\n if (!isNumericString(value)) {\n throw new TypeError(message ?? typeErrorMessage('string with a number', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertObject(value, message) {\n if (!isObject(value)) {\n throw new TypeError(message ?? typeErrorMessage('Object', value));\n }\n}\nexport function assertObservable(value, message) {\n if (!isObservable(value)) {\n throw new TypeError(message ?? typeErrorMessage('Observable', value));\n }\n}\nexport function assertOddInteger(value, message) {\n if (!isOddInteger(value)) {\n throw new TypeError(message ?? typeErrorMessage('odd integer', value));\n }\n}\nexport function assertPlainObject(value, message) {\n if (!isPlainObject(value)) {\n throw new TypeError(message ?? typeErrorMessage('plain object', value));\n }\n}\nexport function assertPositiveNumber(value, message) {\n if (!isPositiveNumber(value)) {\n throw new TypeError(message ?? typeErrorMessage('positive number', value));\n }\n}\nexport function assertPrimitive(value, message) {\n if (!isPrimitive(value)) {\n throw new TypeError(message ?? typeErrorMessage('primitive', value));\n }\n}\nexport function assertPromise(value, message) {\n if (!isPromise(value)) {\n throw new TypeError(message ?? typeErrorMessage('Promise', value));\n }\n}\nexport function assertPropertyKey(value, message) {\n if (!isPropertyKey(value)) {\n throw new TypeError(message ?? typeErrorMessage('PropertyKey', value));\n }\n}\nexport function assertRegExp(value, message) {\n if (!isRegExp(value)) {\n throw new TypeError(message ?? typeErrorMessage('RegExp', value));\n }\n}\nexport function assertSafeInteger(value, message) {\n if (!isSafeInteger(value)) {\n throw new TypeError(message ?? typeErrorMessage('integer', value));\n }\n}\nexport function assertSet(value, message) {\n if (!isSet(value)) {\n throw new TypeError(message ?? typeErrorMessage('Set', value));\n }\n}\nexport function assertSharedArrayBuffer(value, message) {\n if (!isSharedArrayBuffer(value)) {\n throw new TypeError(message ?? typeErrorMessage('SharedArrayBuffer', value));\n }\n}\nexport function assertString(value, message) {\n if (!isString(value)) {\n throw new TypeError(message ?? typeErrorMessage('string', value));\n }\n}\nexport function assertSymbol(value, message) {\n if (!isSymbol(value)) {\n throw new TypeError(message ?? typeErrorMessage('symbol', value));\n }\n}\nexport function assertTruthy(value, message) {\n if (!isTruthy(value)) {\n throw new TypeError(message ?? typeErrorMessage('truthy', value));\n }\n}\nexport function assertTupleLike(value, guards, message) {\n if (!isTupleLike(value, guards)) {\n throw new TypeError(message ?? typeErrorMessage('tuple-like', value));\n }\n}\nexport function assertTypedArray(value, message) {\n if (!isTypedArray(value)) {\n throw new TypeError(message ?? typeErrorMessage('TypedArray', value));\n }\n}\nexport function assertUint16Array(value, message) {\n if (!isUint16Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Uint16Array', value));\n }\n}\nexport function assertUint32Array(value, message) {\n if (!isUint32Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Uint32Array', value));\n }\n}\nexport function assertUint8Array(value, message) {\n if (!isUint8Array(value)) {\n throw new TypeError(message ?? typeErrorMessage('Uint8Array', value));\n }\n}\nexport function assertUint8ClampedArray(value, message) {\n if (!isUint8ClampedArray(value)) {\n throw new TypeError(message ?? typeErrorMessage('Uint8ClampedArray', value));\n }\n}\nexport function assertUndefined(value, message) {\n if (!isUndefined(value)) {\n throw new TypeError(message ?? typeErrorMessage('undefined', value));\n }\n}\nexport function assertUrlInstance(value, message) {\n if (!isUrlInstance(value)) {\n throw new TypeError(message ?? typeErrorMessage('URL', value));\n }\n}\n// eslint-disable-next-line unicorn/prevent-abbreviations\nexport function assertUrlSearchParams(value, message) {\n if (!isUrlSearchParams(value)) {\n throw new TypeError(message ?? typeErrorMessage('URLSearchParams', value));\n }\n}\nexport function assertUrlString(value, message) {\n if (!isUrlString(value)) {\n throw new TypeError(message ?? typeErrorMessage('string with a URL', value));\n }\n}\nexport function assertValidDate(value, message) {\n if (!isValidDate(value)) {\n throw new TypeError(message ?? typeErrorMessage('valid Date', value));\n }\n}\nexport function assertValidLength(value, message) {\n if (!isValidLength(value)) {\n throw new TypeError(message ?? typeErrorMessage('valid length', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertWeakMap(value, message) {\n if (!isWeakMap(value)) {\n throw new TypeError(message ?? typeErrorMessage('WeakMap', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types, unicorn/prevent-abbreviations\nexport function assertWeakRef(value, message) {\n if (!isWeakRef(value)) {\n throw new TypeError(message ?? typeErrorMessage('WeakRef', value));\n }\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function assertWeakSet(value, message) {\n if (!isWeakSet(value)) {\n throw new TypeError(message ?? typeErrorMessage('WeakSet', value));\n }\n}\nexport function assertWhitespaceString(value, message) {\n if (!isWhitespaceString(value)) {\n throw new TypeError(message ?? typeErrorMessage('whitespace string', value));\n }\n}\nexport default is;\n","/**\n * Small utility library instead of using lodash\n * but still providing the convenience of a single `_.XXX` style import\n */\n\n\n// we'll rely on sindresorhus/is for type checking, but we'll build it into the final bundle\nimport {\n isBoolean, isError, isString, isPromise, isFunction,\n isNumber, isPlainObject, isArray, isInteger, isNan,\n} from '@sindresorhus/is';\n\nfunction keyBy<T>(array: Array<T>, key: keyof T) {\n return (array || []).reduce((r, x) => ({ ...r, [String(x[key])]: x }), {});\n}\n\n/**\n * Simple sortBy utility\n * Returns a new array sorted by the given key or function\n */\nfunction sortBy<T>(\n array: Array<T>,\n compareBy: keyof T | ((item: T) => number),\n) {\n // handle comparison using function that returns a number\n if (typeof compareBy === 'function') {\n const compareMap = new Map();\n array.forEach((item) => {\n compareMap.set(item, compareBy(item));\n });\n return array.concat().sort(\n (a, b) => compareMap.get(a)! - compareMap.get(b)!,\n );\n // handle comparison by key\n } else {\n return array.concat().sort(\n (a, b) => {\n if (a[compareBy] > b[compareBy]) return 1;\n return (b[compareBy] > a[compareBy]) ? -1 : 0;\n },\n );\n }\n}\n\nfunction compact<T>(array: Array<T | undefined | false | null>) {\n return array.filter((item) => item !== undefined && item !== false && item !== null) as Array<T>;\n}\n\nfunction filter<T>(array: Array<T>, fn: (item: T) => boolean) {\n return array.filter(fn);\n}\n\nfunction each<T>(\n array: Array<T> | Record<string, T>,\n fn: (\n ((item: T, key: string) => void)\n | ((item: T) => void)\n ),\n) {\n if (Array.isArray(array)) {\n array.forEach((item, index) => fn(item, String(index)));\n } else {\n Object.entries(array).forEach(([key, value]) => fn(value, key));\n }\n}\n\nfunction castArray<T>(value: T | Array<T>) {\n return Array.isArray(value) ? value : [value];\n}\n\nfunction mapValues<T, U>(obj: Record<string, T>, fn: (value: T) => U) {\n return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, fn(value)]));\n}\n\nfunction times<T>(count: number, fn: (index: number) => T): Array<T> {\n return Array.from({ length: count }, (_, i) => fn(i));\n}\n\nfunction map<T, U>(array: Array<T>, fn: (item: T) => U): Array<U> {\n return array.map(fn);\n}\nfunction flatMap<T, U>(array: Array<T>, fn: (item: T) => Array<U>): Array<U> {\n return array.flatMap(fn);\n}\nfunction intersection<T>(...arrays: Array<Array<T>>): Array<T> {\n return arrays.reduce((a, b) => a.filter((value) => b.includes(value)));\n}\nfunction pick<T>(obj: Record<string, T>, keys: Array<string>) {\n return Object.fromEntries(Object.entries(obj).filter(([key]) => keys.includes(key)));\n}\nfunction uniq<T>(array: Array<T>): Array<T> {\n return Array.from(new Set(array));\n}\nfunction fromPairs<T>(pairs: Array<[string, T]>): Record<string, T> {\n return Object.fromEntries(pairs);\n}\n\n\nconst _ = {\n keyBy,\n sortBy,\n compact,\n keys: Object.keys,\n values: Object.values,\n some: (a: Array<any>, fn: (item: any) => boolean) => a.some(fn),\n filter,\n each,\n castArray,\n mapValues,\n times,\n map,\n flatMap,\n intersection,\n pick,\n uniq,\n fromPairs,\n // type checks\n isString,\n isBoolean,\n isError,\n isPromise,\n isFunction,\n isNan,\n isNumber,\n isPlainObject,\n isArray,\n isInteger,\n};\n\nexport default _;\n","import _ from '@env-spec/utils/my-dash';\n// copied these error types from Astro\n// and we will try to keep it compatible so we can interact with their error overlay\n\nexport type ErrorLocation = {\n file?: string;\n line?: number;\n column?: number;\n};\n\n/**\n * Generic object representing an error with all possible data\n * Compatible with both Astro's and Vite's errors\n */\nexport type ErrorWithMetadata = {\n [name: string]: any;\n name: string;\n title?: string;\n // type?: ErrorTypes; // these are astro's error types\n message: string;\n stack: string;\n hint?: string;\n id?: string;\n frame?: string;\n plugin?: string;\n pluginCode?: string;\n fullCode?: string;\n loc?: ErrorLocation;\n cause?: any;\n};\n\n\nexport type VarlockErrorLocationDetails = {\n /** file path or url */\n id: string;\n /** 1-based line number */\n lineNumber: number;\n /** 1-based column number */\n colNumber: number;\n /** full line string */\n lineStr: string;\n};\n\n\nexport class VarlockError extends Error {\n originalError?: Error;\n get isUnexpected() { return !!this.originalError; }\n\n get type() { return this.name; }\n\n\n static defaultIcon = '❌';\n icon: string;\n\n _isWarning = false;\n\n constructor(errOrMessage: string | Error, readonly more?: {\n tip?: string | Array<string>,\n err?: Error,\n isWarning?: boolean,\n /** machine-friendly error code if needed for anything else */\n code?: string,\n location?: VarlockErrorLocationDetails,\n /** free-form additional metadata */\n extraMetadata?: Record<string, any>,\n }) {\n // super must be root level statement\n super(_.isError(errOrMessage) ? errOrMessage.message : errOrMessage);\n if (_.isError(errOrMessage)) {\n this.originalError = errOrMessage;\n this.icon = '💥';\n } else { // string\n this.originalError = more?.err;\n }\n if (_.isArray(more?.tip)) more.tip = more.tip.join('\\n');\n this.name = this.constructor.name;\n if (more?.isWarning) this.isWarning = true;\n\n this.icon ||= (this.constructor as any).defaultIcon;\n }\n\n get tip() {\n if (!this.more?.tip) return undefined;\n if (_.isArray(this.more.tip)) return this.more.tip.join('\\n');\n return this.more.tip;\n }\n\n get location() {\n return this.more?.location;\n }\n\n get code() {\n return this.more?.code;\n }\n get extraMetadata() {\n return this.more?.extraMetadata;\n }\n\n set isWarning(w: boolean) {\n this._isWarning = w;\n if (this._isWarning) {\n this.icon = '🧐';\n }\n }\n get isWarning() { return this._isWarning; }\n\n toJSON() {\n return {\n icon: this.icon,\n type: this.type,\n name: this.name,\n message: this.message,\n isUnexpected: this.isUnexpected,\n ...this.tip && { tip: this.tip },\n ...this.isWarning && { isWarning: this.isWarning },\n };\n }\n}\n\nexport class ConfigLoadError extends VarlockError {\n readonly cleanedStack: Array<string>;\n constructor(err: Error) {\n super(err);\n\n // remove first line since its the error message\n let stackLines = (err.stack?.split('\\n') || []).slice(1);\n stackLines = stackLines.filter((l) => {\n // filter out unimportant lines related to just running/loading\n // we could filter out more of dmno/core code once things stabilize\n //! these are probably not relevant anymore, or needs to move to a plugin layer?\n if (l.includes(' at ViteNodeRunner.')) return false;\n if (l.includes('core/src/config-loader/config-loader.ts')) return false;\n return true;\n });\n\n\n this.message = `${err.name}: ${err.message}`;\n\n\n\n this.cleanedStack = stackLines || [];\n }\n toJSON() {\n return {\n ...super.toJSON(),\n cleanedStack: this.cleanedStack,\n };\n }\n}\n\nexport class ParseError extends VarlockError {\n static defaultIcon = '😵‍💫';\n}\nexport class SchemaError extends VarlockError {\n static defaultIcon = '🧰';\n}\nexport class ValidationError extends VarlockError {\n static defaultIcon = '❌';\n}\nexport class CoercionError extends VarlockError {\n static defaultIcon = '🛑';\n}\nexport class ResolutionError extends VarlockError {\n static defaultIcon = '⛔';\n protected _retryable?: boolean = false;\n set retryable(val: boolean) { this._retryable = val; }\n get retryable() {\n if (this._retryable) return true;\n if (this.originalError instanceof ResolutionError) return this.originalError.retryable;\n return false;\n }\n}\n\nexport class EmptyRequiredValueError extends ValidationError {\n icon = '❓';\n constructor(_val: undefined | null | '') {\n super('Value is required but is currently empty');\n }\n}\n","// 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 { 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<string>((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 ((err as any).status === 127 || 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","import { accessSync } from 'node:fs';\nimport { access } from 'node:fs/promises';\n\nexport async function pathExists(p: string) {\n try {\n await access(p);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function pathExistsSync(p:string) {\n try {\n accessSync(p);\n return true;\n } catch {\n return false;\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\ntype MaybePromise<T> = T | Promise<T>;\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) => MaybePromise<(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 /** will make items of this type sensitive, unless overridden specifically on that item */\n sensitive?: boolean,\n\n /** adds docs info for these */\n docs?: Array<string | { url: string, description: string }>;\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 get isSensitive() { return this.def.sensitive; }\n get docsEntries() { return this.def.docs; }\n\n /** @internal */\n get _rawDef() { return this.def; }\n\n coerce(val: any) {\n if (this.def.coerce) return this.def.coerce(val);\n // if no coerce function is defined, we'll default to converting to a string\n if (val === undefined) return undefined;\n return typeof val === 'string' ? val : String(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 let url: URL;\n try {\n url = new URL(val); // if invalid, this will throw\n } catch (err) {\n throw new ValidationError('Invalid URL');\n }\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: Array<EnvGraphDataTypeFactory> = [\n StringDataType,\n NumberDataType,\n BooleanDataType,\n SimpleObjectDataType,\n EnumDataType,\n EmailDataType,\n UrlDataType,\n IpAddressDataType,\n PortDataType,\n SemverDataType,\n IsoDateDataType,\n UuidDataType,\n 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","import _ from '@env-spec/utils/my-dash';\nimport { ParsedEnvSpecFunctionCall, type ParsedEnvSpecDecorator } from '@env-spec/parser';\nimport { EnvGraphDataSource } from './data-source';\nimport type { ConfigItem } from './config-item';\nimport { type Resolver, convertParsedValueToResolvers } from './resolver';\nimport { SchemaError } from './errors';\nimport type { EnvGraph } from './env-graph';\n\n\nexport abstract class DecoratorInstance {\n get name() { return this.parsedDecorator.name; }\n get isFunctionCall() { return !!this.parsedDecorator.isBareFnCall; }\n\n // decorator value/args are translated into a resolver when we process the decorator\n _decValueResolver?: Resolver;\n get decValueResolver() {\n return this._decValueResolver;\n }\n\n abstract readonly isRootDecorator: boolean;\n abstract readonly dataSource: EnvGraphDataSource;\n abstract readonly parsedDecorator: ParsedEnvSpecDecorator;\n\n abstract graph: EnvGraph;\n\n _schemaErrors: Array<SchemaError> = [];\n get schemaErrors() {\n return [\n ...this._schemaErrors,\n ...this._decValueResolver?.schemaErrors || [],\n ];\n }\n\n // error encountered during `execute` function\n _executionError?: Error;\n\n private decoratorDef?: ItemDecoratorDef | RootDecoratorDef;\n get incompatibleWith() {\n return this.decoratorDef?.incompatibleWith;\n }\n\n private processed = false;\n private processedData: any;\n async process() {\n if (this.processed) return;\n this.processed = true;\n\n if (!this.graph) throw new Error('expected graph to be set');\n\n try {\n const decRegistry = this.isRootDecorator\n ? this.graph.rootDecoratorsRegistry\n : this.graph.itemDecoratorsRegistry;\n this.decoratorDef = decRegistry[this.name];\n if (!this.decoratorDef) {\n throw new Error(`Unknown decorator: @${this.name}`);\n }\n\n // this is so we can deal with @type, where each data type is not a real resolver\n // so instead we just make a new dummy resolver holding the args\n if (\n this.decoratorDef.useFnArgsResolver\n && this.parsedDecorator.value instanceof ParsedEnvSpecFunctionCall\n ) {\n this._decValueResolver = convertParsedValueToResolvers(\n this.parsedDecorator.value.data.args,\n this.dataSource,\n this.graph.registeredResolverFunctions,\n );\n } else {\n this._decValueResolver = convertParsedValueToResolvers(\n this.parsedDecorator.value,\n this.dataSource,\n this.graph.registeredResolverFunctions,\n );\n }\n\n if (this.decValueResolver) {\n // process value resolver\n await this.decValueResolver.process(this);\n\n // process decorator according to definition\n // which can return another function, to be called later\n this.processedData = await this.decoratorDef.process?.(this.decValueResolver);\n }\n } catch (e) {\n this._schemaErrors.push(e instanceof SchemaError ? e : new SchemaError(e as Error));\n }\n }\n async execute() {\n await this.decoratorDef!.execute?.(this.processedData);\n }\n\n resolvedValue?: any;\n isResolved = false;\n\n async resolve() {\n if (this.isResolved) return this.resolvedValue;\n\n await this.process();\n if (!this.decValueResolver) throw new Error('expected decorator to have a value resolver');\n try {\n this.resolvedValue = await this.decValueResolver.resolve();\n } catch (err) {\n this._schemaErrors.push(err as any);\n }\n\n this.isResolved = true;\n return this.resolvedValue;\n }\n}\n\nexport class ItemDecoratorInstance extends DecoratorInstance {\n isRootDecorator = false;\n\n constructor(\n readonly configItem: ConfigItem,\n readonly dataSource: EnvGraphDataSource,\n readonly parsedDecorator: ParsedEnvSpecDecorator,\n ) {\n super();\n }\n get graph() { return this.dataSource.graph!; }\n}\n\nexport class RootDecoratorInstance extends DecoratorInstance {\n isRootDecorator = true;\n constructor(\n readonly dataSource: EnvGraphDataSource,\n readonly parsedDecorator: ParsedEnvSpecDecorator,\n ) {\n super();\n }\n get graph() { return this.dataSource.graph!; }\n}\n\n\n// ~ Root decorators ----------------------------------------\nexport type RootDecoratorDef<Processed = any> = {\n name: string,\n description?: string;\n isFunction?: boolean;\n deprecated?: boolean | string;\n incompatibleWith?: Array<string>;\n process?: (decoratorValue: Resolver) => (Processed | Promise<Processed>);\n execute?: (executeInput: Processed) => void | Promise<void>;\n useFnArgsResolver?: boolean,\n};\n\n// root decorators\nexport const builtInRootDecorators: Array<RootDecoratorDef<any>> = [\n {\n name: 'envFlag',\n deprecated: 'use @currentEnv instead',\n },\n {\n name: 'currentEnv',\n incompatibleWith: ['envFlag'],\n },\n {\n name: 'defaultRequired',\n process: (decVal) => {\n if (\n !decVal.isStatic\n || ![true, false, 'infer'].includes(decVal.staticValue as any)\n ) {\n throw new Error('@defaultRequired decorator value must be set to a static value of true, false, or \"infer\"');\n }\n },\n },\n {\n name: 'defaultSensitive',\n process: (decVal) => {\n if (\n (decVal.isStatic && !_.isBoolean(decVal.staticValue))\n || (!decVal.isStatic && decVal.fnName && decVal.fnName !== 'inferFromPrefix')\n ) {\n throw new Error('only true, false, or `inferFromPrefix()` is allowed for @defaultSensitive decorator');\n }\n },\n },\n {\n name: 'disable',\n },\n {\n name: 'generateTypes',\n isFunction: true,\n },\n {\n name: 'import',\n isFunction: true,\n process: (decVal) => {\n if (!decVal.arrArgs || decVal.arrArgs.length === 0) {\n throw new Error('@import decorator must have at least one argument - the path to import');\n }\n if (decVal.arrArgs.some((a) => !a.isStatic)) {\n throw new Error('@import decorator cannot use any dynamic values - all args must be static');\n }\n },\n },\n {\n name: 'plugin',\n isFunction: true,\n },\n {\n name: 'redactLogs',\n },\n {\n name: 'preventLeaks',\n },\n];\n\n\n\n// ~ Item decorators ----------------------------------------\nexport type ItemDecoratorDef<T = any> = {\n name: string,\n incompatibleWith?: Array<string>;\n isFunction?: boolean;\n deprecated?: boolean | string;\n process?: (decoratorValue: Resolver) => T | Promise<T>;\n execute?: (executeInput: T) => void | Promise<void>;\n useFnArgsResolver?: boolean,\n};\n\nexport const builtInItemDecorators: Array<ItemDecoratorDef<any>> = [\n {\n name: 'required',\n },\n {\n name: 'optional',\n incompatibleWith: ['required'],\n },\n {\n name: 'sensitive',\n },\n {\n name: 'type',\n useFnArgsResolver: true,\n },\n {\n name: 'example',\n },\n {\n name: 'docsUrl',\n deprecated: 'use `docs()` instead',\n },\n {\n name: 'docs',\n isFunction: true,\n },\n {\n name: 'icon',\n },\n];\n","import { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\n\nimport _ from '@env-spec/utils/my-dash';\nimport {\n ParsedEnvSpecFunctionArgs, ParsedEnvSpecFunctionCall, ParsedEnvSpecKeyValuePair, ParsedEnvSpecStaticValue,\n} from '@env-spec/parser';\n\nimport { ConfigItem } from './config-item';\nimport { SimpleQueue } from './simple-queue';\nimport { ResolutionError, SchemaError } from './errors';\nimport type { EnvGraphDataSource } from './data-source';\nimport { DecoratorInstance } from './decorators';\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]: ResolvedValue }\n | Array<ResolvedValue>;\n // Array<ConfigValue>;\n\nexport class Resolver {\n static def: ResolverDef;\n\n constructor(\n readonly arrArgs?: Array<Resolver>,\n readonly objArgs?: Record<string, Resolver>,\n readonly dataSource?: EnvGraphDataSource,\n ) {\n if (this.def.inferredType) this.inferredType = this.def.inferredType;\n }\n\n static get fnName() { return this.def.name; }\n\n get def() { return (this.constructor as typeof Resolver).def; }\n get fnName() { return this.def.name; }\n get label() { return this.def.label; }\n get icon() { return this.def.icon; }\n\n get isStatic() { return false; }\n get staticValue(): ResolvedValue { return undefined; }\n\n inferredType?: string;\n _schemaErrors: Array<SchemaError> = [];\n private _depsObj: Record<string, boolean> = {};\n\n get childResolvers(): Array<Resolver> {\n return [\n ...this.arrArgs ?? [],\n ...Object.values(this.objArgs ?? {}),\n ];\n }\n\n get schemaErrors(): Array<SchemaError> {\n return [\n ...this._schemaErrors,\n ...this.childResolvers.flatMap((r) => r.schemaErrors),\n ];\n }\n set schemaErrors(v: Array<SchemaError>) { throw new Error('set _schemaErrors instead'); }\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 private parent?: ConfigItem | DecoratorInstance;\n\n private meta: any;\n process(parent?: ConfigItem | DecoratorInstance) {\n this.parent = parent;\n\n const { argsSchema } = this.def;\n if (argsSchema?.type === 'array' && this.objArgs !== undefined) {\n this._schemaErrors.push(new SchemaError('Resolver does not support key-value args'));\n } else if (argsSchema?.type === 'object' && this.arrArgs !== undefined) {\n this._schemaErrors.push(new SchemaError('Resolver expects only key-value args'));\n }\n\n if (argsSchema?.arrayExactLength !== undefined) {\n if (this.arrArgs?.length !== argsSchema.arrayExactLength) {\n this._schemaErrors.push(\n new SchemaError(\n `expects exactly ${argsSchema.arrayExactLength} argument${argsSchema.arrayExactLength > 1 ? 's' : ''}`,\n ),\n );\n }\n }\n if (argsSchema?.arrayMinLength !== undefined) {\n if ((this.arrArgs?.length ?? 0) < argsSchema.arrayMinLength) {\n this._schemaErrors.push(\n new SchemaError(\n `expects at least ${argsSchema.arrayMinLength} argument${argsSchema.arrayMinLength > 1 ? 's' : ''}`,\n ),\n );\n }\n }\n if (argsSchema?.arrayMaxLength !== undefined) {\n if ((this.arrArgs?.length ?? 0) > argsSchema.arrayMaxLength) {\n this._schemaErrors.push(\n new SchemaError(`expects at most ${argsSchema.arrayMaxLength} argument${argsSchema.arrayMaxLength > 1 ? 's' : ''}`),\n );\n }\n }\n\n if (argsSchema?.objKeyMinLength !== undefined) {\n const objKeyLengths = Object.keys(this.objArgs || {}).length;\n if (objKeyLengths < argsSchema.objKeyMinLength) {\n this._schemaErrors.push(\n new SchemaError(\n `expects at least ${argsSchema.objKeyMinLength} key value arg${argsSchema.objKeyMinLength > 1 ? 's' : ''}`,\n ),\n );\n }\n }\n\n // call specific resolve fn for the resolver\n if (this._schemaErrors.length === 0) {\n try {\n this.meta = this.def.process?.call(this);\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 }\n\n // adding fn name to resolver schema errors\n if (!this.def.name.startsWith('\\0')) {\n for (const e of this._schemaErrors) {\n e.message = `${this.def.name}(): ${e.message}`;\n }\n }\n\n this.childResolvers.forEach((r) => {\n r.process(parent);\n });\n }\n\n // meant to be used by subclass _process methods\n protected addDep(key: string) {\n if (!this.envGraph!.configSchema[key]) {\n throw new Error(`invalid dependency: ${key}`);\n }\n this._depsObj[key] = true;\n }\n\n protected async getCurrentEnv() {\n if (!this.dataSource) throw new Error('expected dataSource to be set');\n await this.dataSource.resolveCurrentEnv();\n return this.dataSource.envFlagValue ? String(this.dataSource.envFlagValue) : undefined;\n }\n\n async resolve() {\n const resolvedValue = await this.def.resolve.call(this, this.meta);\n return resolvedValue;\n }\n\n get envGraph() {\n if (this.parent instanceof ConfigItem) {\n return this.parent.envGraph;\n } else if (this.parent instanceof DecoratorInstance) {\n return this.parent.graph;\n }\n }\n\n // meant to be used by subclass _resolve methods\n protected getDepValue(key: string) {\n // NOTE - this should not be called if the dependency is invalid\n // because we only try to resolve the item if all deps are valid\n const depItem = this.envGraph?.configSchema[key];\n if (!depItem) throw new Error(`Referenced item \"${key}\" not found`);\n if (!depItem.isValid) throw new Error(`Referenced item \"${key}\" is not valid`);\n return depItem.resolvedValue;\n }\n}\n\n// Built-in resolver fns ---------------------------------------------------------\n\nexport type ResolverDef<T = any> = {\n name: string;\n description?: string;\n label?: string;\n icon?: string;\n inferredType?: string;\n argsSchema?: {\n type: 'array' | 'object' | 'mixed';\n arrayExactLength?: number;\n arrayMinLength?: number;\n arrayMaxLength?: number;\n\n objKeyMinLength?: number;\n },\n process?: (this: Resolver) => T;\n resolve: (this: Resolver, state: T) => ResolvedValue | Promise<ResolvedValue>;\n};\n\n// special resolver class that just holds a static value - used internally only\nexport class StaticValueResolver extends Resolver {\n static def = {\n name: '\\0static', // used internally, so we add the extra \\0\n icon: 'bi:dash',\n async resolve(this: Resolver) {\n return (this as StaticValueResolver).staticValue;\n },\n };\n // helper so plugins dont need to import and use instanceof\n get isStatic() { return true; }\n get staticValue() { return this._staticValue; }\n constructor(readonly _staticValue: ResolvedValue) {\n super([]);\n if (_staticValue !== undefined) {\n this.inferredType = typeof _staticValue;\n }\n }\n}\n\n// special resolver class for bare decorator function calls `@fn(arr1, arr2, k1=v1)`\n// because the _decorator_ may need to resolve each arg individually to use them\n// rather than there being a single resolver that resolves to a single value\nexport class FunctionArgsResolver extends Resolver {\n // we might want to just have a resolve function which resolves all children\n // but it might be useful to let the decorator do it individually\n // so that some can be skipped depending on the other args\n static def = {\n name: '\\0fnArgs', // used internally, so we add the extra \\0\n label: 'function args',\n icon: 'bi:dash',\n // not actualyl used\n resolve() { return undefined; },\n };\n // special helper to resolve all child args\n async resolve() {\n const resolvedArrayArgs = [] as Array<any>;\n const resolvedObjArgs = {} as Record<string, any>;\n for (const arg of this.arrArgs || []) {\n resolvedArrayArgs.push(await arg.resolve());\n }\n for (const key in this.objArgs) {\n resolvedObjArgs[key] = await this.objArgs[key].resolve();\n }\n return {\n arr: resolvedArrayArgs,\n obj: resolvedObjArgs,\n };\n }\n}\n\n// special resolver class that represents an error when an unknown resolver is used - used internally only\nexport class ErrorResolver extends Resolver {\n static def: ResolverDef = {\n name: '\\0error', // used internally, so we add the extra \\0\n icon: 'bi:dash',\n async resolve() { return undefined; },\n };\n constructor(readonly err: SchemaError) {\n super([]);\n this._schemaErrors.push(err);\n }\n}\n\nexport function createResolver<T>(def: ResolverDef<T>) {\n const ResolverClass = class extends Resolver {};\n ResolverClass.def = def;\n return ResolverClass as typeof Resolver;\n}\n\n\nexport const ConcatResolver: typeof Resolver = createResolver({\n name: 'concat',\n icon: 'material-symbols:join',\n inferredType: 'string',\n argsSchema: {\n type: 'array',\n arrayMinLength: 2,\n },\n async resolve() {\n const resolvedValues: Array<string> = [];\n for (const arg of this.arrArgs ?? []) {\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 const FallbackResolver: typeof Resolver = createResolver({\n name: 'fallback',\n icon: 'memory:table-top-stairs-up',\n argsSchema: {\n type: 'array',\n arrayMinLength: 2,\n },\n async resolve() {\n for (const arg of this.arrArgs ?? []) {\n // TODO: handle child resolver failure?\n const resolvedChildValue = await arg.resolve();\n if (resolvedChildValue !== undefined && resolvedChildValue !== '') {\n return resolvedChildValue;\n }\n }\n },\n});\n\nconst execQueue = new SimpleQueue();\nexport const ExecResolver: typeof Resolver = createResolver({\n name: 'exec',\n icon: 'iconoir:terminal',\n argsSchema: {\n type: 'array',\n arrayExactLength: 1,\n },\n async resolve() {\n const commandStr = await this.arrArgs?.[0].resolve();\n if (typeof commandStr !== 'string') {\n throw new ResolutionError('exec() expects a string 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 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 const RefResolver: typeof Resolver = createResolver({\n name: 'ref',\n icon: 'mdi-light:content-duplicate',\n argsSchema: {\n type: 'array',\n arrayExactLength: 1,\n },\n process() {\n // TODO: should this be handled by the argsSchema?\n if (!(this.arrArgs?.[0] instanceof StaticValueResolver)) {\n throw new SchemaError('expects a single static value passed in');\n }\n const refKey = this.arrArgs[0].staticValue;\n if (typeof refKey !== 'string') {\n throw new SchemaError('expects a string keyname passed in');\n }\n this.addDep(refKey);\n return refKey;\n },\n async resolve(refKey) {\n return this.getDepValue(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 const RegexResolver: typeof Resolver = createResolver({\n name: 'regex',\n icon: 'mdi:regex',\n argsSchema: {\n type: 'array',\n arrayExactLength: 1,\n },\n process() {\n if (!(this.arrArgs?.[0] instanceof StaticValueResolver)) {\n throw new SchemaError('expects a single static value passed in');\n }\n const regexStr = this.arrArgs[0].staticValue;\n if (typeof regexStr !== 'string') {\n throw new SchemaError('expects a string');\n }\n try {\n return new RegExp(regexStr);\n } catch (err) {\n throw new SchemaError((err as Error).message);\n }\n },\n async resolve(regex) {\n return regex;\n },\n});\n\nexport const RemapResolver: typeof Resolver = createResolver({\n name: 'remap',\n icon: 'codicon:replace',\n argsSchema: {\n type: 'mixed',\n arrayExactLength: 1,\n objKeyMinLength: 1,\n },\n process() {\n return this.objArgs!;\n },\n async resolve(remappings) {\n const originalValue = await this.arrArgs![0].resolve();\n for (const [remappedVal, matchValResolver] of Object.entries(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\nexport const ForEnvResolver: typeof Resolver = createResolver({\n name: 'forEnv',\n icon: 'tabler:flag-question',\n inferredType: 'boolean',\n argsSchema: {\n type: 'array',\n arrayMinLength: 1,\n },\n process() {\n // TODO: check if all options are static\n // TODO: check against envFlag enum options?\n const matchEnvs = this.arrArgs!.map((r) => String(r.staticValue));\n return matchEnvs;\n },\n async resolve(matchEnvs) {\n // this will trigger resolution of the current env if not already done\n const currentEnv = await this.getCurrentEnv();\n if (!currentEnv) throw new Error('current environment is not set');\n return currentEnv && matchEnvs.includes(currentEnv || '');\n },\n});\n\nexport const EqResolver: typeof Resolver = createResolver({\n name: 'eq',\n icon: 'material-symbols:equal',\n inferredType: 'boolean',\n argsSchema: {\n type: 'array',\n arrayExactLength: 2,\n },\n process() {\n return { left: this.arrArgs![0], right: this.arrArgs![1] };\n },\n async resolve({ left, right }) {\n const leftVal = await left.resolve();\n const rightVal = await right.resolve();\n return leftVal === rightVal;\n },\n});\n\nexport const IfResolver: typeof Resolver = createResolver({\n name: 'if',\n icon: 'material-symbols:help-center', // question mark\n argsSchema: {\n type: 'array',\n arrayMinLength: 2,\n },\n process() {\n const condition = this.arrArgs![0];\n const trueVal = this.arrArgs![1];\n const falseVal = this.arrArgs![2];\n\n // we can infer a type if both true and false cases have a matching inferred type\n if (!falseVal || trueVal.inferredType === falseVal.inferredType) {\n this.inferredType = trueVal.inferredType;\n }\n\n return { condition, trueVal, falseVal };\n },\n async resolve({ condition, trueVal, falseVal }) {\n const conditionVal = await condition.resolve();\n if (conditionVal) {\n return trueVal.resolve();\n } else {\n return falseVal?.resolve();\n }\n },\n});\n\n\n// Special function for `@defaultSensitive=inferFromPrefix(PUBLIC_)`\n// we may want to formalize this pattern of a resolver function used in a root decorator\n// but resolved within the context of a specific item\nexport const InferFromPrefixResolver: typeof Resolver = createResolver({\n name: 'inferFromPrefix',\n icon: 'material-symbols:help-center', // question mark\n argsSchema: {\n type: 'array',\n arrayExactLength: 1,\n },\n process() {\n // TODO: we should validate that this is only used within @defaultSensitive root decorator\n return this.arrArgs![0].staticValue;\n },\n async resolve(_prefix) {\n // this is not actually meant to be resolved to a value\n // instead our code will just use the args directly\n return undefined;\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 ForEnvResolver,\n EqResolver,\n IfResolver,\n RegexResolver,\n InferFromPrefixResolver,\n];\n\n/// /\n\nexport function convertParsedValueToResolvers(\n value: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecFunctionArgs | undefined,\n dataSource: EnvGraphDataSource | undefined,\n registeredResolvers: Record<string, ResolverChildClass>,\n): Resolver | undefined {\n if (value === undefined) {\n return undefined;\n } else if (value instanceof ParsedEnvSpecStaticValue) {\n return new StaticValueResolver(value.unescapedValue);\n } else if (\n value instanceof ParsedEnvSpecFunctionCall\n // this is used only for bare decorator fn calls `@fn(arr1, arr2, k1=v1)`\n || value instanceof ParsedEnvSpecFunctionArgs\n ) {\n let ResolverFnClass: ResolverChildClass | undefined;\n let argsFromParser: Array<ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | ParsedEnvSpecKeyValuePair>;\n if (value instanceof ParsedEnvSpecFunctionCall) {\n // we look up the resolver by function name\n ResolverFnClass = registeredResolvers[value.name];\n if (!ResolverFnClass) {\n return new ErrorResolver(new SchemaError(`Unknown resolver function: ${value.name}()`));\n }\n argsFromParser = value.data.args.values;\n } else {\n // special no-op resolver which just holds all the args resolvers\n // our decorator functions can then access and resolve those children as necessary\n ResolverFnClass = FunctionArgsResolver;\n argsFromParser = value.values;\n }\n\n let arrArgsAsResolvers: Array<Resolver> | undefined;\n let objArgsAsResolvers: Record<string, Resolver> | undefined;\n for (const arg of argsFromParser) {\n if (arg instanceof ParsedEnvSpecKeyValuePair) {\n objArgsAsResolvers ??= {};\n const valResolver = convertParsedValueToResolvers(arg.value, dataSource, registeredResolvers);\n if (!valResolver) throw new Error('Did not expect to find undefined resolver in key-value arg');\n objArgsAsResolvers[arg.key] = valResolver;\n } else {\n if (objArgsAsResolvers) {\n return new ErrorResolver(new SchemaError('After switching to key-value function args, cannot switch back'));\n }\n const argResolver = convertParsedValueToResolvers(arg, dataSource, registeredResolvers);\n if (!argResolver) throw new Error('Did not expect to find undefined resolver in array arg');\n arrArgsAsResolvers ??= [];\n arrArgsAsResolvers.push(argResolver);\n }\n }\n return new ResolverFnClass(arrArgsAsResolvers, objArgsAsResolvers, dataSource);\n } else {\n throw new Error('Unknown value type');\n }\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 _ 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(`![icon](data:image/svg+xml;utf-8,${encodeURIComponent(iconSvg)}) `);\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 const isRequired = item.isRequired && !item.isRequiredDynamic;\n itemSrc.push(`readonly ${item.key}${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, typesPath: string) {\n if (lang !== 'ts') throw new Error(`Unsupported @generateTypes lang: ${lang}`);\n\n const tsSrc = await generateTsTypesSrc(graph);\n await fs.promises.writeFile(typesPath, tsSrc, 'utf-8');\n}\n","import _ from '@env-spec/utils/my-dash';\n\nimport { FileBasedDataSource, type EnvGraphDataSource } from './data-source';\nimport type { VarlockErrorLocationDetails } from './errors';\n\nexport function getErrorLocation(source: EnvGraphDataSource, parserNode: any): VarlockErrorLocationDetails | undefined {\n if (!(source instanceof FileBasedDataSource)) return;\n if (!parserNode.data || !parserNode.data._location || !_.isNumber(parserNode.data._location.start.line)) return;\n const lineNumber = parserNode.data._location?.start.line as number;\n const colNumber = parserNode.data._location?.start.column as number;\n return {\n id: source.fullPath,\n lineNumber,\n colNumber,\n lineStr: source.rawContents?.split('\\n')[lineNumber - 1]?.trim() || '',\n };\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\nimport {\n builtInItemDecorators, builtInRootDecorators, RootDecoratorInstance, type ItemDecoratorDef, type RootDecoratorDef,\n} from './decorators';\nimport { getErrorLocation } from './error-location';\nimport type { VarlockPlugin } from './plugins';\n\nconst processExists = !!globalThis.process;\nconst originalProcessEnv = { ...processExists && process.env };\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 /** root data source (.env.schema) */\n rootDataSource?: EnvGraphDataSource;\n\n /** place to store process.env overrides */\n overrideValues: Record<string, string | undefined> = {};\n\n /** config item key of env flag (toggles env-specific data sources enabled) */\n envFlagKey?: string;\n /** graph-level fallback value for environment flag */\n envFlagFallback?: string;\n\n configSchema: Record<string, ConfigItem> = {};\n\n\n /** virtual imports for testing */\n virtualImports?: Record<string, string>;\n setVirtualImports(basePath: string, files: Record<string, string>) {\n this.virtualImports = {};\n for (const [fileName, fileContents] of Object.entries(files)) {\n this.virtualImports[path.join(basePath, fileName)] = fileContents;\n }\n }\n\n\n get sortedDataSources() {\n function getSourceAndChildren(s: EnvGraphDataSource): Array<EnvGraphDataSource> {\n return [s, ...s.children ? s.children.flatMap(getSourceAndChildren) : []];\n }\n return this.rootDataSource ? getSourceAndChildren(this.rootDataSource) : [];\n }\n\n registeredResolverFunctions: Record<string, ResolverChildClass> = {};\n registerResolver(resolverClass: ResolverChildClass) {\n // because its a class, we can't use `name`\n const fnName = resolverClass.fnName;\n if (fnName in this.registeredResolverFunctions) {\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 const name = factory.dataTypeName;\n if (name in this.dataTypesRegistry) {\n throw new Error(`Data type \"${name}\" already registered`);\n }\n this.dataTypesRegistry[factory.dataTypeName] = factory;\n }\n\n itemDecoratorsRegistry: Record<string, ItemDecoratorDef> = {};\n registerItemDecorator(decoratorDef: ItemDecoratorDef) {\n const name = decoratorDef.name;\n if (name in this.itemDecoratorsRegistry) {\n throw new Error(`Item decorator \"${name}\" already registered`);\n }\n this.itemDecoratorsRegistry[decoratorDef.name] = decoratorDef;\n }\n\n rootDecoratorsRegistry: Record<string, RootDecoratorDef> = {};\n registerRootDecorator(decoratorDef: RootDecoratorDef) {\n const name = decoratorDef.name;\n if (name in this.itemDecoratorsRegistry) {\n throw new Error(`Root decorator \"${name}\" already registered`);\n }\n this.rootDecoratorsRegistry[decoratorDef.name] = decoratorDef;\n }\n\n constructor() {\n // register base data types (string, number, boolean, etc)\n for (const dataType of BaseDataTypes) {\n this.registerDataType(dataType);\n }\n // register base resolvers (concat, ref, exec, etc)\n for (const resolverClass of BaseResolvers) {\n this.registerResolver(resolverClass);\n }\n // base root decorators (envFlag, generateTypes, import, etc)\n for (const rootDec of builtInRootDecorators) {\n this.registerRootDecorator(rootDec);\n }\n // base item decorators (required, sensitive, docs, etc)\n for (const itemDec of builtInItemDecorators) {\n this.registerItemDecorator(itemDec);\n }\n\n this.overrideValues = originalProcessEnv;\n }\n\n async setRootDataSource(source: EnvGraphDataSource) {\n if (this.rootDataSource) throw new Error('root data source already set');\n this.rootDataSource = source;\n source.graph = this;\n await source.finishInit();\n }\n\n async finishLoad() {\n // bail early if we already have issues\n for (const source of this.sortedDataSources) {\n if (!source.isValid) return;\n }\n for (const plugin of this.plugins) {\n if (plugin.loadingError) return;\n }\n\n // process root decorators\n let processingError = false;\n for (const source of this.sortedDataSources) {\n if (source.disabled) continue;\n for (const decInstance of source.rootDecorators) {\n await decInstance.process();\n if (decInstance.schemaErrors.length) processingError = true;\n }\n }\n\n // process config items\n // checks decorators, sets data type, checks resolver args, adds deps\n for (const itemKey in this.configSchema) {\n const item = this.configSchema[itemKey];\n await item.process();\n if (item.errors.length) processingError = true;\n }\n\n if (processingError) return;\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 // now execute all root decorators\n for (const source of this.sortedDataSources) {\n if (source.disabled) continue;\n for (const decInstance of source.rootDecorators) {\n if (!decInstance.decValueResolver) throw new Error('expected decorator value resolver');\n await this.resolveEnvValues(decInstance.decValueResolver.deps);\n try {\n await decInstance.execute();\n } catch (err) {\n decInstance._executionError = new SchemaError(\n err as Error,\n { location: getErrorLocation(source, decInstance.parsedDecorator) },\n );\n }\n }\n }\n\n // maybe should be part of a _resolve all root decorators_ step?\n await this.getRootDec('redactLogs')?.resolve();\n await this.getRootDec('preventLeaks')?.resolve();\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.dependencyKeys;\n }\n return adjList;\n }\n\n async resolveEnvValues(keys?: Array<string>): Promise<void> {\n const keysToResolve = keys ?? _.keys(this.configSchema);\n if (!keysToResolve.length) return;\n\n const adjList = _.pick(this.graphAdjacencyList, keysToResolve);\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 = _.fromPairs(keysToResolve.map((key) => [key, 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.getRootDec('redactLogs')?.resolvedValue ?? true;\n serializedGraph.settings.preventLeaks = this.getRootDec('preventLeaks')?.resolvedValue ?? 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 getRootDec(decoratorName: string) {\n // currently this is just used above, but may want to rework\n // to track values once as we process sources\n const sources = Array.from(this.sortedDataSources).reverse();\n for (const s of sources) {\n if (s.disabled) continue;\n // we skip root decorators if the file was being _partially_ imported\n if (s.isPartialImport) continue;\n const dec = s.getRootDec(decoratorName);\n if (dec) return dec;\n }\n return undefined;\n }\n getRootDecFns(decoratorName: string) {\n const allDecs: Array<RootDecoratorInstance> = [];\n const sources = Array.from(this.sortedDataSources).reverse();\n for (const source of sources) {\n if (source.disabled) continue;\n // we skip root decorators if the file was being _partially_ imported\n if (source.isPartialImport) continue;\n const decs = source.getRootDecFns(decoratorName);\n allDecs.push(...decs);\n }\n return allDecs;\n }\n\n\n /** plugins installed globally in the graph */\n plugins: Array<VarlockPlugin> = [];\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 {\n convertParsedValueToResolvers, type ResolvedValue, type Resolver, StaticValueResolver,\n} from './resolver';\nimport { ItemDecoratorInstance } from './decorators';\n\nexport type ConfigItemDef = {\n description?: string;\n // TODO: translate parser decorator class into our own generic version\n parsedDecorators?: Array<ParsedEnvSpecDecorator>;\n parsedValue: ParsedEnvSpecStaticValue | ParsedEnvSpecFunctionCall | undefined;\n\n resolver?: Resolver;\n decorators?: Array<ItemDecoratorInstance>;\n};\nexport type ConfigItemDefAndSource = {\n itemDef: ConfigItemDef;\n source: EnvGraphDataSource;\n};\n\n\nexport class ConfigItem {\n constructor(\n readonly envGraph: EnvGraph,\n readonly key: string,\n ) {\n }\n\n /**\n * fetch ordered list of definitions for this item, by following up sorted data sources list\n */\n get defs() {\n // TODO: this is somewhat inneficient, because some of the checks on the data source follow up the parent chain\n // we may want to cache the definition list at some point when loading is complete\n // although we need it to be dynamic during the loading process when doing any early resolution of the envFlag\n const defs: Array<ConfigItemDefAndSource> = [];\n for (const source of this.envGraph.sortedDataSources) {\n if (!source.configItemDefs[this.key]) continue;\n if (source.disabled) continue;\n if (source.importKeys && !source.importKeys.includes(this.key)) continue;\n const itemDef = source.configItemDefs[this.key];\n if (itemDef) defs.push({ itemDef, source });\n }\n return defs;\n }\n\n get description() {\n for (const def of this.defs) {\n if (def.itemDef.description) return def.itemDef.description;\n }\n }\n\n get icon() {\n const explicitIconDec = this.getDec('icon');\n if (explicitIconDec) return explicitIconDec.resolvedValue;\n return this.dataType?.icon;\n }\n get docsLinks() {\n // matching { url, description } from OpenAPI\n const links: Array<{ url: string, description?: string }> = [];\n\n // add docs info from the data type\n if (this.dataType?.docsEntries) {\n for (const entry of this.dataType.docsEntries) {\n if (_.isPlainObject(entry)) links.push(entry);\n else links.push({ url: entry });\n }\n }\n\n const docsUrlDec = this.getDec('docsUrl');\n if (docsUrlDec) {\n links.push({ url: docsUrlDec.resolvedValue });\n }\n\n const docsDecs = this.getDecFns('docs');\n for (const docsDec of docsDecs) {\n const decVal = docsDec.resolvedValue;\n if (!decVal.arr || !_.isArray(decVal.arr)) throw new Error('expected an array of docs() args');\n if (decVal.arr.length === 1) {\n links.push({ url: decVal.arr[0] });\n } else if (decVal.arr.length === 2) {\n links.push({ url: decVal.arr[1], description: decVal.arr[0] });\n }\n }\n return links;\n }\n\n get valueResolver() {\n // special case for process.env overrides - always return the static value\n if (this.key in this.envGraph.overrideValues) {\n return new StaticValueResolver(this.envGraph.overrideValues[this.key]);\n }\n\n for (const def of this.defs) {\n if (def.itemDef.resolver) {\n return def.itemDef.resolver;\n }\n }\n }\n\n allDecorators: Array<ItemDecoratorInstance> = [];\n effectiveDecorators: Record<string, ItemDecoratorInstance> = {};\n effectiveDecoratorFns: Record<string, Array<ItemDecoratorInstance>> = {};\n\n getDec(decoratorName: string) {\n return this.effectiveDecorators[decoratorName];\n }\n getDecFns(decoratorName: string) {\n return this.effectiveDecoratorFns[decoratorName] || [];\n }\n async resolveDecorators() {\n // ensures all decorator values have been resolved\n for (const dec of Object.values(this.effectiveDecorators)) {\n await dec.resolve();\n }\n for (const decs of Object.values(this.effectiveDecoratorFns)) {\n for (const dec of decs) {\n await dec.resolve();\n }\n }\n }\n\n\n dataType?: EnvGraphDataType;\n _schemaErrors: Array<SchemaError> = [];\n get resolverSchemaErrors() {\n return this.valueResolver?.schemaErrors || [];\n }\n get decoratorSchemaErrors() {\n return _.values(this.allDecorators).flatMap((d) => d.schemaErrors);\n }\n\n private isProcessed = false;\n async process() {\n if (this.isProcessed) return;\n this.isProcessed = true;\n\n // process value resolver\n for (const def of this.defs) {\n if (def.itemDef.parsedValue && !def.itemDef.resolver) {\n def.itemDef.resolver = convertParsedValueToResolvers(\n def.itemDef.parsedValue,\n def.source,\n this.envGraph.registeredResolverFunctions,\n );\n }\n await def.itemDef.resolver?.process(this);\n }\n\n // process decorators and decorator value resolvers\n for (const def of this.defs) {\n def.itemDef.decorators = def.itemDef.parsedDecorators?.map((d) => new ItemDecoratorInstance(this, def.source, d));\n // track all non fn call decs used in this definition - so we can error if used twice\n const decKeysInThisDef = new Set<string>();\n const allDecsInThisDef = def.itemDef.decorators?.map((d) => d.name);\n for (const dec of def.itemDef.decorators || []) {\n await dec.process();\n this.allDecorators?.push(dec);\n // roll up active decorators\n if (dec.isFunctionCall) {\n // collects all function calls into an array\n this.effectiveDecoratorFns[dec.name] ||= [];\n this.effectiveDecoratorFns[dec.name].push(dec);\n } else {\n if (decKeysInThisDef.has(dec.name)) {\n dec._schemaErrors.push(new SchemaError(`decorator @${dec.name} cannot be used twice in same definition`));\n continue;\n }\n if (dec.incompatibleWith) {\n for (const otherDecName of dec.incompatibleWith) {\n if (allDecsInThisDef?.includes(otherDecName)) {\n dec._schemaErrors.push(new SchemaError(`decorator @${dec.name} is incompatible with @${otherDecName} in the same definition`));\n continue;\n }\n }\n }\n\n // takes a single decorator as the one with most precedence\n this.effectiveDecorators[dec.name] ||= dec;\n }\n decKeysInThisDef.add(dec.name);\n }\n }\n\n const typeDec = this.getDec('type');\n let dataTypeName: string | undefined;\n let dataTypeArgs: any;\n // TODO: this will not currently support any resolver functions within type settings\n const typeDecParsedValue = typeDec?.parsedDecorator.value;\n if (typeDecParsedValue instanceof ParsedEnvSpecStaticValue) {\n dataTypeName = typeDecParsedValue.value;\n } else if (typeDecParsedValue instanceof ParsedEnvSpecFunctionCall) {\n dataTypeName = typeDecParsedValue.name;\n dataTypeArgs = typeDecParsedValue.simplifiedArgs;\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 && this.valueResolver?.inferredType) {\n dataTypeName = this.valueResolver.inferredType;\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 dependencyKeys() {\n return _.uniq([\n ...this.valueResolver?.deps || [],\n ..._.values(this.effectiveDecorators).flatMap(\n (dec) => dec.decValueResolver?.deps || [],\n ),\n ..._.values(this.effectiveDecoratorFns).flatMap(\n (decArr) => decArr.flatMap(\n (d) => d.decValueResolver?.deps || [],\n ),\n ),\n ]);\n }\n\n /**\n * special early resolution helper\n * currently used to resolve the envFlag before everything else has been loaded\n * */\n async earlyResolve() {\n await this.process();\n\n // process and resolve any other items our env flag depends on\n for (const depKey of this.dependencyKeys) {\n const depItem = this.envGraph.configSchema[depKey];\n if (!depItem) {\n throw new Error(`eager resolution eror - non-existant dependency: ${depKey}`);\n }\n await depItem.earlyResolve();\n }\n await this.resolve();\n }\n\n _isRequired: boolean = true;\n /**\n * need to track if required-ness is dynamic, e.g. based on current env\n * because that will affect type generation (only _always_ required items are never undefined)\n * */\n _isRequiredDynamic: boolean = false;\n\n private async processRequired() {\n try {\n for (const def of this.defs) {\n const requiredDecs = def.itemDef.decorators?.filter((d) => d.name === 'required' || d.name === 'optional') || [];\n // NOTE - checks for duplicates and using required+optional together are already handled more generally\n const requiredDec = requiredDecs[0];\n\n // Explicit per-item decorators\n if (requiredDec) {\n const usingOptional = requiredDec.name === 'optional';\n\n // need to track if required-ness is dynamic\n this._isRequiredDynamic = requiredDec.decValueResolver\n ? requiredDec.decValueResolver.staticValue === undefined : false;\n\n const requiredDecoratorVal = await requiredDec.resolve();\n if (!_.isBoolean(requiredDecoratorVal)) {\n throw new SchemaError('@required/@optional must resolve to a boolean');\n }\n this._isRequired = usingOptional ? !requiredDecoratorVal : requiredDecoratorVal;\n return;\n }\n\n // Root-level @defaultRequired\n const defaultRequiredDec = def.source.getRootDec('defaultRequired');\n if (defaultRequiredDec) {\n const defaultRequiredVal = await defaultRequiredDec.resolve();\n // @defaultRequired = true/false\n if (_.isBoolean(defaultRequiredVal)) {\n this._isRequired = defaultRequiredVal;\n return;\n\n // @defaultRequired = infer\n // we infer based on if a value is set in this source\n } else if (defaultRequiredVal === 'infer') {\n if (def.itemDef.resolver) {\n if (def.itemDef.resolver instanceof StaticValueResolver) {\n this._isRequired = def.itemDef.resolver.staticValue !== undefined && def.itemDef.resolver.staticValue !== '';\n } else {\n this._isRequired = true;\n }\n } else {\n this._isRequired = false;\n }\n return;\n } else {\n throw new SchemaError('@defaultRequired must resolve to a boolean or \"infer\"');\n }\n }\n }\n } catch (err) {\n this._schemaErrors.push(err instanceof SchemaError ? err : new SchemaError(err as Error));\n }\n }\n get isRequired() { return this._isRequired; }\n get isRequiredDynamic() { return this._isRequiredDynamic; }\n\n\n _isSensitive: boolean = true;\n get isSensitive(): boolean {\n return this._isSensitive;\n }\n private async processSensitive() {\n const sensitiveFromDataType = this.dataType?.isSensitive;\n for (const def of this.defs) {\n const sensitiveDec = def.itemDef.decorators?.find((d) => d.name === 'sensitive');\n if (sensitiveDec) {\n const sensitiveDecValue = await sensitiveDec.resolve();\n if (sensitiveDecValue !== undefined) {\n this._isSensitive = sensitiveDecValue;\n return;\n }\n // TODO: do we want an opposite decorator similar to @required/@optional -- maybe @public?\n }\n\n // we skip `defaultSensitive` behaviour if the data type specifies sensitivity\n if (sensitiveFromDataType !== undefined) continue;\n\n const defaultSensitiveDec = def.source.getRootDec('defaultSensitive');\n if (defaultSensitiveDec) {\n if (!defaultSensitiveDec.decValueResolver) throw new Error('expected defaultSensitive to have a value resolver');\n // special case for inferFromPrefix()\n // TODO: formalize this pattern of a root decorator running a function _within the context of an item_\n if (defaultSensitiveDec.decValueResolver.fnName === 'inferFromPrefix') {\n const prefix = defaultSensitiveDec.decValueResolver.arrArgs![0].staticValue;\n if (!_.isString(prefix)) {\n this._schemaErrors.push(new SchemaError('@defaultSensitive inferFromPrefix() requires a single string argument'));\n return;\n }\n this._isSensitive = !this.key.startsWith(prefix);\n return;\n } else {\n const defaultSensitiveVal = await defaultSensitiveDec.resolve();\n if (!_.isBoolean(defaultSensitiveVal)) {\n this._schemaErrors.push(new SchemaError('@defaultSensitive must resolve to a boolean value'));\n } else {\n this._isSensitive = defaultSensitiveVal;\n return;\n }\n }\n }\n }\n if (sensitiveFromDataType !== undefined) this._isSensitive = sensitiveFromDataType;\n }\n\n\n get errors() {\n return _.compact([\n ...this._schemaErrors || [],\n ...this.resolverSchemaErrors || [],\n ...this.decoratorSchemaErrors || [],\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(reset = false) {\n // bail early if we have a schema error\n if (this._schemaErrors.length) return;\n if (this.resolverSchemaErrors.length) return;\n\n if (reset) {\n this.isResolved = false;\n this.isValidated = false;\n this.resolutionError = undefined;\n this.coercionError = undefined;\n this.validationErrors = undefined;\n this.resolvedRawValue = undefined;\n this.resolvedValue = undefined;\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 await this.resolveDecorators();\n await this.processRequired();\n await this.processSensitive();\n\n if (!this.valueResolver) {\n this.isResolved = true;\n this.resolvedRawValue = undefined;\n } else {\n try {\n this.resolvedRawValue = await this.valueResolver.resolve();\n } catch (err) {\n if (err instanceof ResolutionError) {\n this.resolutionError = err;\n } else {\n this.resolutionError = new ResolutionError(`error resolving value: ${err}`);\n this.resolutionError.cause = err;\n }\n }\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 = await 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 path from 'node:path';\nimport { exec as execCb } from 'node:child_process';\nimport fsSync from 'node:fs';\nimport fs from 'node:fs/promises';\nimport os from 'node:os';\nimport { promisify } from 'node:util';\nimport crypto from 'node:crypto';\nimport https from 'node:https';\nimport semver from 'semver';\nimport _ from '@env-spec/utils/my-dash';\nimport { pathExists } from '@env-spec/utils/fs-utils';\n\n\nimport { FileBasedDataSource, type EnvGraphDataSource } from './data-source';\nimport {\n CoercionError, ResolutionError, SchemaError, ValidationError,\n} from './errors';\nimport { getErrorLocation } from './error-location';\nimport { createResolver, type ResolverDef } from './resolver';\nimport type {\n DecoratorInstance, ItemDecoratorDef, RootDecoratorDef, RootDecoratorInstance,\n} from './decorators';\nimport { createEnvGraphDataType } from './data-types';\n\nimport Debug, { type Debugger } from 'debug';\nimport type { EnvGraph } from './env-graph';\n\n// module caching means the file will not be executed multiple times\n// so we track just to ensure we don't attempt to do load it multiple times\nconst importedPluginModulePaths = new Set<string>();\n\n\nexport class VarlockPlugin {\n // helper so end user code can get same error classes\n readonly ERRORS = {\n ValidationError,\n CoercionError,\n SchemaError,\n ResolutionError,\n };\n\n private _packageJson?: Record<string, any>;\n\n private _name?: string;\n get name() { return this._packageJson?.name || this._name || 'unnamed plugin'; }\n set name(val: string) { this._name = val; }\n\n private _version?: string;\n get version() { return this._packageJson?.version || this._version || '0.0.0'; }\n set version(val: string) { this._version = val; }\n\n private _icon?: string;\n get icon() { return this._icon || 'mdi:puzzle'; }\n set icon(val: string) { this._icon = val; }\n\n loadingError?: Error;\n\n readonly localPath?: string;\n\n /** reference to the `@plugin()` decorator instance(s) that installed the plugin */\n installDecoratorInstances: Array<DecoratorInstance> = [];\n\n type: 'single-file' | 'package';\n\n constructor(opts: {\n type: 'single-file' | 'package',\n localPath: string,\n loadingError?: Error,\n packageJson?: { name: string; version?: string; description?: string };\n }) {\n this.type = opts.type;\n this.localPath = opts?.localPath;\n this._packageJson = opts?.packageJson;\n }\n\n // awkwardly using get here to make sure we bind the debug function to this\n // which lets us destructure it in plugin code\n private debugger: Debugger | undefined;\n get debug() {\n return (...args: Parameters<Debugger>) => {\n if (!this.debugger) {\n if (!this.name) throw new Error('expected plugin name to be set before using debug');\n this.debugger = Debug(`varlock:plugin:${this.name}`);\n }\n return this.debugger(...args);\n };\n }\n\n\n readonly dataTypes?: Array<Parameters<typeof createEnvGraphDataType>[0]> = [];\n registerDataType(dataTypeDef: Parameters<typeof createEnvGraphDataType>[0]) {\n this.debug('registerDataType', dataTypeDef.name);\n this.dataTypes!.push(dataTypeDef);\n }\n\n readonly rootDecorators?: Array<RootDecoratorDef<any>> = [];\n registerRootDecorator<T>(decoratorDef: RootDecoratorDef<T>) {\n this.debug('registerRootDecorator', decoratorDef.name);\n this.rootDecorators!.push(decoratorDef);\n }\n\n readonly itemDecorators?: Array<ItemDecoratorDef<any>> = [];\n registerItemDecorator<T>(decoratorDef: ItemDecoratorDef<T>) {\n this.debug('registerItemDecorator', decoratorDef.name);\n this.itemDecorators!.push(decoratorDef);\n }\n\n readonly resolverFunctions?: Array<ResolverDef<any>> = [];\n registerResolverFunction<T>(resolverDef: ResolverDef<T>) {\n this.debug('registerResolverFunction', resolverDef.name);\n this.resolverFunctions!.push(resolverDef);\n }\n\n get pluginFilePath() {\n if (this.type === 'single-file') return this.localPath!;\n const pluginExport = this._packageJson?.exports?.['./plugin'] || '';\n if (!pluginExport) throw new Error('Plugin package.json is missing ./plugin export');\n return path.join(this.localPath!, pluginExport);\n }\n\n async executePluginModule() {\n // temporarily attach plugin to globalThis so dynamically imported module can access it\n (globalThis as any).plugin = this;\n\n try {\n // slightly nicer error than the default MODULE_NOT_FOUND\n if (!await pathExists(this.pluginFilePath)) throw new Error(`Plugin file not found: ${this.pluginFilePath}`);\n\n importedPluginModulePaths.add(this.pluginFilePath);\n\n // note - we don't export anything\n // instead we inject the plugin, and then modify it\n\n await import(this.pluginFilePath);\n } catch (err) {\n // TODO: how exactly to expose this?\n this.loadingError = err as Error;\n }\n delete (globalThis as any).plugin;\n }\n}\n\n\n\nasync function initPluginFromLocalPath(localPath: string) {\n const stats = await fs.stat(localPath);\n\n // If it's a file, load the plugin directly\n if (stats.isFile()) {\n const ext = path.extname(localPath).toLowerCase();\n if (['.js', '.cjs', '.mjs'].includes(ext) === false) {\n throw new SchemaError(`Single-file plugin must be a .js, .cjs, or .mjs file: ${localPath}`);\n }\n\n return new VarlockPlugin({\n type: 'single-file',\n localPath,\n });\n\n // If it's a directory, load package.json and use exports field\n } else if (stats.isDirectory()) {\n const pkgJsonPath = path.join(localPath, 'package.json');\n if (!(await pathExists(pkgJsonPath))) {\n throw new SchemaError('Plugin is missing package.json file');\n }\n\n const packageJsonContents = JSON.parse(await fs.readFile(pkgJsonPath, 'utf-8'));\n if (!packageJsonContents.exports?.['./plugin']) {\n throw new SchemaError('Plugin is missing \"./plugin\" export in package.json');\n }\n\n return new VarlockPlugin({\n type: 'package',\n localPath,\n packageJson: packageJsonContents,\n });\n } else {\n throw new Error(`Invalid plugin path (not a file or directory): ${localPath}`);\n }\n}\n\n\nasync function registerPluginInGraph(graph: EnvGraph, plugin: VarlockPlugin, pluginDecorator: RootDecoratorInstance) {\n let existingPlugin: VarlockPlugin | undefined;\n for (const possibleMatchingPlugin of graph.plugins) {\n if (plugin.type === 'single-file') {\n if (possibleMatchingPlugin.type === 'single-file' && possibleMatchingPlugin.localPath === plugin.localPath) {\n existingPlugin = possibleMatchingPlugin;\n }\n } else if (plugin.type === 'package') {\n if (possibleMatchingPlugin.name === plugin.name) {\n if (possibleMatchingPlugin.version === plugin.version) {\n const installedInSources = possibleMatchingPlugin.installDecoratorInstances.map((dec) => dec.dataSource);\n if (installedInSources.includes(pluginDecorator.dataSource)) {\n pluginDecorator._schemaErrors.push(new SchemaError(`Plugin ${plugin.name} already installed in this data source`));\n return;\n }\n\n existingPlugin = possibleMatchingPlugin;\n } else {\n pluginDecorator._schemaErrors.push(new SchemaError(`Plugin ${plugin.name} version conflict: tried to install version ${plugin.version} but version ${possibleMatchingPlugin.version} is already installed`));\n return;\n }\n }\n }\n }\n if (existingPlugin) {\n existingPlugin.installDecoratorInstances.push(pluginDecorator);\n return;\n }\n\n plugin.installDecoratorInstances.push(pluginDecorator);\n graph.plugins.push(plugin);\n\n // this finally executes the plugin code\n await plugin.executePluginModule();\n\n // register decorators, resolvers, data types from this plugin\n for (const rootDec of plugin.rootDecorators || []) {\n graph.registerRootDecorator(rootDec);\n }\n for (const itemDec of plugin.itemDecorators || []) {\n graph.registerItemDecorator(itemDec);\n }\n for (const dataType of plugin.dataTypes || []) {\n graph.registerDataType(createEnvGraphDataType(dataType));\n }\n for (const resolverDef of plugin.resolverFunctions || []) {\n // might want to move into plugin load process\n graph.registerResolver(createResolver(resolverDef));\n }\n}\n\nasync function downloadPlugin(url: string) {\n const exec = promisify(execCb);\n const cacheDir = path.join(os.homedir(), '.varlock', 'plugins-cache');\n const indexPath = path.join(cacheDir, 'index.json');\n await fs.mkdir(cacheDir, { recursive: true });\n\n // Load or create index.json\n let index: Record<string, string> = {};\n try {\n const indexRaw = await fs.readFile(indexPath, 'utf-8');\n index = JSON.parse(indexRaw);\n } catch {\n // ignore, treat as empty\n }\n\n if (index[url]) {\n const pluginDir = path.join(cacheDir, index[url]);\n if (await fs.stat(pluginDir).then(() => true, () => false)) {\n return pluginDir;\n }\n // If mapping exists but folder is missing, fall through to re-download\n }\n\n // Download the file\n const tmpTgz = path.join(cacheDir, `tmp-${crypto.randomBytes(8).toString('hex')}.tgz`);\n await new Promise<void>((resolve, reject) => {\n const file = fsSync.createWriteStream(tmpTgz);\n https.get(url, (res) => {\n if (res.statusCode !== 200) {\n reject(new Error(`Failed to download plugin: ${res.statusCode}`));\n return;\n }\n res.pipe(file);\n file.on('finish', () => file.close(() => resolve()));\n file.on('error', reject);\n }).on('error', reject);\n });\n\n // Extract tgz to a temp folder\n const tmpExtractDir = path.join(cacheDir, `tmp-extract-${crypto.randomBytes(8).toString('hex')}`);\n await fs.mkdir(tmpExtractDir);\n await exec(`tar -xzf ${tmpTgz} -C ${tmpExtractDir}`);\n\n // Find package.json (assume in package/ or root)\n let pkgJsonPath = path.join(tmpExtractDir, 'package', 'package.json');\n let pluginRoot = path.join(tmpExtractDir, 'package');\n if (!(await fs.stat(pkgJsonPath).then(() => true, () => false))) {\n pkgJsonPath = path.join(tmpExtractDir, 'package.json');\n pluginRoot = tmpExtractDir;\n if (!(await fs.stat(pkgJsonPath).then(() => true, () => false))) {\n throw new Error('package.json not found in plugin tgz');\n }\n }\n const pkgJson = JSON.parse(await fs.readFile(pkgJsonPath, 'utf-8'));\n\n // Generate unique hash for folder name\n const safePackageName = (pkgJson.name || '').replaceAll('/', '-').replaceAll('@', '');\n const dirName = `${safePackageName}_${(pkgJson.version || '')}_${crypto.randomBytes(4).toString('hex')}`;\n const finalDir = path.join(cacheDir, dirName);\n\n // Move extracted folder to finalDir\n await fs.rm(finalDir, { recursive: true, force: true });\n await fs.rename(pluginRoot, finalDir);\n await fs.rm(tmpTgz, { force: true });\n await fs.rm(tmpExtractDir, { recursive: true, force: true });\n\n // Update index.json file with mapping b/w url and new folder\n index[url] = dirName;\n await fs.writeFile(indexPath, JSON.stringify(index, null, 2));\n\n return finalDir;\n}\n\n\n\nexport async function processPluginInstallDecorators(dataSource: EnvGraphDataSource) {\n const graph = dataSource.graph;\n if (!graph) throw new Error('Data source not attached to graph');\n\n // handle plugin decorators\n const installPluginDecorators = dataSource.getRootDecFns('plugin');\n if (installPluginDecorators.length) {\n if (!(dataSource instanceof FileBasedDataSource)) {\n dataSource._loadingError = new Error('@plugin can only be used from a file-based data source');\n return;\n }\n const dataSourceDir = path.dirname(dataSource.fullPath);\n for (const pluginDecorator of installPluginDecorators) {\n let pluginSrcPath: string | undefined;\n try {\n const installPluginArgs = await pluginDecorator.resolve();\n const pluginSourceDescriptor = installPluginArgs.arr[0];\n if (!_.isString(pluginSourceDescriptor)) {\n throw new SchemaError('Bad @plugin - must provide a string source location');\n }\n // install from local file path\n if (pluginSourceDescriptor.startsWith('./') || pluginSourceDescriptor.startsWith('../') || pluginSourceDescriptor.startsWith('/')) {\n pluginSrcPath = pluginSourceDescriptor.startsWith('/') ? pluginSourceDescriptor : path.resolve(dataSourceDir, pluginSourceDescriptor);\n if (!(await pathExists(pluginSrcPath))) {\n // in this case, the bad path is the user's fault\n throw new SchemaError(`Bad @plugin path: ${pluginSourceDescriptor}`);\n }\n } else if (pluginSourceDescriptor.includes(':')) {\n const protocol = pluginSourceDescriptor.split(':')[0];\n // protocols that we will likely support in future\n if (['https', 'npm', 'jsr', 'git'].includes(protocol)) {\n throw new SchemaError(`@plugin source protocol \"${protocol}\" is not yet supported`);\n } else {\n throw new SchemaError(`Bad @plugin source protocol: ${protocol}`);\n }\n\n // we will assume its a npm module name - `packageName` / `packageName@version`\n } else {\n const atLocation = pluginSourceDescriptor.indexOf('@', 1);\n let versionDescriptor: string | undefined;\n let moduleName: string | undefined;\n if (atLocation === -1) {\n moduleName = pluginSourceDescriptor;\n } else {\n moduleName = pluginSourceDescriptor.slice(0, atLocation);\n versionDescriptor = pluginSourceDescriptor.slice(atLocation + 1);\n }\n\n if (!moduleName.startsWith('@varlock/')) {\n throw new SchemaError(`Plugin \"${moduleName}\" blocked - only official @varlock/* plugins are supported for now, third-party plugins will be supported in future releases`);\n }\n\n const semverRange = semver.validRange(versionDescriptor);\n if (versionDescriptor && !semverRange) {\n throw new SchemaError(`Bad @plugin version descriptor: ${versionDescriptor}`);\n } else if (semverRange === '*') {\n throw new SchemaError(`Version descriptor \"${versionDescriptor}\" is too broad`);\n } else if (versionDescriptor === '') {\n throw new SchemaError('Bad @plugin version descriptor - remove \"@\" or specify a valid version');\n }\n\n let currentDir = dataSourceDir;\n let nodeModulesPath: string | undefined;\n while (currentDir) {\n if (await pathExists(path.join(currentDir, 'package.json'))) {\n nodeModulesPath = path.join(currentDir, 'node_modules');\n break;\n }\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) break; // will stop when we reach the root\n currentDir = parentDir;\n }\n\n if (nodeModulesPath) {\n const pluginPackagePath = path.join(nodeModulesPath, moduleName);\n // use locally installed version if it exsists\n if (await pathExists(pluginPackagePath)) {\n // TODO: cache the package.json since we will read it again later\n const pluginPackageJsonPath = path.join(pluginPackagePath, 'package.json');\n const packageJsonString = await fs.readFile(pluginPackageJsonPath, 'utf-8');\n const packageJson = JSON.parse(packageJsonString);\n const packageVersion = packageJson.version;\n if (versionDescriptor && !semver.satisfies(packageVersion, versionDescriptor)) {\n throw new SchemaError(`Installed plugin \"${moduleName}\" version \"${packageVersion}\" does not satisfy requested version \"${versionDescriptor}\"`, {\n location: getErrorLocation(dataSource, pluginDecorator),\n });\n }\n pluginSrcPath = pluginPackagePath;\n }\n }\n\n // attempt to fetch from npm if we did not succeed getting a local path above\n if (!pluginSrcPath) {\n if (!versionDescriptor) {\n // this tells us if the user is using package.json, so we can make the error message more helpful\n if (nodeModulesPath) {\n throw new SchemaError(`Plugin \"${moduleName}\" unable to resolve - install locally via your package.json file`);\n } else {\n throw new SchemaError(`Plugin \"${moduleName}\" unable to resolve - set a fixed version (e.g., \\`@plugin(${moduleName}@1.2.3)\\`)`);\n }\n } else if (!semver.valid(versionDescriptor)) {\n throw new SchemaError(`Plugin \"${moduleName}\" must use a fixed version when not installing via package.json (e.g., \\`@plugin(${moduleName}@1.2.3)\\`)`, {\n location: getErrorLocation(dataSource, pluginDecorator),\n });\n }\n\n // ex: https://registry.npmjs.org/@varlock/plugin-name/1.2.3\n const npmInfoUrl = `https://registry.npmjs.org/${moduleName}/${versionDescriptor}`;\n const npmInfoReq = await fetch(npmInfoUrl);\n if (!npmInfoReq.ok) {\n // TODO: new error type? check for 404 vs others and give better message\n throw new Error(`Failed to fetch plugin \"${moduleName}@${versionDescriptor}\" from npm: ${npmInfoReq.status} ${npmInfoReq.statusText}`);\n }\n const npmInfo = await npmInfoReq.json() as any;\n const tarballUrl = npmInfo?.dist?.tarball;\n if (!tarballUrl) {\n throw new Error(`Failed to find tarball URL for plugin \"${moduleName}@${versionDescriptor}\" from npm`);\n }\n\n // downloads into local cache folder (~/.varlock/plugins-cache/)\n const downloadedPluginPath = await downloadPlugin(tarballUrl);\n pluginSrcPath = downloadedPluginPath;\n }\n }\n\n const plugin = await initPluginFromLocalPath(pluginSrcPath);\n // might return an existing plugin if matches one in the graph\n await registerPluginInGraph(graph, plugin, pluginDecorator);\n } catch (err) {\n pluginDecorator._schemaErrors.push(err as any);\n continue;\n }\n }\n }\n}\n\nexport type VarlockPluginCtx = {\n debug: Debugger,\n errors: {\n ValidationError: typeof ValidationError,\n CoercionError: typeof CoercionError,\n SchemaError: typeof SchemaError,\n ResolutionError: typeof ResolutionError,\n }\n};\n\nexport type definePluginFn = (p: VarlockPlugin) => void;\n\n","import fs from 'node:fs/promises';\nimport path from 'node:path';\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, parseEnvSpecDotEnvFile,\n} from '@env-spec/parser';\n\nimport { ConfigItem, type ConfigItemDef } from './config-item';\nimport { EnvGraph } from './env-graph';\n\nimport { ParseError, SchemaError } from './errors';\nimport { pathExists } from '@env-spec/utils/fs-utils';\nimport { processPluginInstallDecorators } from './plugins';\nimport { RootDecoratorInstance } from './decorators';\n\nconst DATA_SOURCE_TYPES = Object.freeze({\n schema: {\n fileSuffixes: ['schema'],\n },\n example: {\n fileSuffixes: ['sample', 'example'],\n },\n defaults: {\n fileSuffixes: ['default', 'defaults'],\n },\n values: {\n fileSuffixes: [] as Array<string>,\n },\n overrides: {\n fileSuffixes: ['local', 'override'],\n },\n container: {\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 /** parent data source - everything except the root will have a parent */\n parent?: EnvGraphDataSource;\n /** child data sources */\n children: Array<EnvGraphDataSource> = [];\n\n /**\n * tracks if this data source was imported, and additional settings about the import (restricting keys)\n * */\n importMeta?: {\n isImport?: boolean,\n importKeys?: Array<string>,\n };\n get isImport(): boolean {\n return !!this.importMeta?.isImport || !!this.parent?.isImport;\n }\n get isPartialImport() {\n return (this.importMeta?.importKeys || []).length > 0;\n }\n get importKeys(): Array<string> | undefined {\n const importKeysArrays = [];\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let currentSource: EnvGraphDataSource | undefined = this;\n while (currentSource) {\n if (currentSource.importMeta?.importKeys && currentSource.importMeta.importKeys.length) {\n importKeysArrays.push(currentSource.importMeta.importKeys);\n }\n currentSource = currentSource.parent;\n }\n\n // in most cases we import all keys, but if there have been specific keys imported we walk up the chain\n if (importKeysArrays.length) {\n const keysToImport = _.intersection(...importKeysArrays);\n return keysToImport;\n }\n }\n\n /** adds a child data source and sets up the correct references in both directions */\n async addChild(child: EnvGraphDataSource, importMeta?: EnvGraphDataSource['importMeta']) {\n if (!this.graph) throw new Error('expected graph to be set');\n this.children.unshift(child);\n child.parent = this;\n child.graph = this.graph;\n if (importMeta) child.importMeta = importMeta;\n await child.finishInit();\n }\n\n /** environment flag key (as set by @envFlag decorator) - only if set within this source */\n _envFlagKey?: string;\n /** environment flag key getter that will follow up the parent chain */\n get envFlagKey(): string | undefined {\n return this._envFlagKey || this.parent?.envFlagKey;\n }\n\n /** helper to set the current envFlag key, also propogating upwards */\n setEnvFlag(key: string) {\n this._envFlagKey = key;\n if (this.parent && !this.isPartialImport && !this.parent._envFlagKey) {\n this.parent.setEnvFlag(key);\n }\n }\n\n\n /** environment flag config item getter (follows up the parent chain) */\n get envFlagConfigItem(): ConfigItem | undefined {\n const envFlagKey = this.envFlagKey;\n return envFlagKey ? this.graph?.configSchema[envFlagKey] : undefined;\n }\n /** environment flag value getter (follows up the parent chain), and checks the graph-level fallback */\n get envFlagValue() {\n const envFlagItem = this.envFlagConfigItem;\n if (envFlagItem) return envFlagItem.resolvedValue;\n return this.graph!.envFlagFallback;\n }\n /** helper to resolve the envFlag value */\n async resolveCurrentEnv() {\n const envFlagItem = this.envFlagConfigItem;\n if (envFlagItem) {\n if (envFlagItem.resolvedValue) return envFlagItem.resolvedValue;\n await envFlagItem.earlyResolve();\n return envFlagItem.resolvedValue;\n }\n // fallback to the graph-level env flag - which can be set using a CLI flag\n // this is currently only used by Next.js integration to match the default behaviour\n // of setting dev/prod based on the current command (next dev/next build)\n return this.graph!.envFlagFallback;\n }\n\n /** finish init process for this data source */\n async finishInit() {\n if (!this.graph) throw new Error('expected graph to be set');\n\n // each child class can redefine this method to handle additional init code\n await this._finishInit();\n\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 (this.loadingError) {\n return;\n }\n\n // first we check @disable because we'll bail early\n // note that when using `forEnv` it will rely on the what has been set so far, not anything from _this_ source\n const disabledDec = this.getRootDec('disable');\n if (disabledDec) {\n const disabledVal = await disabledDec.resolve();\n if (!_.isBoolean(disabledVal)) {\n this._loadingError = new Error('expected @disable to be boolean value');\n return;\n }\n this._disabled = disabledVal;\n }\n\n // this will also respect if the parent is disabled\n if (this.disabled) return;\n\n // create config items, or add additional definitions if they already exist\n for (const itemKey of this.importKeys || _.keys(this.configItemDefs)) {\n const itemDef = this.configItemDefs[itemKey];\n if (!itemDef) continue;\n // register the existence of the item in the graph\n this.graph.configSchema[itemKey] ??= new ConfigItem(this.graph, itemKey);\n }\n\n // process @currentEnv decorator if present in this source\n // this requires a bit of special handling compared to other decorators\n // (note we also support @envFlag for backwards compatibility)\n const currentEnvDec = this.getRootDec('currentEnv');\n const envFlagDec = this.getRootDec('envFlag');\n if (currentEnvDec && envFlagDec) {\n // TODO can we set this in the decorator definition?\n this._loadingError = new Error('Cannot use both @currentEnv and @envFlag decorators');\n }\n let envFlagItemKey: string | undefined;\n if (currentEnvDec) {\n await currentEnvDec.process();\n if (!currentEnvDec.decValueResolver) {\n throw new Error('No resolver found for @currentEnv decorator');\n }\n if (currentEnvDec.decValueResolver.fnName !== 'ref') {\n throw new Error('Expected @currentEnv decorator to be set to direct reference - ie `$APP_ENV`');\n }\n const refArgValue = currentEnvDec.decValueResolver.arrArgs?.[0]?.staticValue;\n if (!refArgValue || !_.isString(refArgValue)) {\n throw new Error('@currentEnv ref must be set to a string');\n }\n envFlagItemKey = refArgValue;\n } else if (envFlagDec) {\n await envFlagDec.process();\n if (!envFlagDec.decValueResolver) throw new Error('@envFlag resolver not set');\n\n if (!envFlagDec.decValueResolver.staticValue) {\n throw new Error('Expected @envFlag decorator to be static value');\n }\n envFlagItemKey = String(envFlagDec.decValueResolver.staticValue);\n }\n\n if (envFlagItemKey) {\n if (!this.configItemDefs[envFlagItemKey]) {\n this._loadingError = new Error(`environment flag \"${envFlagItemKey}\" must be defined within this schema`);\n return;\n }\n this.setEnvFlag(envFlagItemKey);\n }\n\n // defaultSensitive and defaultRequired are needed to do any early resolution of items\n const defaultSensitiveDec = this.getRootDec('defaultSensitive');\n await defaultSensitiveDec?.process();\n const defaultRequiredDec = this.getRootDec('defaultRequired');\n await defaultRequiredDec?.process();\n\n await processPluginInstallDecorators(this);\n if (!this.isValid) return;\n\n // handle imports before we process config items\n // because the imported defs will be overridden by anything within this source\n const importDecs = this.getRootDecFns('import');\n if (importDecs.length) {\n for (const importDec of importDecs) {\n const importArgs = await importDec.resolve();\n const importPath = importArgs.arr[0];\n const importKeys = importArgs.arr.slice(1);\n if (!importKeys.every(_.isString)) {\n throw new Error('expected @import keys to all be strings');\n }\n\n if (importPath.startsWith('./') || importPath.startsWith('../')) {\n // eslint-disable-next-line no-use-before-define\n if (!(this instanceof FileBasedDataSource)) {\n throw new Error('@import of files can only be used from a file-based data source');\n }\n const fullImportPath = path.resolve(this.fullPath, '..', importPath);\n const fileName = path.basename(fullImportPath);\n\n // TODO: might be nice to move this logic somewhere else\n\n if (this.graph.virtualImports) {\n if (importPath.endsWith('/')) {\n if (!Object.keys(this.graph.virtualImports).some((p) => p.startsWith(fullImportPath))) {\n this._loadingError = new Error(`Virtual directory import ${fullImportPath} not found`);\n return;\n }\n // eslint-disable-next-line no-use-before-define\n await this.addChild(new DirectoryDataSource(fullImportPath), {\n isImport: true, importKeys,\n });\n } else {\n if (!this.graph.virtualImports[fullImportPath]) {\n this._loadingError = new Error(`Virtual import ${fullImportPath} not found`);\n return;\n }\n // eslint-disable-next-line no-use-before-define\n const source = new DotEnvFileDataSource(fullImportPath, {\n overrideContents: this.graph.virtualImports[fullImportPath],\n });\n await this.addChild(source, { isImport: true, importKeys });\n }\n } else {\n const fsStat = await tryCatch(async () => fs.stat(fullImportPath), (_err) => {\n // TODO: work through possible error types here\n });\n\n if (!fsStat) {\n this._loadingError = new Error(`Import path does not exist: ${fullImportPath}`);\n return;\n }\n\n // directory import -- must end with a \"/\" to make the intent clearer\n if (importPath.endsWith('/')) {\n if (fsStat.isDirectory()) {\n // eslint-disable-next-line no-use-before-define\n await this.addChild(new DirectoryDataSource(fullImportPath), {\n isImport: true, importKeys,\n });\n } else {\n this._loadingError = new Error(`Imported path ending with \"/\" is not a directory: ${fullImportPath}`);\n return;\n }\n // File import\n } else {\n if (fsStat.isDirectory()) {\n this._loadingError = new Error('Imported path is a directory, add trailing \"/\" to import');\n return;\n } else if (!fileName.startsWith('.env.')) {\n this._loadingError = new Error('imported file must be a .env.* file');\n return;\n }\n // TODO: once we have more file types, here we would detect the type and import it correctly\n // eslint-disable-next-line no-use-before-define\n await this.addChild(new DotEnvFileDataSource(fullImportPath), { isImport: true, importKeys });\n }\n }\n } else if (importPath.startsWith('http://') || importPath.startsWith('https://')) {\n this._loadingError = new Error('http imports not supported yet');\n return;\n } else if (importPath.startsWith('npm:')) {\n this._loadingError = new Error('npm imports not supported yet');\n return;\n } else {\n this._loadingError = new Error('unsupported import type');\n return;\n }\n }\n }\n }\n\n /**\n * called by the finishInit - meant to be overridden by subclasses\n * to add specific behaviour for that data source type\n * @internal\n * */\n async _finishInit() {\n // override me!\n }\n\n abstract typeLabel: string;\n abstract get label(): string;\n\n type = 'values' as DataSourceType;\n applyForEnv?: string;\n\n _disabled?: boolean = false;\n get disabled() {\n return this._disabled || this.parent?._disabled;\n }\n\n /** an error encountered while loading/parsing the data source */\n _loadingError?: Error;\n get loadingError() {\n return this._loadingError;\n // || this.plugins?.find((p) => p.loadingError)?.loadingError;\n }\n _schemaErrors: Array<SchemaError> = [];\n get schemaErrors() {\n return _.compact([\n ...this._schemaErrors,\n ...this.rootDecorators.flatMap((d) => d.schemaErrors),\n ]);\n }\n\n get resolutionErrors() {\n return _.compact([...this.rootDecorators.flatMap((d) => d._executionError)]);\n }\n\n get isValid() {\n return !this.loadingError && !this.schemaErrors.length && !this.resolutionErrors.length;\n }\n\n configItemDefs: Record<string, ConfigItemDef> = {};\n decorators: Array<ParsedEnvSpecDecorator> = [];\n getRootDecorators(decName: string) {\n return this.decorators.filter((d) => d.name === decName);\n }\n getRootDecoratorSimpleValue(decName: string) {\n const decorators = this.getRootDecorators(decName);\n if (decorators.length === 0) return undefined;\n if (decorators.length > 1) throw new Error(`Multiple ${decName} decorators found`);\n return decorators[0].simplifiedValue;\n }\n\n\n rootDecorators: Array<RootDecoratorInstance> = [];\n getRootDec(decName: string) {\n return this.rootDecorators.find((d) => d.name === decName && !d.isFunctionCall);\n }\n getRootDecFns(decName: string) {\n return this.rootDecorators.filter((d) => d.name === decName && d.isFunctionCall);\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 private relativePath: string;\n get label() { return this.relativePath; }\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(\n fullPath: string,\n opts?: {\n overrideContents?: string;\n overrideGitIgnored?: boolean;\n },\n ) {\n super();\n\n this.fullPath = fullPath;\n this.fileName = path.basename(fullPath);\n this.relativePath = path.relative(process.cwd(), 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 // may may infer some properties from the file name\n if (this.fileName.startsWith('.env')) {\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 (!('fileSuffixes' in possibleSourceSpec)) continue;\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 }\n }\n\n // no async constructors... :(\n async _finishInit() {\n if (!this.rawContents) {\n if (!await pathExists(this.fullPath)) {\n this._loadingError = new Error(`File does not exist: ${this.fullPath}`);\n return;\n }\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 if (this.rawContents) 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 async _parseContents() {\n const rawContents = this.rawContents!;\n\n this.parsedFile = await tryCatch(\n () => parseEnvSpecDotEnvFile(rawContents),\n (error) => {\n this._loadingError = new ParseError(`Parse error: ${error.message}`, {\n location: {\n id: 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 });\n // TODO: figure out cause vs passing in as `err` param\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 if (!this.graph) throw new Error('expected graph to be set');\n\n this.rootDecorators = this.parsedFile.decoratorsArray.map((d) => new RootDecoratorInstance(this, d));\n\n for (const item of this.parsedFile.configItems) {\n this.configItemDefs[item.key] = {\n description: item.description,\n parsedValue: item.value,\n parsedDecorators: item.decoratorsArray,\n };\n }\n }\n}\n\n/**\n * Handles a directory as a source, automatically importing .env files from that directory\n * This is usually the root in most cases, but additional directories can also be imported\n *\n * This will load the following files (if they exist), in precedence order\n * - .env.schema\n * - .env\n * - .env.local\n * - .env.ENV\n * - .env.ENV.local\n *\n * where ENV represents the current value of the environment flag (e.g. development,staging,etc)\n */\nexport class DirectoryDataSource extends EnvGraphDataSource {\n type = 'container' as const;\n typeLabel = 'directory';\n get label() { return `directory - ${this.basePath}`; }\n\n schemaDataSource?: DotEnvFileDataSource;\n\n constructor(\n readonly basePath: string,\n ) {\n super();\n }\n\n private async addAutoLoadedFile(fileName: string) {\n if (!this.graph) throw new Error('expected graph to be set');\n const filePath = path.join(this.basePath, fileName);\n\n if (this.graph.virtualImports) {\n if (this.graph.virtualImports[filePath]) {\n const source = new DotEnvFileDataSource(filePath, { overrideContents: this.graph.virtualImports[filePath] });\n await this.addChild(source);\n return source;\n }\n return;\n }\n\n if (!await pathExists(filePath)) return;\n const source = new DotEnvFileDataSource(filePath);\n await this.addChild(source);\n return source;\n }\n\n async _finishInit() {\n if (!this.graph) throw new Error('expected graph to be set');\n\n await this.addAutoLoadedFile('.env.schema');\n await this.addAutoLoadedFile('.env');\n\n // .env.schema is usually the \"schema data source\" but this allows for a single .env file being the main source\n if (this.children.length) {\n this.schemaDataSource = this.children[this.children.length - 1] as DotEnvFileDataSource;\n }\n\n await this.addAutoLoadedFile('.env.local');\n\n // and finally load the env-specific files\n const currentEnv = await this.resolveCurrentEnv() || this.envFlagValue;\n if (currentEnv) {\n await this.addAutoLoadedFile(`.env.${currentEnv}`);\n await this.addAutoLoadedFile(`.env.${currentEnv}.local`);\n }\n }\n}\n","import _ from '@env-spec/utils/my-dash';\nimport { EnvGraph } from './env-graph';\nimport { DirectoryDataSource } from './data-source';\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 ?? process.cwd();\n\n if (opts?.afterInit) {\n await opts.afterInit(graph);\n }\n\n if (opts?.currentEnvFallback) {\n graph.envFlagFallback = opts.currentEnvFallback;\n }\n\n await graph.setRootDataSource(new DirectoryDataSource(graph.basePath));\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"]}