@dxos/config 0.8.4-main.f9ba587 → 0.8.4-main.fffef41
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.
- package/dist/lib/browser/index.mjs +36 -14
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +49 -27
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/plugin/node-esm/{chunk-HYTOW36U.mjs → chunk-C4YHC2RN.mjs} +6 -5
- package/dist/plugin/node-esm/chunk-C4YHC2RN.mjs.map +7 -0
- package/dist/plugin/node-esm/esbuild-plugin.mjs +1 -1
- package/dist/plugin/node-esm/meta.json +1 -1
- package/dist/plugin/node-esm/rollup-plugin.mjs +1 -1
- package/dist/plugin/node-esm/vite-plugin.mjs +1 -1
- package/dist/plugin/node-esm/vite-plugin.mjs.map +2 -2
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/loaders/index.d.ts.map +1 -1
- package/dist/types/src/plugin/definitions.d.ts.map +1 -1
- package/dist/types/src/plugin/index.d.ts +1 -1
- package/dist/types/src/plugin/index.d.ts.map +1 -1
- package/dist/types/src/plugin/vite-plugin.d.ts.map +1 -1
- package/dist/types/src/preset.d.ts +10 -0
- package/dist/types/src/preset.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -7
- package/src/index.ts +1 -0
- package/src/loaders/index.ts +2 -1
- package/src/plugin/definitions.ts +4 -2
- package/src/plugin/index.ts +1 -1
- package/src/plugin/vite-plugin.ts +1 -0
- package/src/preset.ts +39 -0
- package/dist/plugin/browser/chunk-AN62TER6.mjs +0 -231
- package/dist/plugin/browser/chunk-AN62TER6.mjs.map +0 -7
- package/dist/plugin/browser/esbuild-plugin.mjs +0 -25
- package/dist/plugin/browser/esbuild-plugin.mjs.map +0 -7
- package/dist/plugin/browser/meta.json +0 -1
- package/dist/plugin/browser/rollup-plugin.mjs +0 -19
- package/dist/plugin/browser/rollup-plugin.mjs.map +0 -7
- package/dist/plugin/browser/vite-plugin.mjs +0 -30
- package/dist/plugin/browser/vite-plugin.mjs.map +0 -7
- package/dist/plugin/node-esm/chunk-HYTOW36U.mjs.map +0 -7
|
@@ -19,23 +19,23 @@ var configRootType = schema.getCodecForType("dxos.config.Config");
|
|
|
19
19
|
var mapFromKeyValues = (spec, values) => {
|
|
20
20
|
const config = {};
|
|
21
21
|
for (const [key, { path, type }] of Object.entries(spec)) {
|
|
22
|
-
let
|
|
23
|
-
if (
|
|
22
|
+
let value2 = values[key];
|
|
23
|
+
if (value2 !== void 0) {
|
|
24
24
|
if (type) {
|
|
25
25
|
switch (type) {
|
|
26
26
|
case "boolean": {
|
|
27
|
-
|
|
27
|
+
value2 = boolean(value2);
|
|
28
28
|
break;
|
|
29
29
|
}
|
|
30
30
|
case "number": {
|
|
31
|
-
|
|
31
|
+
value2 = Number(value2);
|
|
32
32
|
break;
|
|
33
33
|
}
|
|
34
34
|
case "string": {
|
|
35
35
|
break;
|
|
36
36
|
}
|
|
37
37
|
case "json": {
|
|
38
|
-
|
|
38
|
+
value2 = value2 ? JSON.parse(value2) : null;
|
|
39
39
|
break;
|
|
40
40
|
}
|
|
41
41
|
default: {
|
|
@@ -43,7 +43,7 @@ var mapFromKeyValues = (spec, values) => {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
-
setDeep(config, path.split("."),
|
|
46
|
+
setDeep(config, path.split("."), value2);
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
return config;
|
|
@@ -51,14 +51,14 @@ var mapFromKeyValues = (spec, values) => {
|
|
|
51
51
|
var mapToKeyValues = (spec, values) => {
|
|
52
52
|
const config = {};
|
|
53
53
|
for (const [key, { path, type }] of Object.entries(spec)) {
|
|
54
|
-
const
|
|
55
|
-
if (
|
|
54
|
+
const value2 = getDeep(values, path.split("."));
|
|
55
|
+
if (value2 !== void 0) {
|
|
56
56
|
switch (type) {
|
|
57
57
|
case "json":
|
|
58
|
-
config[key] = JSON.stringify(
|
|
58
|
+
config[key] = JSON.stringify(value2);
|
|
59
59
|
break;
|
|
60
60
|
default:
|
|
61
|
-
config[key] =
|
|
61
|
+
config[key] = value2;
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -79,6 +79,7 @@ var validateConfig = (config) => {
|
|
|
79
79
|
};
|
|
80
80
|
var ConfigResource = Symbol.for("dxos.resource.Config");
|
|
81
81
|
var Config = class {
|
|
82
|
+
_config;
|
|
82
83
|
/**
|
|
83
84
|
* Creates an immutable instance.
|
|
84
85
|
* @constructor
|
|
@@ -112,7 +113,7 @@ var Config = class {
|
|
|
112
113
|
if (!Array.isArray(values)) {
|
|
113
114
|
return;
|
|
114
115
|
}
|
|
115
|
-
return values.find((
|
|
116
|
+
return values.find((value2) => isMatch(value2, test));
|
|
116
117
|
}
|
|
117
118
|
/**
|
|
118
119
|
* Returns the given config property or throw if it doesn't exist.
|
|
@@ -120,11 +121,11 @@ var Config = class {
|
|
|
120
121
|
* @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.
|
|
121
122
|
*/
|
|
122
123
|
getOrThrow(key) {
|
|
123
|
-
const
|
|
124
|
-
if (!
|
|
124
|
+
const value2 = getDeep(this._config, key.split("."));
|
|
125
|
+
if (!value2) {
|
|
125
126
|
throw new Error(`Config option not present: ${key}`);
|
|
126
127
|
}
|
|
127
|
-
return
|
|
128
|
+
return value2;
|
|
128
129
|
}
|
|
129
130
|
};
|
|
130
131
|
Config = _ts_decorate([
|
|
@@ -215,6 +216,26 @@ var SaveConfig = async (config) => {
|
|
|
215
216
|
var FILE_DEFAULTS = "defaults.yml";
|
|
216
217
|
var FILE_ENVS = "envs-map.yml";
|
|
217
218
|
var FILE_DYNAMICS = "config.yml";
|
|
219
|
+
|
|
220
|
+
// src/preset.ts
|
|
221
|
+
import * as Match from "effect/Match";
|
|
222
|
+
var configPreset = ({ edge = "main" } = {}) => new Config({
|
|
223
|
+
version: 1,
|
|
224
|
+
runtime: {
|
|
225
|
+
client: {
|
|
226
|
+
edgeFeatures: {
|
|
227
|
+
signaling: true,
|
|
228
|
+
echoReplicator: true,
|
|
229
|
+
feedReplicator: true
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
services: {
|
|
233
|
+
edge: {
|
|
234
|
+
url: Match.value(edge).pipe(Match.when("local", () => "http://localhost:8787"), Match.when("dev", () => "https://edge.dxos.workers.dev"), Match.when("main", () => "https://edge-main.dxos.workers.dev"), Match.exhaustive)
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
});
|
|
218
239
|
export {
|
|
219
240
|
Config,
|
|
220
241
|
ConfigResource,
|
|
@@ -228,6 +249,7 @@ export {
|
|
|
228
249
|
Remote,
|
|
229
250
|
SaveConfig,
|
|
230
251
|
Storage,
|
|
252
|
+
configPreset,
|
|
231
253
|
defs,
|
|
232
254
|
mapFromKeyValues,
|
|
233
255
|
mapToKeyValues,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/index.ts", "../../../src/config.ts", "../../../src/loaders/browser.js", "../../../src/savers/browser.js", "../../../src/types.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\n/* THIS FILE WILL BE LOADED BY CONTEXT REPLACEMENT PLUGIN IN BROWSER ENVS. */\n\n/* global __DXOS_CONFIG__ __CONFIG_ENVS__ __CONFIG_DEFAULTS__ __CONFIG_LOCAL__ */\n\nimport localforage from 'localforage';\n\nimport { log } from '@dxos/log';\n\nconst CONFIG_ENDPOINT = '/.well-known/dx/config';\n\nexport const Local = () => {\n return typeof __CONFIG_LOCAL__ !== 'undefined' ? __CONFIG_LOCAL__ : {};\n};\n\nexport const Dynamics = async () => {\n const { publicUrl = '', dynamic } = __DXOS_CONFIG__;\n if (!dynamic) {\n log('dynamics disabled');\n return {};\n }\n\n log('fetching config...', { publicUrl });\n return await fetch(`${publicUrl}${CONFIG_ENDPOINT}`)\n .then((res) => res.json())\n .catch((error) => {\n log.warn('Failed to fetch dynamic config.', error);\n return {};\n });\n};\n\nexport const Envs = () => {\n return typeof __CONFIG_ENVS__ !== 'undefined' ? __CONFIG_ENVS__ : {};\n};\n\nexport const Defaults = () => {\n return typeof __CONFIG_DEFAULTS__ !== 'undefined' ? __CONFIG_DEFAULTS__ : {};\n};\n\n/**\n * Settings config from browser storage.\n */\nexport const Storage = async () => {\n try {\n const config = await localforage.getItem('dxos.org/settings/config');\n if (config) {\n return config;\n }\n } catch (err) {\n log.warn('Failed to load config', { err });\n }\n return {};\n};\n\nexport const Remote = (target, authenticationToken) => {\n if (!target) {\n return {};\n }\n\n try {\n const url = new URL(target);\n const protocol = url.protocol.slice(0, -1);\n\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\n/* THIS FILE WILL BE LOADED BY CONTEXT REPLACEMENT PLUGIN IN BROWSER ENVS. */\n\nimport localforage from 'localforage';\n\nimport { log } from '@dxos/log';\n\nlet PERFORMING_CONFIG_SAVE = false;\n\nexport const SaveConfig = async (config) => {\n if (PERFORMING_CONFIG_SAVE) {\n log.warn('Already performing config save');\n return;\n }\n PERFORMING_CONFIG_SAVE = true;\n\n try {\n await localforage.setItem('dxos.org/settings/config', config);\n } catch (err) {\n log.warn('Failed to save config', { err });\n return {};\n } finally {\n PERFORMING_CONFIG_SAVE = false;\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"],
|
|
5
|
-
"mappings": ";AAKA,YAAYA,UAAU;;;ACDtB,SAASC,eAAe;AACxB,OAAOC,kBAAkB;AACzB,OAAOC,aAAa;AAEpB,SAASC,0BAA0B;AACnC,SAASC,cAAc;AAEvB,SAASC,aAAa;AACtB,SAASC,SAASC,eAAe;;;;;;;AAKjC,IAAMC,iBAAiBC,OAAOC,gBAAgB,oBAAA;AAgBvC,IAAMC,mBAAmB,CAACC,MAAmBC,WAAAA;AAClD,QAAMC,SAAS,CAAC;AAEhB,aAAW,CAACC,KAAK,EAAEC,MAAMC,KAAI,CAAE,KAAKC,OAAOC,QAAQP,IAAAA,GAAO;AACxD,QAAIQ,
|
|
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", "
|
|
3
|
+
"sources": ["../../../src/index.ts", "../../../src/config.ts", "../../../src/loaders/browser.js", "../../../src/savers/browser.js", "../../../src/types.ts", "../../../src/preset.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';\nexport * from './preset';\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\n/* THIS FILE WILL BE LOADED BY CONTEXT REPLACEMENT PLUGIN IN BROWSER ENVS. */\n\n/* global __DXOS_CONFIG__ __CONFIG_ENVS__ __CONFIG_DEFAULTS__ __CONFIG_LOCAL__ */\n\nimport localforage from 'localforage';\n\nimport { log } from '@dxos/log';\n\nconst CONFIG_ENDPOINT = '/.well-known/dx/config';\n\nexport const Local = () => {\n return typeof __CONFIG_LOCAL__ !== 'undefined' ? __CONFIG_LOCAL__ : {};\n};\n\nexport const Dynamics = async () => {\n const { publicUrl = '', dynamic } = __DXOS_CONFIG__;\n if (!dynamic) {\n log('dynamics disabled');\n return {};\n }\n\n log('fetching config...', { publicUrl });\n return await fetch(`${publicUrl}${CONFIG_ENDPOINT}`)\n .then((res) => res.json())\n .catch((error) => {\n log.warn('Failed to fetch dynamic config.', error);\n return {};\n });\n};\n\nexport const Envs = () => {\n return typeof __CONFIG_ENVS__ !== 'undefined' ? __CONFIG_ENVS__ : {};\n};\n\nexport const Defaults = () => {\n return typeof __CONFIG_DEFAULTS__ !== 'undefined' ? __CONFIG_DEFAULTS__ : {};\n};\n\n/**\n * Settings config from browser storage.\n */\nexport const Storage = async () => {\n try {\n const config = await localforage.getItem('dxos.org/settings/config');\n if (config) {\n return config;\n }\n } catch (err) {\n log.warn('Failed to load config', { err });\n }\n return {};\n};\n\nexport const Remote = (target, authenticationToken) => {\n if (!target) {\n return {};\n }\n\n try {\n const url = new URL(target);\n const protocol = url.protocol.slice(0, -1);\n\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\n/* THIS FILE WILL BE LOADED BY CONTEXT REPLACEMENT PLUGIN IN BROWSER ENVS. */\n\nimport localforage from 'localforage';\n\nimport { log } from '@dxos/log';\n\nlet PERFORMING_CONFIG_SAVE = false;\n\nexport const SaveConfig = async (config) => {\n if (PERFORMING_CONFIG_SAVE) {\n log.warn('Already performing config save');\n return;\n }\n PERFORMING_CONFIG_SAVE = true;\n\n try {\n await localforage.setItem('dxos.org/settings/config', config);\n } catch (err) {\n log.warn('Failed to save config', { err });\n return {};\n } finally {\n PERFORMING_CONFIG_SAVE = false;\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 2025 DXOS.org\n//\n\nimport * as Match from 'effect/Match';\n\nimport { Config } from './config';\n\nexport type ConfigPresetOptions = {\n /**\n * Edge service.\n * @default main\n */\n edge?: 'local' | 'dev' | 'main';\n};\n\nexport const configPreset = ({ edge = 'main' }: ConfigPresetOptions = {}) =>\n new Config({\n version: 1,\n runtime: {\n client: {\n edgeFeatures: {\n signaling: true,\n echoReplicator: true,\n feedReplicator: true,\n },\n },\n services: {\n edge: {\n url: Match.value(edge).pipe(\n Match.when('local', () => 'http://localhost:8787'),\n Match.when('dev', () => 'https://edge.dxos.workers.dev'),\n Match.when('main', () => 'https://edge-main.dxos.workers.dev'),\n Match.exhaustive,\n ),\n },\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", "_config", "objects", "defaultsDeep", "get", "defaultValue", "find", "test", "Array", "isArray", "isMatch", "getOrThrow", "resource", "annotation", "localforage", "log", "FILE_DEFAULTS", "FILE_ENVS", "FILE_DYNAMICS", "Match", "configPreset", "edge", "Config", "version", "runtime", "client", "edgeFeatures", "signaling", "echoReplicator", "feedReplicator", "services", "url", "value", "pipe", "when", "exhaustive"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/config.ts":{"bytes":15734,"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"},"src/loaders/browser.js":{"bytes":1868,"imports":[{"path":"localforage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/savers/browser.js":{"bytes":613,"imports":[{"path":"localforage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"(disabled):src/plugin":{"bytes":0,"imports":[]},"src/types.ts":{"bytes":2735,"imports":[],"format":"esm"},"src/index.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/config.ts":{"bytes":15734,"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"},"src/loaders/browser.js":{"bytes":1868,"imports":[{"path":"localforage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/savers/browser.js":{"bytes":613,"imports":[{"path":"localforage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"(disabled):src/plugin":{"bytes":0,"imports":[]},"src/types.ts":{"bytes":2735,"imports":[],"format":"esm"},"src/preset.ts":{"bytes":3066,"imports":[{"path":"effect/Match","kind":"import-statement","external":true},{"path":"src/config.ts","kind":"import-statement","original":"./config"}],"format":"esm"},"src/index.ts":{"bytes":1298,"imports":[{"path":"@dxos/protocols/proto/dxos/config","kind":"import-statement","external":true},{"path":"src/config.ts","kind":"import-statement","original":"./config"},{"path":"src/loaders/browser.js","kind":"import-statement","original":"./loaders"},{"path":"src/savers/browser.js","kind":"import-statement","original":"./savers"},{"path":"(disabled):src/plugin","kind":"import-statement","original":"./plugin"},{"path":"src/types.ts","kind":"import-statement","original":"./types"},{"path":"src/preset.ts","kind":"import-statement","original":"./preset"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":15599},"dist/lib/browser/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":"localforage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"localforage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"effect/Match","kind":"import-statement","external":true}],"exports":["Config","ConfigResource","Defaults","Dynamics","Envs","FILE_DEFAULTS","FILE_DYNAMICS","FILE_ENVS","Local","Remote","SaveConfig","Storage","configPreset","defs","mapFromKeyValues","mapToKeyValues","validateConfig"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":59},"src/config.ts":{"bytesInOutput":4003},"src/loaders/browser.js":{"bytesInOutput":1537},"src/savers/browser.js":{"bytesInOutput":499},"src/types.ts":{"bytesInOutput":102},"src/preset.ts":{"bytesInOutput":541}},"bytes":7140}}}
|
|
@@ -21,23 +21,23 @@ var configRootType = schema.getCodecForType("dxos.config.Config");
|
|
|
21
21
|
var mapFromKeyValues = (spec, values) => {
|
|
22
22
|
const config = {};
|
|
23
23
|
for (const [key, { path: path2, type }] of Object.entries(spec)) {
|
|
24
|
-
let
|
|
25
|
-
if (
|
|
24
|
+
let value2 = values[key];
|
|
25
|
+
if (value2 !== void 0) {
|
|
26
26
|
if (type) {
|
|
27
27
|
switch (type) {
|
|
28
28
|
case "boolean": {
|
|
29
|
-
|
|
29
|
+
value2 = boolean(value2);
|
|
30
30
|
break;
|
|
31
31
|
}
|
|
32
32
|
case "number": {
|
|
33
|
-
|
|
33
|
+
value2 = Number(value2);
|
|
34
34
|
break;
|
|
35
35
|
}
|
|
36
36
|
case "string": {
|
|
37
37
|
break;
|
|
38
38
|
}
|
|
39
39
|
case "json": {
|
|
40
|
-
|
|
40
|
+
value2 = value2 ? JSON.parse(value2) : null;
|
|
41
41
|
break;
|
|
42
42
|
}
|
|
43
43
|
default: {
|
|
@@ -45,7 +45,7 @@ var mapFromKeyValues = (spec, values) => {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
setDeep(config, path2.split("."),
|
|
48
|
+
setDeep(config, path2.split("."), value2);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
return config;
|
|
@@ -53,14 +53,14 @@ var mapFromKeyValues = (spec, values) => {
|
|
|
53
53
|
var mapToKeyValues = (spec, values) => {
|
|
54
54
|
const config = {};
|
|
55
55
|
for (const [key, { path: path2, type }] of Object.entries(spec)) {
|
|
56
|
-
const
|
|
57
|
-
if (
|
|
56
|
+
const value2 = getDeep(values, path2.split("."));
|
|
57
|
+
if (value2 !== void 0) {
|
|
58
58
|
switch (type) {
|
|
59
59
|
case "json":
|
|
60
|
-
config[key] = JSON.stringify(
|
|
60
|
+
config[key] = JSON.stringify(value2);
|
|
61
61
|
break;
|
|
62
62
|
default:
|
|
63
|
-
config[key] =
|
|
63
|
+
config[key] = value2;
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
}
|
|
@@ -81,6 +81,7 @@ var validateConfig = (config) => {
|
|
|
81
81
|
};
|
|
82
82
|
var ConfigResource = Symbol.for("dxos.resource.Config");
|
|
83
83
|
var Config = class {
|
|
84
|
+
_config;
|
|
84
85
|
/**
|
|
85
86
|
* Creates an immutable instance.
|
|
86
87
|
* @constructor
|
|
@@ -114,7 +115,7 @@ var Config = class {
|
|
|
114
115
|
if (!Array.isArray(values)) {
|
|
115
116
|
return;
|
|
116
117
|
}
|
|
117
|
-
return values.find((
|
|
118
|
+
return values.find((value2) => isMatch(value2, test));
|
|
118
119
|
}
|
|
119
120
|
/**
|
|
120
121
|
* Returns the given config property or throw if it doesn't exist.
|
|
@@ -122,11 +123,11 @@ var Config = class {
|
|
|
122
123
|
* @param key A key in the config object. Can be a nested property with keys separated by dots: 'services.signal.server'.
|
|
123
124
|
*/
|
|
124
125
|
getOrThrow(key) {
|
|
125
|
-
const
|
|
126
|
-
if (!
|
|
126
|
+
const value2 = getDeep(this._config, key.split("."));
|
|
127
|
+
if (!value2) {
|
|
127
128
|
throw new Error(`Config option not present: ${key}`);
|
|
128
129
|
}
|
|
129
|
-
return
|
|
130
|
+
return value2;
|
|
130
131
|
}
|
|
131
132
|
};
|
|
132
133
|
Config = _ts_decorate([
|
|
@@ -136,9 +137,9 @@ Config = _ts_decorate([
|
|
|
136
137
|
], Config);
|
|
137
138
|
|
|
138
139
|
// src/loaders/index.ts
|
|
139
|
-
import yaml from "js-yaml";
|
|
140
140
|
import fs from "node:fs";
|
|
141
141
|
import path from "node:path";
|
|
142
|
+
import yaml from "js-yaml";
|
|
142
143
|
import { log } from "@dxos/log";
|
|
143
144
|
|
|
144
145
|
// src/types.ts
|
|
@@ -188,7 +189,7 @@ var Remote = (target, authenticationToken) => {
|
|
|
188
189
|
} catch (err) {
|
|
189
190
|
log.catch(err, void 0, {
|
|
190
191
|
F: __dxlog_file,
|
|
191
|
-
L:
|
|
192
|
+
L: 88,
|
|
192
193
|
S: void 0,
|
|
193
194
|
C: (f, a) => f(...a)
|
|
194
195
|
});
|
|
@@ -201,10 +202,10 @@ var SaveConfig = async (_) => {
|
|
|
201
202
|
};
|
|
202
203
|
|
|
203
204
|
// src/plugin/definitions.ts
|
|
204
|
-
import yaml2 from "js-yaml";
|
|
205
205
|
import { execSync } from "node:child_process";
|
|
206
206
|
import { readFileSync } from "node:fs";
|
|
207
207
|
import { resolve } from "node:path";
|
|
208
|
+
import yaml2 from "js-yaml";
|
|
208
209
|
import pkgUp from "pkg-up";
|
|
209
210
|
import { invariant } from "@dxos/invariant";
|
|
210
211
|
import { log as log2 } from "@dxos/log";
|
|
@@ -219,10 +220,10 @@ var definitions = ({ configPath, envPath, devPath, mode = process.env.NODE_ENV,
|
|
|
219
220
|
if (mode !== "production") {
|
|
220
221
|
KEYS_TO_FILE.__CONFIG_LOCAL__ = devPath ?? resolve(CWD, "dx-local.yml");
|
|
221
222
|
}
|
|
222
|
-
return Object.entries(KEYS_TO_FILE).reduce((prev, [key,
|
|
223
|
+
return Object.entries(KEYS_TO_FILE).reduce((prev, [key, value2]) => {
|
|
223
224
|
invariant(key, void 0, {
|
|
224
225
|
F: __dxlog_file2,
|
|
225
|
-
L:
|
|
226
|
+
L: 40,
|
|
226
227
|
S: void 0,
|
|
227
228
|
A: [
|
|
228
229
|
"key",
|
|
@@ -231,19 +232,19 @@ var definitions = ({ configPath, envPath, devPath, mode = process.env.NODE_ENV,
|
|
|
231
232
|
});
|
|
232
233
|
let content = {};
|
|
233
234
|
try {
|
|
234
|
-
content = yaml2.load(readFileSync(
|
|
235
|
+
content = yaml2.load(readFileSync(value2, "utf-8"));
|
|
235
236
|
if (key === "__CONFIG_ENVS__") {
|
|
236
237
|
content = mapFromKeyValues(content, process.env);
|
|
237
238
|
}
|
|
238
239
|
if (key === "__CONFIG_DEFAULTS__") {
|
|
239
|
-
Object.entries(process.env).forEach(([key2,
|
|
240
|
+
Object.entries(process.env).forEach(([key2, value3]) => {
|
|
240
241
|
if (key2.startsWith("DX_") || env?.includes(key2)) {
|
|
241
242
|
setDeep2(content, [
|
|
242
243
|
"runtime",
|
|
243
244
|
"app",
|
|
244
245
|
"env",
|
|
245
246
|
key2
|
|
246
|
-
],
|
|
247
|
+
], value3);
|
|
247
248
|
}
|
|
248
249
|
});
|
|
249
250
|
try {
|
|
@@ -276,22 +277,22 @@ var definitions = ({ configPath, envPath, devPath, mode = process.env.NODE_ENV,
|
|
|
276
277
|
}
|
|
277
278
|
} catch (err) {
|
|
278
279
|
if (err.message.includes("YAMLException")) {
|
|
279
|
-
log2.error(`Failed to parse file ${
|
|
280
|
+
log2.error(`Failed to parse file ${value2}:`, err, {
|
|
280
281
|
F: __dxlog_file2,
|
|
281
|
-
L:
|
|
282
|
+
L: 73,
|
|
282
283
|
S: void 0,
|
|
283
284
|
C: (f, a) => f(...a)
|
|
284
285
|
});
|
|
285
286
|
} else {
|
|
286
|
-
log2(`Failed to load file ${
|
|
287
|
+
log2(`Failed to load file ${value2}:`, err, {
|
|
287
288
|
F: __dxlog_file2,
|
|
288
|
-
L:
|
|
289
|
+
L: 75,
|
|
289
290
|
S: void 0,
|
|
290
291
|
C: (f, a) => f(...a)
|
|
291
292
|
});
|
|
292
293
|
}
|
|
293
294
|
if (key === "__CONFIG_DEFAULTS__") {
|
|
294
|
-
throw new Error(`Failed to load default config file from ${
|
|
295
|
+
throw new Error(`Failed to load default config file from ${value2}`);
|
|
295
296
|
}
|
|
296
297
|
}
|
|
297
298
|
return {
|
|
@@ -308,6 +309,26 @@ var definitions = ({ configPath, envPath, devPath, mode = process.env.NODE_ENV,
|
|
|
308
309
|
}
|
|
309
310
|
});
|
|
310
311
|
};
|
|
312
|
+
|
|
313
|
+
// src/preset.ts
|
|
314
|
+
import * as Match from "effect/Match";
|
|
315
|
+
var configPreset = ({ edge = "main" } = {}) => new Config({
|
|
316
|
+
version: 1,
|
|
317
|
+
runtime: {
|
|
318
|
+
client: {
|
|
319
|
+
edgeFeatures: {
|
|
320
|
+
signaling: true,
|
|
321
|
+
echoReplicator: true,
|
|
322
|
+
feedReplicator: true
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
services: {
|
|
326
|
+
edge: {
|
|
327
|
+
url: Match.value(edge).pipe(Match.when("local", () => "http://localhost:8787"), Match.when("dev", () => "https://edge.dxos.workers.dev"), Match.when("main", () => "https://edge-main.dxos.workers.dev"), Match.exhaustive)
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
});
|
|
311
332
|
export {
|
|
312
333
|
Config,
|
|
313
334
|
ConfigResource,
|
|
@@ -322,6 +343,7 @@ export {
|
|
|
322
343
|
Remote,
|
|
323
344
|
SaveConfig,
|
|
324
345
|
Storage,
|
|
346
|
+
configPreset,
|
|
325
347
|
definitions,
|
|
326
348
|
defs,
|
|
327
349
|
mapFromKeyValues,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
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 { invariant } from '@dxos/invariant';\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?.length ? configPath : resolve(CWD, 'dx.yml'),\n __CONFIG_ENVS__: envPath?.length ? envPath : resolve(CWD, 'dx-env.yml'),\n } as { [key: string]: string };\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 invariant(key);\n let content = {};\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 __CONFIG_DEFAULTS__: {},\n __CONFIG_ENVS__: {},\n __CONFIG_LOCAL__: {},\n __DXOS_CONFIG__: { dynamic: mode === 'production', publicUrl },\n },\n );\n};\n"],
|
|
5
|
-
"mappings": ";;;AAKA,YAAYA,UAAU;;;ACDtB,SAASC,eAAe;AACxB,OAAOC,kBAAkB;AACzB,OAAOC,aAAa;AAEpB,SAASC,0BAA0B;AACnC,SAASC,cAAc;AAEvB,SAASC,aAAa;AACtB,SAASC,SAASC,eAAe;;;;;;;AAKjC,IAAMC,iBAAiBC,OAAOC,gBAAgB,oBAAA;AAgBvC,IAAMC,mBAAmB,CAACC,MAAmBC,WAAAA;AAClD,QAAMC,SAAS,CAAC;AAEhB,aAAW,CAACC,KAAK,EAAEC,MAAAA,OAAMC,KAAI,CAAE,KAAKC,OAAOC,QAAQP,IAAAA,GAAO;AACxD,QAAIQ,
|
|
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", "
|
|
3
|
+
"sources": ["../../../src/index.ts", "../../../src/config.ts", "../../../src/loaders/index.ts", "../../../src/types.ts", "../../../src/savers/index.ts", "../../../src/plugin/definitions.ts", "../../../src/preset.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';\nexport * from './preset';\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 fs from 'node:fs';\nimport path from 'node:path';\n\nimport yaml from 'js-yaml';\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 { execSync } from 'node:child_process';\nimport { readFileSync } from 'node:fs';\nimport { resolve } from 'node:path';\n\nimport yaml from 'js-yaml';\nimport pkgUp from 'pkg-up';\n\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { setDeep } from '@dxos/util';\n\nimport { mapFromKeyValues } from '../config';\n\nimport { type ConfigPluginOpts } from './types';\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?.length ? configPath : resolve(CWD, 'dx.yml'),\n __CONFIG_ENVS__: envPath?.length ? envPath : resolve(CWD, 'dx-env.yml'),\n } as { [key: string]: string };\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 invariant(key);\n let content = {};\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 __CONFIG_DEFAULTS__: {},\n __CONFIG_ENVS__: {},\n __CONFIG_LOCAL__: {},\n __DXOS_CONFIG__: { dynamic: mode === 'production', publicUrl },\n },\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Match from 'effect/Match';\n\nimport { Config } from './config';\n\nexport type ConfigPresetOptions = {\n /**\n * Edge service.\n * @default main\n */\n edge?: 'local' | 'dev' | 'main';\n};\n\nexport const configPreset = ({ edge = 'main' }: ConfigPresetOptions = {}) =>\n new Config({\n version: 1,\n runtime: {\n client: {\n edgeFeatures: {\n signaling: true,\n echoReplicator: true,\n feedReplicator: true,\n },\n },\n services: {\n edge: {\n url: Match.value(edge).pipe(\n Match.when('local', () => 'http://localhost:8787'),\n Match.when('dev', () => 'https://edge.dxos.workers.dev'),\n Match.when('main', () => 'https://edge-main.dxos.workers.dev'),\n Match.exhaustive,\n ),\n },\n },\n },\n });\n"],
|
|
5
|
+
"mappings": ";;;AAKA,YAAYA,UAAU;;;ACDtB,SAASC,eAAe;AACxB,OAAOC,kBAAkB;AACzB,OAAOC,aAAa;AAEpB,SAASC,0BAA0B;AACnC,SAASC,cAAc;AAEvB,SAASC,aAAa;AACtB,SAASC,SAASC,eAAe;;;;;;;AAKjC,IAAMC,iBAAiBC,OAAOC,gBAAgB,oBAAA;AAgBvC,IAAMC,mBAAmB,CAACC,MAAmBC,WAAAA;AAClD,QAAMC,SAAS,CAAC;AAEhB,aAAW,CAACC,KAAK,EAAEC,MAAAA,OAAMC,KAAI,CAAE,KAAKC,OAAOC,QAAQP,IAAAA,GAAO;AACxD,QAAIQ,SAAQP,OAAOE,GAAAA;AAEnB,QAAIK,WAAUC,QAAW;AACvB,UAAIJ,MAAM;AACR,gBAAQA,MAAAA;UACN,KAAK,WAAW;AACdG,YAAAA,SAAQE,QAAQF,MAAAA;AAChB;UACF;UAEA,KAAK,UAAU;AACbA,YAAAA,SAAQG,OAAOH,MAAAA;AACf;UACF;UAEA,KAAK,UAAU;AACb;UACF;UAEA,KAAK,QAAQ;AACXA,YAAAA,SAAQA,SAAQI,KAAKC,MAAML,MAAAA,IAAS;AACpC;UACF;UAEA,SAAS;AACP,kBAAM,IAAIM,MAAM,iBAAiBT,IAAAA,EAAM;UACzC;QACF;MACF;AAEAU,cAAQb,QAAQE,MAAKY,MAAM,GAAA,GAAMR,MAAAA;IACnC;EACF;AAEA,SAAON;AACT;AAOO,IAAMe,iBAAiB,CAACjB,MAAmBC,WAAAA;AAChD,QAAMC,SAA8B,CAAC;AAErC,aAAW,CAACC,KAAK,EAAEC,MAAAA,OAAMC,KAAI,CAAE,KAAKC,OAAOC,QAAQP,IAAAA,GAAO;AACxD,UAAMQ,SAAQU,QAAQjB,QAAQG,MAAKY,MAAM,GAAA,CAAA;AACzC,QAAIR,WAAUC,QAAW;AACvB,cAAQJ,MAAAA;QACN,KAAK;AACHH,iBAAOC,GAAAA,IAAOS,KAAKO,UAAUX,MAAAA;AAC7B;QACF;AACEN,iBAAOC,GAAAA,IAAOK;MAClB;IACF;EACF;AAEA,SAAON;AACT;AAKO,IAAMkB,iBAAiB,CAAClB,WAAAA;AAC7B,MAAI,EAAE,aAAaA,SAAS;AAC1B,UAAM,IAAImB,mBAAmB,uBAAA;EAC/B;AAEA,MAAInB,QAAQoB,YAAY,GAAG;AACzB,UAAM,IAAID,mBAAmB,2BAA2BnB,OAAOoB,OAAO,EAAE;EAC1E;AAEA,QAAMC,QAAQ3B,eAAe4B,UAAUC,OAAOvB,MAAAA;AAC9C,MAAIqB,OAAO;AACT,UAAM,IAAIF,mBAAmBE,KAAAA;EAC/B;AAEA,SAAOrB;AACT;AAEO,IAAMwB,iBAAiBC,OAAOC,IAAI,sBAAA;AAOlC,IAAMC,SAAN,MAAMA;EACMC;;;;;EAMjB,YAAY5B,SAAsB,CAAC,MAAM6B,SAAwB;AAC/D,SAAKD,UAAUV,eAAeY,aAAa9B,QAAAA,GAAW6B,SAAS;MAAET,SAAS;IAAE,CAAA,CAAA;EAC9E;;;;EAKA,IAAIrB,SAAsB;AACxB,WAAO,KAAK6B;EACd;;;;;;;;EASAG,IACE9B,KACA+B,cACiD;AACjD,WAAOhB,QAAQ,KAAKY,SAAS3B,IAAIa,MAAM,GAAA,CAAA,KAASkB;EAClD;;;;EAKAC,KAAc/B,OAAcgC,MAA6B;AACvD,UAAMnC,SAASiB,QAAQ,KAAKY,SAAS1B,MAAKY,MAAM,GAAA,CAAA;AAChD,QAAI,CAACqB,MAAMC,QAAQrC,MAAAA,GAAS;AAC1B;IACF;AAEA,WAAOA,OAAOkC,KAAK,CAAC3B,WAAU+B,QAAQ/B,QAAO4B,IAAAA,CAAAA;EAC/C;;;;;;EAOAI,WAAgCrC,KAAiE;AAC/F,UAAMK,SAAyDU,QAAQ,KAAKY,SAAS3B,IAAIa,MAAM,GAAA,CAAA;AAC/F,QAAI,CAACR,QAAO;AACV,YAAM,IAAIM,MAAM,8BAA8BX,GAAAA,EAAK;IACrD;AACA,WAAOK;EACT;AACF;;QAzDOiC,SAAAA;IAAWC,YAAYhB;;;;;ACxH9B,OAAOiB,QAAQ;AACf,OAAOC,UAAU;AAEjB,OAAOC,UAAU;AAEjB,SAASC,WAAW;;;ACHb,IAAMC,gBAAgB;AACtB,IAAMC,YAAY;AAClB,IAAMC,gBAAgB;;;;ADS7B,IAAMC,oBAAoBC,KAAKC,QAAQC,QAAQC,IAAG,GAAI,QAAA;AAEtD,IAAMC,gBAAgB,CAACC,SAAAA;AACrB,MAAI;AACF,WAAOC,KAAKC,KAAKC,GAAGC,aAAaJ,MAAM;MAAEK,UAAU;IAAO,CAAA,CAAA;EAC5D,SAASC,KAAU;EAEnB;AACF;AASO,IAAMC,UAAU,CAACC,UAAU,cAAS;AACzC,QAAMC,aAAad,KAAKe,KAAKb,QAAQc,IAAIC,QAAQ,KAAK,sBAAsBJ,OAAAA,MAAa;AACzF,SAAOT,cAAcU,UAAAA;AACvB;AAMO,IAAMI,QAAQ,OAA6B,CAAC;AAK5C,IAAMC,WAAW,OAA6B,CAAC;AAK/C,IAAMC,OAAO,CAACC,WAAWtB,sBAAiB;AAC/C,QAAMuB,UAAUlB,cAAcJ,KAAKC,QAAQoB,UAAUE,SAAAA,CAAAA;AACrD,SAAOD,UAAUE,iBAAiBF,SAASpB,QAAQc,GAAG,IAAI,CAAC;AAC7D;AAKO,IAAMS,WAAW,CAACJ,WAAWtB,sBAClCK,cAAcJ,KAAKC,QAAQoB,UAAUK,aAAAA,CAAAA,KAAmB,CAAC;AAKpD,IAAMC,UAAU,aAA4C,CAAC;AAE7D,IAAMC,SAAS,CAACC,QAA4BC,wBAAAA;AACjD,MAAI,CAACD,QAAQ;AACX,WAAO,CAAC;EACV;AAEA,MAAI;AACF,UAAME,MAAM,IAAIC,IAAIH,MAAAA;AACpB,UAAMI,WAAWF,IAAIE,SAASC,MAAM,GAAG,EAAC;AACxC,WAAO;MACLC,SAAS;QACPC,QAAQ;;UAENC,cAAcN,IAAIO,UAAUL,SAASM,WAAW,MAAA,IAAU,gBAAgB;UAC1EC,iCAAiCV;QACnC;MACF;IACF;EACF,SAASnB,KAAK;AACZ8B,QAAIC,MAAM/B,KAAAA,QAAAA;;;;;;AACV,WAAO,CAAC;EACV;AACF;;;AEpFO,IAAMgC,aAAa,OAAOC,MAAAA;AAAoB;;;ACFrD,SAASC,gBAAgB;AACzB,SAASC,oBAAoB;AAC7B,SAASC,eAAe;AAExB,OAAOC,WAAU;AACjB,OAAOC,WAAW;AAElB,SAASC,iBAAiB;AAC1B,SAASC,OAAAA,YAAW;AACpB,SAASC,WAAAA,gBAAe;;AAMxB,IAAMC,MAAMC,QAAQC,IAAG;AAEhB,IAAMC,cAAc,CAAC,EAC1BC,YACAC,SACAC,SACAC,OAAON,QAAQO,IAAIC,UACnBC,YAAY,IACZF,IAAG,MACc;AACjB,QAAMG,eAAe;IACnBC,qBAAqBR,YAAYS,SAAST,aAAaU,QAAQd,KAAK,QAAA;IACpEe,iBAAiBV,SAASQ,SAASR,UAAUS,QAAQd,KAAK,YAAA;EAC5D;AACA,MAAIO,SAAS,cAAc;AACzBI,iBAAaK,mBAAmBV,WAAWQ,QAAQd,KAAK,cAAA;EAC1D;AAEA,SAAOiB,OAAOC,QAAQP,YAAAA,EAAcQ,OAClC,CAACC,MAAM,CAACC,KAAKC,MAAAA,MAAM;AACjBC,cAAUF,KAAAA,QAAAA;;;;;;;;;AACV,QAAIG,UAAU,CAAC;AACf,QAAI;AACFA,gBAAUC,MAAKC,KAAKC,aAAaL,QAAO,OAAA,CAAA;AAGxC,UAAID,QAAQ,mBAAmB;AAC7BG,kBAAUI,iBAAiBJ,SAASvB,QAAQO,GAAG;MACjD;AAEA,UAAIa,QAAQ,uBAAuB;AAEjCJ,eAAOC,QAAQjB,QAAQO,GAAG,EAAEqB,QAAQ,CAAC,CAACR,MAAKC,MAAAA,MAAM;AAC/C,cAAID,KAAIS,WAAW,KAAA,KAAUtB,KAAKuB,SAASV,IAAAA,GAAM;AAC/CW,YAAAA,SAAQR,SAAS;cAAC;cAAW;cAAO;cAAOH;eAAMC,MAAAA;UACnD;QACF,CAAA;AAGA,YAAI;AACF,gBAAMW,aAAY,oBAAIC,KAAAA,GAAOC,YAAW;AACxC,gBAAMC,aACJnC,QAAQO,IAAI6B,kBACZC,SAAS,8BAA8B;YAAEC,UAAU;UAAQ,CAAA,EAAGC,QAAQ,MAAM,EAAA;AAC9E,gBAAMC,cAAcC,MAAMC,KAAI;AAC9B,gBAAMC,cAAcH,eAAeI,KAAKC,MAAMnB,aAAac,aAAa,OAAA,CAAA;AACxET,UAAAA,SAAQR,SAAS;YAAC;YAAW;YAAO;YAAS;aAAcS,SAAAA;AAC3DD,UAAAA,SAAQR,SAAS;YAAC;YAAW;YAAO;YAAS;aAAeY,UAAAA;AAC5DJ,UAAAA,SAAQR,SAAS;YAAC;YAAW;YAAO;YAAS;aAAYoB,aAAaG,OAAAA;QACxE,QAAQ;QAAC;MACX;IACF,SAASC,KAAU;AACjB,UAAIA,IAAIC,QAAQlB,SAAS,eAAA,GAAkB;AACzCmB,QAAAA,KAAIC,MAAM,wBAAwB7B,MAAAA,KAAU0B,KAAAA;;;;;;MAC9C,OAAO;AACLE,QAAAA,KAAI,uBAAuB5B,MAAAA,KAAU0B,KAAAA;;;;;;MACvC;AAEA,UAAI3B,QAAQ,uBAAuB;AAEjC,cAAM,IAAI+B,MAAM,2CAA2C9B,MAAAA,EAAO;MACpE;IACF;AAEA,WAAO;MACL,GAAGF;MACH,CAACC,GAAAA,GAAMG;IACT;EACF,GACA;IACEZ,qBAAqB,CAAC;IACtBG,iBAAiB,CAAC;IAClBC,kBAAkB,CAAC;IACnBqC,iBAAiB;MAAEC,SAAS/C,SAAS;MAAcG;IAAU;EAC/D,CAAA;AAEJ;;;AC3FA,YAAY6C,WAAW;AAYhB,IAAMC,eAAe,CAAC,EAAEC,OAAO,OAAM,IAA0B,CAAC,MACrE,IAAIC,OAAO;EACTC,SAAS;EACTC,SAAS;IACPC,QAAQ;MACNC,cAAc;QACZC,WAAW;QACXC,gBAAgB;QAChBC,gBAAgB;MAClB;IACF;IACAC,UAAU;MACRT,MAAM;QACJU,KAAWC,YAAMX,IAAAA,EAAMY,KACfC,WAAK,SAAS,MAAM,uBAAA,GACpBA,WAAK,OAAO,MAAM,+BAAA,GAClBA,WAAK,QAAQ,MAAM,oCAAA,GACnBC,gBAAU;MAEpB;IACF;EACF;AACF,CAAA;",
|
|
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", "_config", "objects", "defaultsDeep", "get", "defaultValue", "find", "test", "Array", "isArray", "isMatch", "getOrThrow", "resource", "annotation", "fs", "path", "yaml", "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", "_", "execSync", "readFileSync", "resolve", "yaml", "pkgUp", "invariant", "log", "setDeep", "CWD", "process", "cwd", "definitions", "configPath", "envPath", "devPath", "mode", "env", "NODE_ENV", "publicUrl", "KEYS_TO_FILE", "__CONFIG_DEFAULTS__", "length", "resolve", "__CONFIG_ENVS__", "__CONFIG_LOCAL__", "Object", "entries", "reduce", "prev", "key", "value", "invariant", "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", "Match", "configPreset", "edge", "Config", "version", "runtime", "client", "edgeFeatures", "signaling", "echoReplicator", "feedReplicator", "services", "url", "value", "pipe", "when", "exhaustive"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/config.ts":{"bytes":15734,"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"},"src/types.ts":{"bytes":2735,"imports":[],"format":"esm"},"src/loaders/index.ts":{"bytes":8246,"imports":[{"path":"
|
|
1
|
+
{"inputs":{"src/config.ts":{"bytes":15734,"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"},"src/types.ts":{"bytes":2735,"imports":[],"format":"esm"},"src/loaders/index.ts":{"bytes":8246,"imports":[{"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":"@dxos/log","kind":"import-statement","external":true},{"path":"src/config.ts","kind":"import-statement","original":"../config"},{"path":"src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"src/savers/index.ts":{"bytes":666,"imports":[],"format":"esm"},"src/plugin/definitions.ts":{"bytes":12065,"imports":[{"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":"js-yaml","kind":"import-statement","external":true},{"path":"pkg-up","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/config.ts","kind":"import-statement","original":"../config"}],"format":"esm"},"src/plugin/index.ts":{"bytes":504,"imports":[{"path":"src/plugin/definitions.ts","kind":"import-statement","original":"./definitions"}],"format":"esm"},"src/preset.ts":{"bytes":3066,"imports":[{"path":"effect/Match","kind":"import-statement","external":true},{"path":"src/config.ts","kind":"import-statement","original":"./config"}],"format":"esm"},"src/index.ts":{"bytes":1298,"imports":[{"path":"@dxos/protocols/proto/dxos/config","kind":"import-statement","external":true},{"path":"src/config.ts","kind":"import-statement","original":"./config"},{"path":"src/loaders/index.ts","kind":"import-statement","original":"./loaders"},{"path":"src/savers/index.ts","kind":"import-statement","original":"./savers"},{"path":"src/plugin/index.ts","kind":"import-statement","original":"./plugin"},{"path":"src/types.ts","kind":"import-statement","original":"./types"},{"path":"src/preset.ts","kind":"import-statement","original":"./preset"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":21487},"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":"node:fs","kind":"import-statement","external":true},{"path":"node:path","kind":"import-statement","external":true},{"path":"js-yaml","kind":"import-statement","external":true},{"path":"@dxos/log","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":"js-yaml","kind":"import-statement","external":true},{"path":"pkg-up","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"effect/Match","kind":"import-statement","external":true}],"exports":["Config","ConfigResource","Defaults","Dynamics","Envs","FILE_DEFAULTS","FILE_DYNAMICS","FILE_ENVS","Local","Profile","Remote","SaveConfig","Storage","configPreset","definitions","defs","mapFromKeyValues","mapToKeyValues","validateConfig"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":59},"src/config.ts":{"bytesInOutput":4021},"src/loaders/index.ts":{"bytesInOutput":1549},"src/types.ts":{"bytesInOutput":102},"src/savers/index.ts":{"bytesInOutput":35},"src/plugin/definitions.ts":{"bytesInOutput":3232},"src/plugin/index.ts":{"bytesInOutput":0},"src/preset.ts":{"bytesInOutput":541}},"bytes":10108}}}
|