zcb 0.0.9 → 0.0.11

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.
Files changed (62) hide show
  1. package/dist/main/cli.mjs.map +1 -1
  2. package/dist/main/index.mjs.map +1 -1
  3. package/dist/tsconfig.build.tsbuildinfo +1 -0
  4. package/dist/types/cli.d.ts +6 -0
  5. package/dist/types/cli.d.ts.map +1 -0
  6. package/dist/types/createConfigBuilder.d.ts +16 -0
  7. package/dist/types/createConfigBuilder.d.ts.map +1 -0
  8. package/dist/types/createConfigParser.d.ts +3 -0
  9. package/dist/types/createConfigParser.d.ts.map +1 -0
  10. package/dist/types/createConfigReader.d.ts +38 -0
  11. package/dist/types/createConfigReader.d.ts.map +1 -0
  12. package/dist/types/data/countryCodes.d.ts +2 -0
  13. package/dist/types/data/countryCodes.d.ts.map +1 -0
  14. package/dist/types/data/countryNames.d.ts +2 -0
  15. package/dist/types/data/countryNames.d.ts.map +1 -0
  16. package/dist/types/data/distanceUnits.d.ts +2 -0
  17. package/dist/types/data/distanceUnits.d.ts.map +1 -0
  18. package/dist/types/data/languageCodes.d.ts +2 -0
  19. package/dist/types/data/languageCodes.d.ts.map +1 -0
  20. package/dist/types/data/timezones.d.ts +2 -0
  21. package/dist/types/data/timezones.d.ts.map +1 -0
  22. package/dist/types/index.d.ts +10 -0
  23. package/dist/types/index.d.ts.map +1 -0
  24. package/dist/types/transformers/cloneNonEnumerableValues.d.ts +3 -0
  25. package/dist/types/transformers/cloneNonEnumerableValues.d.ts.map +1 -0
  26. package/dist/types/transformers/removeDisabledSlices.d.ts +3 -0
  27. package/dist/types/transformers/removeDisabledSlices.d.ts.map +1 -0
  28. package/dist/types/transformers/runExperiments.d.ts +3 -0
  29. package/dist/types/transformers/runExperiments.d.ts.map +1 -0
  30. package/dist/types/transformers/setupExperiments.d.ts +3 -0
  31. package/dist/types/transformers/setupExperiments.d.ts.map +1 -0
  32. package/dist/types/types.d.ts +45 -0
  33. package/dist/types/types.d.ts.map +1 -0
  34. package/dist/types/utils/arrayHasInvalidDefaults.d.ts +3 -0
  35. package/dist/types/utils/arrayHasInvalidDefaults.d.ts.map +1 -0
  36. package/dist/types/utils/importValidateTransformWriteConfig.d.ts +3 -0
  37. package/dist/types/utils/importValidateTransformWriteConfig.d.ts.map +1 -0
  38. package/dist/types/utils/isDerivedValueCallback.d.ts +2 -0
  39. package/dist/types/utils/isDerivedValueCallback.d.ts.map +1 -0
  40. package/dist/types/utils/isInvalidPropertyOverride.d.ts +2 -0
  41. package/dist/types/utils/isInvalidPropertyOverride.d.ts.map +1 -0
  42. package/dist/types/utils/isPropertyReservedWord.d.ts +3 -0
  43. package/dist/types/utils/isPropertyReservedWord.d.ts.map +1 -0
  44. package/dist/types/utils/isSchemaValid.d.ts +3 -0
  45. package/dist/types/utils/isSchemaValid.d.ts.map +1 -0
  46. package/dist/types/utils/isValidPropertyDefinition.d.ts +3 -0
  47. package/dist/types/utils/isValidPropertyDefinition.d.ts.map +1 -0
  48. package/dist/types/utils/isValidValue.d.ts +2 -0
  49. package/dist/types/utils/isValidValue.d.ts.map +1 -0
  50. package/dist/types/utils/objectHasInvalidDefaults.d.ts +3 -0
  51. package/dist/types/utils/objectHasInvalidDefaults.d.ts.map +1 -0
  52. package/dist/types/utils/recordHasInvalidDefaults.d.ts +3 -0
  53. package/dist/types/utils/recordHasInvalidDefaults.d.ts.map +1 -0
  54. package/dist/types/utils/transformConfig.d.ts +4 -0
  55. package/dist/types/utils/transformConfig.d.ts.map +1 -0
  56. package/dist/types/utils/transformWriteConfig.d.ts +3 -0
  57. package/dist/types/utils/transformWriteConfig.d.ts.map +1 -0
  58. package/package.json +2 -2
  59. package/src/createConfigBuilder.test.ts +2 -2
  60. package/src/createConfigBuilder.ts +21 -23
  61. package/src/utils/importValidateTransformWriteConfig.ts +26 -31
  62. package/tsconfig.build.json +2 -1
