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.
@@ -1,23 +1,16 @@
1
1
  import { type ZodError, type z } from 'zod';
2
- 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]; }>) => (Required<{ [Key_3 in keyof ZodTypes]: ZodTypes[Key_3]; }> extends infer T ? { [Key_2 in keyof T]: (value: { [Key_3 in keyof ZodTypes]: ZodTypes[Key_3]; }[Key_2] | ((c: { [Key_3 in keyof ZodTypes]: ZodTypes[Key_3]; }) => { [Key_3 in keyof ZodTypes]: ZodTypes[Key_3]; }[Key_2]), override?: boolean) => any & {
3
- disable: () => any & any;
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) => any & any;
6
- extend: (configBuilder: any & any) => any & any;
7
- flush: () => { [Key_3 in keyof ZodTypes]: ZodTypes[Key_3]; };
8
- fork: () => any & any;
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: () => { [Key_3 in keyof ZodTypes]: ZodTypes[Key_3]; };
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,eAAO,MAAM,mBAAmB,wBACnB,EAAE,SAAS,ufAuBP,OAAO;;YAIZ,MAAM,QAAQ,CAAC,QAAQ,CAAC;sBACd,MAAM;;;;YAIhB,MAAM,MAAM;cACV,MAAM,OAAO;;;;YANf,MAAM,QAAQ,CAAC,QAAQ,CAAC;sBACd,MAAM;;;;YAIhB,MAAM,MAAM;cACV,MAAM,OAAO;;CA4K1B,CAAC"}
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;AAI1C,eAAO,MAAM,kCAAkC,cAClC,MAAM,cACL,MAAM,WACT,QAAQ,2BACQ,MAAM,SAiDhC,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.10",
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
- default: configBuilder,
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
- if (experimentCallbackFile) {
31
- import(resolve(process.cwd(), experimentCallbackFile))
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
- if (error.stack) {
40
- shelljs.echo(`zcd ${command} => error stack:\n${error.stack}\n`);
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
- return;
46
- }
35
+ if (error.stack) {
36
+ shelljs.echo(`zcd ${command} => error stack:\n${error.stack}\n`);
37
+ }
38
+ }
39
+ });
47
40
 
48
- void transformWriteConfig(configBuilder.values(), { outputFile });
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}`);