@rosen-bridge/config 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.
Files changed (50) hide show
  1. package/.eslintignore +1 -0
  2. package/CHANGELOG.md +8 -0
  3. package/README.md +24 -0
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +102 -0
  7. package/dist/config.d.ts +131 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +578 -0
  10. package/dist/index.d.ts +2 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +2 -0
  13. package/dist/schema/Validators/fieldProperties.d.ts +29 -0
  14. package/dist/schema/Validators/fieldProperties.d.ts.map +1 -0
  15. package/dist/schema/Validators/fieldProperties.js +254 -0
  16. package/dist/schema/types/fields.d.ts +37 -0
  17. package/dist/schema/types/fields.d.ts.map +1 -0
  18. package/dist/schema/types/fields.js +2 -0
  19. package/dist/schema/types/validations.d.ts +46 -0
  20. package/dist/schema/types/validations.d.ts.map +1 -0
  21. package/dist/schema/types/validations.js +2 -0
  22. package/dist/tsconfig.tsbuildinfo +1 -0
  23. package/dist/utils.d.ts +36 -0
  24. package/dist/utils.d.ts.map +1 -0
  25. package/dist/utils.js +59 -0
  26. package/dist/value/validators.d.ts +3 -0
  27. package/dist/value/validators.d.ts.map +1 -0
  28. package/dist/value/validators.js +188 -0
  29. package/lib/cli.ts +113 -0
  30. package/lib/config.ts +664 -0
  31. package/lib/index.ts +1 -0
  32. package/lib/schema/Validators/fieldProperties.ts +273 -0
  33. package/lib/schema/types/fields.ts +46 -0
  34. package/lib/schema/types/validations.ts +63 -0
  35. package/lib/utils.ts +68 -0
  36. package/lib/value/validators.ts +268 -0
  37. package/package.json +48 -0
  38. package/tests/.gitkeep +0 -0
  39. package/tests/config.spec.ts +895 -0
  40. package/tests/configEnvSetup.ts +34 -0
  41. package/tests/configTestData.ts +977 -0
  42. package/tests/configTestFiles/custom-environment-variables.json +5 -0
  43. package/tests/configTestFiles/default.json +12 -0
  44. package/tests/configTestFiles/local.json +5 -0
  45. package/tests/utils.spec.ts +117 -0
  46. package/tests/utilsTestData.ts +26 -0
  47. package/tsconfig.build.json +7 -0
  48. package/tsconfig.build.tsbuildinfo +1 -0
  49. package/tsconfig.json +7 -0
  50. package/vitest.config.ts +11 -0
