@dxos/config 0.6.12 → 0.6.13-main.548ca8d

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.
@@ -0,0 +1,321 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // packages/sdk/config/src/index.ts
4
+ import * as defs from "@dxos/protocols/proto/dxos/config";
5
+
6
+ // packages/sdk/config/src/config.ts
7
+ import { boolean } from "boolean";
8
+ import defaultsDeep from "lodash.defaultsdeep";
9
+ import isMatch from "lodash.ismatch";
10
+ import { InvalidConfigError } from "@dxos/protocols";
11
+ import { schema } from "@dxos/protocols/proto";
12
+ import { trace } from "@dxos/tracing";
13
+ import { getDeep, setDeep } from "@dxos/util";
14
+ function _ts_decorate(decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ }
20
+ var configRootType = schema.getCodecForType("dxos.config.Config");
21
+ var mapFromKeyValues = (spec, values) => {
22
+ const config = {};
23
+ for (const [key, { path: path2, type }] of Object.entries(spec)) {
24
+ let value = values[key];
25
+ if (value !== void 0) {
26
+ if (type) {
27
+ switch (type) {
28
+ case "boolean": {
29
+ value = boolean(value);
30
+ break;
31
+ }
32
+ case "number": {
33
+ value = Number(value);
34
+ break;
35
+ }
36
+ case "string": {
37
+ break;
38
+ }
39
+ case "json": {
40
+ value = value ? JSON.parse(value) : null;
41
+ break;
42
+ }
43
+ default: {
44
+ throw new Error(`Invalid type: ${type}`);
45
+ }
46
+ }
47
+ }
48
+ setDeep(config, path2.split("."), value);
49
+ }
50
+ }
51
+ return config;
52
+ };
53
+ var mapToKeyValues = (spec, values) => {
54
+ const config = {};
55
+ for (const [key, { path: path2, type }] of Object.entries(spec)) {
56
+ const value = getDeep(values, path2.split("."));
57
+ if (value !== void 0) {
58
+ switch (type) {
59
+ case "json":
60
+ config[key] = JSON.stringify(value);
61
+ break;
62
+ default:
63
+ config[key] = value;
64
+ }
65
+ }
66
+ }
67
+ return config;
68
+ };
69
+ var validateConfig = (config) => {
70
+ if (!("version" in config)) {
71
+ throw new InvalidConfigError("Version not specified");
72
+ }
73
+ if (config?.version !== 1) {
74
+ throw new InvalidConfigError(`Invalid config version: ${config.version}`);
75
+ }
76
+ const error = configRootType.protoType.verify(config);
77
+ if (error) {
78
+ throw new InvalidConfigError(error);
79
+ }
80
+ return config;
81
+ };
82
+ var ConfigResource = Symbol.for("dxos.resource.Config");
83
+ var Config = class {
84
+ /**
85
+ * Creates an immutable instance.
86
+ * @constructor
87
+ */
88
+ constructor(config = {}, ...objects) {
89
+ this._config = validateConfig(defaultsDeep(config, ...objects, {
90
+ version: 1
91
+ }));
92
+ }
93
+ /**
94
+ * Returns an immutable config JSON object.
95
+ */
96
+ get values() {
97
+ return this._config;
98
+ }
99
+ /**
100
+ * Returns the given config property.
101
+ *
102
+ * @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.
103
+ * @param defaultValue Default value to return if option is not present in the config.
104
+ * @returns The config value or undefined if the option is not present.
105
+ */
106
+ get(key, defaultValue) {
107
+ return getDeep(this._config, key.split(".")) ?? defaultValue;
108
+ }
109
+ /**
110
+ * Get unique key.
111
+ */
112
+ find(path2, test) {
113
+ const values = getDeep(this._config, path2.split("."));
114
+ if (!Array.isArray(values)) {
115
+ return;
116
+ }
117
+ return values.find((value) => isMatch(value, test));
118
+ }
119
+ /**
120
+ * Returns the given config property or throw if it doesn't exist.
121
+ *
122
+ * @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.
123
+ */
124
+ getOrThrow(key) {
125
+ const value = getDeep(this._config, key.split("."));
126
+ if (!value) {
127
+ throw new Error(`Config option not present: ${key}`);
128
+ }
129
+ return value;
130
+ }
131
+ };
132
+ Config = _ts_decorate([
133
+ trace.resource({
134
+ annotation: ConfigResource
135
+ })
136
+ ], Config);
137
+
138
+ // packages/sdk/config/src/loaders/index.ts
139
+ import yaml from "js-yaml";
140
+ import fs from "node:fs";
141
+ import path from "node:path";
142
+ import { log } from "@dxos/log";
143
+
144
+ // packages/sdk/config/src/types.ts
145
+ var FILE_DEFAULTS = "defaults.yml";
146
+ var FILE_ENVS = "envs-map.yml";
147
+ var FILE_DYNAMICS = "config.yml";
148
+
149
+ // packages/sdk/config/src/loaders/index.ts
150
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/config/src/loaders/index.ts";
151
+ var DEFAULT_BASE_PATH = path.resolve(process.cwd(), "config");
152
+ var maybeLoadFile = (file) => {
153
+ try {
154
+ return yaml.load(fs.readFileSync(file, {
155
+ encoding: "utf8"
156
+ }));
157
+ } catch (err) {
158
+ }
159
+ };
160
+ var Profile = (profile = "default") => {
161
+ const configFile = path.join(process.env.HOME ?? "~", `.config/dx/profile/${profile}.yml`);
162
+ return maybeLoadFile(configFile);
163
+ };
164
+ var Local = () => ({});
165
+ var Dynamics = () => ({});
166
+ var Envs = (basePath = DEFAULT_BASE_PATH) => {
167
+ const content = maybeLoadFile(path.resolve(basePath, FILE_ENVS));
168
+ return content ? mapFromKeyValues(content, process.env) : {};
169
+ };
170
+ var Defaults = (basePath = DEFAULT_BASE_PATH) => maybeLoadFile(path.resolve(basePath, FILE_DEFAULTS)) ?? {};
171
+ var Storage = async () => ({});
172
+ var Remote = (target, authenticationToken) => {
173
+ if (!target) {
174
+ return {};
175
+ }
176
+ try {
177
+ const url = new URL(target);
178
+ const protocol = url.protocol.slice(0, -1);
179
+ return {
180
+ runtime: {
181
+ client: {
182
+ // TODO(burdon): Remove vault.html.
183
+ remoteSource: url.origin + (protocol.startsWith("http") ? "/vault.html" : ""),
184
+ remoteSourceAuthenticationToken: authenticationToken
185
+ }
186
+ }
187
+ };
188
+ } catch (err) {
189
+ log.catch(err, void 0, {
190
+ F: __dxlog_file,
191
+ L: 87,
192
+ S: void 0,
193
+ C: (f, a) => f(...a)
194
+ });
195
+ return {};
196
+ }
197
+ };
198
+
199
+ // packages/sdk/config/src/savers/index.ts
200
+ var SaveConfig = async (_) => {
201
+ };
202
+
203
+ // packages/sdk/config/src/plugin/definitions.ts
204
+ import yaml2 from "js-yaml";
205
+ import { execSync } from "node:child_process";
206
+ import { readFileSync } from "node:fs";
207
+ import { resolve } from "node:path";
208
+ import pkgUp from "pkg-up";
209
+ import { log as log2 } from "@dxos/log";
210
+ import { setDeep as setDeep2 } from "@dxos/util";
211
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/config/src/plugin/definitions.ts";
212
+ var CWD = process.cwd();
213
+ var definitions = ({ configPath, envPath, devPath, mode = process.env.NODE_ENV, publicUrl = "", env }) => {
214
+ const KEYS_TO_FILE = {
215
+ __CONFIG_DEFAULTS__: configPath ?? resolve(CWD, "dx.yml"),
216
+ __CONFIG_ENVS__: envPath ?? resolve(CWD, "dx-env.yml")
217
+ };
218
+ if (mode !== "production") {
219
+ KEYS_TO_FILE.__CONFIG_LOCAL__ = devPath ?? resolve(CWD, "dx-local.yml");
220
+ }
221
+ return Object.entries(KEYS_TO_FILE).reduce((prev, [key, value]) => {
222
+ let content = {};
223
+ try {
224
+ content = yaml2.load(readFileSync(value, "utf-8"));
225
+ if (key === "__CONFIG_ENVS__") {
226
+ content = mapFromKeyValues(content, process.env);
227
+ }
228
+ if (key === "__CONFIG_DEFAULTS__") {
229
+ Object.entries(process.env).forEach(([key2, value2]) => {
230
+ if (key2.startsWith("DX_") || env?.includes(key2)) {
231
+ setDeep2(content, [
232
+ "runtime",
233
+ "app",
234
+ "env",
235
+ key2
236
+ ], value2);
237
+ }
238
+ });
239
+ try {
240
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString();
241
+ const commitHash = process.env.DX_COMMIT_HASH ?? execSync("git rev-parse --short HEAD", {
242
+ encoding: "utf-8"
243
+ }).replace("\n", "");
244
+ const packagePath = pkgUp.sync();
245
+ const packageJson = packagePath && JSON.parse(readFileSync(packagePath, "utf-8"));
246
+ setDeep2(content, [
247
+ "runtime",
248
+ "app",
249
+ "build",
250
+ "timestamp"
251
+ ], timestamp);
252
+ setDeep2(content, [
253
+ "runtime",
254
+ "app",
255
+ "build",
256
+ "commitHash"
257
+ ], commitHash);
258
+ setDeep2(content, [
259
+ "runtime",
260
+ "app",
261
+ "build",
262
+ "version"
263
+ ], packageJson?.version);
264
+ } catch {
265
+ }
266
+ }
267
+ } catch (err) {
268
+ if (err.message.includes("YAMLException")) {
269
+ log2.error(`Failed to parse file ${value}:`, err, {
270
+ F: __dxlog_file2,
271
+ L: 71,
272
+ S: void 0,
273
+ C: (f, a) => f(...a)
274
+ });
275
+ } else {
276
+ log2(`Failed to load file ${value}:`, err, {
277
+ F: __dxlog_file2,
278
+ L: 73,
279
+ S: void 0,
280
+ C: (f, a) => f(...a)
281
+ });
282
+ }
283
+ if (key === "__CONFIG_DEFAULTS__") {
284
+ throw new Error(`Failed to load default config file from ${value}`);
285
+ }
286
+ }
287
+ return {
288
+ ...prev,
289
+ [key]: content
290
+ };
291
+ }, {
292
+ __DXOS_CONFIG__: {
293
+ dynamic: mode === "production",
294
+ publicUrl
295
+ },
296
+ __CONFIG_DEFAULTS__: {},
297
+ __CONFIG_ENVS__: {},
298
+ __CONFIG_LOCAL__: {}
299
+ });
300
+ };
301
+ export {
302
+ Config,
303
+ ConfigResource,
304
+ Defaults,
305
+ Dynamics,
306
+ Envs,
307
+ FILE_DEFAULTS,
308
+ FILE_DYNAMICS,
309
+ FILE_ENVS,
310
+ Local,
311
+ Profile,
312
+ Remote,
313
+ SaveConfig,
314
+ Storage,
315
+ definitions,
316
+ defs,
317
+ mapFromKeyValues,
318
+ mapToKeyValues,
319
+ validateConfig
320
+ };
321
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/index.ts", "../../../src/config.ts", "../../../src/loaders/index.ts", "../../../src/types.ts", "../../../src/savers/index.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 './savers';\nexport * from './plugin';\nexport * from './types';\n", "//\n// Copyright 2021 DXOS.org\n//\n\nimport { boolean } from 'boolean';\nimport defaultsDeep from 'lodash.defaultsdeep';\nimport isMatch from 'lodash.ismatch';\n\nimport { InvalidConfigError } from '@dxos/protocols';\nimport { schema } from '@dxos/protocols/proto';\nimport { type Config as ConfigProto } from '@dxos/protocols/proto/dxos/config';\nimport { trace } from '@dxos/tracing';\nimport { getDeep, setDeep } from '@dxos/util';\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 setDeep(config, path.split('.'), 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 = getDeep(values, path.split('.'));\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\nexport const ConfigResource = Symbol.for('dxos.resource.Config');\n\n/**\n * Global configuration object.\n * NOTE: Config objects are immutable.\n */\n@trace.resource({ annotation: ConfigResource })\nexport class Config {\n private readonly _config: any;\n\n /**\n * Creates an immutable instance.\n * @constructor\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>> | undefined {\n return getDeep(this._config, key.split('.')) ?? defaultValue;\n }\n\n /**\n * Get unique key.\n */\n find<T = any>(path: string, test: object): T | undefined {\n const values = getDeep(this._config, path.split('.'));\n if (!Array.isArray(values)) {\n return;\n }\n\n return values.find((value) => isMatch(value, test));\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: DeepIndex<ConfigProto, ParseKey<K>> | undefined = getDeep(this._config, key.split('.'));\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 { log } from '@dxos/log';\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 * Profile\n */\nexport const Profile = (profile = 'default') => {\n const configFile = path.join(process.env.HOME ?? '~', `.config/dx/profile/${profile}.yml`);\n return maybeLoadFile(configFile) as ConfigProto;\n};\n\n/**\n * Development config.\n */\n// TODO(burdon): Rename or reconcile with Profile above?\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/**\n * Load config from storage.\n */\nexport const Storage = async (): Promise<Partial<ConfigProto>> => ({});\n\nexport const Remote = (target: string | undefined, authenticationToken?: string): Partial<ConfigProto> => {\n if (!target) {\n return {};\n }\n\n try {\n const url = new URL(target);\n const protocol = url.protocol.slice(0, -1);\n return {\n runtime: {\n client: {\n // TODO(burdon): Remove vault.html.\n remoteSource: url.origin + (protocol.startsWith('http') ? '/vault.html' : ''),\n remoteSourceAuthenticationToken: authenticationToken,\n },\n },\n };\n } catch (err) {\n log.catch(err);\n return {};\n }\n};\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 2024 DXOS.org\n//\n\nimport { type Config as ConfigProto } from '@dxos/protocols/proto/dxos/config';\n\nexport const SaveConfig = async (_: ConfigProto) => {};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport yaml from 'js-yaml';\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';\nimport { setDeep } from '@dxos/util';\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 setDeep(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 setDeep(content, ['runtime', 'app', 'build', 'timestamp'], timestamp);\n setDeep(content, ['runtime', 'app', 'build', 'commitHash'], commitHash);\n setDeep(content, ['runtime', 'app', 'build', 'version'], packageJson?.version);\n } catch {}\n }\n } catch (err: any) {\n if (err.message.includes('YAMLException')) {\n log.error(`Failed to parse file ${value}:`, err);\n } else {\n log(`Failed to load file ${value}:`, err);\n }\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": ["defs", "boolean", "defaultsDeep", "isMatch", "InvalidConfigError", "schema", "trace", "getDeep", "setDeep", "configRootType", "schema", "getCodecForType", "mapFromKeyValues", "spec", "values", "config", "key", "path", "type", "Object", "entries", "value", "undefined", "boolean", "Number", "JSON", "parse", "Error", "setDeep", "split", "mapToKeyValues", "getDeep", "stringify", "validateConfig", "InvalidConfigError", "version", "error", "protoType", "verify", "ConfigResource", "Symbol", "for", "Config", "constructor", "objects", "_config", "defaultsDeep", "get", "defaultValue", "find", "test", "Array", "isArray", "isMatch", "getOrThrow", "trace", "resource", "annotation", "yaml", "fs", "path", "log", "FILE_DEFAULTS", "FILE_ENVS", "FILE_DYNAMICS", "DEFAULT_BASE_PATH", "path", "resolve", "process", "cwd", "maybeLoadFile", "file", "yaml", "load", "fs", "readFileSync", "encoding", "err", "Profile", "profile", "configFile", "join", "env", "HOME", "Local", "Dynamics", "Envs", "basePath", "content", "FILE_ENVS", "mapFromKeyValues", "Defaults", "FILE_DEFAULTS", "Storage", "Remote", "target", "authenticationToken", "url", "URL", "protocol", "slice", "runtime", "client", "remoteSource", "origin", "startsWith", "remoteSourceAuthenticationToken", "log", "catch", "SaveConfig", "_", "yaml", "execSync", "readFileSync", "resolve", "pkgUp", "log", "setDeep", "CWD", "process", "cwd", "definitions", "configPath", "envPath", "devPath", "mode", "env", "NODE_ENV", "publicUrl", "KEYS_TO_FILE", "__CONFIG_DEFAULTS__", "resolve", "__CONFIG_ENVS__", "__CONFIG_LOCAL__", "Object", "entries", "reduce", "prev", "key", "value", "content", "yaml", "load", "readFileSync", "mapFromKeyValues", "forEach", "startsWith", "includes", "setDeep", "timestamp", "Date", "toISOString", "commitHash", "DX_COMMIT_HASH", "execSync", "encoding", "replace", "packagePath", "pkgUp", "sync", "packageJson", "JSON", "parse", "version", "err", "message", "log", "error", "Error", "__DXOS_CONFIG__", "dynamic"]
7
+ }
@@ -0,0 +1 @@
1
+ {"inputs":{"packages/sdk/config/src/config.ts":{"bytes":16063,"imports":[{"path":"boolean","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"lodash.ismatch","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/config/src/types.ts":{"bytes":2780,"imports":[],"format":"esm"},"packages/sdk/config/src/loaders/index.ts":{"bytes":8383,"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":"@dxos/log","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/savers/index.ts":{"bytes":711,"imports":[],"format":"esm"},"packages/sdk/config/src/plugin/definitions.ts":{"bytes":11705,"imports":[{"path":"js-yaml","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":"@dxos/util","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":1530,"imports":[],"format":"esm"},"packages/sdk/config/src/plugin/index.ts":{"bytes":590,"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":1265,"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/savers/index.ts","kind":"import-statement","original":"./savers"},{"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-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":19798},"packages/sdk/config/dist/lib/node-esm/index.mjs":{"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.ismatch","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","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":"@dxos/log","kind":"import-statement","external":true},{"path":"js-yaml","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":"@dxos/util","kind":"import-statement","external":true}],"exports":["Config","ConfigResource","Defaults","Dynamics","Envs","FILE_DEFAULTS","FILE_DYNAMICS","FILE_ENVS","Local","Profile","Remote","SaveConfig","Storage","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":3991},"packages/sdk/config/src/loaders/index.ts":{"bytesInOutput":1562},"packages/sdk/config/src/types.ts":{"bytesInOutput":102},"packages/sdk/config/src/savers/index.ts":{"bytesInOutput":35},"packages/sdk/config/src/plugin/definitions.ts":{"bytesInOutput":3022},"packages/sdk/config/src/plugin/index.ts":{"bytesInOutput":0}},"bytes":9446}}}
@@ -0,0 +1,223 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // packages/sdk/config/src/plugin/definitions.ts
4
+ import yaml from "js-yaml";
5
+ import { execSync } from "node:child_process";
6
+ import { readFileSync } from "node:fs";
7
+ import { resolve } from "node:path";
8
+ import pkgUp from "pkg-up";
9
+ import { log } from "@dxos/log";
10
+ import { setDeep as setDeep2 } from "@dxos/util";
11
+
12
+ // packages/sdk/config/src/config.ts
13
+ import { boolean } from "boolean";
14
+ import defaultsDeep from "lodash.defaultsdeep";
15
+ import isMatch from "lodash.ismatch";
16
+ import { InvalidConfigError } from "@dxos/protocols";
17
+ import { schema } from "@dxos/protocols/proto";
18
+ import { trace } from "@dxos/tracing";
19
+ import { getDeep, setDeep } from "@dxos/util";
20
+ function _ts_decorate(decorators, target, key, desc) {
21
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
22
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
23
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
24
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
25
+ }
26
+ var configRootType = schema.getCodecForType("dxos.config.Config");
27
+ var mapFromKeyValues = (spec, values) => {
28
+ const config = {};
29
+ for (const [key, { path, type }] of Object.entries(spec)) {
30
+ let value = values[key];
31
+ if (value !== void 0) {
32
+ if (type) {
33
+ switch (type) {
34
+ case "boolean": {
35
+ value = boolean(value);
36
+ break;
37
+ }
38
+ case "number": {
39
+ value = Number(value);
40
+ break;
41
+ }
42
+ case "string": {
43
+ break;
44
+ }
45
+ case "json": {
46
+ value = value ? JSON.parse(value) : null;
47
+ break;
48
+ }
49
+ default: {
50
+ throw new Error(`Invalid type: ${type}`);
51
+ }
52
+ }
53
+ }
54
+ setDeep(config, path.split("."), value);
55
+ }
56
+ }
57
+ return config;
58
+ };
59
+ var validateConfig = (config) => {
60
+ if (!("version" in config)) {
61
+ throw new InvalidConfigError("Version not specified");
62
+ }
63
+ if (config?.version !== 1) {
64
+ throw new InvalidConfigError(`Invalid config version: ${config.version}`);
65
+ }
66
+ const error = configRootType.protoType.verify(config);
67
+ if (error) {
68
+ throw new InvalidConfigError(error);
69
+ }
70
+ return config;
71
+ };
72
+ var ConfigResource = Symbol.for("dxos.resource.Config");
73
+ var Config = class {
74
+ /**
75
+ * Creates an immutable instance.
76
+ * @constructor
77
+ */
78
+ constructor(config = {}, ...objects) {
79
+ this._config = validateConfig(defaultsDeep(config, ...objects, {
80
+ version: 1
81
+ }));
82
+ }
83
+ /**
84
+ * Returns an immutable config JSON object.
85
+ */
86
+ get values() {
87
+ return this._config;
88
+ }
89
+ /**
90
+ * Returns the given config property.
91
+ *
92
+ * @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.
93
+ * @param defaultValue Default value to return if option is not present in the config.
94
+ * @returns The config value or undefined if the option is not present.
95
+ */
96
+ get(key, defaultValue) {
97
+ return getDeep(this._config, key.split(".")) ?? defaultValue;
98
+ }
99
+ /**
100
+ * Get unique key.
101
+ */
102
+ find(path, test) {
103
+ const values = getDeep(this._config, path.split("."));
104
+ if (!Array.isArray(values)) {
105
+ return;
106
+ }
107
+ return values.find((value) => isMatch(value, test));
108
+ }
109
+ /**
110
+ * Returns the given config property or throw if it doesn't exist.
111
+ *
112
+ * @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.
113
+ */
114
+ getOrThrow(key) {
115
+ const value = getDeep(this._config, key.split("."));
116
+ if (!value) {
117
+ throw new Error(`Config option not present: ${key}`);
118
+ }
119
+ return value;
120
+ }
121
+ };
122
+ Config = _ts_decorate([
123
+ trace.resource({
124
+ annotation: ConfigResource
125
+ })
126
+ ], Config);
127
+
128
+ // packages/sdk/config/src/plugin/definitions.ts
129
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/config/src/plugin/definitions.ts";
130
+ var CWD = process.cwd();
131
+ var definitions = ({ configPath, envPath, devPath, mode = process.env.NODE_ENV, publicUrl = "", env }) => {
132
+ const KEYS_TO_FILE = {
133
+ __CONFIG_DEFAULTS__: configPath ?? resolve(CWD, "dx.yml"),
134
+ __CONFIG_ENVS__: envPath ?? resolve(CWD, "dx-env.yml")
135
+ };
136
+ if (mode !== "production") {
137
+ KEYS_TO_FILE.__CONFIG_LOCAL__ = devPath ?? resolve(CWD, "dx-local.yml");
138
+ }
139
+ return Object.entries(KEYS_TO_FILE).reduce((prev, [key, value]) => {
140
+ let content = {};
141
+ try {
142
+ content = yaml.load(readFileSync(value, "utf-8"));
143
+ if (key === "__CONFIG_ENVS__") {
144
+ content = mapFromKeyValues(content, process.env);
145
+ }
146
+ if (key === "__CONFIG_DEFAULTS__") {
147
+ Object.entries(process.env).forEach(([key2, value2]) => {
148
+ if (key2.startsWith("DX_") || env?.includes(key2)) {
149
+ setDeep2(content, [
150
+ "runtime",
151
+ "app",
152
+ "env",
153
+ key2
154
+ ], value2);
155
+ }
156
+ });
157
+ try {
158
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString();
159
+ const commitHash = process.env.DX_COMMIT_HASH ?? execSync("git rev-parse --short HEAD", {
160
+ encoding: "utf-8"
161
+ }).replace("\n", "");
162
+ const packagePath = pkgUp.sync();
163
+ const packageJson = packagePath && JSON.parse(readFileSync(packagePath, "utf-8"));
164
+ setDeep2(content, [
165
+ "runtime",
166
+ "app",
167
+ "build",
168
+ "timestamp"
169
+ ], timestamp);
170
+ setDeep2(content, [
171
+ "runtime",
172
+ "app",
173
+ "build",
174
+ "commitHash"
175
+ ], commitHash);
176
+ setDeep2(content, [
177
+ "runtime",
178
+ "app",
179
+ "build",
180
+ "version"
181
+ ], packageJson?.version);
182
+ } catch {
183
+ }
184
+ }
185
+ } catch (err) {
186
+ if (err.message.includes("YAMLException")) {
187
+ log.error(`Failed to parse file ${value}:`, err, {
188
+ F: __dxlog_file,
189
+ L: 71,
190
+ S: void 0,
191
+ C: (f, a) => f(...a)
192
+ });
193
+ } else {
194
+ log(`Failed to load file ${value}:`, err, {
195
+ F: __dxlog_file,
196
+ L: 73,
197
+ S: void 0,
198
+ C: (f, a) => f(...a)
199
+ });
200
+ }
201
+ if (key === "__CONFIG_DEFAULTS__") {
202
+ throw new Error(`Failed to load default config file from ${value}`);
203
+ }
204
+ }
205
+ return {
206
+ ...prev,
207
+ [key]: content
208
+ };
209
+ }, {
210
+ __DXOS_CONFIG__: {
211
+ dynamic: mode === "production",
212
+ publicUrl
213
+ },
214
+ __CONFIG_DEFAULTS__: {},
215
+ __CONFIG_ENVS__: {},
216
+ __CONFIG_LOCAL__: {}
217
+ });
218
+ };
219
+
220
+ export {
221
+ definitions
222
+ };
223
+ //# sourceMappingURL=chunk-PR2RCXZO.mjs.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 { 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';\nimport { setDeep } from '@dxos/util';\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 setDeep(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 setDeep(content, ['runtime', 'app', 'build', 'timestamp'], timestamp);\n setDeep(content, ['runtime', 'app', 'build', 'commitHash'], commitHash);\n setDeep(content, ['runtime', 'app', 'build', 'version'], packageJson?.version);\n } catch {}\n }\n } catch (err: any) {\n if (err.message.includes('YAMLException')) {\n log.error(`Failed to parse file ${value}:`, err);\n } else {\n log(`Failed to load file ${value}:`, err);\n }\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 isMatch from 'lodash.ismatch';\n\nimport { InvalidConfigError } from '@dxos/protocols';\nimport { schema } from '@dxos/protocols/proto';\nimport { type Config as ConfigProto } from '@dxos/protocols/proto/dxos/config';\nimport { trace } from '@dxos/tracing';\nimport { getDeep, setDeep } from '@dxos/util';\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 setDeep(config, path.split('.'), 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 = getDeep(values, path.split('.'));\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\nexport const ConfigResource = Symbol.for('dxos.resource.Config');\n\n/**\n * Global configuration object.\n * NOTE: Config objects are immutable.\n */\n@trace.resource({ annotation: ConfigResource })\nexport class Config {\n private readonly _config: any;\n\n /**\n * Creates an immutable instance.\n * @constructor\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>> | undefined {\n return getDeep(this._config, key.split('.')) ?? defaultValue;\n }\n\n /**\n * Get unique key.\n */\n find<T = any>(path: string, test: object): T | undefined {\n const values = getDeep(this._config, path.split('.'));\n if (!Array.isArray(values)) {\n return;\n }\n\n return values.find((value) => isMatch(value, test));\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: DeepIndex<ConfigProto, ParseKey<K>> | undefined = getDeep(this._config, key.split('.'));\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": ["yaml", "execSync", "readFileSync", "resolve", "pkgUp", "log", "setDeep", "boolean", "defaultsDeep", "isMatch", "InvalidConfigError", "schema", "trace", "getDeep", "setDeep", "configRootType", "schema", "getCodecForType", "mapFromKeyValues", "spec", "values", "config", "key", "path", "type", "Object", "entries", "value", "undefined", "boolean", "Number", "JSON", "parse", "Error", "setDeep", "split", "validateConfig", "config", "InvalidConfigError", "version", "error", "configRootType", "protoType", "verify", "ConfigResource", "Symbol", "for", "Config", "constructor", "objects", "_config", "defaultsDeep", "values", "get", "key", "defaultValue", "getDeep", "split", "find", "path", "test", "Array", "isArray", "value", "isMatch", "getOrThrow", "Error", "trace", "resource", "annotation", "CWD", "process", "cwd", "definitions", "configPath", "envPath", "devPath", "mode", "env", "NODE_ENV", "publicUrl", "KEYS_TO_FILE", "__CONFIG_DEFAULTS__", "resolve", "__CONFIG_ENVS__", "__CONFIG_LOCAL__", "Object", "entries", "reduce", "prev", "key", "value", "content", "yaml", "load", "readFileSync", "mapFromKeyValues", "forEach", "startsWith", "includes", "setDeep", "timestamp", "Date", "toISOString", "commitHash", "DX_COMMIT_HASH", "execSync", "encoding", "replace", "packagePath", "pkgUp", "sync", "packageJson", "JSON", "parse", "version", "err", "message", "log", "error", "Error", "__DXOS_CONFIG__", "dynamic"]
7
+ }
@@ -0,0 +1,26 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ definitions
4
+ } from "./chunk-PR2RCXZO.mjs";
5
+
6
+ // packages/sdk/config/src/plugin/esbuild-plugin.ts
7
+ var ConfigPlugin = (options = {}) => {
8
+ return {
9
+ name: "dxos-config",
10
+ setup: ({ initialOptions }) => {
11
+ const esbuildOptions = initialOptions;
12
+ esbuildOptions.define ||= {};
13
+ Object.entries(definitions({
14
+ ...options,
15
+ mode: process.env.NODE_ENV
16
+ })).reduce((define, [key, value]) => {
17
+ define[key] = JSON.stringify(value);
18
+ return define;
19
+ }, esbuildOptions.define);
20
+ }
21
+ };
22
+ };
23
+ export {
24
+ ConfigPlugin
25
+ };
26
+ //# sourceMappingURL=esbuild-plugin.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/plugin/esbuild-plugin.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2021 DXOS.org\n//\n\nimport type { Plugin } from 'esbuild';\n\nimport { definitions } from './definitions';\nimport { type ConfigPluginOpts } from './types';\n\nexport const ConfigPlugin = (options: ConfigPluginOpts = {}): Plugin => {\n return {\n name: 'dxos-config',\n setup: ({ initialOptions }) => {\n const esbuildOptions = initialOptions;\n esbuildOptions.define ||= {};\n\n Object.entries(definitions({ ...options, mode: process.env.NODE_ENV })).reduce((define, [key, value]) => {\n define[key] = JSON.stringify(value);\n return define;\n }, esbuildOptions.define);\n },\n };\n};\n"],
5
+ "mappings": ";;;;;;AASO,IAAMA,eAAe,CAACC,UAA4B,CAAC,MAAC;AACzD,SAAO;IACLC,MAAM;IACNC,OAAO,CAAC,EAAEC,eAAc,MAAE;AACxB,YAAMC,iBAAiBD;AACvBC,qBAAeC,WAAW,CAAC;AAE3BC,aAAOC,QAAQC,YAAY;QAAE,GAAGR;QAASS,MAAMC,QAAQC,IAAIC;MAAS,CAAA,CAAA,EAAIC,OAAO,CAACR,QAAQ,CAACS,KAAKC,KAAAA,MAAM;AAClGV,eAAOS,GAAAA,IAAOE,KAAKC,UAAUF,KAAAA;AAC7B,eAAOV;MACT,GAAGD,eAAeC,MAAM;IAC1B;EACF;AACF;",
6
+ "names": ["ConfigPlugin", "options", "name", "setup", "initialOptions", "esbuildOptions", "define", "Object", "entries", "definitions", "mode", "process", "env", "NODE_ENV", "reduce", "key", "value", "JSON", "stringify"]
7
+ }
@@ -0,0 +1 @@
1
+ {"inputs":{"packages/sdk/config/src/config.ts":{"bytes":16063,"imports":[{"path":"boolean","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"lodash.ismatch","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/config/src/plugin/definitions.ts":{"bytes":11705,"imports":[{"path":"js-yaml","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":"@dxos/util","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":2636,"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":2112,"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":3379,"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-esm/esbuild-plugin.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1347},"packages/sdk/config/dist/plugin/node-esm/esbuild-plugin.mjs":{"imports":[{"path":"packages/sdk/config/dist/plugin/node-esm/chunk-PR2RCXZO.mjs","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":713},"packages/sdk/config/dist/plugin/node-esm/rollup-plugin.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1103},"packages/sdk/config/dist/plugin/node-esm/rollup-plugin.mjs":{"imports":[{"path":"packages/sdk/config/dist/plugin/node-esm/chunk-PR2RCXZO.mjs","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":556},"packages/sdk/config/dist/plugin/node-esm/vite-plugin.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1708},"packages/sdk/config/dist/plugin/node-esm/vite-plugin.mjs":{"imports":[{"path":"packages/sdk/config/dist/plugin/node-esm/chunk-PR2RCXZO.mjs","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":898},"packages/sdk/config/dist/plugin/node-esm/chunk-PR2RCXZO.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":12974},"packages/sdk/config/dist/plugin/node-esm/chunk-PR2RCXZO.mjs":{"imports":[{"path":"js-yaml","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":"@dxos/util","kind":"import-statement","external":true},{"path":"boolean","kind":"import-statement","external":true},{"path":"lodash.defaultsdeep","kind":"import-statement","external":true},{"path":"lodash.ismatch","kind":"import-statement","external":true},{"path":"@dxos/protocols","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["definitions"],"inputs":{"packages/sdk/config/src/plugin/definitions.ts":{"bytesInOutput":3007},"packages/sdk/config/src/config.ts":{"bytesInOutput":3576}},"bytes":6884}}}
@@ -0,0 +1,20 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ definitions
4
+ } from "./chunk-PR2RCXZO.mjs";
5
+
6
+ // packages/sdk/config/src/plugin/rollup-plugin.ts
7
+ var ConfigPlugin = (options = {}) => {
8
+ const contents = Object.entries(definitions({
9
+ ...options,
10
+ mode: process.env.NODE_ENV
11
+ })).map(([key, value]) => `globalThis.${key} = ${JSON.stringify(value)};`).join("\n");
12
+ return {
13
+ name: "dxos-config",
14
+ banner: contents
15
+ };
16
+ };
17
+ export {
18
+ ConfigPlugin
19
+ };
20
+ //# sourceMappingURL=rollup-plugin.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/plugin/rollup-plugin.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { type Plugin } from 'rollup';\n\nimport { definitions } from './definitions';\nimport { type ConfigPluginOpts } from './types';\n\nexport const ConfigPlugin = (options: ConfigPluginOpts = {}): Plugin => {\n const contents = Object.entries(definitions({ ...options, mode: process.env.NODE_ENV }))\n .map(([key, value]) => `globalThis.${key} = ${JSON.stringify(value)};`)\n .join('\\n');\n\n return {\n name: 'dxos-config',\n banner: contents,\n };\n};\n"],
5
+ "mappings": ";;;;;;AASO,IAAMA,eAAe,CAACC,UAA4B,CAAC,MAAC;AACzD,QAAMC,WAAWC,OAAOC,QAAQC,YAAY;IAAE,GAAGJ;IAASK,MAAMC,QAAQC,IAAIC;EAAS,CAAA,CAAA,EAClFC,IAAI,CAAC,CAACC,KAAKC,KAAAA,MAAW,cAAcD,GAAAA,MAASE,KAAKC,UAAUF,KAAAA,CAAAA,GAAS,EACrEG,KAAK,IAAA;AAER,SAAO;IACLC,MAAM;IACNC,QAAQf;EACV;AACF;",
6
+ "names": ["ConfigPlugin", "options", "contents", "Object", "entries", "definitions", "mode", "process", "env", "NODE_ENV", "map", "key", "value", "JSON", "stringify", "join", "name", "banner"]
7
+ }
@@ -0,0 +1,31 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ definitions
4
+ } from "./chunk-PR2RCXZO.mjs";
5
+
6
+ // packages/sdk/config/src/plugin/vite-plugin.ts
7
+ import { resolve } from "node:path";
8
+ var ConfigPlugin = (options = {}) => ({
9
+ name: "dxos-config",
10
+ config: ({ root }) => {
11
+ const configPath = root && resolve(root, options.configPath ?? "dx.yml");
12
+ const envPath = root && resolve(root, options.envPath ?? "dx-env.yml");
13
+ const devPath = root && resolve(root, options.devPath ?? "dx-local.yml");
14
+ const define = Object.entries(definitions({
15
+ ...options,
16
+ configPath,
17
+ envPath,
18
+ devPath
19
+ })).reduce((define2, [key, value]) => {
20
+ define2[key] = JSON.stringify(value);
21
+ return define2;
22
+ }, {});
23
+ return {
24
+ define
25
+ };
26
+ }
27
+ });
28
+ export {
29
+ ConfigPlugin
30
+ };
31
+ //# sourceMappingURL=vite-plugin.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/plugin/vite-plugin.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { resolve } from 'node:path';\nimport type { Plugin } from 'vite';\n\nimport { definitions } from './definitions';\nimport { type ConfigPluginOpts } from './types';\n\nexport const ConfigPlugin = (options: ConfigPluginOpts = {}): Plugin => ({\n name: 'dxos-config',\n config: ({ root }) => {\n const configPath = root && resolve(root, options.configPath ?? 'dx.yml');\n const envPath = root && resolve(root, options.envPath ?? 'dx-env.yml');\n const devPath = root && resolve(root, options.devPath ?? 'dx-local.yml');\n const define = Object.entries(definitions({ ...options, configPath, envPath, devPath })).reduce(\n (define, [key, value]) => {\n define[key] = JSON.stringify(value);\n return define;\n },\n {} as { [key: string]: string },\n );\n\n return { define };\n },\n});\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,eAAe;AAMjB,IAAMC,eAAe,CAACC,UAA4B,CAAC,OAAe;EACvEC,MAAM;EACNC,QAAQ,CAAC,EAAEC,KAAI,MAAE;AACf,UAAMC,aAAaD,QAAQE,QAAQF,MAAMH,QAAQI,cAAc,QAAA;AAC/D,UAAME,UAAUH,QAAQE,QAAQF,MAAMH,QAAQM,WAAW,YAAA;AACzD,UAAMC,UAAUJ,QAAQE,QAAQF,MAAMH,QAAQO,WAAW,cAAA;AACzD,UAAMC,SAASC,OAAOC,QAAQC,YAAY;MAAE,GAAGX;MAASI;MAAYE;MAASC;IAAQ,CAAA,CAAA,EAAIK,OACvF,CAACJ,SAAQ,CAACK,KAAKC,KAAAA,MAAM;AACnBN,MAAAA,QAAOK,GAAAA,IAAOE,KAAKC,UAAUF,KAAAA;AAC7B,aAAON;IACT,GACA,CAAC,CAAA;AAGH,WAAO;MAAEA;IAAO;EAClB;AACF;",
6
+ "names": ["resolve", "ConfigPlugin", "options", "name", "config", "root", "configPath", "resolve", "envPath", "devPath", "define", "Object", "entries", "definitions", "reduce", "key", "value", "JSON", "stringify"]
7
+ }
@@ -0,0 +1,8 @@
1
+ declare namespace _default {
2
+ namespace client {
3
+ let id: number;
4
+ let tag: string;
5
+ }
6
+ }
7
+ export default _default;
8
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../../../src/testing/defaults.js"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ declare namespace _default {
2
+ namespace TEST_CLIENT_ID {
3
+ let path: string;
4
+ let type: string;
5
+ }
6
+ namespace TEST_CLIENT_TAG {
7
+ let path_1: string;
8
+ export { path_1 as path };
9
+ }
10
+ namespace TEST_SERVER_ENDPOINT {
11
+ let path_2: string;
12
+ export { path_2 as path };
13
+ }
14
+ }
15
+ export default _default;
16
+ //# sourceMappingURL=envs-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"envs-map.d.ts","sourceRoot":"","sources":["../../../../src/testing/envs-map.js"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/config",
3
- "version": "0.6.12",
3
+ "version": "0.6.13-main.548ca8d",
4
4
  "description": "Config utilities",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -32,11 +32,11 @@
32
32
  "lodash.defaultsdeep": "^4.6.1",
33
33
  "lodash.ismatch": "^4.4.0",
34
34
  "pkg-up": "^3.1.0",
35
- "@dxos/log": "0.6.12",
36
- "@dxos/node-std": "0.6.12",
37
- "@dxos/protocols": "0.6.12",
38
- "@dxos/tracing": "0.6.12",
39
- "@dxos/util": "0.6.12"
35
+ "@dxos/node-std": "0.6.13-main.548ca8d",
36
+ "@dxos/protocols": "0.6.13-main.548ca8d",
37
+ "@dxos/tracing": "0.6.13-main.548ca8d",
38
+ "@dxos/util": "0.6.13-main.548ca8d",
39
+ "@dxos/log": "0.6.13-main.548ca8d"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/js-yaml": "^4.0.5",