monorepo-config 0.0.2 → 0.1.0

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/basic.d.ts CHANGED
@@ -1,14 +1,42 @@
1
- import type { ZodObject, input, output } from "zod";
1
+ import { type ZodObject, type input, type output } from "zod";
2
2
  export declare class ConfigError extends Error {
3
3
  }
4
- export type Config<ConfigSchema extends ZodObject> = {
5
- _meta: {
6
- isUsable: boolean;
7
- canSet: boolean;
8
- schema: ConfigSchema;
4
+ export type ConfigMeta<PackageName extends string, ConfigSchema extends ZodObject, SubSchemas extends Record<string, ZodObject>> = {
5
+ package: PackageName;
6
+ schema: ConfigSchema;
7
+ subConfigs: {
8
+ [packageName in keyof SubSchemas & string]: Config<ConfigMeta<packageName, SubSchemas[packageName], any>, SubSchemas[packageName]>;
9
9
  };
10
- } & output<ConfigSchema>;
11
- export declare function makeConfig<ConfigSchema extends ZodObject>(schema: ConfigSchema): Config<ConfigSchema>;
12
- export declare function forceOverrideConfig<ConfigSchema extends ZodObject>(config: Config<ConfigSchema>, inputData: input<ConfigSchema>): void;
13
- export declare function setConfig<ConfigSchema extends ZodObject>(config: Config<ConfigSchema>, inputData: input<ConfigSchema>): void;
10
+ isLoaded: boolean;
11
+ loaded: Promise<void>;
12
+ input: ConfigInput<PackageName, ConfigSchema, SubSchemas>;
13
+ _resolve: (value: void) => void;
14
+ _reject: (error: Error) => void;
15
+ };
16
+ export type Config<Meta, ConfigSchema extends ZodObject> = ({
17
+ _meta: Meta;
18
+ } & output<ConfigSchema>);
19
+ export type AnyConfig = Config<ConfigMeta<string, any, any>, any>;
20
+ type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
21
+ type ResultConfigMeta<PackageName extends string, ConfigSchema extends ZodObject, SubConfigsArray extends Config<ConfigMeta<string, any, any>, any>[]> = ConfigMeta<PackageName, ConfigSchema, ({
22
+ [SubConfig in SubConfigsArray[number] as SubConfig['_meta']['package']]: (SubConfig extends {
23
+ _meta: {
24
+ schema: infer SubSchema;
25
+ };
26
+ } ? SubSchema : never);
27
+ } & {
28
+ [SubSubPkg in keyof UnionToIntersection<SubConfigsArray[number]['_meta']['subConfigs']>]: (UnionToIntersection<SubConfigsArray[number]['_meta']['subConfigs']>[SubSubPkg]['_meta']['schema']);
29
+ })>;
30
+ export declare function makeConfig<const PackageName extends string, const ConfigSchema extends ZodObject, const SubConfigsArray extends Config<ConfigMeta<string, any, any>, any>[], const Extra extends object = {}>(args: {
31
+ package: PackageName;
32
+ schema: ConfigSchema;
33
+ subConfigs: SubConfigsArray;
34
+ } & Extra): Config<ResultConfigMeta<PackageName, ConfigSchema, SubConfigsArray> & Omit<Extra, 'package' | 'schema' | 'subConfigs'>, ConfigSchema>;
35
+ type ConfigInput<PackageName extends string, ConfigSchema extends ZodObject, SubSchemas extends Record<string, ZodObject>> = (Record<PackageName, input<ConfigSchema>> & {
36
+ [subPackageName in keyof SubSchemas]: input<SubSchemas[subPackageName]>;
37
+ });
38
+ export declare function setConfig<PackageName extends string, ConfigSchema extends ZodObject, SubSchemas extends Record<string, ZodObject>>(config: Config<ConfigMeta<PackageName, ConfigSchema, SubSchemas>, ConfigSchema>, inputData: ConfigInput<PackageName, ConfigSchema, SubSchemas>, opts?: {
39
+ forceOverride: boolean;
40
+ }): Promise<void>;
41
+ export {};
14
42
  //# sourceMappingURL=basic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../src/basic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAEpD,qBAAa,WAAY,SAAQ,KAAK;CAAI;AAE1C,MAAM,MAAM,MAAM,CAAC,YAAY,SAAS,SAAS,IAAI;IACnD,KAAK,EAAE;QACL,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,YAAY,CAAC;KACtB,CAAA;CACF,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAgBzB,wBAAgB,UAAU,CAAC,YAAY,SAAS,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAwBrG;AAED,wBAAgB,mBAAmB,CAAC,YAAY,SAAS,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,QAK/H;AAED,wBAAgB,SAAS,CAAC,YAAY,SAAS,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,QAMrH"}
1
+ {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../src/basic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAK,KAAK,SAAS,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,MAAM,KAAK,CAAC;AAEjE,qBAAa,WAAY,SAAQ,KAAK;CAAI;AAE1C,MAAM,MAAM,UAAU,CACpB,WAAW,SAAS,MAAM,EAC1B,YAAY,SAAS,SAAS,EAC9B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAC1C;IACF,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE;SAAE,WAAW,IAAI,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;KAAC,CAAC;IACjJ,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC1D,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC,CAAA;AAED,MAAM,MAAM,MAAM,CAChB,IAAI,EACJ,YAAY,SAAS,SAAS,IAC5B,CACF;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG,MAAM,CAAC,YAAY,CAAC,CACvC,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAgBlE,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC;AAEhH,KAAK,gBAAgB,CACnB,WAAW,SAAS,MAAM,EAC1B,YAAY,SAAS,SAAS,EAC9B,eAAe,SAAS,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,IACjE,UAAU,CAAC,WAAW,EAAE,YAAY,EAAE,CACxC;KAEG,SAAS,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,GAAG,CACvE,SAAS,SAAS;QAAE,KAAK,EAAE;YAAE,MAAM,EAAE,MAAM,SAAS,CAAA;SAAE,CAAA;KAAC,GAAG,SAAS,GAAG,KAAK,CAC5E;CACF,GAAG;KAED,SAAS,IAAI,MAAM,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAExF,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAClG;CACJ,CAAC,CAAC,CAAC;AAEJ,wBAAgB,UAAU,CACxB,KAAK,CAAC,WAAW,SAAS,MAAM,EAChC,KAAK,CAAC,YAAY,SAAS,SAAS,EACpC,KAAK,CAAC,eAAe,SAAS,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,EACzE,KAAK,CAAC,KAAK,SAAS,MAAM,GAAG,EAAE,EAC/B,IAAI,EAAE;IACN,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,eAAe,CAAC;CAC7B,GAAG,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,EAAE,eAAe,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC,EAAE,YAAY,CAAC,CA0ChJ;AAGD,KAAK,WAAW,CACd,WAAW,SAAS,MAAM,EAC1B,YAAY,SAAS,SAAS,EAC9B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAC1C,CACF,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,GACtC;KAAG,cAAc,IAAI,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;CAAE,CAC9E,CAAC;AAwBF,wBAAsB,SAAS,CAC7B,WAAW,SAAS,MAAM,EAC1B,YAAY,SAAS,SAAS,EAC9B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAE5C,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,EAC/E,SAAS,EAAE,WAAW,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,EAC7D,IAAI,CAAC,EAAE;IAAE,aAAa,EAAE,OAAO,CAAA;CAAE,iBAQlC"}
package/dist/basic.js CHANGED
@@ -6,50 +6,76 @@ function wrapInProxy(obj) {
6
6
  if (prop === '_meta') {
7
7
  return target._meta;
8
8
  }
9
- if (!target._meta.isUsable) {
10
- throw new Error("Tried to access config but it is not usable yet. Did you forget to set or load the config?");
9
+ if (!target._meta.isLoaded) {
10
+ throw new Error("Tried to access config but it is not set yet. Did you forget to set or load the config?");
11
11
  }
12
12
  return target[prop];
13
13
  }
14
14
  });
15
15
  }