@@ -0,0 +1,2 @@
1
+ export declare const distanceUnits: readonly ["km", "mi"];
2
+ //# sourceMappingURL=distanceUnits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distanceUnits.d.ts","sourceRoot":"","sources":["../../../src/data/distanceUnits.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,uBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const languageCodes: readonly ["aa", "ab", "ae", "af", "ak", "am", "an", "ar", "as", "av", "ay", "az", "ba", "be", "bg", "bi", "bm", "bn", "bo", "br", "bs", "ca", "ce", "ch", "co", "cr", "cs", "cu", "cv", "cy", "da", "de", "dv", "dz", "ee", "el", "en", "eo", "es", "et", "eu", "fa", "ff", "fi", "fj", "fo", "fr", "fy", "ga", "gd", "gl", "gn", "gu", "gv", "ha", "he", "hi", "ho", "hr", "ht", "hu", "hy", "hz", "ia", "id", "ie", "ig", "ii", "ik", "io", "is", "it", "iu", "ja", "jv", "ka", "kg", "ki", "kj", "kk", "kl", "km", "kn", "ko", "kr", "ks", "ku", "kv", "kw", "ky", "la", "lb", "lg", "li", "ln", "lo", "lt", "lu", "lv", "mg", "mh", "mi", "mk", "ml", "mn", "mr", "ms", "mt", "my", "na", "nb", "nd", "ne", "ng", "nl", "nn", "no", "nr", "nv", "ny", "oc", "oj", "om", "or", "os", "pa", "pi", "pl", "ps", "pt", "qu", "rm", "rn", "ro", "ru", "rw", "sa", "sc", "sd", "se", "sg", "si", "sk", "sl", "sm", "sn", "so", "sq", "sr", "ss", "st", "su", "sv", "sw", "ta", "te", "tg", "th", "ti", "tk", "tl", "tn", "to", "tr", "ts", "tt", "tw", "ty", "ug", "uk", "ur", "uz", "ve", "vi", "vo", "wa", "wo", "xh", "yi", "yo", "za", "zh", "zu"];
2
+ //# sourceMappingURL=languageCodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"languageCodes.d.ts","sourceRoot":"","sources":["../../../src/data/languageCodes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,qlCAwLhB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const timezones: readonly ["Africa/Abidjan", "Africa/Accra", "Africa/Addis_Ababa", "Africa/Algiers", "Africa/Asmara", "Africa/Bamako", "Africa/Bangui", "Africa/Banjul", "Africa/Bissau", "Africa/Blantyre", "Africa/Brazzaville", "Africa/Bujumbura", "Africa/Cairo", "Africa/Casablanca", "Africa/Ceuta", "Africa/Conakry", "Africa/Dakar", "Africa/Dar_es_Salaam", "Africa/Djibouti", "Africa/Douala", "Africa/El_Aaiun", "Africa/Freetown", "Africa/Gaborone", "Africa/Harare", "Africa/Johannesburg", "Africa/Juba", "Africa/Kampala", "Africa/Khartoum", "Africa/Kigali", "Africa/Kinshasa", "Africa/Lagos", "Africa/Libreville", "Africa/Lome", "Africa/Luanda", "Africa/Lubumbashi", "Africa/Lusaka", "Africa/Malabo", "Africa/Maputo", "Africa/Maseru", "Africa/Mbabane", "Africa/Mogadishu", "Africa/Monrovia", "Africa/Nairobi", "Africa/Ndjamena", "Africa/Niamey", "Africa/Nouakchott", "Africa/Ouagadougou", "Africa/Porto-Novo", "Africa/Sao_Tome", "Africa/Tripoli", "Africa/Tunis", "Africa/Windhoek", "America/Adak", "America/Anchorage", "America/Anguilla", "America/Antigua", "America/Araguaina", "America/Argentina/Buenos_Aires", "America/Argentina/Catamarca", "America/Argentina/Cordoba", "America/Argentina/Jujuy", "America/Argentina/La_Rioja", "America/Argentina/Mendoza", "America/Argentina/Rio_Gallegos", "America/Argentina/Salta", "America/Argentina/San_Juan", "America/Argentina/San_Luis", "America/Argentina/Tucuman", "America/Argentina/Ushuaia", "America/Aruba", "America/Asuncion", "America/Atikokan", "America/Bahia", "America/Bahia_Banderas", "America/Barbados", "America/Belem", "America/Belize", "America/Blanc-Sablon", "America/Boa_Vista", "America/Bogota", "America/Boise", "America/Cambridge_Bay", "America/Campo_Grande", "America/Cancun", "America/Caracas", "America/Cayenne", "America/Cayman", "America/Chicago", "America/Chihuahua", "America/Costa_Rica", "America/Creston", "America/Cuiaba", "America/Curacao", "America/Danmarkshavn", "America/Dawson", "America/Dawson_Creek", "America/Denver", "America/Detroit", "America/Dominica", "America/Edmonton", "America/Eirunepe", "America/El_Salvador", "America/Fort_Nelson", "America/Fortaleza", "America/Glace_Bay", "America/Godthab", "America/Goose_Bay", "America/Grand_Turk", "America/Grenada", "America/Guadeloupe", "America/Guatemala", "America/Guayaquil", "America/Guyana", "America/Halifax", "America/Havana", "America/Hermosillo", "America/Indiana/Indianapolis", "America/Indiana/Knox", "America/Indiana/Marengo", "America/Indiana/Petersburg", "America/Indiana/Tell_City", "America/Indiana/Vevay", "America/Indiana/Vincennes", "America/Indiana/Winamac", "America/Inuvik", "America/Iqaluit", "America/Jamaica", "America/Juneau", "America/Kentucky/Louisville", "America/Kentucky/Monticello", "America/Kralendijk", "America/La_Paz", "America/Lima", "America/Los_Angeles", "America/Lower_Princes", "America/Maceio", "America/Managua", "America/Manaus", "America/Marigot", "America/Martinique", "America/Matamoros", "America/Mazatlan", "America/Menominee", "America/Merida", "America/Metlakatla", "America/Mexico_City", "America/Miquelon", "America/Moncton", "America/Monterrey", "America/Montevideo", "America/Montserrat", "America/Nassau", "America/New_York", "America/Nipigon", "America/Nome", "America/Noronha", "America/North_Dakota/Beulah", "America/North_Dakota/Center", "America/North_Dakota/New_Salem", "America/Ojinaga", "America/Panama", "America/Pangnirtung", "America/Paramaribo", "America/Phoenix", "America/Port-au-Prince", "America/Port_of_Spain", "America/Porto_Velho", "America/Puerto_Rico", "America/Rainy_River", "America/Rankin_Inlet", "America/Recife", "America/Regina", "America/Resolute", "America/Rio_Branco", "America/Santa_Isabel", "America/Santarem", "America/Santiago", "America/Santo_Domingo", "America/Sao_Paulo", "America/Scoresbysund", "America/Sitka", "America/St_Barthelemy", "America/St_Johns", "America/St_Kitts", "America/St_Lucia", "America/St_Thomas", "America/St_Vincent", "America/Swift_Current", "America/Tegucigalpa", "America/Thule", "America/Thunder_Bay", "America/Tijuana", "America/Toronto", "America/Tortola", "America/Vancouver", "America/Whitehorse", "America/Winnipeg", "America/Yakutat", "America/Yellowknife", "Antarctica/Casey", "Antarctica/Davis", "Antarctica/DumontDUrville", "Antarctica/Macquarie", "Antarctica/Mawson", "Antarctica/McMurdo", "Antarctica/Palmer", "Antarctica/Rothera", "Antarctica/Syowa", "Antarctica/Troll", "Antarctica/Vostok", "Arctic/Longyearbyen", "Asia/Aden", "Asia/Almaty", "Asia/Amman", "Asia/Anadyr", "Asia/Aqtau", "Asia/Aqtobe", "Asia/Ashgabat", "Asia/Baghdad", "Asia/Bahrain", "Asia/Baku", "Asia/Bangkok", "Asia/Beirut", "Asia/Bishkek", "Asia/Brunei", "Asia/Chita", "Asia/Choibalsan", "Asia/Colombo", "Asia/Damascus", "Asia/Dhaka", "Asia/Dili", "Asia/Dubai", "Asia/Dushanbe", "Asia/Gaza", "Asia/Hebron", "Asia/Ho_Chi_Minh", "Asia/Hong_Kong", "Asia/Hovd", "Asia/Irkutsk", "Asia/Jakarta", "Asia/Jayapura", "Asia/Jerusalem", "Asia/Kabul", "Asia/Kamchatka", "Asia/Karachi", "Asia/Kathmandu", "Asia/Khandyga", "Asia/Kolkata", "Asia/Krasnoyarsk", "Asia/Kuala_Lumpur", "Asia/Kuching", "Asia/Kuwait", "Asia/Macau", "Asia/Magadan", "Asia/Makassar", "Asia/Manila", "Asia/Muscat", "Asia/Nicosia", "Asia/Novokuznetsk", "Asia/Novosibirsk", "Asia/Omsk", "Asia/Oral", "Asia/Phnom_Penh", "Asia/Pontianak", "Asia/Pyongyang", "Asia/Qatar", "Asia/Qyzylorda", "Asia/Rangoon", "Asia/Riyadh", "Asia/Sakhalin", "Asia/Samarkand", "Asia/Seoul", "Asia/Shanghai", "Asia/Singapore", "Asia/Srednekolymsk", "Asia/Taipei", "Asia/Tashkent", "Asia/Tbilisi", "Asia/Tehran", "Asia/Thimphu", "Asia/Tokyo", "Asia/Ulaanbaatar", "Asia/Urumqi", "Asia/Ust-Nera", "Asia/Vientiane", "Asia/Vladivostok", "Asia/Yakutsk", "Asia/Yekaterinburg", "Asia/Yerevan", "Atlantic/Azores", "Atlantic/Bermuda", "Atlantic/Canary", "Atlantic/Cape_Verde", "Atlantic/Faroe", "Atlantic/Madeira", "Atlantic/Reykjavik", "Atlantic/South_Georgia", "Atlantic/St_Helena", "Atlantic/Stanley", "Australia/Adelaide", "Australia/Brisbane", "Australia/Broken_Hill", "Australia/Currie", "Australia/Darwin", "Australia/Eucla", "Australia/Hobart", "Australia/Lindeman", "Australia/Lord_Howe", "Australia/Melbourne", "Australia/Perth", "Australia/Sydney", "Europe/Amsterdam", "Europe/Andorra", "Europe/Athens", "Europe/Belgrade", "Europe/Berlin", "Europe/Bratislava", "Europe/Brussels", "Europe/Bucharest", "Europe/Budapest", "Europe/Busingen", "Europe/Chisinau", "Europe/Copenhagen", "Europe/Dublin", "Europe/Gibraltar", "Europe/Guernsey", "Europe/Helsinki", "Europe/Isle_of_Man", "Europe/Istanbul", "Europe/Jersey", "Europe/Kaliningrad", "Europe/Kiev", "Europe/Lisbon", "Europe/Ljubljana", "Europe/London", "Europe/Luxembourg", "Europe/Madrid", "Europe/Malta", "Europe/Mariehamn", "Europe/Minsk", "Europe/Monaco", "Europe/Moscow", "Europe/Oslo", "Europe/Paris", "Europe/Podgorica", "Europe/Prague", "Europe/Riga", "Europe/Rome", "Europe/Samara", "Europe/San_Marino", "Europe/Sarajevo", "Europe/Simferopol", "Europe/Skopje", "Europe/Sofia", "Europe/Stockholm", "Europe/Tallinn", "Europe/Tirane", "Europe/Uzhgorod", "Europe/Vaduz", "Europe/Vatican", "Europe/Vienna", "Europe/Vilnius", "Europe/Volgograd", "Europe/Warsaw", "Europe/Zagreb", "Europe/Zaporozhye", "Europe/Zurich", "Indian/Antananarivo", "Indian/Chagos", "Indian/Christmas", "Indian/Cocos", "Indian/Comoro", "Indian/Kerguelen", "Indian/Mahe", "Indian/Maldives", "Indian/Mauritius", "Indian/Mayotte", "Indian/Reunion", "Pacific/Apia", "Pacific/Auckland", "Pacific/Bougainville", "Pacific/Chatham", "Pacific/Chuuk", "Pacific/Easter", "Pacific/Efate", "Pacific/Enderbury", "Pacific/Fakaofo", "Pacific/Fiji", "Pacific/Funafuti", "Pacific/Galapagos", "Pacific/Gambier", "Pacific/Guadalcanal", "Pacific/Guam", "Pacific/Honolulu", "Pacific/Johnston", "Pacific/Kiritimati", "Pacific/Kosrae", "Pacific/Kwajalein", "Pacific/Majuro", "Pacific/Marquesas", "Pacific/Midway", "Pacific/Nauru", "Pacific/Niue", "Pacific/Norfolk", "Pacific/Noumea", "Pacific/Pago_Pago", "Pacific/Palau", "Pacific/Pitcairn", "Pacific/Pohnpei", "Pacific/Port_Moresby", "Pacific/Rarotonga", "Pacific/Saipan", "Pacific/Tahiti", "Pacific/Tarawa", "Pacific/Tongatapu", "Pacific/Wake", "Pacific/Wallis"];
2
+ //# sourceMappingURL=timezones.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timezones.d.ts","sourceRoot":"","sources":["../../../src/data/timezones.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,y+PAkaZ,CAAC"}
@@ -0,0 +1,10 @@
1
+ export * from './createConfigBuilder.ts';
2
+ export * from './createConfigParser.ts';
3
+ export * from './createConfigReader.ts';
4
+ export * from './data/countryCodes.ts';
5
+ export * from './data/countryNames.ts';
6
+ export * from './data/distanceUnits.ts';
7
+ export * from './data/languageCodes.ts';
8
+ export * from './data/timezones.ts';
9
+ export * from './types.ts';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type TransformConfigHandlerSync } from '../types.ts';
2
+ export declare const cloneNonEnumerableValues: TransformConfigHandlerSync;
3
+ //# sourceMappingURL=cloneNonEnumerableValues.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloneNonEnumerableValues.d.ts","sourceRoot":"","sources":["../../../src/transformers/cloneNonEnumerableValues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyC,KAAK,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAKrG,eAAO,MAAM,wBAAwB,EAAE,0BAkBtC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type TransformConfigHandlerSync } from '../types.ts';
2
+ export declare const removeDisabledSlices: TransformConfigHandlerSync;
3
+ //# sourceMappingURL=removeDisabledSlices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"removeDisabledSlices.d.ts","sourceRoot":"","sources":["../../../src/transformers/removeDisabledSlices.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,0BAA0B,EAChC,MAAM,aAAa,CAAC;AAGrB,eAAO,MAAM,oBAAoB,EAAE,0BAalC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type RunExperimentsCallback, type TransformConfigHandler } from '../types.ts';
2
+ export declare const runExperiments: (callback: RunExperimentsCallback) => TransformConfigHandler;
3
+ //# sourceMappingURL=runExperiments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runExperiments.d.ts","sourceRoot":"","sources":["../../../src/transformers/runExperiments.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,cAAc,aACd,sBAAsB,KAAG,sBAcnC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type SetupExperimentsCallback, type TransformConfigHandler } from '../types.ts';
2
+ export declare const setupExperiments: (callback: SetupExperimentsCallback) => TransformConfigHandler;
3
+ //# sourceMappingURL=setupExperiments.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupExperiments.d.ts","sourceRoot":"","sources":["../../../src/transformers/setupExperiments.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC5B,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,gBAAgB,aAChB,wBAAwB,KAAG,sBAmBrC,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { List } from 'ts-toolbelt';
2
+ import type { Includes, Join } from 'type-fest';
3
+ export type AnyRecord = Record<string, any>;
4
+ export type Buckets<Config extends AnyRecord> = Record<string, Experiment<Config>>;
5
+ export interface ConfigParserOptions {
6
+ experimentsCallback?: RunExperimentsCallback;
7
+ }
8
+ export interface Experiment<Config extends AnyRecord> {
9
+ action?: TransformConfigHandlerAction;
10
+ value?: Config;
11
+ }
12
+ export declare enum NonEmumeralProperties {
13
+ CALLBACKS = "__callbacks",
14
+ DISABLED = "__disabled",
15
+ EXPERIMENT = "__experiment",
16
+ ZCB = "__zcb"
17
+ }
18
+ export type Path<Config extends object> = Join<Leaves<Config>, '.'>;
19
+ export type RunExperimentsCallback = (id: string) => Promise<string>;
20
+ export type Scope<Config extends object> = Join<Paths<Config>, '.'>;
21
+ export type SetupExperimentsCallback = <Config extends AnyRecord>(id: string, clone: Config, config: Config) => Promise<Buckets<Config>>;
22
+ export type TransformConfigHandler = <Config extends AnyRecord>(clone: Config, config: Config) => TransformConfigHandlerReturnType<Config> | Promise<TransformConfigHandlerReturnType<Config>>;
23
+ export type TransformConfigHandlerSync = <Config extends AnyRecord>(clone: Config, config: Config) => TransformConfigHandlerReturnType<Config>;
24
+ export declare enum TransformConfigHandlerAction {
25
+ DELETE_NODE = "deleteNode",
26
+ SKIP_NODE = "skipNode"
27
+ }
28
+ export interface TransformConfigHandlerReturnType<Config extends AnyRecord> {
29
+ action?: TransformConfigHandlerAction;
30
+ value?: Config;
31
+ }
32
+ export interface WriteConfigOptions {
33
+ experimentsCallback?: SetupExperimentsCallback;
34
+ outputFile: string;
35
+ }
36
+ export type Leaves<T, Path extends string[] = []> = T extends string ? Path : {
37
+ [K in keyof T & string]: Leaves<T[K], [...Path, K]>;
38
+ }[keyof T & string];
39
+ export type Paths<T, Path extends string[] = []> = T extends string ? Path : {
40
+ [K in keyof T & string]: T[K] extends object ? Paths<T[K], [...Path, K]> : Path;
41
+ }[keyof T & string];
42
+ export type LeavesScopeDiffs<T1 extends readonly string[][], T2 extends string[]> = {
43
+ [K1 in keyof T1]: List.Length<List.Intersect<T1[K1], T2, '<-contains'>> extends 1 ? List.Length<T1[K1]> extends 1 ? Includes<T2, T1[K1][0]> extends false ? T1[K1] : never : List.Diff<T1[K1], T2> : never;
44
+ }[number];
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { JSONSchema7 } from 'json-schema';
2
+ export declare const arrayHasInvalidDefaults: (propertyDefinition: JSONSchema7) => boolean | undefined;
3
+ //# sourceMappingURL=arrayHasInvalidDefaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrayHasInvalidDefaults.d.ts","sourceRoot":"","sources":["../../../src/utils/arrayHasInvalidDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,eAAO,MAAM,uBAAuB,uBAAwB,WAAW,wBAGtE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Commands } from '../cli.ts';
2
+ export declare const importValidateTransformWriteConfig: (inputFile: string, outputFile: string, command: Commands, experimentCallbackFile?: string) => void;
3
+ //# sourceMappingURL=importValidateTransformWriteConfig.d.ts.map
@@ -0,0 +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;AAK1C,eAAO,MAAM,kCAAkC,cAClC,MAAM,cACL,MAAM,WACT,QAAQ,2BACQ,MAAM,SA2ChC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const isDerivedValueCallback: <T extends (c: any) => any>(value: any) => value is T;
2
+ //# sourceMappingURL=isDerivedValueCallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isDerivedValueCallback.d.ts","sourceRoot":"","sources":["../../../src/utils/isDerivedValueCallback.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,sBAAsB,iBAAkB,GAAG,KAAK,GAAG,SAAS,GAAG,eAC/C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const isInvalidPropertyOverride: (propertyValue: any, override?: boolean) => boolean;
2
+ //# sourceMappingURL=isInvalidPropertyOverride.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isInvalidPropertyOverride.d.ts","sourceRoot":"","sources":["../../../src/utils/isInvalidPropertyOverride.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,yBAAyB,kBAAmB,GAAG,gCAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const RESERVED_KEYWORDS: Set<string>;
2
+ export declare const isPropertyReservedWord: (propertyName: string) => boolean;
3
+ //# sourceMappingURL=isPropertyReservedWord.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPropertyReservedWord.d.ts","sourceRoot":"","sources":["../../../src/utils/isPropertyReservedWord.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,aAU5B,CAAC;AAEH,eAAO,MAAM,sBAAsB,iBAAkB,MAAM,YAAwC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { JSONSchema7 } from 'json-schema';
2
+ export declare const isSchemaValid: (schema: JSONSchema7) => boolean;
3
+ //# sourceMappingURL=isSchemaValid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isSchemaValid.d.ts","sourceRoot":"","sources":["../../../src/utils/isSchemaValid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,eAAO,MAAM,aAAa,WAAY,WAAW,YAA6B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { JSONSchema7, JSONSchema7Definition } from 'json-schema';
2
+ export declare const isValidPropertyDefinition: (propertyDefinition: JSONSchema7Definition | undefined) => propertyDefinition is JSONSchema7;
3
+ //# sourceMappingURL=isValidPropertyDefinition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidPropertyDefinition.d.ts","sourceRoot":"","sources":["../../../src/utils/isValidPropertyDefinition.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEtE,eAAO,MAAM,yBAAyB,uBAChB,qBAAqB,GAAG,SAAS,sCACuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const isValidValue: (value: unknown, depth?: number) => boolean;
2
+ //# sourceMappingURL=isValidValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isValidValue.d.ts","sourceRoot":"","sources":["../../../src/utils/isValidValue.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,UAAW,OAAO,qBAAc,OAwBxD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { JSONSchema7 } from 'json-schema';
2
+ export declare const objectHasInvalidDefaults: (propertyDefinition: JSONSchema7) => boolean | undefined;
3
+ //# sourceMappingURL=objectHasInvalidDefaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectHasInvalidDefaults.d.ts","sourceRoot":"","sources":["../../../src/utils/objectHasInvalidDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,eAAO,MAAM,wBAAwB,uBAAwB,WAAW,wBAEqC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { JSONSchema7 } from 'json-schema';
2
+ export declare const recordHasInvalidDefaults: (propertyDefinition: JSONSchema7) => boolean | undefined;
3
+ //# sourceMappingURL=recordHasInvalidDefaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordHasInvalidDefaults.d.ts","sourceRoot":"","sources":["../../../src/utils/recordHasInvalidDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,eAAO,MAAM,wBAAwB,uBAAwB,WAAW,wBAGlB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type AnyRecord, type TransformConfigHandler, type TransformConfigHandlerSync } from '../types.ts';
2
+ export declare const transformConfig: <Config extends AnyRecord>(config: Config, handler?: TransformConfigHandler | TransformConfigHandler[]) => Promise<Config>;
3
+ export declare const transformConfigSync: <Config extends AnyRecord>(config: Config, handler?: TransformConfigHandlerSync | TransformConfigHandlerSync[]) => Config;
4
+ //# sourceMappingURL=transformConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformConfig.d.ts","sourceRoot":"","sources":["../../../src/utils/transformConfig.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,sBAAsB,EAE3B,KAAK,0BAA0B,EAChC,MAAM,aAAa,CAAC;AAoBrB,eAAO,MAAM,eAAe,uDAEjB,sBAAsB,GAAG,sBAAsB,EAAE,oBAkC3D,CAAC;AAmBF,eAAO,MAAM,mBAAmB,uDAErB,0BAA0B,GAAG,0BAA0B,EAAE,WAkCnE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { WriteConfigOptions } from '../types.ts';
2
+ export declare const transformWriteConfig: <Config extends object>(config: Config, { experimentsCallback, outputFile }: WriteConfigOptions) => Promise<void>;
3
+ //# sourceMappingURL=transformWriteConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformWriteConfig.d.ts","sourceRoot":"","sources":["../../../src/utils/transformWriteConfig.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAA0B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAG9E,eAAO,MAAM,oBAAoB,+EAEM,kBAAkB,kBAoBxD,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.9",
4
+ "version": "0.0.11",
5
5
  "author": "Dylan Aubrey",
6
6
  "license": "MIT",
7
7
  "homepage": "https://github.com/badbatch/zod-config-builder",
@@ -120,7 +120,7 @@
120
120
  "commit": "commit",
121
121
  "compile": "pnpm run /^compile:.*/",
122
122
  "compile:main": "rollup -c ./rollup.config.cjs",
123
- "compile:types": "tsc --project ./tsconfig.json",
123
+ "compile:types": "tsc --project ./tsconfig.build.json",
124
124
  "cut:changelog": "changelog",
125
125
  "cut:post-version": "pnpm run build",
126
126
  "lint": "eslint . --ext .ts,.cjs",
@@ -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}`);
@@ -8,6 +8,7 @@
8
8
  "src/**/*"
9
9
  ],
10
10
  "exclude": [
11
- "**/*.test.*"
11
+ "**/*.test.*",
12
+ "**/__testUtils__/**"
12
13
  ]
13
14
  }