@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
package/.eslintignore ADDED
@@ -0,0 +1 @@
1
+ dist
package/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ # @rosen-bridge/config
2
+
3
+ ## 0.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - added validateAndWriteConfig method to the ConfigValidator class to validate and update node-config files.
8
+ - implemented major functionalities for config package
package/README.md ADDED
@@ -0,0 +1,24 @@
1
+ # @rosen-bridge/config
2
+
3
+ ## Table of contents
4
+
5
+ - [Introduction](#introduction)
6
+ - [Installation](#installation)
7
+
8
+ ## Introduction
9
+
10
+ a package to manage configs of rosen bridge projects
11
+
12
+ ## Installation
13
+
14
+ npm:
15
+
16
+ ```sh
17
+ npm i @rosen-bridge/config
18
+ ```
19
+
20
+ yarn:
21
+
22
+ ```sh
23
+ yarn add @rosen-bridge/config
24
+ ```
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env -S node --experimental-specifier-resolution=node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../lib/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env -S node --experimental-specifier-resolution=node
2
+ import yargs from 'yargs';
3
+ import { hideBin } from 'yargs/helpers';
4
+ import chalk from 'chalk';
5
+ import ora from 'ora';
6
+ import { ConfigValidator } from './index';
7
+ import * as fs from 'fs';
8
+ import JsonBigIntFactory from 'json-bigint';
9
+ import * as yaml from 'js-yaml';
10
+ const JsonBigInt = JsonBigIntFactory({
11
+ alwaysParseAsBig: false,
12
+ useNativeBigInt: true,
13
+ });
14
+ yargs(hideBin(process.argv))
15
+ .command(
16
+ 'generate-default',
17
+ 'generates an object using the default values of the passed schema',
18
+ (yargs) =>
19
+ yargs
20
+ .option('schema', {
21
+ alias: 's',
22
+ demandOption: true,
23
+ description: 'input schema file path which should be in json format',
24
+ type: 'string',
25
+ })
26
+ .option('output', {
27
+ alias: 'o',
28
+ demandOption: true,
29
+ description: 'generated default values output path',
30
+ type: 'string',
31
+ })
32
+ .option('format', {
33
+ alias: 'f',
34
+ demandOption: true,
35
+ description: 'generated default values output path',
36
+ choices: ['json', 'yaml'],
37
+ default: 'yaml',
38
+ type: 'string',
39
+ }),
40
+ async (argv) => {
41
+ const spinner = ora();
42
+ spinner.start(`Generating config default values`);
43
+ const rawSchemaData = fs.readFileSync(argv.schema, 'utf-8');
44
+ const schema = JsonBigInt.parse(rawSchemaData);
45
+ const confValidator = new ConfigValidator(schema);
46
+ const defaultConf = confValidator.generateDefault();
47
+ let output = '';
48
+ switch (argv.format) {
49
+ case 'json': {
50
+ output = JsonBigInt.stringify(defaultConf);
51
+ break;
52
+ }
53
+ case 'yaml': {
54
+ output = yaml.dump(defaultConf);
55
+ break;
56
+ }
57
+ }
58
+ fs.writeFileSync(argv.output, output);
59
+ spinner.succeed(
60
+ chalk.green(`default config values were output at "${argv.output}"`)
61
+ );
62
+ }
63
+ )
64
+ .command(
65
+ 'generate-ts-types',
66
+ 'generates compatible TypeScript interface types for the passed schema',
67
+ (yargs) =>
68
+ yargs
69
+ .option('schema', {
70
+ alias: 's',
71
+ demandOption: true,
72
+ description: 'input schema file path which should be in json format',
73
+ type: 'string',
74
+ })
75
+ .option('output', {
76
+ alias: 'o',
77
+ demandOption: true,
78
+ description: 'generated TypeScript interfaces',
79
+ type: 'string',
80
+ })
81
+ .option('root-type', {
82
+ alias: 'r',
83
+ demandOption: true,
84
+ description: 'Name of top root interface',
85
+ type: 'string',
86
+ }),
87
+ async (argv) => {
88
+ const spinner = ora();
89
+ spinner.start(`Generating TypeScript types`);
90
+ const rawSchemaData = fs.readFileSync(argv.schema, 'utf-8');
91
+ const schema = JsonBigInt.parse(rawSchemaData);
92
+ const confValidator = new ConfigValidator(schema);
93
+ const tsTypes = confValidator.generateTSTypes(argv.rootType);
94
+ fs.writeFileSync(argv.output, tsTypes);
95
+ spinner.succeed(
96
+ chalk.green(`TypeScript types were output at "${argv.output}"`)
97
+ );
98
+ }
99
+ )
100
+ .demandCommand(1)
101
+ .parse();
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sR0FBRyxNQUFNLEtBQUssQ0FBQztBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3pCLE9BQU8saUJBQWlCLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxJQUFJLE1BQU0sU0FBUyxDQUFDO0FBRWhDLE1BQU0sVUFBVSxHQUFHLGlCQUFpQixDQUFDO0lBQ25DLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsZUFBZSxFQUFFLElBQUk7Q0FDdEIsQ0FBQyxDQUFDO0FBRUgsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekIsT0FBTyxDQUNOLGtCQUFrQixFQUNsQixtRUFBbUUsRUFDbkUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNSLEtBQUs7S0FDRixNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFDbEIsV0FBVyxFQUFFLHVEQUF1RDtJQUNwRSxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7S0FDRCxNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFDbEIsV0FBVyxFQUFFLHNDQUFzQztJQUNuRCxJQUFJLEVBQUUsUUFBUTtDQUNmLENBQUM7S0FDRCxNQUFNLENBQUMsUUFBUSxFQUFFO0lBQ2hCLEtBQUssRUFBRSxHQUFHO0lBQ1YsWUFBWSxFQUFFLElBQUk7SUFD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O0FBQ0osQ0FBQyxDQUNGO0tBQ0EsYUFBYSxDQUFDLENBQUMsQ0FBQztLQUNoQixLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IC1TIG5vZGUgLS1leHBlcmltZW50YWwtc3BlY2lmaWVyLXJlc29sdXRpb249bm9kZVxuXG5pbXBvcnQgeWFyZ3MgZnJvbSAneWFyZ3MnO1xuaW1wb3J0IHsgaGlkZUJpbiB9IGZyb20gJ3lhcmdzL2hlbHBlcnMnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCB7IENvbmZpZ1ZhbGlkYXRvciB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IEpzb25CaWdJbnRGYWN0b3J5IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAnanMteWFtbCc7XG5cbmNvbnN0IEpzb25CaWdJbnQgPSBKc29uQmlnSW50RmFjdG9yeSh7XG4gIGFsd2F5c1BhcnNlQXNCaWc6IGZhbHNlLFxuICB1c2VOYXRpdmVCaWdJbnQ6IHRydWUsXG59KTtcblxueWFyZ3MoaGlkZUJpbihwcm9jZXNzLmFyZ3YpKVxuICAuY29tbWFuZChcbiAgICAnZ2VuZXJhdGUtZGVmYXVsdCcsXG4gICAgJ2dlbmVyYXRlcyBhbiBvYmplY3QgdXNpbmcgdGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRoZSBwYXNzZWQgc2NoZW1hJyxcbiAgICAoeWFyZ3MpID0+XG4gICAgICB5YXJnc1xuICAgICAgICAub3B0aW9uKCdzY2hlbWEnLCB7XG4gICAgICAgICAgYWxpYXM6ICdzJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdpbnB1dCBzY2hlbWEgZmlsZSBwYXRoIHdoaWNoIHNob3VsZCBiZSBpbiBqc29uIGZvcm1hdCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ291dHB1dCcsIHtcbiAgICAgICAgICBhbGlhczogJ28nLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBkZWZhdWx0IHZhbHVlcyBvdXRwdXQgcGF0aCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ2Zvcm1hdCcsIHtcbiAgICAgICAgICBhbGlhczogJ2YnLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBkZWZhdWx0IHZhbHVlcyBvdXRwdXQgcGF0aCcsXG4gICAgICAgICAgY2hvaWNlczogWydqc29uJywgJ3lhbWwnXSxcbiAgICAgICAgICBkZWZhdWx0OiAneWFtbCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pLFxuICAgIGFzeW5jIChhcmd2KSA9PiB7XG4gICAgICBjb25zdCBzcGlubmVyID0gb3JhKCk7XG4gICAgICBzcGlubmVyLnN0YXJ0KGBHZW5lcmF0aW5nIGNvbmZpZyBkZWZhdWx0IHZhbHVlc2ApO1xuXG4gICAgICBjb25zdCByYXdTY2hlbWFEYXRhID0gZnMucmVhZEZpbGVTeW5jKGFyZ3Yuc2NoZW1hLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IEpzb25CaWdJbnQucGFyc2UocmF3U2NoZW1hRGF0YSk7XG5cbiAgICAgIGNvbnN0IGNvbmZWYWxpZGF0b3IgPSBuZXcgQ29uZmlnVmFsaWRhdG9yKHNjaGVtYSk7XG4gICAgICBjb25zdCBkZWZhdWx0Q29uZiA9IGNvbmZWYWxpZGF0b3IuZ2VuZXJhdGVEZWZhdWx0KCk7XG5cbiAgICAgIGxldCBvdXRwdXQgPSAnJztcbiAgICAgIHN3aXRjaCAoYXJndi5mb3JtYXQpIHtcbiAgICAgICAgY2FzZSAnanNvbic6IHtcbiAgICAgICAgICBvdXRwdXQgPSBKc29uQmlnSW50LnN0cmluZ2lmeShkZWZhdWx0Q29uZik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAneWFtbCc6IHtcbiAgICAgICAgICBvdXRwdXQgPSB5YW1sLmR1bXAoZGVmYXVsdENvbmYpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoYXJndi5vdXRwdXQsIG91dHB1dCk7XG5cbiAgICAgIHNwaW5uZXIuc3VjY2VlZChcbiAgICAgICAgY2hhbGsuZ3JlZW4oYGRlZmF1bHQgY29uZmlnIHZhbHVlcyB3ZXJlIG91dHB1dCBhdCBcIiR7YXJndi5vdXRwdXR9XCJgKVxuICAgICAgKTtcbiAgICB9XG4gIClcbiAgLmNvbW1hbmQoXG4gICAgJ2dlbmVyYXRlLXRzLXR5cGVzJyxcbiAgICAnZ2VuZXJhdGVzIGNvbXBhdGlibGUgVHlwZVNjcmlwdCBpbnRlcmZhY2UgdHlwZXMgZm9yIHRoZSBwYXNzZWQgc2NoZW1hJyxcbiAgICAoeWFyZ3MpID0+XG4gICAgICB5YXJnc1xuICAgICAgICAub3B0aW9uKCdzY2hlbWEnLCB7XG4gICAgICAgICAgYWxpYXM6ICdzJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdpbnB1dCBzY2hlbWEgZmlsZSBwYXRoIHdoaWNoIHNob3VsZCBiZSBpbiBqc29uIGZvcm1hdCcsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pXG4gICAgICAgIC5vcHRpb24oJ291dHB1dCcsIHtcbiAgICAgICAgICBhbGlhczogJ28nLFxuICAgICAgICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2dlbmVyYXRlZCBUeXBlU2NyaXB0IGludGVyZmFjZXMnLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9KVxuICAgICAgICAub3B0aW9uKCdyb290LXR5cGUnLCB7XG4gICAgICAgICAgYWxpYXM6ICdyJyxcbiAgICAgICAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246ICdOYW1lIG9mIHRvcCByb290IGludGVyZmFjZScsXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0pLFxuICAgIGFzeW5jIChhcmd2KSA9PiB7XG4gICAgICBjb25zdCBzcGlubmVyID0gb3JhKCk7XG4gICAgICBzcGlubmVyLnN0YXJ0KGBHZW5lcmF0aW5nIFR5cGVTY3JpcHQgdHlwZXNgKTtcblxuICAgICAgY29uc3QgcmF3U2NoZW1hRGF0YSA9IGZzLnJlYWRGaWxlU3luYyhhcmd2LnNjaGVtYSwgJ3V0Zi04Jyk7XG4gICAgICBjb25zdCBzY2hlbWEgPSBKc29uQmlnSW50LnBhcnNlKHJhd1NjaGVtYURhdGEpO1xuXG4gICAgICBjb25zdCBjb25mVmFsaWRhdG9yID0gbmV3IENvbmZpZ1ZhbGlkYXRvcihzY2hlbWEpO1xuICAgICAgY29uc3QgdHNUeXBlcyA9IGNvbmZWYWxpZGF0b3IuZ2VuZXJhdGVUU1R5cGVzKGFyZ3Yucm9vdFR5cGUpO1xuXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKGFyZ3Yub3V0cHV0LCB0c1R5cGVzKTtcblxuICAgICAgc3Bpbm5lci5zdWNjZWVkKFxuICAgICAgICBjaGFsay5ncmVlbihgVHlwZVNjcmlwdCB0eXBlcyB3ZXJlIG91dHB1dCBhdCBcIiR7YXJndi5vdXRwdXR9XCJgKVxuICAgICAgKTtcbiAgICB9XG4gIClcbiAgLmRlbWFuZENvbW1hbmQoMSlcbiAgLnBhcnNlKCk7XG4iXX0=
@@ -0,0 +1,131 @@
1
+ import { IConfig } from 'config';
2
+ import { ConfigField, ConfigSchema } from './schema/types/fields';
3
+ import { When } from './schema/types/validations';
4
+ export declare class ConfigValidator {
5
+ private schema;
6
+ constructor(schema: ConfigSchema);
7
+ /**
8
+ * validates the passed config against the instance's schema
9
+ *
10
+ * @param {Record<string, any>} config
11
+ */
12
+ validateConfig(config: Record<string, any>): void;
13
+ /**
14
+ * validates a value in config object
15
+ *
16
+ * @private
17
+ * @param {*} value
18
+ * @param {ConfigField} field the field specification in schema
19
+ * @param {Record<string, any>} config the config object
20
+ */
21
+ private validateValue;
22
+ /**
23
+ * determines if a when clause in validations section of a schema field is
24
+ * satisfied
25
+ *
26
+ * @param {When} when
27
+ * @param {Record<string, any>} config
28
+ * @return {boolean}
29
+ */
30
+ isWhenTrue: (when: When, config: Record<string, any>) => boolean;
31
+ /**
32
+ * returns the value at specified path in config object
33
+ *
34
+ * @static
35
+ * @param {Record<string, any>} config
36
+ * @param {string[]} path
37
+ * @return {*}
38
+ */
39
+ static valueAt: (config: Record<string, any>, path: string[]) => any;
40
+ /**
41
+ * validates this.schema and throws exception if any errors found
42
+ */
43
+ private validateSchema;
44
+ /**
45
+ * validates config key name
46
+ *
47
+ * @param {string} name
48
+ */
49
+ private validateConfigName;
50
+ /**
51
+ * validates passed schema field structure
52
+ *
53
+ * @param {ConfigField} field
54
+ */
55
+ private validateSchemaField;
56
+ /**
57
+ * returns a field corresponding to a path in schema tree
58
+ *
59
+ * @param {string[]} path
60
+ * @return {(ConfigField | undefined)} returns undefined if field is not found
61
+ */
62
+ getSchemaField: (path: string[]) => ConfigField | undefined;
63
+ /**
64
+ * extracts default values from a schema
65
+ *
66
+ * @return {Record<string, any>} object of default values
67
+ */
68
+ generateDefault: () => Record<string, any>;
69
+ /**
70
+ * generates compatible TypeScript interface for this instance's schema
71
+ *
72
+ * @param {string} name the name of root type
73
+ * @return {string}
74
+ */
75
+ generateTSTypes: (name: string) => string;
76
+ /**
77
+ * generates a TypeScript interface definition for passed name and attributes
78
+ *
79
+ * @param {string} name
80
+ * @param {Array<[string, string]>} attributes
81
+ * @return {string}
82
+ */
83
+ private genTSInterface;
84
+ /**
85
+ * returns a characteristic object for values at a specific node config level
86
+ *
87
+ * @param {IConfig} config
88
+ * @param {string} level
89
+ * @return {Record<string, any>}
90
+ */
91
+ getConfigForLevel(config: IConfig, level: string): Record<string, any>;
92
+ /**
93
+ *traverses the config schema depth first to produce characteristic object
94
+ *
95
+ * @private
96
+ * @static
97
+ * @param {ConfigSchema} schema
98
+ * @param {string[]} path
99
+ * @param {IConfigSource[]} higherLevelSources
100
+ * @param {(IConfigSource | undefined)} currentLevelSource
101
+ * @param {IConfigSource[]} lowerLevelSources
102
+ * @return {Record<string, any>}
103
+ * @memberof ConfigValidator
104
+ */
105
+ private static processConfigForLevelNode;
106
+ /**
107
+ * returns a list of config sources used by node config package, ordered from
108
+ * the lowest to the highest priority
109
+ *
110
+ * @static
111
+ * @param {IConfig} config
112
+ * @return {string[]}
113
+ */
114
+ private static getNodeConfigLevels;
115
+ /**
116
+ * validates a config object and writes it to the node-config file
117
+ * corresponding to the passed level
118
+ *
119
+ * @param {Record<string, any>} configObj
120
+ * @param {IConfig} config
121
+ * @param {string} level output node-config file level
122
+ * @param {string} format the format of the output file
123
+ */
124
+ validateAndWriteConfig: (
125
+ configObj: Record<string, any>,
126
+ config: IConfig,
127
+ level: string,
128
+ format: string
129
+ ) => void;
130
+ }
131
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiB,MAAM,QAAQ,CAAC;AAShD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAIlD,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAIxC;;;;OAIG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAsDjD;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa,CA+BnB;IAEF;;;;;;;OAOG;IACI,UAAU,SAAU,IAAI,UAAU,OAAO,MAAM,EAAE,GAAG,CAAC,KAAG,OAAO,CAIpE;IAEF;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,WAAY,OAAO,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,EAAE,SAW3D;IAEF;;OAEG;IACH,OAAO,CAAC,cAAc,CAkDpB;IAEF;;;;OAIG;IACH,OAAO,CAAC,kBAAkB,CAIxB;IAEF;;;;OAIG;IACH,OAAO,CAAC,mBAAmB,CA2BzB;IAEF;;;;;OAKG;IACH,cAAc,SAAU,MAAM,EAAE,KAAG,WAAW,GAAG,SAAS,CAYxD;IAEF;;;;OAIG;IACH,eAAe,QAAO,OAAO,MAAM,EAAE,GAAG,CAAC,CAuDvC;IAEF;;;;;OAKG;IACH,eAAe,SAAU,MAAM,KAAG,MAAM,CAwEtC;IAEF;;;;;;OAMG;IACH,OAAO,CAAC,cAAc,CAOpB;IAEF;;;;;;OAMG;IACH,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmCtE;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,MAAM,CAAC,yBAAyB;IA6CxC;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAkDhC;IAEF;;;;;;;;OAQG;IACH,sBAAsB,cACT,OAAO,MAAM,EAAE,GAAG,CAAC,UACtB,OAAO,SACR,MAAM,UACL,MAAM,UAyDd;CACH"}