zcb 0.0.10 → 0.0.13
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 +3 -1
- package/bin/zcb.mjs +1 -1
- package/dist/main/cli.mjs.map +1 -1
- package/dist/main/index.mjs.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/createConfigBuilder.d.ts +10 -17
- package/dist/types/createConfigBuilder.d.ts.map +1 -1
- package/dist/types/utils/importValidateTransformWriteConfig.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/createConfigBuilder.test.ts +2 -2
- package/src/createConfigBuilder.ts +21 -23
- package/src/utils/importValidateTransformWriteConfig.ts +26 -31
|
@@ -1,23 +1,16 @@
|
|
|
1
1
|
import { type ZodError, type z } from 'zod';
|
|
2
|
-
export
|
|
3
|
-
|
|
2
|
+
export type ConfigBuilder<ZodTypes> = {
|
|
3
|
+
[Key in keyof Required<ZodTypes>]: (value: ZodTypes[Key] | ((c: ZodTypes) => ZodTypes[Key]), override?: boolean) => ConfigBuilder<ZodTypes>;
|
|
4
|
+
} & {
|
|
5
|
+
disable: () => ConfigBuilder<ZodTypes>;
|
|
4
6
|
errors: () => ZodError['errors'];
|
|
5
|
-
experiment: (key: string) =>
|
|
6
|
-
extend: (configBuilder:
|
|
7
|
-
flush: () =>
|
|
8
|
-
fork: () =>
|
|
7
|
+
experiment: (key: string) => ConfigBuilder<ZodTypes>;
|
|
8
|
+
extend: (configBuilder: ConfigBuilder<ZodTypes>) => ConfigBuilder<ZodTypes>;
|
|
9
|
+
flush: () => ZodTypes;
|
|
10
|
+
fork: () => ConfigBuilder<ZodTypes>;
|
|
9
11
|
toJson: () => string;
|
|
10
12
|
validate: () => boolean;
|
|
11
|
-
values: () =>
|
|
12
|
-
}; } : never) & {
|
|
13
|
-
disable: () => any & any;
|
|
14
|
-
errors: () => ZodError['errors'];
|
|
15
|
-
experiment: (key: string) => any & any;
|
|
16
|
-
extend: (configBuilder: any & any) => any & any;
|
|
17
|
-
flush: () => { [Key_3 in keyof ZodTypes]: ZodTypes[Key_3]; };
|
|
18
|
-
fork: () => any & any;
|
|
19
|
-
toJson: () => string;
|
|
20
|
-
validate: () => boolean;
|
|
21
|
-
values: () => { [Key_3 in keyof ZodTypes]: ZodTypes[Key_3]; };
|
|
13
|
+
values: () => ZodTypes;
|
|
22
14
|
};
|
|
15
|
+
export declare const createConfigBuilder: <ZodTypes>(zodSchema: z.ZodSchema, derivedValueCallbacks?: Partial<Record<keyof ZodTypes, (c: { [Key in keyof ZodTypes]: ZodTypes[Key]; }) => ZodTypes[keyof ZodTypes]>>, initialValues?: Partial<{ [Key_1 in keyof ZodTypes]: ZodTypes[Key_1]; }>) => ConfigBuilder<ZodTypes>;
|
|
23
16
|
//# sourceMappingURL=createConfigBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createConfigBuilder.d.ts","sourceRoot":"","sources":["../../src/createConfigBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC;AAe5C,
|
|
1
|
+
{"version":3,"file":"createConfigBuilder.d.ts","sourceRoot":"","sources":["../../src/createConfigBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC;AAe5C,MAAM,MAAM,aAAa,CAAC,QAAQ,IAAI;KACnC,GAAG,IAAI,MAAM,QAAQ,CAAC,QAAQ,CAAC,GAAG,CACjC,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,EACvD,QAAQ,CAAC,EAAE,OAAO,KACf,aAAa,CAAC,QAAQ,CAAC;CAC7B,GAAG;IACF,OAAO,EAAE,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,EAAE,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACjC,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5E,KAAK,EAAE,MAAM,QAAQ,CAAC;IACtB,IAAI,EAAE,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,EAAE,MAAM,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,MAAM,EAAE,MAAM,QAAQ,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,mBAAmB,wBACnB,EAAE,SAAS,6OA0LvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"importValidateTransformWriteConfig.d.ts","sourceRoot":"","sources":["../../../src/utils/importValidateTransformWriteConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"importValidateTransformWriteConfig.d.ts","sourceRoot":"","sources":["../../../src/utils/importValidateTransformWriteConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAK1C,eAAO,MAAM,kCAAkC,cAClC,MAAM,cACL,MAAM,WACT,QAAQ,2BACQ,MAAM,SA2ChC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zcb",
|
|
3
3
|
"description": "Build configs with type safety from zod schema.",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.13",
|
|
5
5
|
"author": "Dylan Aubrey",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://github.com/badbatch/zod-config-builder",
|
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
"handlebars": "^4.7.7",
|
|
22
22
|
"json-schema": "^0.4.0",
|
|
23
23
|
"shelljs": "^0.8.4",
|
|
24
|
-
"ts-node": "^10.9.1",
|
|
25
24
|
"yargs": "^15.1.0",
|
|
26
25
|
"zod": "^3.21.4",
|
|
27
26
|
"zod-to-json-schema": "^3.21.0"
|
|
@@ -29,7 +28,8 @@
|
|
|
29
28
|
"peerDependencies": {
|
|
30
29
|
"@babel/runtime": "<8",
|
|
31
30
|
"core-js": "<4",
|
|
32
|
-
"lodash": "<5"
|
|
31
|
+
"lodash": "<5",
|
|
32
|
+
"ts-node": "<11"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@babel/cli": "^7.21.5",
|
|
@@ -104,6 +104,7 @@
|
|
|
104
104
|
"rollup-plugin-sourcemaps": "^0.6.3",
|
|
105
105
|
"suppress-experimental-warnings": "^1.1.17",
|
|
106
106
|
"syncpack": "^9.8.6",
|
|
107
|
+
"ts-node": "^10.9.1",
|
|
107
108
|
"ts-toolbelt": "^9.6.0",
|
|
108
109
|
"type-fest": "^3.10.0",
|
|
109
110
|
"typescript": "^5.0.3"
|
|
@@ -483,7 +483,7 @@ describe('createConfigBuilder', () => {
|
|
|
483
483
|
.languageCodes(['en'])
|
|
484
484
|
.locales(({ countryCode, languageCodes }) =>
|
|
485
485
|
// eslint-disable-next-line jest/no-conditional-in-test
|
|
486
|
-
languageCodes?.length && countryCode ? languageCodes.map(code => `${code}_${countryCode}`) : []
|
|
486
|
+
languageCodes?.length && countryCode ? languageCodes.map(code => `${code}_${countryCode}` as const) : []
|
|
487
487
|
);
|
|
488
488
|
|
|
489
489
|
expect(config.values()).toEqual({ countryCode: 'GB', languageCodes: ['en'], locales: ['en_GB'] });
|
|
@@ -498,7 +498,7 @@ describe('createConfigBuilder', () => {
|
|
|
498
498
|
.languageCodes(['en'])
|
|
499
499
|
.locales(({ countryCode, languageCodes }) =>
|
|
500
500
|
// eslint-disable-next-line jest/no-conditional-in-test
|
|
501
|
-
languageCodes?.length && countryCode ? languageCodes.map(code => `${code}_${countryCode}`) : []
|
|
501
|
+
languageCodes?.length && countryCode ? languageCodes.map(code => `${code}_${countryCode}` as const) : []
|
|
502
502
|
)
|
|
503
503
|
.languageCodes(['fr'], true);
|
|
504
504
|
|
|
@@ -14,6 +14,23 @@ import { objectHasInvalidDefaults } from './utils/objectHasInvalidDefaults.ts';
|
|
|
14
14
|
import { recordHasInvalidDefaults } from './utils/recordHasInvalidDefaults.ts';
|
|
15
15
|
import { transformConfigSync } from './utils/transformConfig.ts';
|
|
16
16
|
|
|
17
|
+
export type ConfigBuilder<ZodTypes> = {
|
|
18
|
+
[Key in keyof Required<ZodTypes>]: (
|
|
19
|
+
value: ZodTypes[Key] | ((c: ZodTypes) => ZodTypes[Key]),
|
|
20
|
+
override?: boolean
|
|
21
|
+
) => ConfigBuilder<ZodTypes>;
|
|
22
|
+
} & {
|
|
23
|
+
disable: () => ConfigBuilder<ZodTypes>;
|
|
24
|
+
errors: () => ZodError['errors'];
|
|
25
|
+
experiment: (key: string) => ConfigBuilder<ZodTypes>;
|
|
26
|
+
extend: (configBuilder: ConfigBuilder<ZodTypes>) => ConfigBuilder<ZodTypes>;
|
|
27
|
+
flush: () => ZodTypes;
|
|
28
|
+
fork: () => ConfigBuilder<ZodTypes>;
|
|
29
|
+
toJson: () => string;
|
|
30
|
+
validate: () => boolean;
|
|
31
|
+
values: () => ZodTypes;
|
|
32
|
+
};
|
|
33
|
+
|
|
17
34
|
export const createConfigBuilder = <ZodTypes>(
|
|
18
35
|
zodSchema: z.ZodSchema,
|
|
19
36
|
derivedValueCallbacks: Partial<
|
|
@@ -27,31 +44,12 @@ export const createConfigBuilder = <ZodTypes>(
|
|
|
27
44
|
initialValues: Partial<{
|
|
28
45
|
[Key in keyof ZodTypes]: ZodTypes[Key];
|
|
29
46
|
}> = {}
|
|
30
|
-
) => {
|
|
47
|
+
): ConfigBuilder<ZodTypes> => {
|
|
31
48
|
type Config = {
|
|
32
49
|
[Key in keyof ZodTypes]: ZodTypes[Key];
|
|
33
50
|
};
|
|
34
51
|
|
|
35
|
-
type RequiredConfig = Required<Config>;
|
|
36
52
|
type DerivedValueCallback<K extends keyof Config = keyof Config> = (c: Config) => Config[K];
|
|
37
|
-
|
|
38
|
-
type ConfigBuilder = {
|
|
39
|
-
[Key in keyof RequiredConfig]: (
|
|
40
|
-
value: Config[Key] | DerivedValueCallback<Key>,
|
|
41
|
-
override?: boolean
|
|
42
|
-
) => ConfigBuilder;
|
|
43
|
-
} & {
|
|
44
|
-
disable: () => ConfigBuilder;
|
|
45
|
-
errors: () => ZodError['errors'];
|
|
46
|
-
experiment: (key: string) => ConfigBuilder;
|
|
47
|
-
extend: (configBuilder: ConfigBuilder) => ConfigBuilder;
|
|
48
|
-
flush: () => Config;
|
|
49
|
-
fork: () => ConfigBuilder;
|
|
50
|
-
toJson: () => string;
|
|
51
|
-
validate: () => boolean;
|
|
52
|
-
values: () => Config;
|
|
53
|
-
};
|
|
54
|
-
|
|
55
53
|
let config = initialValues as Config;
|
|
56
54
|
|
|
57
55
|
Object.defineProperty(config, NonEmumeralProperties.ZCB, {
|
|
@@ -89,7 +87,7 @@ export const createConfigBuilder = <ZodTypes>(
|
|
|
89
87
|
|
|
90
88
|
return configBuilder;
|
|
91
89
|
},
|
|
92
|
-
extend: (configBuilder: ConfigBuilder) => {
|
|
90
|
+
extend: (configBuilder: ConfigBuilder<Config>) => {
|
|
93
91
|
config = transformConfigSync<Config>(configBuilder.values(), [cloneNonEnumerableValues]);
|
|
94
92
|
// @ts-expect-error private property
|
|
95
93
|
callbacks = { ...configBuilder.__callbacks } as Partial<Record<keyof Config, DerivedValueCallback>>;
|
|
@@ -128,7 +126,7 @@ export const createConfigBuilder = <ZodTypes>(
|
|
|
128
126
|
|
|
129
127
|
return config;
|
|
130
128
|
},
|
|
131
|
-
} as unknown as ConfigBuilder
|
|
129
|
+
} as unknown as ConfigBuilder<ZodTypes>;
|
|
132
130
|
|
|
133
131
|
Object.defineProperty(configBuilder, NonEmumeralProperties.CALLBACKS, {
|
|
134
132
|
configurable: false,
|
|
@@ -216,7 +214,7 @@ export const createConfigBuilder = <ZodTypes>(
|
|
|
216
214
|
|
|
217
215
|
config[castProperty] = propertyValue;
|
|
218
216
|
return configBuilder;
|
|
219
|
-
}) as ConfigBuilder[keyof Config];
|
|
217
|
+
}) as ConfigBuilder<Config>[keyof Config];
|
|
220
218
|
}
|
|
221
219
|
|
|
222
220
|
return configBuilder;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
2
|
import shelljs from 'shelljs';
|
|
3
3
|
import type { Commands } from '../cli.ts';
|
|
4
|
+
import type { ConfigBuilder } from '../createConfigBuilder.ts';
|
|
4
5
|
import type { SetupExperimentsCallback } from '../types.ts';
|
|
5
6
|
import { transformWriteConfig } from './transformWriteConfig.ts';
|
|
6
7
|
|
|
@@ -11,43 +12,37 @@ export const importValidateTransformWriteConfig = (
|
|
|
11
12
|
experimentCallbackFile?: string
|
|
12
13
|
) => {
|
|
13
14
|
import(resolve(process.cwd(), inputFile))
|
|
14
|
-
.then(
|
|
15
|
-
({
|
|
16
|
-
|
|
17
|
-
}: {
|
|
18
|
-
default: ReturnType<typeof import('../createConfigBuilder.ts')['createConfigBuilder']>;
|
|
19
|
-
}) => {
|
|
20
|
-
if (!configBuilder.validate()) {
|
|
21
|
-
shelljs.echo(`zcd ${command} => invalid config`);
|
|
22
|
-
shelljs.echo(`zcd ${command} => config values:\n${configBuilder.toJson()}\n`);
|
|
23
|
-
shelljs.echo(`zcd ${command} => errors:\n${JSON.stringify(configBuilder.errors(), undefined, 2)}\n`);
|
|
24
|
-
shelljs.exit(1);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
shelljs.echo('zcd ${command} => valid config');
|
|
15
|
+
.then(({ default: configBuilder }: { default: ConfigBuilder<object> }) => {
|
|
16
|
+
if (!configBuilder.validate()) {
|
|
17
|
+
shelljs.echo(`zcd ${command} => invalid config`);
|
|
28
18
|
shelljs.echo(`zcd ${command} => config values:\n${configBuilder.toJson()}\n`);
|
|
19
|
+
shelljs.echo(`zcd ${command} => errors:\n${JSON.stringify(configBuilder.errors(), undefined, 2)}\n`);
|
|
20
|
+
shelljs.exit(1);
|
|
21
|
+
}
|
|
29
22
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
.then(({ default: experimentsCallback }: { default: SetupExperimentsCallback }) => {
|
|
33
|
-
void transformWriteConfig(configBuilder.values(), { experimentsCallback, outputFile });
|
|
34
|
-
})
|
|
35
|
-
.catch((error: unknown) => {
|
|
36
|
-
if (error instanceof Error) {
|
|
37
|
-
shelljs.echo(`zcd ${command} => error message: ${error.message}`);
|
|
23
|
+
shelljs.echo('zcd ${command} => valid config');
|
|
24
|
+
shelljs.echo(`zcd ${command} => config values:\n${configBuilder.toJson()}\n`);
|
|
38
25
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
26
|
+
if (experimentCallbackFile) {
|
|
27
|
+
import(resolve(process.cwd(), experimentCallbackFile))
|
|
28
|
+
.then(({ default: experimentsCallback }: { default: SetupExperimentsCallback }) => {
|
|
29
|
+
void transformWriteConfig(configBuilder.values(), { experimentsCallback, outputFile });
|
|
30
|
+
})
|
|
31
|
+
.catch((error: unknown) => {
|
|
32
|
+
if (error instanceof Error) {
|
|
33
|
+
shelljs.echo(`zcd ${command} => error message: ${error.message}`);
|
|
44
34
|
|
|
45
|
-
|
|
46
|
-
|
|
35
|
+
if (error.stack) {
|
|
36
|
+
shelljs.echo(`zcd ${command} => error stack:\n${error.stack}\n`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
47
40
|
|
|
48
|
-
|
|
41
|
+
return;
|
|
49
42
|
}
|
|
50
|
-
|
|
43
|
+
|
|
44
|
+
void transformWriteConfig(configBuilder.values(), { outputFile });
|
|
45
|
+
})
|
|
51
46
|
.catch((error: unknown) => {
|
|
52
47
|
if (error instanceof Error) {
|
|
53
48
|
shelljs.echo(`zcd ${command} => error message: ${error.message}`);
|