monorepo-config 0.1.3 → 0.2.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/README.md +8 -1
- package/dist/basic.d.ts +8 -3
- package/dist/basic.d.ts.map +1 -1
- package/dist/basic.js +21 -6
- package/dist/basic.js.map +1 -1
- package/dist/profile.js +1 -1
- package/dist/profile.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -56,7 +56,7 @@ You can then load the chosen configuration based on a single environment variabl
|
|
|
56
56
|
import { loadConfigProfile } from "monorepo-config";
|
|
57
57
|
import { configDef } from "./config-def.ts";
|
|
58
58
|
|
|
59
|
-
export const FOOBAR_CONFIG = await loadConfigProfile(configDef, 'FOOBAR_CONFIG');
|
|
59
|
+
export const FOOBAR_CONFIG = await loadConfigProfile(configDef, 'FOOBAR_CONFIG', (profile) => import(`config_package/${profile}.js`));
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
Profiles are just typescript files like this:
|
|
@@ -80,6 +80,13 @@ You can choose, like the example, to use the same name the configuration object
|
|
|
80
80
|
You can mix both in your monorepo! Packages representing reusable libraries probably want to stick with the basic usage and let other packages define their config. Packages that represent apps probably want to define their own config using profiles.
|
|
81
81
|
|
|
82
82
|
|
|
83
|
+
## Common errors
|
|
84
|
+
|
|
85
|
+
### Package name '...' is used for two different config definitions
|
|
86
|
+
|
|
87
|
+
Your package manager may have included two different copies of the same code. Run `pnpm dedupe`, or manually inspect your lockfile to verify this. If not, add `console.trace()` calls to the `defineConfig` function to figure out exactly where the configs are defined.
|
|
88
|
+
|
|
89
|
+
|
|
83
90
|
## TODO
|
|
84
91
|
|
|
85
92
|
- [ ] Vite plugin
|
package/dist/basic.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { ZodError, ZodObject, input, output } from "zod";
|
|
2
2
|
export declare class ConfigError extends Error {
|
|
3
3
|
}
|
|
4
|
+
export declare class ZodConfigError extends ConfigError {
|
|
5
|
+
packageName: string;
|
|
6
|
+
zodError: ZodError;
|
|
7
|
+
constructor(packageName: string, zodError: ZodError);
|
|
8
|
+
}
|
|
4
9
|
export type ConfigDefinition<PackageName extends string, ConfigSchema extends ZodObject, SubSchemas extends Record<string, ZodObject>> = {
|
|
5
10
|
package: PackageName;
|
|
6
11
|
schema: ConfigSchema;
|
|
@@ -14,7 +19,7 @@ export type ConfigDefinition<PackageName extends string, ConfigSchema extends Zo
|
|
|
14
19
|
_resolve: (value: void) => void;
|
|
15
20
|
_reject: (error: Error) => void;
|
|
16
21
|
};
|
|
17
|
-
export type AnyConfigDefinition = ConfigDefinition<string,
|
|
22
|
+
export type AnyConfigDefinition = ConfigDefinition<string, ZodObject, any>;
|
|
18
23
|
type UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
19
24
|
type ToSubDefinitionObject<SubDefinitionArray extends AnyConfigDefinition[]> = ({
|
|
20
25
|
[SubDefinition in SubDefinitionArray[number] as SubDefinition['package']]: (SubDefinition extends {
|
|
@@ -37,7 +42,7 @@ export type MergeConfigTypes<ConfigDefs extends AnyConfigDefinition[]> = {
|
|
|
37
42
|
};
|
|
38
43
|
export declare function setConfig<PackageName extends string, ConfigSchema extends ZodObject, SubSchemas extends Record<string, ZodObject>>(definition: ConfigDefinition<PackageName, ConfigSchema, SubSchemas>, inputData: ConfigInput<PackageName, ConfigSchema, SubSchemas>, opts?: {
|
|
39
44
|
forceOverride: boolean;
|
|
40
|
-
}):
|
|
45
|
+
}): void;
|
|
41
46
|
export declare function getConfig<PackageName extends string, ConfigSchema extends ZodObject, SubSchemas extends Record<string, ZodObject>>(definition: ConfigDefinition<PackageName, ConfigSchema, SubSchemas>): Promise<output<ConfigSchema>>;
|
|
42
47
|
export {};
|
|
43
48
|
//# sourceMappingURL=basic.d.ts.map
|
package/dist/basic.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../src/basic.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../src/basic.ts"],"names":[],"mappings":"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"}
|
package/dist/basic.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
export class ConfigError extends Error {
|
|
2
2
|
}
|
|
3
|
+
export class ZodConfigError extends ConfigError {
|
|
4
|
+
packageName;
|
|
5
|
+
zodError;
|
|
6
|
+
constructor(packageName, zodError) {
|
|
7
|
+
super();
|
|
8
|
+
this.packageName = packageName;
|
|
9
|
+
this.zodError = zodError;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
3
12
|
function wrapInProxy(data, definition) {
|
|
4
13
|
return new Proxy(data, {
|
|
5
14
|
get(target, prop, receiver) {
|
|
@@ -68,14 +77,20 @@ function setSingleConfig(definition, allData, allowOverride) {
|
|
|
68
77
|
}
|
|
69
78
|
}
|
|
70
79
|
definition.input = allData[definition.package];
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
if (
|
|
74
|
-
definition.
|
|
75
|
-
definition.
|
|
80
|
+
// Note that definition._reject would go nowhere
|
|
81
|
+
let subData = definition.schema.safeParse(allData[definition.package]);
|
|
82
|
+
if (subData.success) {
|
|
83
|
+
Object.assign(definition.output, subData.data);
|
|
84
|
+
if (!definition.isLoaded) {
|
|
85
|
+
definition.isLoaded = true;
|
|
86
|
+
definition._resolve();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
throw new ZodConfigError(definition.package, subData.error);
|
|
76
91
|
}
|
|
77
92
|
}
|
|
78
|
-
export
|
|
93
|
+
export function setConfig(definition, inputData, opts) {
|
|
79
94
|
const override = opts?.forceOverride ?? false;
|
|
80
95
|
setSingleConfig(definition, inputData, override);
|
|
81
96
|
for (const subDefinition of Object.values(definition.dependencies)) {
|
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;
|
|
1
|
+
{"version":3,"file":"basic.js","sourceRoot":"","sources":["../src/basic.ts"],"names":[],"mappings":"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"}
|
package/dist/profile.js
CHANGED
|
@@ -13,7 +13,7 @@ export async function loadConfigProfile(config, envVar, profileDir) {
|
|
|
13
13
|
const data = (await import(path)).default;
|
|
14
14
|
setConfig(config, data);
|
|
15
15
|
if (!config.isLoaded) {
|
|
16
|
-
console.warn(`Imported ${path} but config was still not marked as set`);
|
|
16
|
+
console.warn(`WARNING: Imported ${path} into ${config.package} but config was still not marked as set`);
|
|
17
17
|
}
|
|
18
18
|
return config.output;
|
|
19
19
|
}
|
package/dist/profile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAoB,SAAS,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAsB5B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAKrC,MAAiH,EACjH,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,UAAU,GAAG,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;IAC7C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,WAAW,CAAC,gFAAgF,CAAC,CAAC;IAC1G,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,IAAI,MAAM,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC,CAAC;IAC/E,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,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAoB,SAAS,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAsB5B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAKrC,MAAiH,EACjH,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,UAAU,GAAG,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC;IAC7C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,WAAW,CAAC,gFAAgF,CAAC,CAAC;IAC1G,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,IAAI,MAAM,CAAC,aAAa,IAAI,IAAI,EAAE,CAAC,CAAC;IAC/E,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,QAAQ,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,qBAAqB,IAAI,SAAS,MAAM,CAAC,OAAO,yCAAyC,CAAC,CAAC;IAC1G,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC"}
|