@dxos/config 0.3.11-main.bd26370 → 0.3.11-next.0fb359e

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.
@@ -206,15 +206,19 @@ var definitions = ({ configPath, envPath, devPath, mode = process.env.NODE_ENV,
206
206
  content = mapFromKeyValues(content, process.env);
207
207
  }
208
208
  if (key === "__CONFIG_DEFAULTS__") {
209
- env?.map((key2) => (0, import_lodash4.default)(content, [
210
- "runtime",
211
- "app",
212
- "env",
213
- key2
214
- ], process.env[key2]));
209
+ Object.entries(process.env).forEach(([key2, value2]) => {
210
+ if (key2.startsWith("DX_") || env?.includes(key2)) {
211
+ (0, import_lodash4.default)(content, [
212
+ "runtime",
213
+ "app",
214
+ "env",
215
+ key2
216
+ ], value2);
217
+ }
218
+ });
215
219
  try {
216
220
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
217
- const commitHash = (0, import_node_child_process.execSync)("git rev-parse --short HEAD", {
221
+ const commitHash = process.env.DX_COMMIT_HASH ?? (0, import_node_child_process.execSync)("git rev-parse --short HEAD", {
218
222
  encoding: "utf-8"
219
223
  }).replace("\n", "");
220
224
  const packagePath = import_pkg_up.default.sync();
@@ -243,7 +247,7 @@ var definitions = ({ configPath, envPath, devPath, mode = process.env.NODE_ENV,
243
247
  } catch (err) {
244
248
  (0, import_log.log)(`Failed to load file ${value}:`, err, {
245
249
  F: __dxlog_file,
246
- L: 64,
250
+ L: 70,
247
251
  S: void 0,
248
252
  C: (f, a) => f(...a)
249
253
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/index.ts", "../../../src/config.ts", "../../../src/loaders/index.ts", "../../../src/types.ts", "../../../src/plugin/definitions.ts"],
4
- "sourcesContent": ["//\n// Copyright 2021 DXOS.org\n//\n\n// TODO(burdon): Why is this exported? (Rename).\nexport * as defs from '@dxos/protocols/proto/dxos/config';\n\nexport { type Config as ConfigProto } from '@dxos/protocols/proto/dxos/config';\n\nexport * from './config';\nexport * from './loaders';\nexport * from './plugin';\nexport * from './types';\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { boolean } from 'boolean';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport get from 'lodash.get';\nimport set from 'lodash.set';\n\nimport { InvalidConfigError, schema } from '@dxos/protocols';\nimport { type Config as ConfigProto } from '@dxos/protocols/proto/dxos/config';\n\nimport { type ConfigKey, type DeepIndex, type ParseKey } from './types';\n\ntype MappingSpec = Record<string, { path: string; type?: string }>;\nconst configRootType = schema.getCodecForType('dxos.config.Config');\n\n/**\n * Maps the given objects onto a flattened set of (key x values).\n *\n * Expects parsed yaml content of the form:\n *\n * ```\n * ENV_VAR:\n * path: config.selector.path\n * ```\n *\n * @param {object} spec\n * @param {object} values\n * @return {object}\n */\nexport const mapFromKeyValues = (spec: MappingSpec, values: Record<string, any>) => {\n const config = {};\n\n for (const [key, { path, type }] of Object.entries(spec)) {\n let value = values[key];\n\n if (value !== undefined) {\n if (type) {\n switch (type) {\n case 'boolean': {\n value = boolean(value);\n break;\n }\n\n case 'number': {\n value = Number(value);\n break;\n }\n\n case 'string': {\n break;\n }\n\n case 'json': {\n value = value ? JSON.parse(value) : null;\n break;\n }\n\n default: {\n throw new Error(`Invalid type: ${type}`);\n }\n }\n }\n\n set(config, path, value);\n }\n }\n\n return config;\n};\n\n/**\n * Maps the given flattend set of (key x values) onto a JSON object.\n * @param {object} spec\n * @param {object} values\n */\nexport const mapToKeyValues = (spec: MappingSpec, values: any) => {\n const config: Record<string, any> = {};\n\n for (const [key, { path, type }] of Object.entries(spec)) {\n const value = get(values, path);\n if (value !== undefined) {\n switch (type) {\n case 'json':\n config[key] = JSON.stringify(value);\n break;\n default:\n config[key] = value;\n }\n }\n }\n\n return config;\n};\n\n/**\n * Validate config object.\n */\nexport const validateConfig = (config: ConfigProto): ConfigProto => {\n if (!('version' in config)) {\n throw new InvalidConfigError('Version not specified');\n }\n\n if (config?.version !== 1) {\n throw new InvalidConfigError(`Invalid config version: ${config.version}`);\n }\n\n const error = configRootType.protoType.verify(config);\n if (error) {\n throw new InvalidConfigError(error);\n }\n\n return config;\n};\n\n/**\n * Global configuration object.\n * NOTE: Config objects are immutable.\n */\nexport class Config {\n private readonly _config: any;\n\n /**\n * Creates an immutable instance.\n * @constructor\n * @param objects\n */\n constructor(config: ConfigProto = {}, ...objects: ConfigProto[]) {\n this._config = validateConfig(defaultsDeep(config, ...objects, { version: 1 }));\n }\n\n /**\n * Returns an immutable config JSON object.\n */\n get values(): ConfigProto {\n return this._config;\n }\n\n /**\n * Returns the given config property.\n *\n * @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.\n * @param defaultValue Default value to return if option is not present in the config.\n * @returns The config value or undefined if the option is not present.\n */\n get<K extends ConfigKey>(\n key: K,\n defaultValue?: DeepIndex<ConfigProto, ParseKey<K>>,\n ): DeepIndex<ConfigProto, ParseKey<K>> {\n return get(this._config, key, defaultValue);\n }\n\n /**\n * Returns config key without type checking.\n *\n * @deprecated Use the type-checked version.\n */\n getUnchecked<T>(key: string, defaultValue?: T): T {\n return get(this._config, key, defaultValue);\n }\n\n /**\n * Returns the given config property or throw if it doesn't exist.\n *\n * @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.\n */\n getOrThrow<K extends ConfigKey>(key: K): Exclude<DeepIndex<ConfigProto, ParseKey<K>>, undefined> {\n const value = get(this._config, key);\n if (!value) {\n throw new Error(`Config option not present: ${key}`);\n }\n return value;\n }\n}\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport yaml from 'js-yaml';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { type Config as ConfigProto } from '@dxos/protocols/proto/dxos/config';\n\nimport { mapFromKeyValues } from '../config';\nimport { FILE_DEFAULTS, FILE_ENVS } from '../types';\n\n// TODO(burdon): Move code out of index file.\n\nconst DEFAULT_BASE_PATH = path.resolve(process.cwd(), 'config');\n\nconst maybeLoadFile = (file: string): any => {\n try {\n return yaml.load(fs.readFileSync(file, { encoding: 'utf8' }));\n } catch (err: any) {\n // Ignored.\n }\n};\n\n//\n// NOTE: Export LocalStorage and Dynamics for typescript to typecheck browser code (see ConfigPlugin).\n//\n\n/**\n * Development config.\n */\nexport const Local = (): Partial<ConfigProto> => ({});\n\n/**\n * Provided dynamically by server.\n */\nexport const Dynamics = (): Partial<ConfigProto> => ({});\n\n/**\n * ENV variable (key/value) map.\n */\nexport const Envs = (basePath = DEFAULT_BASE_PATH): Partial<ConfigProto> => {\n const content = maybeLoadFile(path.resolve(basePath, FILE_ENVS));\n return content ? mapFromKeyValues(content, process.env) : {};\n};\n\n/**\n * JSON config.\n */\nexport const Defaults = (basePath = DEFAULT_BASE_PATH): Partial<ConfigProto> =>\n maybeLoadFile(path.resolve(basePath, FILE_DEFAULTS)) ?? {};\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { type Config as ConfigProto } from '@dxos/protocols/proto/dxos/config';\n\nexport const FILE_DEFAULTS = 'defaults.yml';\nexport const FILE_ENVS = 'envs-map.yml';\nexport const FILE_DYNAMICS = 'config.yml';\n\ntype DotPrefix<T extends string> = T extends '' ? '' : `.${T}`;\n\n/**\n * Returns all dot-separated nested keys for an object.\n *\n * Read more: https://stackoverflow.com/a/68404823.\n */\ntype DotNestedKeys<T> = (\n T extends object\n ? {\n [K in Exclude<keyof T, symbol>]: `${K}${DotPrefix<DotNestedKeys<T[K]>>}`;\n }[Exclude<keyof T, symbol>]\n : ''\n) extends infer D\n ? Extract<D, string>\n : never;\n\n/**\n * Parse a dot separated nested key into an array of keys.\n *\n * Example: 'services.signal.server' -> ['services', 'signal', 'server'].\n */\nexport type ParseKey<K extends string> = K extends `${infer L}.${infer Rest}` ? [L, ...ParseKey<Rest>] : [K];\n\n/**\n * Array of types that can act as an object key.\n */\ntype Keys = (keyof any)[];\n\n/**\n * Retrieves a property type in a series of nested objects.\n *\n * Read more: https://stackoverflow.com/a/61648690.\n */\nexport type DeepIndex<T, KS extends Keys, Fail = undefined> = KS extends [infer F, ...infer R]\n ? F extends keyof Exclude<T, undefined>\n ? R extends Keys\n ? DeepIndex<Exclude<T, undefined>[F], R, Fail>\n : Fail\n : Fail\n : T;\n\n/**\n * Any nested dot separated key that can be in config.\n */\n// TODO(egorgripasov): Clean once old config deprecated.\nexport type ConfigKey = DotNestedKeys<ConfigProto>;\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport yaml from 'js-yaml';\nimport set from 'lodash.set';\nimport { execSync } from 'node:child_process';\nimport { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport pkgUp from 'pkg-up';\n\nimport { log } from '@dxos/log';\n\nimport { type ConfigPluginOpts } from './types';\nimport { mapFromKeyValues } from '../config';\n\nconst CWD = process.cwd();\n\nexport const definitions = ({\n configPath,\n envPath,\n devPath,\n mode = process.env.NODE_ENV,\n publicUrl = '',\n env,\n}: ConfigPluginOpts) => {\n const KEYS_TO_FILE = {\n __CONFIG_DEFAULTS__: configPath ?? resolve(CWD, 'dx.yml'),\n __CONFIG_ENVS__: envPath ?? resolve(CWD, 'dx-env.yml'),\n } as { [key: string]: string };\n\n if (mode !== 'production') {\n KEYS_TO_FILE.__CONFIG_LOCAL__ = devPath ?? resolve(CWD, 'dx-local.yml');\n }\n\n return Object.entries(KEYS_TO_FILE).reduce(\n (prev, [key, value]) => {\n let content = {};\n\n try {\n content = yaml.load(readFileSync(value, 'utf-8')) as any;\n\n // Map environment variables to config values.\n if (key === '__CONFIG_ENVS__') {\n content = mapFromKeyValues(content, process.env);\n }\n\n if (key === '__CONFIG_DEFAULTS__') {\n // Load app environment variables into default config.\n env?.map((key) => set(content, ['runtime', 'app', 'env', key], process.env[key]));\n\n // Set build info automatically if available.\n try {\n const timestamp = new Date().toISOString();\n const commitHash = execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).replace('\\n', '');\n const packagePath = pkgUp.sync();\n const packageJson = packagePath && JSON.parse(readFileSync(packagePath, 'utf-8'));\n set(content, ['runtime', 'app', 'build', 'timestamp'], timestamp);\n set(content, ['runtime', 'app', 'build', 'commitHash'], commitHash);\n set(content, ['runtime', 'app', 'build', 'version'], packageJson?.version);\n } catch {}\n }\n } catch (err: any) {\n log(`Failed to load file ${value}:`, err);\n\n if (key === '__CONFIG_DEFAULTS__') {\n // Default config is required.\n throw new Error(`Failed to load default config file from ${value}`);\n }\n }\n\n return {\n ...prev,\n [key]: content,\n };\n },\n {\n __DXOS_CONFIG__: { dynamic: mode === 'production', publicUrl },\n __CONFIG_DEFAULTS__: {},\n __CONFIG_ENVS__: {},\n __CONFIG_LOCAL__: {},\n },\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["import_lodash", "import_js_yaml", "import_node_fs", "import_node_path", "configRootType", "schema", "getCodecForType", "mapFromKeyValues", "spec", "values", "config", "key", "path", "type", "Object", "entries", "value", "undefined", "boolean", "Number", "JSON", "parse", "Error", "set", "mapToKeyValues", "get", "stringify", "validateConfig", "InvalidConfigError", "version", "error", "protoType", "verify", "Config", "constructor", "objects", "_config", "defaultsDeep", "defaultValue", "getUnchecked", "getOrThrow", "FILE_DEFAULTS", "FILE_ENVS", "FILE_DYNAMICS", "DEFAULT_BASE_PATH", "resolve", "process", "cwd", "maybeLoadFile", "file", "yaml", "load", "fs", "readFileSync", "encoding", "err", "Local", "Dynamics", "Envs", "basePath", "content", "env", "Defaults", "CWD", "definitions", "configPath", "envPath", "devPath", "mode", "NODE_ENV", "publicUrl", "KEYS_TO_FILE", "__CONFIG_DEFAULTS__", "__CONFIG_ENVS__", "__CONFIG_LOCAL__", "reduce", "prev", "map", "timestamp", "Date", "toISOString", "commitHash", "execSync", "replace", "packagePath", "pkgUp", "sync", "packageJson", "log", "__DXOS_CONFIG__", "dynamic"]
4
+ "sourcesContent": ["//\n// Copyright 2021 DXOS.org\n//\n\n// TODO(burdon): Why is this exported? (Rename).\nexport * as defs from '@dxos/protocols/proto/dxos/config';\n\nexport { type Config as ConfigProto } from '@dxos/protocols/proto/dxos/config';\n\nexport * from './config';\nexport * from './loaders';\nexport * from './plugin';\nexport * from './types';\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { boolean } from 'boolean';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport get from 'lodash.get';\nimport set from 'lodash.set';\n\nimport { InvalidConfigError, schema } from '@dxos/protocols';\nimport { type Config as ConfigProto } from '@dxos/protocols/proto/dxos/config';\n\nimport { type ConfigKey, type DeepIndex, type ParseKey } from './types';\n\ntype MappingSpec = Record<string, { path: string; type?: string }>;\nconst configRootType = schema.getCodecForType('dxos.config.Config');\n\n/**\n * Maps the given objects onto a flattened set of (key x values).\n *\n * Expects parsed yaml content of the form:\n *\n * ```\n * ENV_VAR:\n * path: config.selector.path\n * ```\n *\n * @param {object} spec\n * @param {object} values\n * @return {object}\n */\nexport const mapFromKeyValues = (spec: MappingSpec, values: Record<string, any>) => {\n const config = {};\n\n for (const [key, { path, type }] of Object.entries(spec)) {\n let value = values[key];\n\n if (value !== undefined) {\n if (type) {\n switch (type) {\n case 'boolean': {\n value = boolean(value);\n break;\n }\n\n case 'number': {\n value = Number(value);\n break;\n }\n\n case 'string': {\n break;\n }\n\n case 'json': {\n value = value ? JSON.parse(value) : null;\n break;\n }\n\n default: {\n throw new Error(`Invalid type: ${type}`);\n }\n }\n }\n\n set(config, path, value);\n }\n }\n\n return config;\n};\n\n/**\n * Maps the given flattend set of (key x values) onto a JSON object.\n * @param {object} spec\n * @param {object} values\n */\nexport const mapToKeyValues = (spec: MappingSpec, values: any) => {\n const config: Record<string, any> = {};\n\n for (const [key, { path, type }] of Object.entries(spec)) {\n const value = get(values, path);\n if (value !== undefined) {\n switch (type) {\n case 'json':\n config[key] = JSON.stringify(value);\n break;\n default:\n config[key] = value;\n }\n }\n }\n\n return config;\n};\n\n/**\n * Validate config object.\n */\nexport const validateConfig = (config: ConfigProto): ConfigProto => {\n if (!('version' in config)) {\n throw new InvalidConfigError('Version not specified');\n }\n\n if (config?.version !== 1) {\n throw new InvalidConfigError(`Invalid config version: ${config.version}`);\n }\n\n const error = configRootType.protoType.verify(config);\n if (error) {\n throw new InvalidConfigError(error);\n }\n\n return config;\n};\n\n/**\n * Global configuration object.\n * NOTE: Config objects are immutable.\n */\nexport class Config {\n private readonly _config: any;\n\n /**\n * Creates an immutable instance.\n * @constructor\n * @param objects\n */\n constructor(config: ConfigProto = {}, ...objects: ConfigProto[]) {\n this._config = validateConfig(defaultsDeep(config, ...objects, { version: 1 }));\n }\n\n /**\n * Returns an immutable config JSON object.\n */\n get values(): ConfigProto {\n return this._config;\n }\n\n /**\n * Returns the given config property.\n *\n * @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.\n * @param defaultValue Default value to return if option is not present in the config.\n * @returns The config value or undefined if the option is not present.\n */\n get<K extends ConfigKey>(\n key: K,\n defaultValue?: DeepIndex<ConfigProto, ParseKey<K>>,\n ): DeepIndex<ConfigProto, ParseKey<K>> {\n return get(this._config, key, defaultValue);\n }\n\n /**\n * Returns config key without type checking.\n *\n * @deprecated Use the type-checked version.\n */\n getUnchecked<T>(key: string, defaultValue?: T): T {\n return get(this._config, key, defaultValue);\n }\n\n /**\n * Returns the given config property or throw if it doesn't exist.\n *\n * @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.\n */\n getOrThrow<K extends ConfigKey>(key: K): Exclude<DeepIndex<ConfigProto, ParseKey<K>>, undefined> {\n const value = get(this._config, key);\n if (!value) {\n throw new Error(`Config option not present: ${key}`);\n }\n return value;\n }\n}\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport yaml from 'js-yaml';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport { type Config as ConfigProto } from '@dxos/protocols/proto/dxos/config';\n\nimport { mapFromKeyValues } from '../config';\nimport { FILE_DEFAULTS, FILE_ENVS } from '../types';\n\n// TODO(burdon): Move code out of index file.\n\nconst DEFAULT_BASE_PATH = path.resolve(process.cwd(), 'config');\n\nconst maybeLoadFile = (file: string): any => {\n try {\n return yaml.load(fs.readFileSync(file, { encoding: 'utf8' }));\n } catch (err: any) {\n // Ignored.\n }\n};\n\n//\n// NOTE: Export LocalStorage and Dynamics for typescript to typecheck browser code (see ConfigPlugin).\n//\n\n/**\n * Development config.\n */\nexport const Local = (): Partial<ConfigProto> => ({});\n\n/**\n * Provided dynamically by server.\n */\nexport const Dynamics = (): Partial<ConfigProto> => ({});\n\n/**\n * ENV variable (key/value) map.\n */\nexport const Envs = (basePath = DEFAULT_BASE_PATH): Partial<ConfigProto> => {\n const content = maybeLoadFile(path.resolve(basePath, FILE_ENVS));\n return content ? mapFromKeyValues(content, process.env) : {};\n};\n\n/**\n * JSON config.\n */\nexport const Defaults = (basePath = DEFAULT_BASE_PATH): Partial<ConfigProto> =>\n maybeLoadFile(path.resolve(basePath, FILE_DEFAULTS)) ?? {};\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { type Config as ConfigProto } from '@dxos/protocols/proto/dxos/config';\n\nexport const FILE_DEFAULTS = 'defaults.yml';\nexport const FILE_ENVS = 'envs-map.yml';\nexport const FILE_DYNAMICS = 'config.yml';\n\ntype DotPrefix<T extends string> = T extends '' ? '' : `.${T}`;\n\n/**\n * Returns all dot-separated nested keys for an object.\n *\n * Read more: https://stackoverflow.com/a/68404823.\n */\ntype DotNestedKeys<T> = (\n T extends object\n ? {\n [K in Exclude<keyof T, symbol>]: `${K}${DotPrefix<DotNestedKeys<T[K]>>}`;\n }[Exclude<keyof T, symbol>]\n : ''\n) extends infer D\n ? Extract<D, string>\n : never;\n\n/**\n * Parse a dot separated nested key into an array of keys.\n *\n * Example: 'services.signal.server' -> ['services', 'signal', 'server'].\n */\nexport type ParseKey<K extends string> = K extends `${infer L}.${infer Rest}` ? [L, ...ParseKey<Rest>] : [K];\n\n/**\n * Array of types that can act as an object key.\n */\ntype Keys = (keyof any)[];\n\n/**\n * Retrieves a property type in a series of nested objects.\n *\n * Read more: https://stackoverflow.com/a/61648690.\n */\nexport type DeepIndex<T, KS extends Keys, Fail = undefined> = KS extends [infer F, ...infer R]\n ? F extends keyof Exclude<T, undefined>\n ? R extends Keys\n ? DeepIndex<Exclude<T, undefined>[F], R, Fail>\n : Fail\n : Fail\n : T;\n\n/**\n * Any nested dot separated key that can be in config.\n */\n// TODO(egorgripasov): Clean once old config deprecated.\nexport type ConfigKey = DotNestedKeys<ConfigProto>;\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport yaml from 'js-yaml';\nimport set from 'lodash.set';\nimport { execSync } from 'node:child_process';\nimport { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport pkgUp from 'pkg-up';\n\nimport { log } from '@dxos/log';\n\nimport { type ConfigPluginOpts } from './types';\nimport { mapFromKeyValues } from '../config';\n\nconst CWD = process.cwd();\n\nexport const definitions = ({\n configPath,\n envPath,\n devPath,\n mode = process.env.NODE_ENV,\n publicUrl = '',\n env,\n}: ConfigPluginOpts) => {\n const KEYS_TO_FILE = {\n __CONFIG_DEFAULTS__: configPath ?? resolve(CWD, 'dx.yml'),\n __CONFIG_ENVS__: envPath ?? resolve(CWD, 'dx-env.yml'),\n } as { [key: string]: string };\n\n if (mode !== 'production') {\n KEYS_TO_FILE.__CONFIG_LOCAL__ = devPath ?? resolve(CWD, 'dx-local.yml');\n }\n\n return Object.entries(KEYS_TO_FILE).reduce(\n (prev, [key, value]) => {\n let content = {};\n\n try {\n content = yaml.load(readFileSync(value, 'utf-8')) as any;\n\n // Map environment variables to config values.\n if (key === '__CONFIG_ENVS__') {\n content = mapFromKeyValues(content, process.env);\n }\n\n if (key === '__CONFIG_DEFAULTS__') {\n // Load app environment variables into default config.\n Object.entries(process.env).forEach(([key, value]) => {\n if (key.startsWith('DX_') || env?.includes(key)) {\n set(content, ['runtime', 'app', 'env', key], value);\n }\n });\n\n // Set build info automatically if available.\n try {\n const timestamp = new Date().toISOString();\n const commitHash =\n process.env.DX_COMMIT_HASH ??\n execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).replace('\\n', '');\n const packagePath = pkgUp.sync();\n const packageJson = packagePath && JSON.parse(readFileSync(packagePath, 'utf-8'));\n set(content, ['runtime', 'app', 'build', 'timestamp'], timestamp);\n set(content, ['runtime', 'app', 'build', 'commitHash'], commitHash);\n set(content, ['runtime', 'app', 'build', 'version'], packageJson?.version);\n } catch {}\n }\n } catch (err: any) {\n log(`Failed to load file ${value}:`, err);\n\n if (key === '__CONFIG_DEFAULTS__') {\n // Default config is required.\n throw new Error(`Failed to load default config file from ${value}`);\n }\n }\n\n return {\n ...prev,\n [key]: content,\n };\n },\n {\n __DXOS_CONFIG__: { dynamic: mode === 'production', publicUrl },\n __CONFIG_DEFAULTS__: {},\n __CONFIG_ENVS__: {},\n __CONFIG_LOCAL__: {},\n },\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_lodash", "import_js_yaml", "import_node_fs", "import_node_path", "configRootType", "schema", "getCodecForType", "mapFromKeyValues", "spec", "values", "config", "key", "path", "type", "Object", "entries", "value", "undefined", "boolean", "Number", "JSON", "parse", "Error", "set", "mapToKeyValues", "get", "stringify", "validateConfig", "InvalidConfigError", "version", "error", "protoType", "verify", "Config", "constructor", "objects", "_config", "defaultsDeep", "defaultValue", "getUnchecked", "getOrThrow", "FILE_DEFAULTS", "FILE_ENVS", "FILE_DYNAMICS", "DEFAULT_BASE_PATH", "resolve", "process", "cwd", "maybeLoadFile", "file", "yaml", "load", "fs", "readFileSync", "encoding", "err", "Local", "Dynamics", "Envs", "basePath", "content", "env", "Defaults", "CWD", "definitions", "configPath", "envPath", "devPath", "mode", "NODE_ENV", "publicUrl", "KEYS_TO_FILE", "__CONFIG_DEFAULTS__", "__CONFIG_ENVS__", "__CONFIG_LOCAL__", "reduce", "prev", "forEach", "startsWith", "includes", "timestamp", "Date", "toISOString", "commitHash", "DX_COMMIT_HASH", "execSync", "replace", "packagePath", "pkgUp", "sync", "packageJson", "log", "__DXOS_CONFIG__", "dynamic"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/sdk/config/src/config.ts":{"bytes":13900,"imports":[{"path":"boolean","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/config/src/types.ts":{"bytes":2748,"imports":[],"format":"esm"},"packages/sdk/config/src/loaders/index.ts":{"bytes":4561,"imports":[{"path":"js-yaml","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"packages/sdk/config/src/config.ts","kind":"import-statement","original":"../config"},{"path":"packages/sdk/config/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/sdk/config/src/plugin/definitions.ts":{"bytes":10041,"imports":[{"path":"js-yaml","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"node:child_process","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"pkg-up","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/sdk/config/src/config.ts","kind":"import-statement","original":"../config"}],"format":"esm"},"packages/sdk/config/src/plugin/types.ts":{"bytes":1498,"imports":[],"format":"esm"},"packages/sdk/config/src/plugin/index.ts":{"bytes":558,"imports":[{"path":"packages/sdk/config/src/plugin/definitions.ts","kind":"import-statement","original":"./definitions"},{"path":"packages/sdk/config/src/plugin/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/sdk/config/src/index.ts":{"bytes":1143,"imports":[{"path":"@dxos/protocols/proto/dxos/config","kind":"import-statement","external":true},{"path":"packages/sdk/config/src/config.ts","kind":"import-statement","original":"./config"},{"path":"packages/sdk/config/src/loaders/index.ts","kind":"import-statement","original":"./loaders"},{"path":"packages/sdk/config/src/plugin/index.ts","kind":"import-statement","original":"./plugin"},{"path":"packages/sdk/config/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"}},"outputs":{"packages/sdk/config/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":16094},"packages/sdk/config/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/protocols/proto/dxos/config","kind":"import-statement","external":true},{"path":"boolean","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"js-yaml","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"js-yaml","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"node:child_process","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"pkg-up","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["Config","Defaults","Dynamics","Envs","FILE_DEFAULTS","FILE_DYNAMICS","FILE_ENVS","Local","definitions","defs","mapFromKeyValues","mapToKeyValues","validateConfig"],"entryPoint":"packages/sdk/config/src/index.ts","inputs":{"packages/sdk/config/src/index.ts":{"bytesInOutput":59},"packages/sdk/config/src/config.ts":{"bytesInOutput":3135},"packages/sdk/config/src/loaders/index.ts":{"bytesInOutput":631},"packages/sdk/config/src/types.ts":{"bytesInOutput":102},"packages/sdk/config/src/plugin/definitions.ts":{"bytesInOutput":2545},"packages/sdk/config/src/plugin/index.ts":{"bytesInOutput":0}},"bytes":6946}}}
1
+ {"inputs":{"packages/sdk/config/src/config.ts":{"bytes":13900,"imports":[{"path":"boolean","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/config/src/types.ts":{"bytes":2748,"imports":[],"format":"esm"},"packages/sdk/config/src/loaders/index.ts":{"bytes":4561,"imports":[{"path":"js-yaml","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"packages/sdk/config/src/config.ts","kind":"import-statement","original":"../config"},{"path":"packages/sdk/config/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/sdk/config/src/plugin/definitions.ts":{"bytes":10742,"imports":[{"path":"js-yaml","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"node:child_process","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"pkg-up","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/sdk/config/src/config.ts","kind":"import-statement","original":"../config"}],"format":"esm"},"packages/sdk/config/src/plugin/types.ts":{"bytes":1498,"imports":[],"format":"esm"},"packages/sdk/config/src/plugin/index.ts":{"bytes":558,"imports":[{"path":"packages/sdk/config/src/plugin/definitions.ts","kind":"import-statement","original":"./definitions"},{"path":"packages/sdk/config/src/plugin/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/sdk/config/src/index.ts":{"bytes":1143,"imports":[{"path":"@dxos/protocols/proto/dxos/config","kind":"import-statement","external":true},{"path":"packages/sdk/config/src/config.ts","kind":"import-statement","original":"./config"},{"path":"packages/sdk/config/src/loaders/index.ts","kind":"import-statement","original":"./loaders"},{"path":"packages/sdk/config/src/plugin/index.ts","kind":"import-statement","original":"./plugin"},{"path":"packages/sdk/config/src/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"}},"outputs":{"packages/sdk/config/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":16462},"packages/sdk/config/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/protocols/proto/dxos/config","kind":"import-statement","external":true},{"path":"boolean","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"js-yaml","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"js-yaml","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"node:child_process","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"pkg-up","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["Config","Defaults","Dynamics","Envs","FILE_DEFAULTS","FILE_DYNAMICS","FILE_ENVS","Local","definitions","defs","mapFromKeyValues","mapToKeyValues","validateConfig"],"entryPoint":"packages/sdk/config/src/index.ts","inputs":{"packages/sdk/config/src/index.ts":{"bytesInOutput":59},"packages/sdk/config/src/config.ts":{"bytesInOutput":3135},"packages/sdk/config/src/loaders/index.ts":{"bytesInOutput":631},"packages/sdk/config/src/types.ts":{"bytesInOutput":102},"packages/sdk/config/src/plugin/definitions.ts":{"bytesInOutput":2721},"packages/sdk/config/src/plugin/index.ts":{"bytesInOutput":0}},"bytes":7122}}}
@@ -26,11 +26,11 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_2FZXTCPZ_exports = {};
30
- __export(chunk_2FZXTCPZ_exports, {
29
+ var chunk_FFIS4ASS_exports = {};
30
+ __export(chunk_FFIS4ASS_exports, {
31
31
  definitions: () => definitions
32
32
  });
33
- module.exports = __toCommonJS(chunk_2FZXTCPZ_exports);
33
+ module.exports = __toCommonJS(chunk_FFIS4ASS_exports);
34
34
  var import_js_yaml = __toESM(require("js-yaml"));
35
35
  var import_lodash = __toESM(require("lodash.set"));
36
36
  var import_node_child_process = require("node:child_process");
@@ -94,15 +94,19 @@ var definitions = ({ configPath, envPath, devPath, mode = process.env.NODE_ENV,
94
94
  content = mapFromKeyValues(content, process.env);
95
95
  }
96
96
  if (key === "__CONFIG_DEFAULTS__") {
97
- env?.map((key2) => (0, import_lodash.default)(content, [
98
- "runtime",
99
- "app",
100
- "env",
101
- key2
102
- ], process.env[key2]));
97
+ Object.entries(process.env).forEach(([key2, value2]) => {
98
+ if (key2.startsWith("DX_") || env?.includes(key2)) {
99
+ (0, import_lodash.default)(content, [
100
+ "runtime",
101
+ "app",
102
+ "env",
103
+ key2
104
+ ], value2);
105
+ }
106
+ });
103
107
  try {
104
108
  const timestamp = (/* @__PURE__ */ new Date()).toISOString();
105
- const commitHash = (0, import_node_child_process.execSync)("git rev-parse --short HEAD", {
109
+ const commitHash = process.env.DX_COMMIT_HASH ?? (0, import_node_child_process.execSync)("git rev-parse --short HEAD", {
106
110
  encoding: "utf-8"
107
111
  }).replace("\n", "");
108
112
  const packagePath = import_pkg_up.default.sync();
@@ -131,7 +135,7 @@ var definitions = ({ configPath, envPath, devPath, mode = process.env.NODE_ENV,
131
135
  } catch (err) {
132
136
  (0, import_log.log)(`Failed to load file ${value}:`, err, {
133
137
  F: __dxlog_file,
134
- L: 64,
138
+ L: 70,
135
139
  S: void 0,
136
140
  C: (f, a) => f(...a)
137
141
  });
@@ -157,4 +161,4 @@ var definitions = ({ configPath, envPath, devPath, mode = process.env.NODE_ENV,
157
161
  0 && (module.exports = {
158
162
  definitions
159
163
  });
160
- //# sourceMappingURL=chunk-2FZXTCPZ.cjs.map
164
+ //# sourceMappingURL=chunk-FFIS4ASS.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/plugin/definitions.ts", "../../../src/config.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport yaml from 'js-yaml';\nimport set from 'lodash.set';\nimport { execSync } from 'node:child_process';\nimport { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport pkgUp from 'pkg-up';\n\nimport { log } from '@dxos/log';\n\nimport { type ConfigPluginOpts } from './types';\nimport { mapFromKeyValues } from '../config';\n\nconst CWD = process.cwd();\n\nexport const definitions = ({\n configPath,\n envPath,\n devPath,\n mode = process.env.NODE_ENV,\n publicUrl = '',\n env,\n}: ConfigPluginOpts) => {\n const KEYS_TO_FILE = {\n __CONFIG_DEFAULTS__: configPath ?? resolve(CWD, 'dx.yml'),\n __CONFIG_ENVS__: envPath ?? resolve(CWD, 'dx-env.yml'),\n } as { [key: string]: string };\n\n if (mode !== 'production') {\n KEYS_TO_FILE.__CONFIG_LOCAL__ = devPath ?? resolve(CWD, 'dx-local.yml');\n }\n\n return Object.entries(KEYS_TO_FILE).reduce(\n (prev, [key, value]) => {\n let content = {};\n\n try {\n content = yaml.load(readFileSync(value, 'utf-8')) as any;\n\n // Map environment variables to config values.\n if (key === '__CONFIG_ENVS__') {\n content = mapFromKeyValues(content, process.env);\n }\n\n if (key === '__CONFIG_DEFAULTS__') {\n // Load app environment variables into default config.\n Object.entries(process.env).forEach(([key, value]) => {\n if (key.startsWith('DX_') || env?.includes(key)) {\n set(content, ['runtime', 'app', 'env', key], value);\n }\n });\n\n // Set build info automatically if available.\n try {\n const timestamp = new Date().toISOString();\n const commitHash =\n process.env.DX_COMMIT_HASH ??\n execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).replace('\\n', '');\n const packagePath = pkgUp.sync();\n const packageJson = packagePath && JSON.parse(readFileSync(packagePath, 'utf-8'));\n set(content, ['runtime', 'app', 'build', 'timestamp'], timestamp);\n set(content, ['runtime', 'app', 'build', 'commitHash'], commitHash);\n set(content, ['runtime', 'app', 'build', 'version'], packageJson?.version);\n } catch {}\n }\n } catch (err: any) {\n log(`Failed to load file ${value}:`, err);\n\n if (key === '__CONFIG_DEFAULTS__') {\n // Default config is required.\n throw new Error(`Failed to load default config file from ${value}`);\n }\n }\n\n return {\n ...prev,\n [key]: content,\n };\n },\n {\n __DXOS_CONFIG__: { dynamic: mode === 'production', publicUrl },\n __CONFIG_DEFAULTS__: {},\n __CONFIG_ENVS__: {},\n __CONFIG_LOCAL__: {},\n },\n );\n};\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { boolean } from 'boolean';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport get from 'lodash.get';\nimport set from 'lodash.set';\n\nimport { InvalidConfigError, schema } from '@dxos/protocols';\nimport { type Config as ConfigProto } from '@dxos/protocols/proto/dxos/config';\n\nimport { type ConfigKey, type DeepIndex, type ParseKey } from './types';\n\ntype MappingSpec = Record<string, { path: string; type?: string }>;\nconst configRootType = schema.getCodecForType('dxos.config.Config');\n\n/**\n * Maps the given objects onto a flattened set of (key x values).\n *\n * Expects parsed yaml content of the form:\n *\n * ```\n * ENV_VAR:\n * path: config.selector.path\n * ```\n *\n * @param {object} spec\n * @param {object} values\n * @return {object}\n */\nexport const mapFromKeyValues = (spec: MappingSpec, values: Record<string, any>) => {\n const config = {};\n\n for (const [key, { path, type }] of Object.entries(spec)) {\n let value = values[key];\n\n if (value !== undefined) {\n if (type) {\n switch (type) {\n case 'boolean': {\n value = boolean(value);\n break;\n }\n\n case 'number': {\n value = Number(value);\n break;\n }\n\n case 'string': {\n break;\n }\n\n case 'json': {\n value = value ? JSON.parse(value) : null;\n break;\n }\n\n default: {\n throw new Error(`Invalid type: ${type}`);\n }\n }\n }\n\n set(config, path, value);\n }\n }\n\n return config;\n};\n\n/**\n * Maps the given flattend set of (key x values) onto a JSON object.\n * @param {object} spec\n * @param {object} values\n */\nexport const mapToKeyValues = (spec: MappingSpec, values: any) => {\n const config: Record<string, any> = {};\n\n for (const [key, { path, type }] of Object.entries(spec)) {\n const value = get(values, path);\n if (value !== undefined) {\n switch (type) {\n case 'json':\n config[key] = JSON.stringify(value);\n break;\n default:\n config[key] = value;\n }\n }\n }\n\n return config;\n};\n\n/**\n * Validate config object.\n */\nexport const validateConfig = (config: ConfigProto): ConfigProto => {\n if (!('version' in config)) {\n throw new InvalidConfigError('Version not specified');\n }\n\n if (config?.version !== 1) {\n throw new InvalidConfigError(`Invalid config version: ${config.version}`);\n }\n\n const error = configRootType.protoType.verify(config);\n if (error) {\n throw new InvalidConfigError(error);\n }\n\n return config;\n};\n\n/**\n * Global configuration object.\n * NOTE: Config objects are immutable.\n */\nexport class Config {\n private readonly _config: any;\n\n /**\n * Creates an immutable instance.\n * @constructor\n * @param objects\n */\n constructor(config: ConfigProto = {}, ...objects: ConfigProto[]) {\n this._config = validateConfig(defaultsDeep(config, ...objects, { version: 1 }));\n }\n\n /**\n * Returns an immutable config JSON object.\n */\n get values(): ConfigProto {\n return this._config;\n }\n\n /**\n * Returns the given config property.\n *\n * @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.\n * @param defaultValue Default value to return if option is not present in the config.\n * @returns The config value or undefined if the option is not present.\n */\n get<K extends ConfigKey>(\n key: K,\n defaultValue?: DeepIndex<ConfigProto, ParseKey<K>>,\n ): DeepIndex<ConfigProto, ParseKey<K>> {\n return get(this._config, key, defaultValue);\n }\n\n /**\n * Returns config key without type checking.\n *\n * @deprecated Use the type-checked version.\n */\n getUnchecked<T>(key: string, defaultValue?: T): T {\n return get(this._config, key, defaultValue);\n }\n\n /**\n * Returns the given config property or throw if it doesn't exist.\n *\n * @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.\n */\n getOrThrow<K extends ConfigKey>(key: K): Exclude<DeepIndex<ConfigProto, ParseKey<K>>, undefined> {\n const value = get(this._config, key);\n if (!value) {\n throw new Error(`Config option not present: ${key}`);\n }\n return value;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_lodash", "configRootType", "schema", "getCodecForType", "mapFromKeyValues", "spec", "values", "config", "key", "path", "type", "Object", "entries", "value", "undefined", "boolean", "Number", "JSON", "parse", "Error", "set", "CWD", "process", "cwd", "definitions", "configPath", "envPath", "devPath", "mode", "env", "NODE_ENV", "publicUrl", "KEYS_TO_FILE", "__CONFIG_DEFAULTS__", "resolve", "__CONFIG_ENVS__", "__CONFIG_LOCAL__", "reduce", "prev", "content", "yaml", "load", "readFileSync", "forEach", "startsWith", "includes", "timestamp", "Date", "toISOString", "commitHash", "DX_COMMIT_HASH", "execSync", "encoding", "replace", "packagePath", "pkgUp", "sync", "packageJson", "version", "err", "log", "__DXOS_CONFIG__", "dynamic"]
7
+ }
@@ -21,14 +21,14 @@ __export(esbuild_plugin_exports, {
21
21
  ConfigPlugin: () => ConfigPlugin
22
22
  });
23
23
  module.exports = __toCommonJS(esbuild_plugin_exports);
24
- var import_chunk_2FZXTCPZ = require("./chunk-2FZXTCPZ.cjs");
24
+ var import_chunk_FFIS4ASS = require("./chunk-FFIS4ASS.cjs");
25
25
  var ConfigPlugin = (options = {}) => {
26
26
  return {
27
27
  name: "dxos-config",
28
28
  setup: ({ initialOptions }) => {
29
29
  const esbuildOptions = initialOptions;
30
30
  esbuildOptions.define ||= {};
31
- Object.entries((0, import_chunk_2FZXTCPZ.definitions)({
31
+ Object.entries((0, import_chunk_FFIS4ASS.definitions)({
32
32
  ...options,
33
33
  mode: process.env.NODE_ENV
34
34
  })).reduce((define, [key, value]) => {
@@ -1 +1 @@
1
- {"inputs":{"packages/sdk/config/src/config.ts":{"bytes":13900,"imports":[{"path":"boolean","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/config/src/plugin/definitions.ts":{"bytes":10041,"imports":[{"path":"js-yaml","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"node:child_process","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"pkg-up","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/sdk/config/src/config.ts","kind":"import-statement","original":"../config"}],"format":"esm"},"packages/sdk/config/src/plugin/esbuild-plugin.ts":{"bytes":2584,"imports":[{"path":"packages/sdk/config/src/plugin/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"packages/sdk/config/src/plugin/rollup-plugin.ts":{"bytes":2068,"imports":[{"path":"packages/sdk/config/src/plugin/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"packages/sdk/config/src/plugin/vite-plugin.ts":{"bytes":3319,"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"packages/sdk/config/src/plugin/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"}},"outputs":{"packages/sdk/config/dist/plugin/node/esbuild-plugin.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1346},"packages/sdk/config/dist/plugin/node/esbuild-plugin.cjs":{"imports":[{"path":"packages/sdk/config/dist/plugin/node/chunk-2FZXTCPZ.cjs","kind":"import-statement"}],"exports":["ConfigPlugin"],"entryPoint":"packages/sdk/config/src/plugin/esbuild-plugin.ts","inputs":{"packages/sdk/config/src/plugin/esbuild-plugin.ts":{"bytesInOutput":443}},"bytes":621},"packages/sdk/config/dist/plugin/node/rollup-plugin.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1102},"packages/sdk/config/dist/plugin/node/rollup-plugin.cjs":{"imports":[{"path":"packages/sdk/config/dist/plugin/node/chunk-2FZXTCPZ.cjs","kind":"import-statement"}],"exports":["ConfigPlugin"],"entryPoint":"packages/sdk/config/src/plugin/rollup-plugin.ts","inputs":{"packages/sdk/config/src/plugin/rollup-plugin.ts":{"bytesInOutput":288}},"bytes":464},"packages/sdk/config/dist/plugin/node/vite-plugin.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1707},"packages/sdk/config/dist/plugin/node/vite-plugin.cjs":{"imports":[{"path":"packages/sdk/config/dist/plugin/node/chunk-2FZXTCPZ.cjs","kind":"import-statement"},{"path":"node:path","kind":"import-statement","external":true}],"exports":["ConfigPlugin"],"entryPoint":"packages/sdk/config/src/plugin/vite-plugin.ts","inputs":{"packages/sdk/config/src/plugin/vite-plugin.ts":{"bytesInOutput":634}},"bytes":806},"packages/sdk/config/dist/plugin/node/chunk-2FZXTCPZ.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":10383},"packages/sdk/config/dist/plugin/node/chunk-2FZXTCPZ.cjs":{"imports":[{"path":"js-yaml","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"node:child_process","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"pkg-up","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"boolean","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"exports":["definitions"],"inputs":{"packages/sdk/config/src/plugin/definitions.ts":{"bytesInOutput":2543},"packages/sdk/config/src/config.ts":{"bytesInOutput":1020}},"bytes":3771}}}
1
+ {"inputs":{"packages/sdk/config/src/config.ts":{"bytes":13900,"imports":[{"path":"boolean","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/config/src/plugin/definitions.ts":{"bytes":10742,"imports":[{"path":"js-yaml","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"node:child_process","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"pkg-up","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/sdk/config/src/config.ts","kind":"import-statement","original":"../config"}],"format":"esm"},"packages/sdk/config/src/plugin/esbuild-plugin.ts":{"bytes":2584,"imports":[{"path":"packages/sdk/config/src/plugin/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"packages/sdk/config/src/plugin/rollup-plugin.ts":{"bytes":2068,"imports":[{"path":"packages/sdk/config/src/plugin/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"packages/sdk/config/src/plugin/vite-plugin.ts":{"bytes":3319,"imports":[{"path":"node:path","kind":"import-statement","external":true},{"path":"packages/sdk/config/src/plugin/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"}},"outputs":{"packages/sdk/config/dist/plugin/node/esbuild-plugin.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1346},"packages/sdk/config/dist/plugin/node/esbuild-plugin.cjs":{"imports":[{"path":"packages/sdk/config/dist/plugin/node/chunk-FFIS4ASS.cjs","kind":"import-statement"}],"exports":["ConfigPlugin"],"entryPoint":"packages/sdk/config/src/plugin/esbuild-plugin.ts","inputs":{"packages/sdk/config/src/plugin/esbuild-plugin.ts":{"bytesInOutput":443}},"bytes":621},"packages/sdk/config/dist/plugin/node/rollup-plugin.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1102},"packages/sdk/config/dist/plugin/node/rollup-plugin.cjs":{"imports":[{"path":"packages/sdk/config/dist/plugin/node/chunk-FFIS4ASS.cjs","kind":"import-statement"}],"exports":["ConfigPlugin"],"entryPoint":"packages/sdk/config/src/plugin/rollup-plugin.ts","inputs":{"packages/sdk/config/src/plugin/rollup-plugin.ts":{"bytesInOutput":288}},"bytes":464},"packages/sdk/config/dist/plugin/node/vite-plugin.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1707},"packages/sdk/config/dist/plugin/node/vite-plugin.cjs":{"imports":[{"path":"packages/sdk/config/dist/plugin/node/chunk-FFIS4ASS.cjs","kind":"import-statement"},{"path":"node:path","kind":"import-statement","external":true}],"exports":["ConfigPlugin"],"entryPoint":"packages/sdk/config/src/plugin/vite-plugin.ts","inputs":{"packages/sdk/config/src/plugin/vite-plugin.ts":{"bytesInOutput":634}},"bytes":806},"packages/sdk/config/dist/plugin/node/chunk-FFIS4ASS.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":10751},"packages/sdk/config/dist/plugin/node/chunk-FFIS4ASS.cjs":{"imports":[{"path":"js-yaml","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"node:child_process","kind":"import-statement","external":true},{"path":"node:fs","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"pkg-up","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"boolean","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"lodash.get","kind":"import-statement","external":true},{"path":"lodash.set","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true}],"exports":["definitions"],"inputs":{"packages/sdk/config/src/plugin/definitions.ts":{"bytesInOutput":2719},"packages/sdk/config/src/config.ts":{"bytesInOutput":1020}},"bytes":3947}}}
@@ -21,9 +21,9 @@ __export(rollup_plugin_exports, {
21
21
  ConfigPlugin: () => ConfigPlugin
22
22
  });
23
23
  module.exports = __toCommonJS(rollup_plugin_exports);
24
- var import_chunk_2FZXTCPZ = require("./chunk-2FZXTCPZ.cjs");
24
+ var import_chunk_FFIS4ASS = require("./chunk-FFIS4ASS.cjs");
25
25
  var ConfigPlugin = (options = {}) => {
26
- const contents = Object.entries((0, import_chunk_2FZXTCPZ.definitions)({
26
+ const contents = Object.entries((0, import_chunk_FFIS4ASS.definitions)({
27
27
  ...options,
28
28
  mode: process.env.NODE_ENV
29
29
  })).map(([key, value]) => `globalThis.${key} = ${JSON.stringify(value)};`).join("\n");
@@ -21,7 +21,7 @@ __export(vite_plugin_exports, {
21
21
  ConfigPlugin: () => ConfigPlugin
22
22
  });
23
23
  module.exports = __toCommonJS(vite_plugin_exports);
24
- var import_chunk_2FZXTCPZ = require("./chunk-2FZXTCPZ.cjs");
24
+ var import_chunk_FFIS4ASS = require("./chunk-FFIS4ASS.cjs");
25
25
  var import_node_path = require("node:path");
26
26
  var ConfigPlugin = (options = {}) => ({
27
27
  name: "dxos-config",
@@ -29,7 +29,7 @@ var ConfigPlugin = (options = {}) => ({
29
29
  const configPath = root && (0, import_node_path.resolve)(root, options.configPath ?? "dx.yml");
30
30
  const envPath = root && (0, import_node_path.resolve)(root, options.envPath ?? "dx-env.yml");
31
31
  const devPath = root && (0, import_node_path.resolve)(root, options.devPath ?? "dx-local.yml");
32
- const define = Object.entries((0, import_chunk_2FZXTCPZ.definitions)({
32
+ const define = Object.entries((0, import_chunk_FFIS4ASS.definitions)({
33
33
  ...options,
34
34
  configPath,
35
35
  envPath,
@@ -1 +1 @@
1
- {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../../../src/plugin/definitions.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKhD,eAAO,MAAM,WAAW,4DAOrB,gBAAgB;;;;;;;;CA0DlB,CAAC"}
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../../../src/plugin/definitions.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAKhD,eAAO,MAAM,WAAW,4DAOrB,gBAAgB;;;;;;;;CAgElB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/config",
3
- "version": "0.3.11-main.bd26370",
3
+ "version": "0.3.11-next.0fb359e",
4
4
  "description": "Config utilities",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -31,9 +31,9 @@
31
31
  "lodash.get": "^4.4.2",
32
32
  "lodash.set": "^4.3.2",
33
33
  "pkg-up": "^3.1.0",
34
- "@dxos/log": "0.3.11-main.bd26370",
35
- "@dxos/protocols": "0.3.11-main.bd26370",
36
- "@dxos/node-std": "0.3.11-main.bd26370"
34
+ "@dxos/log": "0.3.11-next.0fb359e",
35
+ "@dxos/protocols": "0.3.11-next.0fb359e",
36
+ "@dxos/node-std": "0.3.11-next.0fb359e"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/js-yaml": "^4.0.5",
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/plugin/definitions.ts", "../../../src/config.ts"],
4
- "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport yaml from 'js-yaml';\nimport set from 'lodash.set';\nimport { execSync } from 'node:child_process';\nimport { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport pkgUp from 'pkg-up';\n\nimport { log } from '@dxos/log';\n\nimport { type ConfigPluginOpts } from './types';\nimport { mapFromKeyValues } from '../config';\n\nconst CWD = process.cwd();\n\nexport const definitions = ({\n configPath,\n envPath,\n devPath,\n mode = process.env.NODE_ENV,\n publicUrl = '',\n env,\n}: ConfigPluginOpts) => {\n const KEYS_TO_FILE = {\n __CONFIG_DEFAULTS__: configPath ?? resolve(CWD, 'dx.yml'),\n __CONFIG_ENVS__: envPath ?? resolve(CWD, 'dx-env.yml'),\n } as { [key: string]: string };\n\n if (mode !== 'production') {\n KEYS_TO_FILE.__CONFIG_LOCAL__ = devPath ?? resolve(CWD, 'dx-local.yml');\n }\n\n return Object.entries(KEYS_TO_FILE).reduce(\n (prev, [key, value]) => {\n let content = {};\n\n try {\n content = yaml.load(readFileSync(value, 'utf-8')) as any;\n\n // Map environment variables to config values.\n if (key === '__CONFIG_ENVS__') {\n content = mapFromKeyValues(content, process.env);\n }\n\n if (key === '__CONFIG_DEFAULTS__') {\n // Load app environment variables into default config.\n env?.map((key) => set(content, ['runtime', 'app', 'env', key], process.env[key]));\n\n // Set build info automatically if available.\n try {\n const timestamp = new Date().toISOString();\n const commitHash = execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).replace('\\n', '');\n const packagePath = pkgUp.sync();\n const packageJson = packagePath && JSON.parse(readFileSync(packagePath, 'utf-8'));\n set(content, ['runtime', 'app', 'build', 'timestamp'], timestamp);\n set(content, ['runtime', 'app', 'build', 'commitHash'], commitHash);\n set(content, ['runtime', 'app', 'build', 'version'], packageJson?.version);\n } catch {}\n }\n } catch (err: any) {\n log(`Failed to load file ${value}:`, err);\n\n if (key === '__CONFIG_DEFAULTS__') {\n // Default config is required.\n throw new Error(`Failed to load default config file from ${value}`);\n }\n }\n\n return {\n ...prev,\n [key]: content,\n };\n },\n {\n __DXOS_CONFIG__: { dynamic: mode === 'production', publicUrl },\n __CONFIG_DEFAULTS__: {},\n __CONFIG_ENVS__: {},\n __CONFIG_LOCAL__: {},\n },\n );\n};\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { boolean } from 'boolean';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport get from 'lodash.get';\nimport set from 'lodash.set';\n\nimport { InvalidConfigError, schema } from '@dxos/protocols';\nimport { type Config as ConfigProto } from '@dxos/protocols/proto/dxos/config';\n\nimport { type ConfigKey, type DeepIndex, type ParseKey } from './types';\n\ntype MappingSpec = Record<string, { path: string; type?: string }>;\nconst configRootType = schema.getCodecForType('dxos.config.Config');\n\n/**\n * Maps the given objects onto a flattened set of (key x values).\n *\n * Expects parsed yaml content of the form:\n *\n * ```\n * ENV_VAR:\n * path: config.selector.path\n * ```\n *\n * @param {object} spec\n * @param {object} values\n * @return {object}\n */\nexport const mapFromKeyValues = (spec: MappingSpec, values: Record<string, any>) => {\n const config = {};\n\n for (const [key, { path, type }] of Object.entries(spec)) {\n let value = values[key];\n\n if (value !== undefined) {\n if (type) {\n switch (type) {\n case 'boolean': {\n value = boolean(value);\n break;\n }\n\n case 'number': {\n value = Number(value);\n break;\n }\n\n case 'string': {\n break;\n }\n\n case 'json': {\n value = value ? JSON.parse(value) : null;\n break;\n }\n\n default: {\n throw new Error(`Invalid type: ${type}`);\n }\n }\n }\n\n set(config, path, value);\n }\n }\n\n return config;\n};\n\n/**\n * Maps the given flattend set of (key x values) onto a JSON object.\n * @param {object} spec\n * @param {object} values\n */\nexport const mapToKeyValues = (spec: MappingSpec, values: any) => {\n const config: Record<string, any> = {};\n\n for (const [key, { path, type }] of Object.entries(spec)) {\n const value = get(values, path);\n if (value !== undefined) {\n switch (type) {\n case 'json':\n config[key] = JSON.stringify(value);\n break;\n default:\n config[key] = value;\n }\n }\n }\n\n return config;\n};\n\n/**\n * Validate config object.\n */\nexport const validateConfig = (config: ConfigProto): ConfigProto => {\n if (!('version' in config)) {\n throw new InvalidConfigError('Version not specified');\n }\n\n if (config?.version !== 1) {\n throw new InvalidConfigError(`Invalid config version: ${config.version}`);\n }\n\n const error = configRootType.protoType.verify(config);\n if (error) {\n throw new InvalidConfigError(error);\n }\n\n return config;\n};\n\n/**\n * Global configuration object.\n * NOTE: Config objects are immutable.\n */\nexport class Config {\n private readonly _config: any;\n\n /**\n * Creates an immutable instance.\n * @constructor\n * @param objects\n */\n constructor(config: ConfigProto = {}, ...objects: ConfigProto[]) {\n this._config = validateConfig(defaultsDeep(config, ...objects, { version: 1 }));\n }\n\n /**\n * Returns an immutable config JSON object.\n */\n get values(): ConfigProto {\n return this._config;\n }\n\n /**\n * Returns the given config property.\n *\n * @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.\n * @param defaultValue Default value to return if option is not present in the config.\n * @returns The config value or undefined if the option is not present.\n */\n get<K extends ConfigKey>(\n key: K,\n defaultValue?: DeepIndex<ConfigProto, ParseKey<K>>,\n ): DeepIndex<ConfigProto, ParseKey<K>> {\n return get(this._config, key, defaultValue);\n }\n\n /**\n * Returns config key without type checking.\n *\n * @deprecated Use the type-checked version.\n */\n getUnchecked<T>(key: string, defaultValue?: T): T {\n return get(this._config, key, defaultValue);\n }\n\n /**\n * Returns the given config property or throw if it doesn't exist.\n *\n * @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.\n */\n getOrThrow<K extends ConfigKey>(key: K): Exclude<DeepIndex<ConfigProto, ParseKey<K>>, undefined> {\n const value = get(this._config, key);\n if (!value) {\n throw new Error(`Config option not present: ${key}`);\n }\n return value;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_lodash", "configRootType", "schema", "getCodecForType", "mapFromKeyValues", "spec", "values", "config", "key", "path", "type", "Object", "entries", "value", "undefined", "boolean", "Number", "JSON", "parse", "Error", "set", "CWD", "process", "cwd", "definitions", "configPath", "envPath", "devPath", "mode", "env", "NODE_ENV", "publicUrl", "KEYS_TO_FILE", "__CONFIG_DEFAULTS__", "resolve", "__CONFIG_ENVS__", "__CONFIG_LOCAL__", "reduce", "prev", "content", "yaml", "load", "readFileSync", "map", "timestamp", "Date", "toISOString", "commitHash", "execSync", "encoding", "replace", "packagePath", "pkgUp", "sync", "packageJson", "version", "err", "log", "__DXOS_CONFIG__", "dynamic"]
7
- }