16
- export function makeConfig(schema) {
17
- const zodDefaults = schema.safeParse({});
18
- if (zodDefaults.success) {
19
- // all attributes had defaults
20
- return wrapInProxy({
21
- _meta: {
22
- schema: schema,
23
- isUsable: true,
24
- canSet: true,
25
- },
26
- ...zodDefaults.data
27
- });
28
- }
29
- else {
30
- // zod couldn't handle an empty object
31
- // @ts-expect-error for simplicity, the types assume that config is always defined.
32
- return wrapInProxy({
33
- _meta: {
34
- schema: schema,
35
- isUsable: false,
36
- canSet: true,
37
- }
38
- });
16
+ export function makeConfig(args) {
17
+ let _resolve;
18
+ let _reject;
19
+ const loaded = new Promise((resolve, reject) => {
20
+ _resolve = resolve;
21
+ _reject = reject;
22
+ });
23
+ const subConfigObject = {};
24
+ const registerConfig = (subConfig) => {
25
+ const subPkg = subConfig._meta.package;
26
+ const prevRegisteredConfig = subConfigObject[subPkg];
27
+ if (prevRegisteredConfig === undefined) {
28
+ subConfigObject[subPkg] = subConfig;
29
+ }
30
+ else if (prevRegisteredConfig !== subConfig) {
31
+ throw new ConfigError(`Package name '${subPkg}' is used for two different configs`);
32
+ }
33
+ };
34
+ for (const subConfig of args.subConfigs) {
35
+ registerConfig(subConfig);
36
+ for (const subSubConfig of Object.values(subConfig._meta.subConfigs)) {
37
+ registerConfig(subSubConfig);
38
+ }
39
39
  }
40
+ const _meta = {
41
+ ...args, // overriden later:
42
+ package: args.package,
43
+ schema: args.schema,
44
+ subConfigs: subConfigObject,
45
+ isLoaded: false,
46
+ input: {}, // will be set later
47
+ loaded,
48
+ _resolve,
49
+ _reject,
50
+ };
51
+ // @ts-expect-error for simplicity, the types assume that config is always defined.
52
+ return wrapInProxy({ _meta });
40
53
  }
41
- export function forceOverrideConfig(config, inputData) {
42
- const outputData = config._meta.schema.parse(inputData);
43
- Object.assign(config, outputData);
44
- config._meta.isUsable = true;
45
- config._meta.canSet = false;
46
- }
47
- export function setConfig(config, inputData) {
48
- if (config._meta.canSet) {
49
- forceOverrideConfig(config, inputData);
54
+ function setSingleConfig(config, allData, allowOverride) {
55
+ if (!(config._meta.package in allData)) {
56
+ throw new Error(`Expected config for package "${config._meta.package}"`);
57
+ }
58
+ if (config._meta.isLoaded) {
59
+ if (allowOverride) {
60
+ console.warn(`WARNING: Overriding config for "${config._meta.package}"!`);
61
+ }
62
+ else {
63
+ throw new ConfigError(`Can't override config "${config._meta.package}" as it is already set`);
64
+ }
65
+ }
66
+ config._meta.input = allData[config._meta.package];
67
+ const subData = config._meta.schema.parse(allData[config._meta.package]);
68
+ Object.assign(config, subData);
69
+ if (!config._meta.isLoaded) {
70
+ config._meta.isLoaded = true;
71
+ config._meta._resolve();
50
72
  }
51
- else {
52
- throw new ConfigError("Can't override config as it is already set");
73
+ }
74
+ export async function setConfig(config, inputData, opts) {
75
+ const override = opts?.forceOverride ?? false;
76
+ setSingleConfig(config, inputData, override);
77
+ for (const subConfig of Object.values(config._meta.subConfigs)) {
78
+ setSingleConfig(subConfig, inputData, override);
53
79
  }
54
80
  }
55
81
  //# sourceMappingURL=basic.js.map
package/dist/basic.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"basic.js","sourceRoot":"","sources":["../src/basic.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAY,SAAQ,KAAK;CAAI;AAU1C,SAAS,WAAW,CAAiC,GAAyB;IAC5E,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE;QACpB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,OAAO,MAAM,CAAC,KAAK,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;YAChH,CAAC;YACD,OAAQ,MAAc,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAiC,MAAoB;IAC7E,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAEzC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,8BAA8B;QAC9B,OAAO,WAAW,CAAC;YACjB,KAAK,EAAE;gBACL,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,IAAI;aACb;YACD,GAAG,WAAW,CAAC,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,sCAAsC;QACtC,mFAAmF;QACnF,OAAO,WAAW,CAAC;YACjB,KAAK,EAAE;gBACL,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,KAAK;gBACf,MAAM,EAAE,IAAI;aACb;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAiC,MAA4B,EAAE,SAA8B;IAC9H,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACxD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClC,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,SAAS,CAAiC,MAA4B,EAAE,SAA8B;IACpH,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,WAAW,CAAC,4CAA4C,CAAC,CAAC;IACtE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"basic.js","sourceRoot":"","sources":["../src/basic.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAY,SAAQ,KAAK;CAAI;AA0B1C,SAAS,WAAW,CAAsD,GAAM;IAC9E,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE;QACpB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;gBACrB,OAAO,MAAM,CAAC,KAAK,CAAC;YACtB,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;YAC7G,CAAC;YACD,OAAQ,MAAc,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;KACF,CAAM,CAAC;AACV,CAAC;AAsBD,MAAM,UAAU,UAAU,CAKxB,IAIO;IAEP,IAAI,QAAgC,CAAC;IACrC,IAAI,OAAgC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnD,QAAQ,GAAG,OAAO,CAAC;QACnB,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC,CAAC,CAAA;IAEF,MAAM,eAAe,GAAG,EAAS,CAAC;IAElC,MAAM,cAAc,GAAG,CAAC,SAAoD,EAAE,EAAE;QAC9E,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;QACvC,MAAM,oBAAoB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACvC,eAAe,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;QACtC,CAAC;aAAM,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YAC9C,MAAM,IAAI,WAAW,CAAC,iBAAiB,MAAM,qCAAqC,CAAC,CAAC;QACtF,CAAC;IACH,CAAC,CAAA;IAED,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACrE,cAAc,CAAC,YAAY,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAiE;QAC1E,GAAG,IAAI,EAAE,mBAAmB;QAC5B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,UAAU,EAAE,eAAsB;QAClC,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,EAAS,EAAG,oBAAoB;QACvC,MAAM;QACN,QAAQ;QACR,OAAO;KACR,CAAC;IAEF,mFAAmF;IACnF,OAAO,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAChC,CAAC;AAYD,SAAS,eAAe,CAAC,MAAiB,EAAE,OAAY,EAAE,aAAsB;IAC9E,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,mCAAmC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QAC5E,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,WAAW,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACzE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC7B,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAK7B,MAA+E,EAC/E,SAA6D,EAC7D,IAAiC;IAEjC,MAAM,QAAQ,GAAG,IAAI,EAAE,aAAa,IAAI,KAAK,CAAC;IAC9C,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAE7C,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/D,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClD,CAAC;AACH,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { makeConfig, forceOverrideConfig, setConfig } from "./basic.js";
2
- export { makeFileConfig, loadFileIntoConfig } from "./filebased.js";
1
+ export { makeConfig, setConfig } from "./basic.js";
2
+ export { loadProfileIntoConfig } from "./profile.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { makeConfig, forceOverrideConfig, setConfig } from "./basic.js";
2
- export { makeFileConfig, loadFileIntoConfig } from "./filebased.js";
1
+ export { makeConfig, setConfig } from "./basic.js";
2
+ export { loadProfileIntoConfig } from "./profile.js";
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ZodObject } from "zod";
2
+ import { Config, ConfigMeta } from "./basic.js";
3
+ export declare function loadProfileIntoConfig<PackageName extends string, ConfigSchema extends ZodObject, SubSchemas extends Record<string, ZodObject>>(config: Config<ConfigMeta<PackageName, ConfigSchema, SubSchemas> & {
4
+ profileDir: string;
5
+ profileSuffix?: string;
6
+ }, ConfigSchema>, envVar: string, profileDir?: string): Promise<void>;
7
+ export declare function loadProfileIntoConfig<PackageName extends string, ConfigSchema extends ZodObject, SubSchemas extends Record<string, ZodObject>>(config: Config<ConfigMeta<PackageName, ConfigSchema, SubSchemas> & {
8
+ profileSuffix?: string;
9
+ }, ConfigSchema>, envVar: string, profileDir: string): Promise<void>;
10
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,EAAE,MAAM,EAAe,UAAU,EAAa,MAAM,YAAY,CAAC;AAGxE,wBAAsB,qBAAqB,CACzC,WAAW,SAAS,MAAM,EAC1B,YAAY,SAAS,SAAS,EAC9B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAE5C,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,YAAY,CAAC,EAChI,MAAM,EAAE,MAAM,EACd,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAAA;AAEhB,wBAAsB,qBAAqB,CACzC,WAAW,SAAS,MAAM,EAC1B,YAAY,SAAS,SAAS,EAC9B,UAAU,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAE5C,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,GAAG;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,YAAY,CAAC,EAC5G,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { ConfigError, setConfig } from "./basic.js";
2
+ import { join } from "path";
3
+ export async function loadProfileIntoConfig(config, envVar, profileDir) {
4
+ const configName = process.env[envVar];
5
+ if (configName === undefined) {
6
+ throw new ConfigError(`Please set the environment variable ${envVar}`);
7
+ }
8
+ const path = join(profileDir ?? config._meta.profileDir, `${configName}.${config._meta.profileSuffix ?? 'js'}`);
9
+ const data = (await import(path)).default;
10
+ setConfig(config, data);
11
+ if (!config._meta.isLoaded) {
12
+ console.warn(`Imported ${path} but config was still not marked as set`);
13
+ }
14
+ }
15
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,WAAW,EAAc,SAAS,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAsB5B,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAKzC,MAAgI,EAChI,MAAc,EACd,UAAmB;IAEnB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,WAAW,CAAC,uCAAuC,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC,CAAC;IAChH,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1C,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAExB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,yCAAyC,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "monorepo-config",
3
- "version": "0.0.2",
3
+ "version": "0.1.0",
4
4
  "description": "Managed and validated configs across packages (no deps, but bring your own zod)",
5
5
  "main": "./dist/index.js",
6
6
  "type": "module",
@@ -36,6 +36,7 @@
36
36
  "zod": "^4.3.5"
37
37
  },
38
38
  "exports": {
39
+ ".": "./dist/index.js",
39
40
  "./*": "./dist/*"
40
41
  },
41
42
  "scripts": {
@@ -1,16 +0,0 @@
1
- import type { ZodObject } from "zod";
2
- import { Config } from "./basic.js";
3
- export type FileConfig<ConfigSchema extends ZodObject> = Config<ConfigSchema> & {
4
- _meta: {
5
- configDir: string;
6
- envVar: string;
7
- };
8
- };
9
- export declare function makeFileConfig<ConfigSchema extends ZodObject>(opts: {
10
- envVar: string;
11
- directory: string;
12
- schema: ConfigSchema;
13
- preventAutoLoad?: boolean;
14
- }): FileConfig<ConfigSchema>;
15
- export declare function loadFileIntoConfig<ConfigSchema extends ZodObject>(config: FileConfig<ConfigSchema>): Promise<void>;
16
- //# sourceMappingURL=filebased.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filebased.d.ts","sourceRoot":"","sources":["../src/filebased.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,EAAE,MAAM,EAA2B,MAAM,YAAY,CAAC;AAG7D,MAAM,MAAM,UAAU,CAAC,YAAY,SAAS,SAAS,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG;IAC9E,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAA;CACF,CAAC;AAEF,wBAAgB,cAAc,CAAC,YAAY,SAAS,SAAS,EAAE,IAAI,EAAE;IACnE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CACnF,GAAG,UAAU,CAAC,YAAY,CAAC,CAkB3B;AAED,wBAAsB,kBAAkB,CAAC,YAAY,SAAS,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,iBAUxG"}
package/dist/filebased.js DELETED
@@ -1,32 +0,0 @@
1
- import { ConfigError, makeConfig } from "./basic.js";
2
- import { join } from "path";
3
- export function makeFileConfig(opts) {
4
- const cfg = makeConfig(opts.schema);
5
- // imperative overrides here to not lose the Proxy
6
- cfg._meta.configDir = opts.directory;
7
- cfg._meta.envVar = opts.envVar;
8
- if (!opts.preventAutoLoad) {
9
- queueMicrotask(async () => {
10
- try {
11
- await loadFileIntoConfig(cfg);
12
- }
13
- catch (e) {
14
- console.error(e);
15
- process.exit(1);
16
- }
17
- });
18
- }
19
- return cfg;
20
- }
21
- export async function loadFileIntoConfig(config) {
22
- const config_name = process.env[config._meta.envVar];
23
- if (config_name === undefined) {
24
- throw new ConfigError(`Please set the environment variable ${config._meta.envVar}`);
25
- }
26
- const path = join(config._meta.configDir, `${config_name}.js`);
27
- await import(path);
28
- if (!config._meta.isUsable) {
29
- console.warn(`Imported ${path} but config was still not marked as usable`);
30
- }
31
- }
32
- //# sourceMappingURL=filebased.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filebased.js","sourceRoot":"","sources":["../src/filebased.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAS5B,MAAM,UAAU,cAAc,CAAiC,IAE9D;IACC,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAA6B,CAAC;IAChE,kDAAkD;IAClD,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACrC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAE/B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAC1B,cAAc,CAAC,KAAK,IAAI,EAAE;YACxB,IAAI,CAAC;gBACH,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAiC,MAAgC;IACvG,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,WAAW,CAAC,uCAAuC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,WAAW,KAAK,CAAC,CAAC;IAC/D,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,4CAA4C,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC"}