@layerfig/config
Version:
Layer and runtime-validate type-safe configs for JavaScript apps.
1 lines • 3.17 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","names":["Source","options: PartialEnvironmentVariableSourceOptions","#options","#prefixWithSeparator"],"sources":["../../../src/sources/env-var.ts"],"sourcesContent":["import { z } from \"zod/v4\";\nimport { set } from \"../utils/set\";\nimport { type LoadSourceOptions, Source } from \"./source\";\n\nconst EnvironmentVariableSourceOptions = z.object({\n\t/**\n\t * The environment variable prefix to use\n\t * @default 'APP\n\t */\n\tprefix: z.string().optional().default(\"APP\"),\n\t/**\n\t * The separator to use between the prefix and the key\n\t * @default '_'\n\t */\n\tprefixSeparator: z.string().optional().default(\"_\"),\n\t/**\n\t * The separator to navigate the object\n\t * @default '__'\n\t */\n\tseparator: z.string().optional().default(\"__\"),\n});\n\ntype EnvironmentVariableSourceOptions = z.Infer<\n\ttypeof EnvironmentVariableSourceOptions\n>;\nconst PartialEnvironmentVariableSourceOptions =\n\tEnvironmentVariableSourceOptions.partial();\nexport type PartialEnvironmentVariableSourceOptions = z.Infer<\n\ttypeof PartialEnvironmentVariableSourceOptions\n>;\n\nexport class EnvironmentVariableSource extends Source {\n\t#options: EnvironmentVariableSourceOptions;\n\t#prefixWithSeparator: string;\n\n\tconstructor(options: PartialEnvironmentVariableSourceOptions = {}) {\n\t\tsuper();\n\t\tthis.#options = EnvironmentVariableSourceOptions.parse(options);\n\n\t\tthis.#prefixWithSeparator = `${this.#options.prefix}${this.#options.prefixSeparator}`;\n\t}\n\n\tloadSource({\n\t\truntimeEnv,\n\t\tslotPrefix,\n\t}: LoadSourceOptions): Record<string, unknown> {\n\t\tconst envKeys = Object.keys(runtimeEnv).filter((key) =>\n\t\t\tkey.startsWith(this.#prefixWithSeparator),\n\t\t);\n\n\t\tconst tempObject = {} as Record<string, unknown>;\n\n\t\tfor (const envKey of envKeys) {\n\t\t\tconst envVarValue = runtimeEnv[envKey];\n\n\t\t\tif (envVarValue === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst keyWithoutPrefix = envKey.replace(this.#prefixWithSeparator, \"\");\n\t\t\tconst keyParts = keyWithoutPrefix\n\t\t\t\t.split(this.#options.separator)\n\t\t\t\t.join(\".\");\n\n\t\t\tset(\n\t\t\t\ttempObject,\n\t\t\t\tkeyParts,\n\t\t\t\tthis.maybeReplaceSlotFromValue({\n\t\t\t\t\tvalue: envVarValue,\n\t\t\t\t\truntimeEnv,\n\t\t\t\t\tslotPrefix,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\treturn tempObject;\n\t}\n}\n"],"mappings":";;;;;AAIA,MAAM,mCAAmC,SAAE,OAAO;CAKjD,QAAQ,SAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ,MAAM;CAK5C,iBAAiB,SAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ,IAAI;CAKnD,WAAW,SAAE,QAAQ,CAAC,UAAU,CAAC,QAAQ,KAAK;AAC9C,EAAC;AAKF,MAAM,0CACL,iCAAiC,SAAS;AAK3C,IAAa,4BAAb,cAA+CA,sBAAO;CACrD;CACA;CAEA,YAAYC,UAAmD,CAAE,GAAE;AAClE,SAAO;AACP,OAAKC,WAAW,iCAAiC,MAAM,QAAQ;AAE/D,OAAKC,wBAAwB,EAAE,KAAKD,SAAS,OAAO,EAAE,KAAKA,SAAS,gBAAgB;CACpF;CAED,WAAW,EACV,YACA,YACmB,EAA2B;EAC9C,MAAM,UAAU,OAAO,KAAK,WAAW,CAAC,OAAO,CAAC,QAC/C,IAAI,WAAW,KAAKC,qBAAqB,CACzC;EAED,MAAM,aAAa,CAAE;AAErB,OAAK,MAAM,UAAU,SAAS;GAC7B,MAAM,cAAc,WAAW;AAE/B,OAAI,uBACH;GAGD,MAAM,mBAAmB,OAAO,QAAQ,KAAKA,sBAAsB,GAAG;GACtE,MAAM,WAAW,iBACf,MAAM,KAAKD,SAAS,UAAU,CAC9B,KAAK,IAAI;AAEX,mBACC,YACA,UACA,KAAK,0BAA0B;IAC9B,OAAO;IACP;IACA;GACA,EAAC,CACF;EACD;AAED,SAAO;CACP;AACD"}