@configu/sdk
Version:
Configu TypeScript SDK
1 lines • 78.6 kB
Source Map (JSON)
{"version":3,"sources":["../src/ConfigKey.ts","../src/expressions/JSONSchema.ts","../src/Cfgu.ts","../src/expressions/Assertion.ts","../src/ConfigExpression.ts","../src/ConfigValue.ts","../src/ConfigSchema.ts","../src/ConfigSet.ts","../src/ConfigStore.ts","../src/stores/Noop.ts","../src/stores/InMemory.ts","../package.json","../src/ConfigCommand.ts","../src/commands/EvalCommand.ts","../src/commands/UpsertCommand.ts","../src/commands/ExportCommand.ts"],"names":["_","expect","EvaluatedConfigOrigin","ConfigDiffAction"],"mappings":"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","file":"index.mjs","sourcesContent":["import _ from 'lodash';\n\nexport class ConfigKey {\n static readonly pattern = '^[A-Za-z0-9_-]+$';\n static readonly reserved = [\n '_',\n '-',\n '$',\n 'this',\n 'Cfgu',\n 'ConfigStore',\n 'ConfigSet',\n 'ConfigKey',\n 'Key',\n 'ConfigValue',\n 'Value',\n 'ConfigSchema',\n 'Configu',\n ];\n\n private static readonly normalizedReserved = ConfigKey.reserved.map(ConfigKey.normalize);\n\n static normalize(key: string) {\n // flatCase - flatten and lowercase\n return _.camelCase(key).toLowerCase();\n // return _.chain(key).camelCase().kebabCase().value();\n }\n\n static validate({ key, errorPrefix = 'ConfigKey' }: { key: string; errorPrefix?: string }) {\n try {\n const isValid =\n RegExp(ConfigKey.pattern).test(key) && !ConfigKey.normalizedReserved.includes(ConfigKey.normalize(key));\n if (!isValid) {\n throw new Error();\n }\n } catch (error) {\n throw new Error(\n `${errorPrefix} \"${key}\" must match ${ConfigKey.pattern} and not be one of ${ConfigKey.reserved.join(', ')}`,\n );\n }\n }\n}\n","import _ from 'lodash';\nimport Ajv, { ErrorObject } from 'ajv';\nimport addFormats from 'ajv-formats';\n// https://npmtrends.com/@apideck/better-ajv-errors-vs-@readme/better-ajv-errors-vs-@segment/ajv-human-errors-vs-@stoplight/better-ajv-errors-vs-ajv-error-messages-vs-ajv-errors-vs-better-ajv-errors\nimport { AggregateAjvError } from '@segment/ajv-human-errors';\nimport type { FromSchema, JSONSchema as JSONSchemaObject } from 'json-schema-to-ts';\n\nexport { JSONSchemaObject, FromSchema };\n\nexport class JSONSchema {\n private static ajv = addFormats(\n new Ajv({ allErrors: true, verbose: true, allowUnionTypes: true, useDefaults: 'empty' }),\n );\n\n static validate(schema: JSONSchemaObject, data: unknown) {\n const isValid = JSONSchema.ajv.validate(schema, data);\n if (!isValid) {\n const errors = new AggregateAjvError(JSONSchema.ajv.errors as ErrorObject[]);\n throw new Error(errors.message);\n }\n }\n\n static AnyPropertySchema = {\n type: ['string', 'number', 'boolean', 'object', 'array'],\n oneOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }, { type: 'object' }, { type: 'array' }],\n } as const satisfies JSONSchemaObject;\n\n static AnyArrayPropertySchema = {\n type: 'array',\n uniqueItems: true,\n items: JSONSchema.AnyPropertySchema,\n } as const satisfies JSONSchemaObject;\n\n static createPropertyExclusiveSchema({\n property,\n exclusive,\n }: {\n property: string;\n exclusive: string[];\n }): JSONSchemaObject {\n return {\n if: {\n required: [property],\n },\n then: {\n properties: {\n ..._.chain(exclusive)\n .keyBy()\n .mapValues(() => false)\n .value(),\n },\n },\n };\n }\n}\n","import { type ExpressionString } from './ConfigExpression';\nimport { JSONSchema, JSONSchemaObject, FromSchema } from './expressions/JSONSchema';\n\n// todo: migrate descriptions to new Cfgu type\n/**\n * A generic declaration of a `Config`, using constraints and metadata.\n * @see {@link https://configu.com/docs/cfgu/}\n */\nexport interface ICfgu {\n /**\n * @default ''\n * @usage export - display\n * A human-readable description of a `Config`.\n * @example `The number of items to display per page.`\n */\n description?: string;\n\n /**\n * @default []\n * @usage export - filter | group | sort | display\n * A human-readable label of a `Config`.\n */\n label?: string | string[];\n\n /**\n * @default false\n * @usage export - filter\n */\n hidden?: boolean;\n\n /**\n * @default false\n * @usage upsert - validate, eval - override\n * @exclusive const, default\n */\n lazy?: boolean;\n\n /**\n * @default undefined\n * @replaces template\n * @usage upsert - validate, eval - const\n * @exclusive lazy, default, required\n * @resolves string\n */\n const?: ExpressionString;\n\n /**\n * @default undefined\n * @usage eval - default\n * @exclusive lazy, const, required\n */\n default?: any;\n\n // todo: add ticket to support expression in required\n /**\n * @default false\n * @usage eval - validate\n * @exclusive const, default\n */\n required?: boolean; // | ExpressionString;\n\n // todo: add ticket to remake the depends property\n // depends: ExpressionString | ExpressionString[];\n\n // todo:? add ticket for type cfgu property\n // /**\n // * @default 'string'\n // * @usage upsert - validate, eval - parse & validate, export - parse\n // * @exclusive\n // */\n // type?: CfguType;\n\n /**\n * @default undefined\n * @usage upsert - validate, eval - validate\n */\n pattern?: string;\n\n /**\n * @default undefined\n * @replaces options\n * @usage upsert - validate, eval - validate\n */\n enum?: any[];\n\n /**\n * @default undefined\n * @usage upsert - validate, eval - validate\n */\n schema?: JSONSchemaObject;\n\n /**\n * @default undefined\n * @usage upsert - validate, eval - validate\n * Use this property to validate a `ConfigValue`.\n * This property receives a string or an array of strings representing an expression that evaluates to a boolean.\n * If an array is provided, all expressions must evaluate to `true` for the value to be considered valid.\n * @example `isEmail` or `['isNumeric', 'isDivisibleBy(10)']`\n * @resolves boolean\n */\n test?: ExpressionString | ExpressionString[];\n}\n\n// build-time validation\nconst CfguStringProperty = {\n type: 'string',\n minLength: 1,\n} as const satisfies JSONSchemaObject;\nconst CfguBooleanProperty = {\n type: 'boolean',\n} as const satisfies JSONSchemaObject;\nconst CfguStringOrBooleanProperty = {\n type: ['string', 'boolean'],\n oneOf: [CfguStringProperty, CfguBooleanProperty],\n};\nconst CfguObjectProperty = {\n type: 'object',\n minProperties: 1,\n} as const satisfies JSONSchemaObject;\nconst CfguStringArrayProperty = {\n type: 'array',\n minItems: 1,\n uniqueItems: true,\n items: CfguStringProperty,\n} as const satisfies JSONSchemaObject;\nconst CfguStringOrStringArrayProperty = {\n type: ['string', 'array'],\n oneOf: [CfguStringProperty, CfguStringArrayProperty],\n} as const satisfies JSONSchemaObject;\n\nexport const CfguSchema = {\n type: 'object',\n required: [],\n additionalProperties: false,\n nullable: true,\n properties: {\n description: CfguStringProperty,\n label: CfguStringOrStringArrayProperty,\n hidden: CfguBooleanProperty,\n lazy: CfguBooleanProperty,\n const: CfguStringProperty,\n default: JSONSchema.AnyPropertySchema,\n required: CfguBooleanProperty,\n pattern: CfguStringProperty,\n enum: JSONSchema.AnyArrayPropertySchema,\n schema: CfguObjectProperty,\n test: CfguStringOrStringArrayProperty,\n },\n allOf: [\n JSONSchema.createPropertyExclusiveSchema({\n property: 'lazy',\n exclusive: ['const', 'default'],\n }),\n JSONSchema.createPropertyExclusiveSchema({\n property: 'const',\n // todo: consider if its a stupid but valid pair with required\n // exclusive: ['lazy', 'default']\n exclusive: ['lazy', 'default', 'required'],\n }),\n JSONSchema.createPropertyExclusiveSchema({\n property: 'default',\n exclusive: ['lazy', 'const', 'required'],\n }),\n JSONSchema.createPropertyExclusiveSchema({\n property: 'required',\n exclusive: ['const', 'default'],\n }),\n ],\n} as const satisfies JSONSchemaObject;\n\nexport type Cfgu = FromSchema<typeof CfguSchema>;\n","// Vitest Source:\n// https://github.com/vitest-dev/vitest/tree/main/packages/expect\n// https://github.com/vitest-dev/vitest/blob/main/packages/vitest/src/integrations/chai/setup.ts\n// https://github.com/vitest-dev/vitest/blob/main/packages/vitest/src/integrations/chai/index.ts\nimport * as chai from 'chai';\nimport Subset from 'chai-subset';\nimport { JestAsymmetricMatchers, JestChaiExpect, JestExtend } from '@vitest/expect';\nimport * as matchers from 'jest-extended';\n\nchai.use(JestExtend);\nchai.use(JestChaiExpect);\nchai.use(Subset);\nchai.use(JestAsymmetricMatchers);\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-expect-error untyped\nchai.expect.extend(chai.expect, matchers);\n\n// API:\n// https://vitest.dev/guide/features.html#chai-and-jest-expect-compatibility\n// https://www.chaijs.com/api/\n// https://jestjs.io/docs/expect\n// https://jest-extended.jestcommunity.dev/docs/matchers\nexport { assert } from 'chai'; // tdd\nexport { expect, should } from 'chai'; // bdd\n","import * as acorn from 'acorn';\nimport * as walk from 'acorn-walk';\nimport 'ses';\n\nimport { _ } from './expressions/Utils';\nimport { validator, JSONSchema, z } from './expressions/Validators';\nimport { assert, expect, should } from './expressions/Assertion';\n\nexport type ExpressionString = string;\n\nexport class ConfigExpression {\n private static globals = new Map<string, unknown>();\n private static suffix = 'Expression';\n private static marker = { start: '${', end: '}' };\n private static delimiters = [\n { start: '{{', end: '}}' },\n { start: '<%', end: '%>' },\n ];\n\n static {\n // todo: finalize lockdown call with proper error handling\n // lockdown({ consoleTaming: 'unsafe', errorTaming: 'unsafe', errorTrapping: 'none', stackFiltering: 'verbose' });\n\n // register built-in globals\n ConfigExpression.register('_', _);\n ConfigExpression.register('validator', validator);\n ConfigExpression.register('JSONSchema', JSONSchema);\n ConfigExpression.register('jsonschema', JSONSchema);\n ConfigExpression.register('z', z);\n ConfigExpression.register('assert', assert);\n ConfigExpression.register('expect', expect);\n ConfigExpression.register('should', should);\n }\n\n private static escapeRegex(string: string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n public static pattern = new RegExp(\n ConfigExpression.delimiters\n .map(({ start, end }) => `${ConfigExpression.escapeRegex(start)}(.*?)${ConfigExpression.escapeRegex(end)}`)\n .join('|'),\n 'g',\n );\n\n static register(key: string, registeree: unknown) {\n if (key.endsWith(ConfigExpression.suffix)) {\n ConfigExpression.globals.set(key.slice(0, -ConfigExpression.suffix.length), registeree);\n } else {\n ConfigExpression.globals.set(key, registeree);\n }\n }\n\n private static parse(raw: ExpressionString) {\n try {\n const expression = raw.replace(ConfigExpression.pattern, (match, group) => {\n return `${ConfigExpression.marker.start}${group}${ConfigExpression.marker.end}`;\n });\n const ast = acorn.parse(expression, { ecmaVersion: 'latest' });\n\n return {\n raw,\n expression,\n ast,\n };\n } catch (error) {\n throw new Error(`Failed to parse expression \"${raw}\"\\n${error}`);\n }\n }\n\n static evaluate(expression: ExpressionString, context: Record<string, unknown> = {}): any {\n try {\n const parsed = ConfigExpression.parse(expression);\n const compartment = new Compartment({ ...context, ...Object.fromEntries(ConfigExpression.globals) });\n return compartment.evaluate(parsed.expression);\n } catch (error) {\n throw new Error(`Failed to evaluate expression \"${expression}\"\\n${error.message}`);\n }\n }\n\n static evaluateBoolean(expression: ExpressionString, context: Record<string, unknown>): boolean {\n return ConfigExpression.evaluate(`Boolean(${expression})`, context);\n }\n\n static evaluateTemplateString(expression: ExpressionString, context: Record<string, unknown>): string {\n return ConfigExpression.evaluate(`\\`${expression}\\``, context);\n }\n\n static references(expression: ExpressionString): string[] {\n const parsed = ConfigExpression.parse(expression);\n const references: Set<string> = new Set();\n walk.simple(parsed.ast, {\n Identifier(node: acorn.Identifier) {\n references.add(node.name);\n },\n });\n return Array.from(references);\n }\n\n static sort(expressionsDict: Record<string, string>): string[] {\n // Initialize templates to references graph\n const graph: Record<string, string[]> = _.chain(expressionsDict)\n .mapValues((expression) => ConfigExpression.references(expression))\n .value();\n\n const sorted: string[] = [];\n const visited = new Set<string>();\n const visiting = new Set<string>();\n\n // Helper function for DFS\n const visit = (node: string, ancestors: string[] = []) => {\n if (visiting.has(node)) {\n throw new Error(`Cyclic dependency detected: ${ancestors.join(' -> ')} -> ${node}`);\n }\n\n if (!visited.has(node)) {\n visiting.add(node);\n\n (graph[node] || []).forEach((neighbor) => {\n visit(neighbor, [...ancestors, node]);\n });\n\n visiting.delete(node);\n visited.add(node);\n sorted.push(node);\n }\n };\n\n // Perform DFS for each node\n _.forEach(graph, (referances, key) => {\n if (!visited.has(key)) {\n visit(key);\n }\n });\n\n // Filter sorted to include only the initial template keys\n return sorted.filter((key) => Object.prototype.hasOwnProperty.call(expressionsDict, key));\n }\n}\n","import _ from 'lodash';\nimport { Jsonify, Merge } from 'type-fest';\n\nimport { type Cfgu } from './Cfgu';\nimport { type Config } from './Config';\nimport { type ConfigStore } from './ConfigStore';\nimport { type ConfigSet } from './ConfigSet';\nimport { type ConfigSchema } from './ConfigSchema';\nimport { ConfigExpression, ExpressionString } from './ConfigExpression';\nimport { JSONSchema, FromSchema } from './expressions/JSONSchema';\n\nexport type ConfigValueAny = FromSchema<typeof JSONSchema.AnyPropertySchema>;\n\nexport type ConfigValueString = Config['value'];\n\nexport type ConfigWithCfgu = Config & { cfgu: Cfgu };\n\ntype ConfigExpressionContext = {\n store?: ConfigStore;\n set?: ConfigSet;\n schema?: ConfigSchema;\n current?: string;\n configs: {\n [key: string]: ConfigWithCfgu;\n };\n};\n\ntype ConfigContext = Merge<\n ConfigWithCfgu,\n {\n labels: string[];\n value: ConfigValueAny;\n storedValue: string;\n }\n>;\n\nexport type ConfigEvaluationContext = {\n $: Partial<ConfigContext> & {\n input?: {\n store: Jsonify<ConfigStore>;\n set: Jsonify<ConfigSet>;\n schema: Jsonify<ConfigSchema>;\n };\n configs: {\n [key: string]: ConfigContext;\n };\n };\n};\n\nexport class ConfigValue {\n static parse(value: ConfigValueString): ConfigValueAny {\n try {\n // numeric, boolean, object, array\n return JSON.parse(value);\n } catch (error) {\n // string\n return value;\n }\n }\n\n static stringify(value: ConfigValueAny): ConfigValueString {\n if (_.isString(value)) {\n return value;\n }\n return JSON.stringify(value);\n }\n\n static createEvaluationContext(context: ConfigExpressionContext): ConfigEvaluationContext {\n const configs = _.mapValues(context.configs, (current) => ({\n ...current,\n storedValue: current.value,\n value: ConfigValue.parse(current.value),\n labels: Array.isArray(current.cfgu?.label) ? current.cfgu.label : _.compact([current.cfgu?.label]),\n }));\n\n let $ = {\n configs,\n } as ConfigEvaluationContext['$'];\n\n if (context.store && context.set && context.schema) {\n $ = {\n input: {\n store: { ...context.store },\n set: { ...context.set },\n schema: { ...context.schema },\n },\n ...$,\n };\n }\n\n if (context.current) {\n const currentConfig = configs[context.current];\n if (!currentConfig) {\n throw new Error(`Failed to create evaluation context for key \"${context.current}\"`);\n }\n $ = { ...currentConfig, ...$ };\n }\n\n return { $ };\n }\n\n static test({\n test,\n errorSuffix = `test \"${test}\"`,\n context,\n }: {\n test: ExpressionString;\n errorSuffix?: string;\n context: Required<ConfigExpressionContext>;\n }) {\n try {\n const isValid = ConfigExpression.evaluateBoolean(test, ConfigValue.createEvaluationContext(context));\n if (!isValid) {\n throw new Error();\n }\n } catch (error) {\n throw new Error(`ConfigValue failed ${errorSuffix}\\n${error.message}`);\n }\n }\n\n static validate(context: Required<ConfigExpressionContext>) {\n // todo: consider optimizing this code by creating a concatenated test string and evaluating it once\n\n const currentConfig = context.configs[context.current];\n if (!currentConfig) {\n throw new Error(`Failed to create evaluation context for key \"${context.current}\"`);\n }\n\n const { cfgu } = currentConfig;\n\n if (cfgu?.pattern) {\n ConfigValue.test({\n test: `JSONSchema.validate({ \"type\": \"string\", \"pattern\": $.cfgu.pattern }, $.storedValue) || true`,\n errorSuffix: 'Cfgu.pattern test',\n context,\n });\n }\n\n if (cfgu?.enum) {\n ConfigValue.test({\n test: `JSONSchema.validate({ \"enum\": $.cfgu.enum }, $.value) || true`,\n errorSuffix: 'Cfgu.enum test',\n context,\n });\n }\n\n if (cfgu?.schema) {\n ConfigValue.test({\n test: `JSONSchema.validate($.cfgu.schema, $.value) || true`,\n errorSuffix: 'Cfgu.schema test',\n context,\n });\n }\n\n if (cfgu?.test) {\n const tests = Array.isArray(cfgu.test) ? cfgu.test : [cfgu.test];\n tests.forEach((test, idx) => {\n ConfigValue.test({\n test,\n errorSuffix: `Cfgu.test[${idx}] \"${test}\"`,\n context,\n });\n });\n }\n }\n}\n","import _ from 'lodash';\nimport { CfguSchema } from './Cfgu';\nimport { ConfigKey } from './ConfigKey';\nimport { JSONSchema, JSONSchemaObject, FromSchema } from './expressions/JSONSchema';\nimport { ConfigValue } from './ConfigValue';\nimport { ConfigExpression } from './ConfigExpression';\n\nconst LEGACY_CFGU_VALUE_TYPE_VALIDATORS: Record<string, string> = {\n Boolean: 'validator.isBoolean($.storedValue, { loose: true })',\n Number: 'validator.isNumeric($.storedValue)',\n String: 'true',\n RegEx: 'expect($.cfgu.pattern).to.exist',\n UUID: 'validator.isUUID($.storedValue)',\n SemVer: 'validator.isSemVer($.storedValue)',\n Email: 'validator.isEmail($.storedValue)',\n MobilePhone: 'validator.isMobilePhone($.storedValue)',\n Locale: 'validator.isLocale($.storedValue)',\n LatLong: 'validator.isLatLong($.storedValue)',\n Color: 'validator.isHexColor($.storedValue) || validator.isHSL($.storedValue) || validator.isRgbColor($.storedValue)',\n IPv4: 'validator.isIP($.storedValue, 4)',\n IPv6: 'validator.isIP($.storedValue, 6)',\n Domain: 'validator.isFQDN($.storedValue)',\n URL: 'validator.isURL($.storedValue)',\n Hex: 'validator.isHexadecimal($.storedValue)',\n Base64: 'validator.isBase64($.storedValue)',\n MD5: 'validator.isHash($.storedValue, \"md5\")',\n SHA: 'validator.isHash($.storedValue, \"sha1\") || validator.isHash($.storedValue, \"sha256\") || validator.isHash($.storedValue, \"sha384\") || validator.isHash($.storedValue, \"sha512\")',\n Country: 'validator.isISO31661Alpha2($.storedValue) || validator.isISO31661Alpha3($.storedValue)',\n Currency: 'validator.isISO4217($.storedValue)',\n DockerImage:\n '/^((?:[a-z0-9]([-a-z0-9]*[a-z0-9])?.)+[a-z]{2,6}(?::d{1,5})?/)?[a-z0-9]+(?:[._-/:][a-z0-9]+)*$/gm.test($.storedValue)',\n ARN: '/^arn:([^:\\n]+):([^:\\n]+):(?:[^:\\n]*):(?:([^:\\n]*)):([^:/\\n]+)(?:(:[^\\n]+)|(/[^:\\n]+))?$/gm.test($.storedValue)',\n MACAddress: 'validator.isMACAddress($.storedValue)',\n MIMEType: 'validator.isMimeType($.storedValue)',\n MongoId: 'validator.isMongoId($.storedValue)',\n AWSRegion:\n 'new Set([\"af-south-1\",\"ap-east-1\",\"ap-northeast-1\",\"ap-northeast-2\",\"ap-northeast-3\",\"ap-south-1\",\"ap-southeast-1\",\"ap-southeast-2\",\"ca-central-1\",\"cn-north-1\",\"cn-northwest-1\",\"eu-central-1\",\"eu-north-1\",\"eu-south-1\",\"eu-west-1\",\"eu-west-2\",\"eu-west-3\",\"me-south-1\",\"sa-east-1\",\"us-east-1\",\"us-east-2\",\"us-gov-east-1\",\"us-gov-west-1\",\"us-west-1\",\"us-west-2\"]).has($.storedValue)',\n AZRegion:\n 'new Set([\"eastus\",\"eastus2\",\"centralus\",\"northcentralus\",\"southcentralus\",\"westcentralus\",\"westus\",\"westus2\",\"canadacentral\",\"canadaeast\",\"brazilsouth\",\"brazilsoutheast\",\"northeurope\",\"westeurope\",\"uksouth\",\"ukwest\",\"francecentral\",\"francesouth\",\"switzerlandnorth\",\"switzerlandwest\",\"germanywestcentral\",\"norwayeast\",\"norwaywest\",\"eastasia\",\"southeastasia\",\"australiaeast\",\"australiasoutheast\",\"australiacentral\",\"australiacentral2\",\"japaneast\",\"japanwest\",\"koreacentral\",\"koreasouth\",\"southafricanorth\",\"southafricawest\",\"uaenorth\",\"uaecentral\",\"usgovarizona\",\"usgovtexas\",\"usdodeast\",\"usdodcentral\",\"usgovvirginia\",\"usgoviowa\",\"usgovcalifornia\",\"ussecwest\",\"usseceast\"]).has($.storedValue)',\n GCPRegion:\n 'new Set([\"us-east1\",\"us-east4\",\"us-west1\",\"us-west2\",\"us-west3\",\"us-central1\",\"northamerica-northeast1\",\"southamerica-east1\",\"europe-north1\",\"europe-west1\",\"europe-west2\",\"europe-west3\",\"europe-west4\",\"europe-west6\",\"asia-east1\",\"asia-east2\",\"asia-northeast1\",\"asia-northeast2\",\"asia-northeast3\",\"asia-south1\",\"asia-southeast1\",\"australia-southeast1\",\"australia-southeast2\",\"southasia-east1\",\"northamerica-northeast2\",\"europe-central2\",\"asia-southeast2\",\"asia-east3\",\"europe-west7\",\"us-west4\",\"europe-west8\",\"asia-northeast4\",\"asia-southeast3\",\"us-west5\",\"us-central2\",\"us-east5\",\"us-north1\",\"northamerica-northeast3\",\"us-west6\"]).has($.storedValue)',\n OracleRegion:\n 'new Set([\"us-ashburn-1\",\"us-phoenix-1\",\"ca-toronto-1\",\"sa-saopaulo-1\",\"uk-london-1\",\"uk-gov-london-1\",\"eu-frankfurt-1\",\"eu-zurich-1\",\"eu-amsterdam-1\",\"me-jeddah-1\",\"ap-mumbai-1\",\"ap-osaka-1\",\"ap-seoul-1\",\"ap-sydney-1\",\"ap-tokyo-1\",\"ap-chuncheon-1\",\"ap-melbourne-1\",\"ap-hyderabad-1\",\"ca-montreal-1\",\"us-sanjose-1\",\"us-luke-1\",\"me-dubai-1\",\"us-gov-ashburn-1\",\"us-gov-chicago-1\",\"us-gov-phoenix-1\",\"us-gov-orlando-1\",\"us-gov-sanjose-1\",\"us-gov-ashburn-2\"]).has($.storedValue)',\n IBMRegion:\n 'new Set([\"us-south\",\"us-east\",\"us-north\",\"us-west\",\"eu-gb\",\"eu-de\",\"eu-nl\",\"eu-fr\",\"eu-it\",\"ap-north\",\"ap-south\",\"ap-east\",\"ap-jp\",\"ap-au\",\"ca-toronto\",\"ca-central\",\"sa-saopaulo\",\"sa-mexico\",\"sa-buenosaires\",\"sa-lima\",\"sa-santiago\",\"af-za\",\"af-eg\",\"af-dz\",\"af-ma\"]).has($.storedValue)',\n AlibabaRegion:\n 'new Set([\"cn-hangzhou\",\"cn-shanghai\",\"cn-beijing\",\"cn-shenzhen\",\"cn-zhangjiakou\",\"cn-huhehaote\",\"cn-wulanchabu\",\"ap-southeast-1\",\"ap-southeast-2\",\"ap-southeast-3\",\"ap-southeast-5\",\"ap-northeast-1\",\"ap-south-1\",\"ap-south-2\",\"us-west-1\",\"us-east-1\",\"eu-west-1\",\"eu-central-1\",\"me-east-1\",\"ap-southwest-1\"]).has($.storedValue)',\n Language: 'validator.isISO6391($.storedValue)',\n DateTime:\n 'validator.isDate($.storedValue) || validator.isTime($.storedValue) || !Number.isNaN(new Date($.storedValue).getTime())',\n JSONSchema: 'expect($.cfgu.schema).to.exist',\n};\n\nexport const ConfigSchemaKeysSchema = {\n type: 'object',\n required: [],\n minProperties: 1,\n // todo: patternProperties is not supported by OpenAPI and has limited error resolution support. Thats why we currently use additionalProperties and check key Naming separately.\n // additionalProperties: false,\n // patternProperties: {\n // [Naming.pattern]: CfguSchema,\n // },\n additionalProperties: CfguSchema,\n} as const satisfies JSONSchemaObject;\n\nexport type ConfigSchemaKeys = FromSchema<typeof ConfigSchemaKeysSchema>;\n\nexport type V0ConfigSchemaKeys = { [x: string]: any };\n\n/**\n * A file containing binding records linking each unique `ConfigKey` to its corresponding `Cfgu` declaration.\n * https://configu.com/docs/config-schema/\n */\nexport class ConfigSchema {\n constructor(public readonly keys: ConfigSchemaKeys = {}) {\n if (_.isEmpty(this.keys)) {\n throw new Error('ConfigSchema.keys is required');\n }\n\n _.chain(this.keys)\n .entries()\n .forEach(([key, cfgu]) => {\n ConfigKey.validate({ key, errorPrefix: 'ConfigSchema.keys' });\n // todo: consider if validate per key is not better here to provide more detailed error messages\n // if (!JsonSchema.validate({ schema: CfguSchema, data: cfgu })) {\n // throw new Error(`ConfigSchema.keys \"${key}\" is invalid\\n${JsonSchema.getLastValidationError()}`);\n // }\n });\n\n try {\n JSONSchema.validate(ConfigSchemaKeysSchema, this.keys);\n } catch (error) {\n throw new Error(`ConfigSchema.keys are invalid\\n${error.message}`);\n }\n }\n\n static fromLegacyConfigSchema(contents: V0ConfigSchemaKeys) {\n const migratedContents: ConfigSchemaKeys = _(contents)\n .mapValues((value, key) => {\n const { type, options, depends, labels, template, ...restCfguProps } = value;\n const migratedCfgu = { ...restCfguProps, test: [] };\n if (type) {\n migratedCfgu.test.push(LEGACY_CFGU_VALUE_TYPE_VALIDATORS[type]);\n }\n if (options) {\n migratedCfgu.enum = options.map((option: string) => ConfigValue.parse(option));\n }\n if (labels) {\n migratedCfgu.label = labels;\n }\n if (depends) {\n depends.forEach((dependencyKey: string) => {\n migratedCfgu.test.push(\n `expect($.configs.${dependencyKey}.storedValue, 'Dependency ${dependencyKey} is missing for ${key}').to.not.be.empty`,\n );\n });\n }\n if (template) {\n migratedCfgu.const = template.replace(ConfigExpression.pattern, (match: string, group: string) => {\n if (contents[group]) {\n return `{{$.configs.${group}.storedValue}}`;\n }\n if (group === 'CONFIGU_STORE.type') {\n return `{{$.input.store.type}}`;\n }\n if (group === 'CONFIGU_SET.path') {\n return `{{$.input.set.path}}`;\n }\n if (group === 'CONFIGU_SET.hierarchy') {\n return `{{$.input.set.hierarchy}}`;\n }\n if (group === 'CONFIGU_SET.first') {\n return `{{_.first($.input.set.hierarchy)}}`;\n }\n if (group === 'CONFIGU_SET.last') {\n return `{{_.last($.input.set.hierarchy)}}`;\n }\n return match;\n });\n }\n return migratedCfgu;\n })\n .value();\n\n return new ConfigSchema(migratedContents);\n }\n}\n","import _ from 'lodash';\nimport { ConfigKey } from './ConfigKey';\n\n/**\n * A unique, case-sensitive path within a tree-like data structure that groups `Config`s contextually.\n * https://configu.com/docs/config-set/\n */\nexport class ConfigSet {\n static readonly separator = '/';\n static readonly root = '';\n static readonly rootLabel = '/';\n\n public readonly hierarchy: string[] = [];\n\n constructor(public readonly path: string = ConfigSet.root) {\n this.path = this.path.trim();\n\n if (this.path.startsWith(ConfigSet.rootLabel)) {\n this.path = this.path.slice(1);\n }\n\n if (this.path.endsWith(ConfigSet.separator)) {\n this.path = this.path.slice(0, -1);\n }\n\n if (this.path === ConfigSet.root) {\n this.hierarchy = [ConfigSet.root];\n return;\n }\n\n this.hierarchy = this.path.split(ConfigSet.separator).map((cur, idx, sets) => {\n ConfigKey.validate({ key: cur, errorPrefix: 'ConfigSet.path' });\n\n return _.take(sets, idx + 1).join(ConfigSet.separator);\n });\n this.hierarchy.unshift(ConfigSet.root);\n }\n}\n","import { Config } from './Config';\nimport { ConfigKey } from './ConfigKey';\n\nexport type ConfigQuery = Pick<Config, 'set' | 'key'>;\n\nexport interface ConfigStoreConstructor {\n // eslint-disable-next-line no-use-before-define\n new (configuration: any): ConfigStore;\n type: string;\n}\n\n/**\n * A storage engine interface for `Config`s records.\n * https://configu.com/docs/config-store/\n */\nexport abstract class ConfigStore {\n private static stores = new Map<string, ConfigStoreConstructor>();\n\n // todo: verify if this is needed except for jsonify\n public readonly type: string = this.constructor.name;\n\n static get type() {\n if (!this.name.endsWith(ConfigStore.name)) {\n throw new Error(`ConfigStore class name must end with \"${ConfigStore.name}\". (${this.name})`);\n }\n const nameWithoutSuffix = this.name.slice(0, -ConfigStore.name.length);\n const type = ConfigKey.normalize(nameWithoutSuffix);\n return type;\n }\n\n static register(store: ConfigStoreConstructor) {\n ConfigStore.stores.set(store.type, store);\n }\n\n static has(type: string) {\n const normalizedType = ConfigKey.normalize(type);\n return ConfigStore.stores.has(normalizedType);\n }\n\n static construct(type: string, configuration = {}): ConfigStore {\n const normalizedType = ConfigKey.normalize(type);\n const StoreCtor = ConfigStore.stores.get(normalizedType);\n if (!StoreCtor) {\n throw new Error(`unknown store type ${type}`);\n }\n return new StoreCtor(configuration);\n }\n\n async init() {}\n abstract get(queries: ConfigQuery[]): Promise<Config[]>;\n abstract set(configs: Config[]): Promise<void>;\n}\n","import { Config } from '../Config';\nimport { ConfigStore, ConfigQuery } from '../ConfigStore';\n\nexport class NoopConfigStore extends ConfigStore {\n override get(queries: ConfigQuery[]): Promise<Config[]> {\n return Promise.resolve([]);\n }\n\n override set(configs: Config[]): Promise<void> {\n return Promise.resolve();\n }\n}\n","import _ from 'lodash';\nimport { Config } from '../Config';\nimport { ConfigStore, ConfigQuery } from '../ConfigStore';\n\nexport class InMemoryConfigStore extends ConfigStore {\n private data: { [ConfigSet: string]: { [ConfigKey: string]: Config } } = {};\n\n async get(queries: ConfigQuery[]): Promise<Config[]> {\n return _.chain(queries)\n .map(({ set, key }) => _.get(this.data, [set, key], { set, key, value: '' }))\n .filter('value')\n .value();\n }\n\n async set(configs: Config[]): Promise<void> {\n configs.forEach((config) => {\n if (!config.value) {\n _.unset(this.data, [config.set, config.key]);\n }\n _.set(this.data, [config.set, config.key], config);\n });\n }\n}\n","{\n \"name\": \"@configu/sdk\",\n \"version\": \"1.1.0\",\n \"description\": \"Configu TypeScript SDK\",\n \"keywords\": [\n \"configu-sdk\",\n \"configu-ts\",\n \"configu-typescript\",\n \"sdk\",\n \"typescript\",\n \"typescript-sdk\"\n ],\n \"homepage\": \"https://configu.com\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/configu/configu\",\n \"directory\": \"packages/sdk\"\n },\n \"bugs\": \"https://github.com/configu/configu/issues\",\n \"license\": \"Apache-2.0\",\n \"author\": {\n \"name\": \"@configu/dev\",\n \"email\": \"dev@configu.com\",\n \"url\": \"https://configu.com\"\n },\n \"type\": \"module\",\n \"types\": \"./dist/index.d.ts\",\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.mjs\",\n \"exports\": {\n \"./package.json\": \"./package.json\",\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.mjs\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"config\": {\n \"entry\": \"./src/index.ts\"\n },\n \"scripts\": {\n \"clean\": \"shx rm -rf dist\",\n \"build\": \"tsup $npm_package_config_entry\"\n },\n \"dependencies\": {\n \"@segment/ajv-human-errors\": \"^2.14.1\",\n \"@vitest/expect\": \"^2.1.8\",\n \"acorn\": \"^8.14.0\",\n \"acorn-walk\": \"^8.3.4\",\n \"ajv\": \"^8.17.1\",\n \"ajv-formats\": \"^3.0.1\",\n \"chai\": \"^5.1.2\",\n \"chai-subset\": \"^1.6.0\",\n \"jest-extended\": \"^4.0.2\",\n \"json-schema-to-ts\": \"^3.1.1\",\n \"lodash\": \"^4.17.21\",\n \"ses\": \"^1.10.0\",\n \"validator\": \"^13.12.0\",\n \"zod\": \"^3.24.1\"\n },\n \"devDependencies\": {\n \"@types/chai\": \"^5.0.1\",\n \"@types/chai-subset\": \"^1.3.5\",\n \"@types/validator\": \"^13.12.2\",\n \"type-fest\": \"^4.30.2\"\n }\n}\n","import packageJson from '../package.json' with { type: 'json' };\n\nexport type ConfigCommandInput<I extends object> = I;\n\nexport type ConfigCommandOutput<O> = {\n result: O;\n metadata: { version: string; start: number; end: number; duration: number };\n};\n\nexport abstract class ConfigCommand<I extends object, O> {\n constructor(public input: I) {}\n abstract execute(): Promise<O>;\n\n async run(): Promise<ConfigCommandOutput<O>> {\n const start = performance.now();\n const result = await this.execute();\n const end = performance.now();\n const duration = end - start;\n\n return {\n metadata: { version: packageJson.version, start, end, duration },\n result,\n };\n }\n}\n","import _ from 'lodash';\nimport { ConfigCommand } from '../ConfigCommand';\nimport { ConfigValue, ConfigValueAny, ConfigWithCfgu } from '../ConfigValue';\nimport { ConfigStore, ConfigQuery } from '../ConfigStore';\nimport { ConfigSet } from '../ConfigSet';\nimport { ConfigSchema } from '../ConfigSchema';\nimport { ConfigExpression } from '../ConfigExpression';\n\nexport enum EvaluatedConfigOrigin {\n Const = 'const',\n Override = 'override',\n Store = 'store',\n Default = 'default',\n Empty = 'empty',\n}\n\nexport type EvaluatedConfig = ConfigWithCfgu & {\n origin: EvaluatedConfigOrigin;\n};\n\nexport type EvalCommandOutput = {\n [key: string]: EvaluatedConfig;\n};\n\nexport type EvalCommandInput = {\n store: ConfigStore;\n set: ConfigSet;\n schema: ConfigSchema;\n configs?: { [key: string]: ConfigValueAny };\n pipe?: EvalCommandOutput;\n validate?: boolean;\n};\n\nexport class EvalCommand extends ConfigCommand<EvalCommandInput, EvalCommandOutput> {\n async execute() {\n const { store } = this.input;\n\n await store.init();\n\n let result: EvalCommandOutput = { ...this.evalEmpty() };\n result = { ...result, ...this.evalOverride(result) };\n result = { ...result, ...(await this.evalStore(result)) };\n result = { ...result, ...this.evalDefault(result) };\n result = { ...result, ...this.evalPipe(result) };\n result = { ...result, ...this.evalConst(result) };\n\n this.validateResult(result);\n\n return result;\n }\n\n private evalEmpty(): EvalCommandOutput {\n const { schema } = this.input;\n\n return _.mapValues<ConfigSchema['keys'], EvaluatedConfig>(schema.keys, (cfgu, key) => {\n let origin = EvaluatedConfigOrigin.Empty;\n if (cfgu?.const) {\n origin = EvaluatedConfigOrigin.Const;\n }\n\n return {\n set: this.input.set.path,\n key,\n value: '',\n cfgu,\n origin,\n };\n });\n }\n\n private evalOverride(result: EvalCommandOutput): EvalCommandOutput {\n const { configs = {} } = this.input;\n\n return _.mapValues(result, (current) => {\n if (current.origin !== EvaluatedConfigOrigin.Empty) {\n return current;\n }\n\n const isOverridden = Object.prototype.hasOwnProperty.call(configs, current.key);\n const isLazy = Boolean(current.cfgu?.lazy);\n\n if (!isOverridden && !isLazy) {\n return current;\n }\n\n const overrideValue = configs?.[current.key] ?? '';\n return {\n ...current,\n value: ConfigValue.stringify(overrideValue),\n origin: EvaluatedConfigOrigin.Override,\n };\n });\n }\n\n private async evalStore(result: EvalCommandOutput): Promise<EvalCommandOutput> {\n const { store, set } = this.input;\n\n const storeQueries = _.chain(result)\n .values()\n .filter((current) => current.origin === EvaluatedConfigOrigin.Empty)\n .flatMap((current) => set.hierarchy.map((node) => ({ set: node, key: current.key })))\n .value() satisfies ConfigQuery[];\n const storeConfigsArray = await store.get(storeQueries);\n const storeConfigsDict = _.chain(storeConfigsArray)\n .orderBy([(config) => set.hierarchy.indexOf(config.set)], ['asc']) // \"asc\" because _.keyBy will keep the last element for each key\n .keyBy((config) => config.key) // https://lodash.com/docs#keyBy\n .value();\n\n return _.mapValues(result, (current) => {\n if (current.origin !== EvaluatedConfigOrigin.Empty) {\n return current;\n }\n\n const storeConfig = storeConfigsDict?.[current.key];\n if (!storeConfig || !storeConfig.value) {\n return current;\n }\n\n return _.merge(current, storeConfig, {\n origin: EvaluatedConfigOrigin.Store,\n });\n });\n }\n\n private evalDefault(result: EvalCommandOutput): EvalCommandOutput {\n return _.mapValues(result, (current) => {\n if (current.origin !== EvaluatedConfigOrigin.Empty) {\n return current;\n }\n\n if (current.cfgu?.default) {\n return {\n ...current,\n value: ConfigValue.stringify(current.cfgu.default),\n origin: EvaluatedConfigOrigin.Default,\n };\n }\n\n return current;\n });\n }\n\n private evalPipe(result: EvalCommandOutput): EvalCommandOutput {\n const { pipe } = this.input;\n\n if (!pipe) {\n return result;\n }\n\n const mergedResults = _.assignWith(result, pipe, (current, piped) => {\n if (piped.origin === EvaluatedConfigOrigin.Empty) {\n return current;\n }\n\n if (current.origin === EvaluatedConfigOrigin.Empty) {\n return piped;\n }\n\n const isCurrentDefault = current.origin === EvaluatedConfigOrigin.Default;\n const isPipedDefault = piped.origin === EvaluatedConfigOrigin.Default;\n\n if (isCurrentDefault && !isPipedDefault) {\n return piped;\n }\n\n return current;\n });\n\n return mergedResults;\n }\n\n private evalConst(result: EvalCommandOutput): EvalCommandOutput {\n const { store, set, schema } = this.input;\n\n const resultWithConstExpressions = { ...result };\n\n const constExpressionsDict = _.chain(result)\n .pickBy((current) => current.origin === EvaluatedConfigOrigin.Const)\n .mapValues((current) => (current.cfgu?.const ? `\\`${current.cfgu.const}\\`` : ''))\n .value();\n\n ConfigExpression.sort(constExpressionsDict).forEach((key) => {\n const expression = constExpressionsDict[key] as string;\n const value =\n ConfigExpression.evaluate(\n expression,\n ConfigValue.createEvaluationContext({\n store,\n set,\n schema,\n current: key,\n configs: resultWithConstExpressions,\n }),\n ) ?? '';\n (resultWithConstExpressions[key] as EvaluatedConfig).value = value;\n });\n return resultWithConstExpressions;\n }\n\n private validateResult(result: EvalCommandOutput): void {\n const { store, set, schema, validate = true } = this.input;\n\n if (!validate) {\n return;\n }\n\n // const evaluatedConfigsDict = _.mapValues(result, (current) => current.value);\n\n // * validate the eval result against the provided schema\n _.chain(result)\n .values()\n .forEach((current) => {\n const { cfgu, origin, key } = current;\n // const evaluatedValue = current.value;\n\n try {\n if (cfgu?.required && origin === EvaluatedConfigOrigin.Empty) {\n throw new Error('ConfigValue is required');\n }\n\n // todo: think about when should we run the tests\n ConfigValue.validate({\n store,\n set,\n schema,\n current: key,\n configs: result,\n });\n\n // todo: think about reviving depends on cfgu\n // if (origin !== EvaluatedConfigOrigin.Empty) {\n // if (cfgu.depends && cfgu.depends.some((depend) => !evaluatedConfigsDict[depend])) {\n // throw new Error(`ConfigValue is missing for depends`);\n // }\n // } else if (cfgu?.required) {\n // throw new Error('ConfigValue is required');\n // }\n } catch (error) {\n throw new Error(`Validation failed for Config: \"${current.key}\"\\n${error.message}`);\n }\n })\n .value();\n }\n}\n","import _ from 'lodash';\nimport { ConfigCommand } from '../ConfigCommand';\nimport { Config } from '../Config';\nimport { ConfigValue, ConfigValueAny, ConfigWithCfgu } from '../ConfigValue';\nimport { ConfigStore, ConfigQuery } from '../ConfigStore';\nimport { ConfigSet } from '../ConfigSet';\nimport { ConfigSchema } from '../ConfigSchema';\nimport { EvalCommandOutput, EvaluatedConfigOrigin } from './EvalCommand';\nimport { Cfgu } from '../Cfgu';\n\nexport enum ConfigDiffAction {\n Add = 'add',\n Update = 'update',\n Delete = 'delete',\n}\n\nexport type ConfigDiff = {\n prev: string;\n next: string;\n action: ConfigDiffAction;\n};\n\nexport type UpsertedConfig = ConfigWithCfgu & ConfigDiff;\n\nexport type UpsertCommandOutput = {\n [key: string]: UpsertedConfig;\n};\n\nexport type UpsertCommandInput = {\n store: ConfigStore;\n set: ConfigSet;\n schema: ConfigSchema;\n configs?: { [key: string]: ConfigValueAny };\n pipe?: EvalCommandOutput;\n dry?: boolean;\n};\n\nexport class UpsertCommand extends ConfigCommand<UpsertCommandInput, UpsertCommandOutput> {\n async execute() {\n const { store, set, schema, configs = {}, pipe = {} } = this.input;\n\n await store.init();\n\n const keys = Object.keys(schema.keys);\n\n const storeQueries = _.chain(keys)\n .map((key) => ({ set: set.path, key }))\n .value() satisfies ConfigQuery[];\n const storeConfigsArray = await store.get(storeQueries);\n const storeConfigsDict = _.chain(storeConfigsArray)\n .keyBy((config) => config.key)\n .mapValues((config) => config.value)\n .value();\n\n const currentConfigs = _.chain(keys)\n .keyBy()\n .mapValues((key) => ({ set: set.path, key, value: storeConfigsDict[key] ?? '', cfgu: schema.keys[key] as Cfgu }))\n .value() satisfies { [key: string]: ConfigWithCfgu };\n\n let result: UpsertCommandOutput = {};\n\n // delete all configs if input is empty\n if (_.isEmpty(configs) && _.isEmpty(pipe)) {\n result = _.chain(schema.keys)\n .mapValues<UpsertedConfig>((cfgu, key) => ({\n set: set.path,\n key,\n value: '',\n cfgu,\n prev: currentConfigs[key]?.value ?? '',\n next: '',\n action: ConfigDiffAction.Delete,\n }))\n .pickBy((diff) => diff.prev !== diff.next)\n .value();\n } else {\n // prepare input configs\n const kvConfigs = _.mapValues(configs, (value) => ConfigValue.stringify(value));\n\n // prepare pipe configs\n const pipeConfigs = _.chain(pipe)\n .pickBy((value, key) => {\n const cfgu = schema.keys[key];\n return (\n cfgu && // key exists in current schema\n !cfgu.const && // key is not a const in current schema\n !cfgu.lazy && // key is not lazy in current schema\n value.origin === EvaluatedConfigOrigin.Store // key is not empty and comes from store\n );\n })\n .mapValues((value) => value.value)\n .value();\n\n // merge pipe and configs, configs will override pipe\n const upsertConfigsDict = { ...pipeConfigs, ...kvConfigs };\n result = _.chain(upsertConfigsDict)\n .mapValues<UpsertedConfig>((value, key) => {\n try {\n const cfgu = schema.keys[key];\n\n if (!cfgu) {\n throw new Error(`Key is not declared on schema`);\n }\n\n const prev = currentConfigs[key]?.value ?? '';\n const next = value;\n\n const context = {\n set: set.path,\n key,\n value,\n cfgu,\n prev,\n next,\n action: ConfigDiffAction.Update,\n };\n\n if (prev === next) {\n // no change will be omitted by the pickBy\n return context;\n }\n if (next === '') {\n return { ...context, action: ConfigDiffAction.Delete };\n }\n if (prev) {\n return { ...context, action: ConfigDiffAction.Update };\n }\n return { ...context, action: ConfigDiffAction.Add };\n } catch (error) {\n throw new Error(`Validation failed for Config: \"${key}\"\\n${error.message}`);\n }\n })\n .pickBy((diff) => diff.prev !== diff.next)\n .value();\n }\n\n // validate result\n _.chain(result)\n .entries()\n .forEach(([key, current]) => {\n try {\n if (current.value) {\n if (current.cfgu?.lazy) {\n throw new Error(`Key declared as \"lazy\" cannot be assigned a value`);\n }\n if (current.cfgu?.const) {\n throw new Error(`Key declared as \"const\" cannot be assigned a value`);\n }\n\n ConfigValue.validate({\n store,\n set,\n schema,\n current: key,\n configs: result,\n });\n }\n } catch (error) {\n throw new Error(`Validation failed for Config: \"${key}\"\\n${error.message}`);\n }\n })\n .value();\n\n if (!this.input.dry) {\n const upsertConfigsArray = _.chain(result)\n .entries()\n .map<Config>(([key, diff]) => ({ set: set.path, key, value: diff.next }))\n .value();\n await store.set(upsertConfigsArray);\n }\n\n return result;\n }\n}\n","import _ from 'lodash';\nimport { ConfigCommand } from '../ConfigCommand';\nimport { EvalCommandOutput } from './EvalCommand';\nimport { ConfigKey } from '../ConfigKey';\nimport { ConfigValue, ConfigValueAny } from '../ConfigValue';\n\nexport type ExportCommandOutput<T> = T;\n\nexport type ExportCommandInput = {\n pipe: EvalCommandOutput;\n coerce?: boolean;\n};\n\nexport class ExportCommand extends ConfigCommand<\n ExportCommandInput,\n ExportCommandOutput<{\n [key: string]: ConfigValueAny;\n }>\n> {\n async execute() {\n const { pipe } = this.input;\n\n const filteredPipe = _.pickBy(pipe, (config) => !config.cfgu?.hidden);\n this.validatePipe(filteredPipe);\n const mappedPipe = this.kv(filteredPipe);\n\n return mappedPipe;\n }\n\n protected validatePipe(pipe: EvalCommandOutput): void {\n _.chain(pipe)\n .values()\n .forEach((current) => {\n ConfigKey.validate({ key: current.key });\n });\n }\n\n protected kv(pipe: EvalCommandOutput) {\n const { coerce = true } = this.input;\n\n if (!coerce) {\n return _.chain(pipe).keyBy('key').mapValues('value').value();\n }\n\n return _.chain(pipe)\n .keyBy('key')\n .mapValues(({ value }) => ConfigValue.parse(value))\n .value();\n }\n}\n"]}