@@ -0,0 +1,188 @@
1
+ export const valueValidators = {
2
+ object: (value, field) => {
3
+ if (typeof value !== 'object') {
4
+ throw new Error(`value must be of object type`);
5
+ }
6
+ const schemaKeys = new Set(Object.keys(field.children));
7
+ for (const key of Object.keys(value)) {
8
+ if (!schemaKeys.has(key)) {
9
+ throw new Error(`"${key}" key is not found in the schema`);
10
+ }
11
+ }
12
+ },
13
+ string: (value, field) => {
14
+ if (typeof value !== 'string') {
15
+ throw new Error(`value must be of string type`);
16
+ }
17
+ },
18
+ boolean: (value, field) => {
19
+ if (typeof value !== 'boolean') {
20
+ throw new Error(`value must be of boolean type`);
21
+ }
22
+ },
23
+ number: (value, field) => {
24
+ if (typeof value !== 'number') {
25
+ throw new Error(`value must be of number type`);
26
+ }
27
+ },
28
+ bigint: (value, field) => {
29
+ if (typeof value !== 'bigint') {
30
+ throw new Error(`value must be of bigint type`);
31
+ }
32
+ },
33
+ };
34
+ const required = (value, validation, config, configValidator) => {
35
+ if (validation.when && !configValidator.isWhenTrue(validation.when, config)) {
36
+ return;
37
+ }
38
+ if (validation.required && value == undefined) {
39
+ throw new Error('value is required but not found in config');
40
+ }
41
+ };
42
+ export const valueValidations = {
43
+ boolean: { required },
44
+ string: {
45
+ required,
46
+ regex: (value, validation, config, configValidator) => {
47
+ if (
48
+ value == undefined ||
49
+ (validation.when &&
50
+ !configValidator.isWhenTrue(validation.when, config))
51
+ ) {
52
+ return;
53
+ }
54
+ const re = new RegExp(validation.regex);
55
+ const match = value.match(re);
56
+ if (match == null || match[0] !== value) {
57
+ throw new Error(`value should match the regex="${validation.regex}"`);
58
+ }
59
+ },
60
+ choices: (value, validation, config, configValidator) => {
61
+ if (
62
+ value == undefined ||
63
+ (validation.when &&
64
+ !configValidator.isWhenTrue(validation.when, config))
65
+ ) {
66
+ return;
67
+ }
68
+ if (!validation.choices.includes(value)) {
69
+ throw new Error(
70
+ `value should be one of the choices=[${validation.choices.join(
71
+ ', '
72
+ )}]`
73
+ );
74
+ }
75
+ },
76
+ },
77
+ number: {
78
+ required,
79
+ gt: (value, validation, config, configValidator) => {
80
+ if (
81
+ value == undefined ||
82
+ (validation.when &&
83
+ !configValidator.isWhenTrue(validation.when, config))
84
+ ) {
85
+ return;
86
+ }
87
+ if (value <= validation.gt) {
88
+ throw new Error(`value should be greater than ${validation.gt}`);
89
+ }
90
+ },
91
+ gte: (value, validation, config, configValidator) => {
92
+ if (
93
+ value == undefined ||
94
+ (validation.when &&
95
+ !configValidator.isWhenTrue(validation.when, config))
96
+ ) {
97
+ return;
98
+ }
99
+ if (value < validation.gte) {
100
+ throw new Error(
101
+ `value should be greater than or equal to ${validation.gte}`
102
+ );
103
+ }
104
+ },
105
+ lt: (value, validation, config, configValidator) => {
106
+ if (
107
+ value == undefined ||
108
+ (validation.when &&
109
+ !configValidator.isWhenTrue(validation.when, config))
110
+ ) {
111
+ return;
112
+ }
113
+ if (value >= validation.lt) {
114
+ throw new Error(`value should be less than ${validation.lt}`);
115
+ }
116
+ },
117
+ lte: (value, validation, config, configValidator) => {
118
+ if (
119
+ value == undefined ||
120
+ (validation.when &&
121
+ !configValidator.isWhenTrue(validation.when, config))
122
+ ) {
123
+ return;
124
+ }
125
+ if (value > validation.lte) {
126
+ throw new Error(
127
+ `value should be less than or equal to ${validation.lte}`
128
+ );
129
+ }
130
+ },
131
+ },
132
+ bigint: {
133
+ required,
134
+ gt: (value, validation, config, configValidator) => {
135
+ if (
136
+ value == undefined ||
137
+ (validation.when &&
138
+ !configValidator.isWhenTrue(validation.when, config))
139
+ ) {
140
+ return;
141
+ }
142
+ if (value <= validation.gt) {
143
+ throw new Error(`value should be greater than ${validation.gt}`);
144
+ }
145
+ },
146
+ gte: (value, validation, config, configValidator) => {
147
+ if (
148
+ value == undefined ||
149
+ (validation.when &&
150
+ !configValidator.isWhenTrue(validation.when, config))
151
+ ) {
152
+ return;
153
+ }
154
+ if (value < validation.gte) {
155
+ throw new Error(
156
+ `value should be greater than or equal to ${validation.gte}`
157
+ );
158
+ }
159
+ },
160
+ lt: (value, validation, config, configValidator) => {
161
+ if (
162
+ value == undefined ||
163
+ (validation.when &&
164
+ !configValidator.isWhenTrue(validation.when, config))
165
+ ) {
166
+ return;
167
+ }
168
+ if (value >= validation.lt) {
169
+ throw new Error(`value should be less than ${validation.lt}`);
170
+ }
171
+ },
172
+ lte: (value, validation, config, configValidator) => {
173
+ if (
174
+ value == undefined ||
175
+ (validation.when &&
176
+ !configValidator.isWhenTrue(validation.when, config))
177
+ ) {
178
+ return;
179
+ }
180
+ if (value > validation.lte) {
181
+ throw new Error(
182
+ `value should be less than or equal to ${validation.lte}`
183
+ );
184
+ }
185
+ },
186
+ },
187
+ };
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi92YWx1ZS92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBd0I7SUFDbEQsTUFBTSxFQUFFLENBQUMsS0FBMEIsRUFBRSxLQUF3QixFQUFFLEVBQUU7UUFDL0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1NBQ2pEO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN4RCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLGtDQUFrQyxDQUFDLENBQUM7YUFDNUQ7U0FDRjtJQUNILENBQUM7SUFDRCxNQUFNLEVBQUUsQ0FBQyxLQUFhLEVBQUUsS0FBd0IsRUFBRSxFQUFFO1FBQ2xELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQztTQUNqRDtJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQyxLQUFjLEVBQUUsS0FBeUIsRUFBRSxFQUFFO1FBQ3JELElBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFDRCxNQUFNLEVBQUUsQ0FBQyxLQUFhLEVBQUUsS0FBd0IsRUFBRSxFQUFFO1FBQ2xELElBQUksT0FBTyxL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LFNBQVM7Z0JBQ2xCLENBQUMsVUFBVSxDQUFDLElBQUk7b0JBQ2QsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFDdkQ7Z0JBQ0EsT0FBTzthQUNSO1lBRUQsSUFBSSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRTtnQkFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7YUFDL0Q7UUFDSCxDQUFDO1FBQ0QsR0FBRyxFQUFFLENBQ0gsS0FBYSxFQUNiLFVBQThCLEVBQzlCLE1BQTJCLEVBQzNCLGVBQWdDLEVBQ2hDLEVBQUU7WUFDRixJQUNFLEtBQUssSUFBSSxTQUFTO2dCQUNsQixDQUFDLFVBQVUsQ0FBQyxJQUFJO29CQUNkLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQ3ZEO2dCQUNBLE9BQU87YUFDUjtZQUVELElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQ2IseUNBQXlDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FDMUQsQ0FBQzthQUNIO1FBQ0gsQ0FBQztLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ1ZhbGlkYXRvciB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuLi9zY2hlbWEvdHlwZXMvZmllbGRzJztcbmltcG9ydCB7XG4gIFZDaG9pY2VzLFxuICBWR3JlYXRlcixcbiAgVkdyZWF0ZXJFcXVhbCxcbiAgVkxlc3MsXG4gIFZMZXNzRXF1YWwsXG4gIFZSZWdleCxcbiAgVlJlcXVpcmVkLFxufSBmcm9tICcuLi9zY2hlbWEvdHlwZXMvdmFsaWRhdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgdmFsdWVWYWxpZGF0b3JzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICBvYmplY3Q6ICh2YWx1ZTogUmVjb3JkPHN0cmluZywgYW55PiwgZmllbGQ6IHR5cGVzLk9iamVjdEZpZWxkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdmFsdWUgbXVzdCBiZSBvZiBvYmplY3QgdHlwZWApO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYUtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKGZpZWxkLmNoaWxkcmVuKSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWUpKSB7XG4gICAgICBpZiAoIXNjaGVtYUtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcIiR7a2V5fVwiIGtleSBpcyBub3QgZm91bmQgaW4gdGhlIHNjaGVtYWApO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgc3RyaW5nOiAodmFsdWU6IHN0cmluZywgZmllbGQ6IHR5cGVzLlN0cmluZ0ZpZWxkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdmFsdWUgbXVzdCBiZSBvZiBzdHJpbmcgdHlwZWApO1xuICAgIH1cbiAgfSxcbiAgYm9vbGVhbjogKHZhbHVlOiBib29sZWFuLCBmaWVsZDogdHlwZXMuQm9vbGVhbkZpZWxkKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHZhbHVlIG11c3QgYmUgb2YgYm9vbGVhbiB0eXBlYCk7XG4gICAgfVxuICB9LFxuICBudW1iZXI6ICh2YWx1ZTogbnVtYmVyLCBmaWVsZDogdHlwZXMuTnVtYmVyRmllbGQpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB2YWx1ZSBtdXN0IGJlIG9mIG51bWJlciB0eXBlYCk7XG4gICAgfVxuICB9LFxuICBiaWdpbnQ6ICh2YWx1ZTogYmlnaW50LCBmaWVsZDogdHlwZXMuQmlnSW50RmllbGQpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnYmlnaW50Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB2YWx1ZSBtdXN0IGJlIG9mIGJpZ2ludCB0eXBlYCk7XG4gICAgfVxuICB9LFxufTtcblxuY29uc3QgcmVxdWlyZWQgPSAoXG4gIHZhbHVlOiBhbnksXG4gIHZhbGlkYXRpb246IFZSZXF1aXJlZCxcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBjb25maWdWYWxpZGF0b3I6IENvbmZpZ1ZhbGlkYXRvclxuKSA9PiB7XG4gIGlmICh2YWxpZGF0aW9uLndoZW4gJiYgIWNvbmZpZ1ZhbGlkYXRvci5pc1doZW5UcnVlKHZhbGlkYXRpb24ud2hlbiwgY29uZmlnKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh2YWxpZGF0aW9uLnJlcXVpcmVkICYmIHZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgaXMgcmVxdWlyZWQgYnV0IG5vdCBmb3VuZCBpbiBjb25maWcnKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHZhbHVlVmFsaWRhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+ID0ge1xuICBib29sZWFuOiB7IHJlcXVpcmVkIH0sXG4gIHN0cmluZzoge1xuICAgIHJlcXVpcmVkLFxuICAgIHJlZ2V4OiAoXG4gICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgdmFsaWRhdGlvbjogVlJlZ2V4LFxuICAgICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICAgY29uZmlnVmFsaWRhdG9yOiBDb25maWdWYWxpZGF0b3JcbiAgICApID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUgPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICh2YWxpZGF0aW9uLndoZW4gJiZcbiAgICAgICAgICAhY29uZmlnVmFsaWRhdG9yLmlzV2hlblRydWUodmFsaWRhdGlvbi53aGVuLCBjb25maWcpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKHZhbGlkYXRpb24ucmVnZXgpO1xuICAgICAgY29uc3QgbWF0Y2ggPSB2YWx1ZS5tYXRjaChyZSk7XG4gICAgICBpZiAobWF0Y2ggPT0gbnVsbCB8fCBtYXRjaFswXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB2YWx1ZSBzaG91bGQgbWF0Y2ggdGhlIHJlZ2V4PVwiJHt2YWxpZGF0aW9uLnJlZ2V4fVwiYCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBjaG9pY2VzOiAoXG4gICAgICB2YWx1ZTogc3RyaW5nLFxuICAgICAgdmFsaWRhdGlvbjogVkNob2ljZXMsXG4gICAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICBjb25maWdWYWxpZGF0b3I6IENvbmZpZ1ZhbGlkYXRvclxuICAgICkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZSA9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgKHZhbGlkYXRpb24ud2hlbiAmJlxuICAgICAgICAgICFjb25maWdWYWxpZGF0b3IuaXNXaGVuVHJ1ZSh2YWxpZGF0aW9uLndoZW4sIGNvbmZpZykpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXZhbGlkYXRpb24uY2hvaWNlcy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGB2YWx1ZSBzaG91bGQgYmUgb25lIG9mIHRoZSBjaG9pY2VzPVske3ZhbGlkYXRpb24uY2hvaWNlcy5qb2luKFxuICAgICAgICAgICAgJywgJ1xuICAgICAgICAgICl9XWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBudW1iZXI6IHtcbiAgICByZXF1aXJlZCxcbiAgICBndDogKFxuICAgICAgdmFsdWU6IG51bWJlcixcbiAgICAgIHZhbGlkYXRpb246IFZHcmVhdGVyPG51bWJlcj4sXG4gICAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICBjb25maWdWYWxpZGF0b3I6IENvbmZpZ1ZhbGlkYXRvclxuICAgICkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZSA9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgKHZhbGlkYXRpb24ud2hlbiAmJlxuICAgICAgICAgICFjb25maWdWYWxpZGF0b3IuaXNXaGVuVHJ1ZSh2YWxpZGF0aW9uLndoZW4sIGNvbmZpZykpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPD0gdmFsaWRhdGlvbi5ndCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHZhbHVlIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gJHt2YWxpZGF0aW9uLmd0fWApO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ3RlOiAoXG4gICAgICB2YWx1ZTogbnVtYmVyLFxuICAgICAgdmFsaWRhdGlvbjogVkdyZWF0ZXJFcXVhbDxudW1iZXI+LFxuICAgICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICAgY29uZmlnVmFsaWRhdG9yOiBDb25maWdWYWxpZGF0b3JcbiAgICApID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUgPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICh2YWxpZGF0aW9uLndoZW4gJiZcbiAgICAgICAgICAhY29uZmlnVmFsaWRhdG9yLmlzV2hlblRydWUodmFsaWRhdGlvbi53aGVuLCBjb25maWcpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlIDwgdmFsaWRhdGlvbi5ndGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGB2YWx1ZSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7dmFsaWRhdGlvbi5ndGV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICAgbHQ6IChcbiAgICAgIHZhbHVlOiBudW1iZXIsXG4gICAgICB2YWxpZGF0aW9uOiBWTGVzczxudW1iZXI+LFxuICAgICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICAgY29uZmlnVmFsaWRhdG9yOiBDb25maWdWYWxpZGF0b3JcbiAgICApID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUgPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICh2YWxpZGF0aW9uLndoZW4gJiZcbiAgICAgICAgICAhY29uZmlnVmFsaWRhdG9yLmlzV2hlblRydWUodmFsaWRhdGlvbi53aGVuLCBjb25maWcpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID49IHZhbGlkYXRpb24ubHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB2YWx1ZSBzaG91bGQgYmUgbGVzcyB0aGFuICR7dmFsaWRhdGlvbi5sdH1gKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGx0ZTogKFxuICAgICAgdmFsdWU6IG51bWJlcixcbiAgICAgIHZhbGlkYXRpb246IFZMZXNzRXF1YWw8bnVtYmVyPixcbiAgICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAgIGNvbmZpZ1ZhbGlkYXRvcjogQ29uZmlnVmFsaWRhdG9yXG4gICAgKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHZhbHVlID09IHVuZGVmaW5lZCB8fFxuICAgICAgICAodmFsaWRhdGlvbi53aGVuICYmXG4gICAgICAgICAgIWNvbmZpZ1ZhbGlkYXRvci5pc1doZW5UcnVlKHZhbGlkYXRpb24ud2hlbiwgY29uZmlnKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA+IHZhbGlkYXRpb24ubHRlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgdmFsdWUgc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke3ZhbGlkYXRpb24ubHRlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxuICBiaWdpbnQ6IHtcbiAgICByZXF1aXJlZCxcbiAgICBndDogKFxuICAgICAgdmFsdWU6IGJpZ2ludCxcbiAgICAgIHZhbGlkYXRpb246IFZHcmVhdGVyPGJpZ2ludD4sXG4gICAgICBjb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICBjb25maWdWYWxpZGF0b3I6IENvbmZpZ1ZhbGlkYXRvclxuICAgICkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB2YWx1ZSA9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgKHZhbGlkYXRpb24ud2hlbiAmJlxuICAgICAgICAgICFjb25maWdWYWxpZGF0b3IuaXNXaGVuVHJ1ZSh2YWxpZGF0aW9uLndoZW4sIGNvbmZpZykpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgPD0gdmFsaWRhdGlvbi5ndCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHZhbHVlIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gJHt2YWxpZGF0aW9uLmd0fWApO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ3RlOiAoXG4gICAgICB2YWx1ZTogYmlnaW50LFxuICAgICAgdmFsaWRhdGlvbjogVkdyZWF0ZXJFcXVhbDxiaWdpbnQ+LFxuICAgICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICAgY29uZmlnVmFsaWRhdG9yOiBDb25maWdWYWxpZGF0b3JcbiAgICApID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUgPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICh2YWxpZGF0aW9uLndoZW4gJiZcbiAgICAgICAgICAhY29uZmlnVmFsaWRhdG9yLmlzV2hlblRydWUodmFsaWRhdGlvbi53aGVuLCBjb25maWcpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlIDwgdmFsaWRhdGlvbi5ndGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGB2YWx1ZSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7dmFsaWRhdGlvbi5ndGV9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICAgbHQ6IChcbiAgICAgIHZhbHVlOiBiaWdpbnQsXG4gICAgICB2YWxpZGF0aW9uOiBWTGVzczxiaWdpbnQ+LFxuICAgICAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICAgY29uZmlnVmFsaWRhdG9yOiBDb25maWdWYWxpZGF0b3JcbiAgICApID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdmFsdWUgPT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICh2YWxpZGF0aW9uLndoZW4gJiZcbiAgICAgICAgICAhY29uZmlnVmFsaWRhdG9yLmlzV2hlblRydWUodmFsaWRhdGlvbi53aGVuLCBjb25maWcpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID49IHZhbGlkYXRpb24ubHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB2YWx1ZSBzaG91bGQgYmUgbGVzcyB0aGFuICR7dmFsaWRhdGlvbi5sdH1gKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGx0ZTogKFxuICAgICAgdmFsdWU6IGJpZ2ludCxcbiAgICAgIHZhbGlkYXRpb246IFZMZXNzRXF1YWw8YmlnaW50PixcbiAgICAgIGNvbmZpZzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICAgIGNvbmZpZ1ZhbGlkYXRvcjogQ29uZmlnVmFsaWRhdG9yXG4gICAgKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHZhbHVlID09IHVuZGVmaW5lZCB8fFxuICAgICAgICAodmFsaWRhdGlvbi53aGVuICYmXG4gICAgICAgICAgIWNvbmZpZ1ZhbGlkYXRvci5pc1doZW5UcnVlKHZhbGlkYXRpb24ud2hlbiwgY29uZmlnKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZSA+IHZhbGlkYXRpb24ubHRlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgdmFsdWUgc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke3ZhbGlkYXRpb24ubHRlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICB9LFxufTtcbiJdfQ==
package/lib/cli.ts ADDED
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env -S node --experimental-specifier-resolution=node
2
+
3
+ import yargs from 'yargs';
4
+ import { hideBin } from 'yargs/helpers';
5
+ import chalk from 'chalk';
6
+ import ora from 'ora';
7
+ import { ConfigValidator } from './index';
8
+ import * as fs from 'fs';
9
+ import JsonBigIntFactory from 'json-bigint';
10
+ import * as yaml from 'js-yaml';
11
+
12
+ const JsonBigInt = JsonBigIntFactory({
13
+ alwaysParseAsBig: false,
14
+ useNativeBigInt: true,
15
+ });
16
+
17
+ yargs(hideBin(process.argv))
18
+ .command(
19
+ 'generate-default',
20
+ 'generates an object using the default values of the passed schema',
21
+ (yargs) =>
22
+ yargs
23
+ .option('schema', {
24
+ alias: 's',
25
+ demandOption: true,
26
+ description: 'input schema file path which should be in json format',
27
+ type: 'string',
28
+ })
29
+ .option('output', {
30
+ alias: 'o',
31
+ demandOption: true,
32
+ description: 'generated default values output path',
33
+ type: 'string',
34
+ })
35
+ .option('format', {
36
+ alias: 'f',
37
+ demandOption: true,
38
+ description: 'generated default values output path',
39
+ choices: ['json', 'yaml'],
40
+ default: 'yaml',
41
+ type: 'string',
42
+ }),
43
+ async (argv) => {
44
+ const spinner = ora();
45
+ spinner.start(`Generating config default values`);
46
+
47
+ const rawSchemaData = fs.readFileSync(argv.schema, 'utf-8');
48
+ const schema = JsonBigInt.parse(rawSchemaData);
49
+
50
+ const confValidator = new ConfigValidator(schema);
51
+ const defaultConf = confValidator.generateDefault();
52
+
53
+ let output = '';
54
+ switch (argv.format) {
55
+ case 'json': {
56
+ output = JsonBigInt.stringify(defaultConf);
57
+ break;
58
+ }
59
+ case 'yaml': {
60
+ output = yaml.dump(defaultConf);
61
+ break;
62
+ }
63
+ }
64
+
65
+ fs.writeFileSync(argv.output, output);
66
+
67
+ spinner.succeed(
68
+ chalk.green(`default config values were output at "${argv.output}"`)
69
+ );
70
+ }
71
+ )
72
+ .command(
73
+ 'generate-ts-types',
74
+ 'generates compatible TypeScript interface types for the passed schema',
75
+ (yargs) =>
76
+ yargs
77
+ .option('schema', {
78
+ alias: 's',
79
+ demandOption: true,
80
+ description: 'input schema file path which should be in json format',
81
+ type: 'string',
82
+ })
83
+ .option('output', {
84
+ alias: 'o',
85
+ demandOption: true,
86
+ description: 'generated TypeScript interfaces',
87
+ type: 'string',
88
+ })
89
+ .option('root-type', {
90
+ alias: 'r',
91
+ demandOption: true,
92
+ description: 'Name of top root interface',
93
+ type: 'string',
94
+ }),
95
+ async (argv) => {
96
+ const spinner = ora();
97
+ spinner.start(`Generating TypeScript types`);
98
+
99
+ const rawSchemaData = fs.readFileSync(argv.schema, 'utf-8');
100
+ const schema = JsonBigInt.parse(rawSchemaData);
101
+
102
+ const confValidator = new ConfigValidator(schema);
103
+ const tsTypes = confValidator.generateTSTypes(argv.rootType);
104
+
105
+ fs.writeFileSync(argv.output, tsTypes);
106
+
107
+ spinner.succeed(
108
+ chalk.green(`TypeScript types were output at "${argv.output}"`)
109
+ );
110
+ }
111
+ )
112
+ .demandCommand(1)
113
+ .parse();