@achs/env 3.1.0 → 3.1.1

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 (138) hide show
  1. package/arguments.d.ts +25 -0
  2. package/arguments.d.ts.map +1 -0
  3. package/{src/arguments.ts → arguments.js} +8 -32
  4. package/arguments.js.map +1 -0
  5. package/commands/env.command.d.ts +8 -0
  6. package/commands/env.command.d.ts.map +1 -0
  7. package/commands/env.command.js +85 -0
  8. package/commands/env.command.js.map +1 -0
  9. package/commands/export.command.d.ts +8 -0
  10. package/commands/export.command.d.ts.map +1 -0
  11. package/commands/export.command.js +54 -0
  12. package/commands/export.command.js.map +1 -0
  13. package/{src/commands/index.ts → commands/index.d.ts} +1 -0
  14. package/commands/index.d.ts.map +1 -0
  15. package/commands/index.js +14 -0
  16. package/commands/index.js.map +1 -0
  17. package/commands/pull.command.d.ts +7 -0
  18. package/commands/pull.command.d.ts.map +1 -0
  19. package/commands/pull.command.js +39 -0
  20. package/commands/pull.command.js.map +1 -0
  21. package/commands/push.command.d.ts +7 -0
  22. package/commands/push.command.d.ts.map +1 -0
  23. package/commands/push.command.js +38 -0
  24. package/commands/push.command.js.map +1 -0
  25. package/commands/schema.command.d.ts +4 -0
  26. package/commands/schema.command.d.ts.map +1 -0
  27. package/commands/schema.command.js +18 -0
  28. package/commands/schema.command.js.map +1 -0
  29. package/exec.d.ts +3 -0
  30. package/exec.d.ts.map +1 -0
  31. package/exec.js +142 -0
  32. package/exec.js.map +1 -0
  33. package/{src/index.ts → index.d.ts} +1 -0
  34. package/index.d.ts.map +1 -0
  35. package/index.js +20 -0
  36. package/index.js.map +1 -0
  37. package/{src/interfaces/index.ts → interfaces/index.d.ts} +1 -0
  38. package/interfaces/index.d.ts.map +1 -0
  39. package/interfaces/index.js +18 -0
  40. package/interfaces/index.js.map +1 -0
  41. package/interfaces/loader.interface.d.ts +21 -0
  42. package/interfaces/loader.interface.d.ts.map +1 -0
  43. package/interfaces/loader.interface.js +3 -0
  44. package/interfaces/loader.interface.js.map +1 -0
  45. package/main.d.ts +3 -0
  46. package/main.d.ts.map +1 -0
  47. package/main.js +6 -0
  48. package/main.js.map +1 -0
  49. package/package.json +1 -1
  50. package/providers/app-settings.provider.d.ts +8 -0
  51. package/providers/app-settings.provider.d.ts.map +1 -0
  52. package/providers/app-settings.provider.js +50 -0
  53. package/providers/app-settings.provider.js.map +1 -0
  54. package/providers/azure-key-vault.provider.d.ts +20 -0
  55. package/providers/azure-key-vault.provider.d.ts.map +1 -0
  56. package/providers/azure-key-vault.provider.js +143 -0
  57. package/providers/azure-key-vault.provider.js.map +1 -0
  58. package/providers/index.d.ts +7 -0
  59. package/providers/index.d.ts.map +1 -0
  60. package/providers/index.js +30 -0
  61. package/providers/index.js.map +1 -0
  62. package/providers/local.provider.d.ts +8 -0
  63. package/providers/local.provider.d.ts.map +1 -0
  64. package/providers/local.provider.js +31 -0
  65. package/providers/local.provider.js.map +1 -0
  66. package/providers/package-json.provider.d.ts +8 -0
  67. package/providers/package-json.provider.d.ts.map +1 -0
  68. package/providers/package-json.provider.js +29 -0
  69. package/providers/package-json.provider.js.map +1 -0
  70. package/tsconfig.build.tsbuildinfo +1 -0
  71. package/utils/command.util.d.ts +13 -0
  72. package/utils/command.util.d.ts.map +1 -0
  73. package/utils/command.util.js +134 -0
  74. package/utils/command.util.js.map +1 -0
  75. package/{src/utils/index.ts → utils/index.d.ts} +1 -0
  76. package/utils/index.d.ts.map +1 -0
  77. package/utils/index.js +23 -0
  78. package/utils/index.js.map +1 -0
  79. package/utils/interpolate.util.d.ts +4 -0
  80. package/utils/interpolate.util.d.ts.map +1 -0
  81. package/utils/interpolate.util.js +33 -0
  82. package/utils/interpolate.util.js.map +1 -0
  83. package/utils/json.util.d.ts +5 -0
  84. package/utils/json.util.d.ts.map +1 -0
  85. package/utils/json.util.js +48 -0
  86. package/utils/json.util.js.map +1 -0
  87. package/utils/logger.d.ts +3 -0
  88. package/utils/logger.d.ts.map +1 -0
  89. package/{src/utils/logger.ts → utils/logger.js} +6 -6
  90. package/utils/logger.js.map +1 -0
  91. package/utils/normalize.util.d.ts +3 -0
  92. package/utils/normalize.util.d.ts.map +1 -0
  93. package/utils/normalize.util.js +61 -0
  94. package/utils/normalize.util.js.map +1 -0
  95. package/utils/schema.util.d.ts +11 -0
  96. package/utils/schema.util.d.ts.map +1 -0
  97. package/utils/schema.util.js +100 -0
  98. package/utils/schema.util.js.map +1 -0
  99. package/.eslintignore +0 -3
  100. package/.eslintrc.json +0 -329
  101. package/.vscode/extensions.json +0 -18
  102. package/.vscode/launch.json +0 -30
  103. package/.vscode/settings.json +0 -29
  104. package/jest.config.json +0 -28
  105. package/src/commands/env.command.ts +0 -139
  106. package/src/commands/export.command.ts +0 -88
  107. package/src/commands/pull.command.ts +0 -52
  108. package/src/commands/push.command.ts +0 -48
  109. package/src/commands/schema.command.ts +0 -31
  110. package/src/exec.ts +0 -221
  111. package/src/interfaces/loader.interface.ts +0 -66
  112. package/src/main.ts +0 -6
  113. package/src/providers/app-settings.provider.ts +0 -67
  114. package/src/providers/azure-key-vault.provider.ts +0 -277
  115. package/src/providers/index.ts +0 -29
  116. package/src/providers/local.provider.ts +0 -44
  117. package/src/providers/package-json.provider.ts +0 -39
  118. package/src/utils/command.util.ts +0 -223
  119. package/src/utils/interpolate.util.ts +0 -65
  120. package/src/utils/json.util.ts +0 -116
  121. package/src/utils/normalize.util.ts +0 -142
  122. package/src/utils/schema.util.ts +0 -191
  123. package/tests/env/appsettings.json +0 -32
  124. package/tests/env/dev.env.json +0 -12
  125. package/tests/env/dev.local.env.json +0 -9
  126. package/tests/env/env.schema.json +0 -225
  127. package/tests/env/keys.json +0 -7
  128. package/tests/env/settings/schema.json +0 -239
  129. package/tests/env/settings/settings.json +0 -22
  130. package/tests/env.int.test.ts +0 -42
  131. package/tests/exec.ts +0 -19
  132. package/tests/export.int.test.ts +0 -9
  133. package/tests/pull-push.int.test.ts +0 -15
  134. package/tests/run.js +0 -32
  135. package/tests/schema.int.test.ts +0 -9
  136. package/tests/setup.ts +0 -13
  137. package/tsconfig.build.json +0 -10
  138. package/tsconfig.json +0 -37
@@ -1,139 +0,0 @@
1
- import chalk from 'chalk';
2
- import merge from 'merge-deep';
3
- import { spawn } from 'child_process';
4
- import { CommandModule } from 'yargs';
5
- import { CommandArguments } from '../arguments';
6
- import {
7
- createValidator,
8
- flatAndValidateResults,
9
- flatResults,
10
- flatSchema,
11
- flatten,
12
- interpolate,
13
- loadVariablesFromProviders,
14
- logger,
15
- normalize
16
- } from '../utils';
17
-
18
- export interface EnvCommandArguments extends CommandArguments {
19
- // Command for execute after inject environment variables.
20
- // Should be prefixed or surrounded by ':' character.
21
- subcmd: string[];
22
- // whether validate schema before injecting variables
23
- schemaValidate: boolean;
24
- }
25
-
26
- /**
27
- * Main command.
28
- * Injects environment variables into process.env.
29
- *
30
- * @example [>_]: env -e dev -m debug : npm start
31
- */
32
- export const envCommand: CommandModule<any, EnvCommandArguments> = {
33
- command: '$0 [options..] [: <subcmd> :]',
34
- describe: 'Inject environment variables into process',
35
- builder: (builder) => {
36
- builder
37
- .options({
38
- subcmd: {
39
- type: 'array',
40
- describe: 'Command for inject environment variables'
41
- },
42
- schemaValidate: {
43
- alias: 'validate',
44
- type: 'boolean',
45
- default: true,
46
- describe: 'Whether validates variables using JSON schema'
47
- }
48
- })
49
- .example(
50
- 'env -e dev -m test unit : npm test',
51
- 'Loads "dev" environment variables, in "test" and "unit" modes, for "npm start" command'
52
- )
53
- .example(
54
- 'env -e dev -m debug : npm start : -c my-config.json',
55
- 'Loads "dev" environment variables, in "debug" mode, for "npm test" command and custom config file'
56
- )
57
- .example(
58
- 'env -e dev -m debug -c [[root]]/[[env]].env.json : npm start',
59
- 'Loads custom config file placed in root folder and named same as the env'
60
- )
61
- .check((argv): boolean => {
62
- // special check for custom argument
63
- if (argv._.length === 0 && !argv.subcmd) {
64
- logger.error(
65
- 'No one subcommand provided for exec surrounded by :'
66
- );
67
-
68
- process.exit(1);
69
- }
70
-
71
- return true;
72
- });
73
-
74
- return builder;
75
- },
76
- handler: async ({ providers, schemaValidate, expand, ...argv }) => {
77
- const results = await loadVariablesFromProviders(providers, argv);
78
-
79
- let env = merge({ NODE_ENV: 'development' }, ...flatResults(results));
80
- env = flatten(env, argv.nestingDelimiter);
81
-
82
- if (schemaValidate) {
83
- let schema = {};
84
-
85
- for (const {
86
- handler: { key }
87
- } of providers) {
88
- const providerSchema = argv.schema?.[key];
89
-
90
- if (providerSchema) {
91
- schema = Object.assign(
92
- schema,
93
- flatSchema(providerSchema, '', argv.nestingDelimiter)
94
- );
95
- }
96
- }
97
-
98
- const validator = createValidator({
99
- type: 'object',
100
- properties: schema
101
- });
102
-
103
- if (!validator(env)) {
104
- logger.error('schema validation failed', validator.errors);
105
-
106
- process.exit(1);
107
- }
108
- }
109
-
110
- env = normalize(env, argv.nestingDelimiter, argv.arrayDescomposition);
111
- if (expand) env = interpolate(env, env);
112
-
113
- logger.debug('environment loaded:', env);
114
-
115
- // loads env vars to process.env
116
- process.env = {
117
- ...process.env,
118
- ...env
119
- };
120
-
121
- logger.info(
122
- 'executing command >',
123
- chalk.bold.yellow(argv.subcmd.join(' '))
124
- );
125
-
126
- spawn(argv.subcmd[0], argv.subcmd.slice(1), {
127
- stdio: 'inherit',
128
- shell: true
129
- }).on('exit', (code) => {
130
- if (code === 0) {
131
- logger.info('process finished successfully');
132
- } else {
133
- logger.error('process finished with error');
134
-
135
- process.exit(1);
136
- }
137
- });
138
- }
139
- };
@@ -1,88 +0,0 @@
1
- import merge from 'merge-deep';
2
- import { CommandModule } from 'yargs';
3
- import { CommandArguments } from '../arguments';
4
- import {
5
- flatAndValidateResults,
6
- flatten,
7
- interpolate,
8
- loadVariablesFromProviders,
9
- logger,
10
- normalize,
11
- writeEnvFromJson,
12
- writeJson
13
- } from '../utils';
14
-
15
- export interface ExportCommandArguments extends CommandArguments {
16
- format: 'json' | 'dotenv';
17
-
18
- uri: string;
19
- }
20
-
21
- /**
22
- * Export command.
23
- * Export environment variables to a file.
24
- *
25
- * @example [>_]: env export -e dev -m build
26
- */
27
- export const exportCommand: CommandModule<any, ExportCommandArguments> = {
28
- command: 'export [options..]',
29
- describe: 'Export unified environment variables to a file from providers',
30
- builder: (builder) => {
31
- builder
32
- .options({
33
- uri: {
34
- alias: ['u', 'p', 'path'],
35
- type: 'string',
36
- default: '.env',
37
- describe: 'Uri for export file with variables'
38
- },
39
- format: {
40
- alias: 'f',
41
- type: 'string',
42
- default: 'dotenv',
43
- choices: ['json', 'dotenv'],
44
- describe: 'Format for export variables'
45
- }
46
- })
47
- .example(
48
- 'env export -e dev -m build',
49
- 'Exports "dev" variables to a dotenv file at root as ".env"'
50
- )
51
- .example(
52
- 'env export -e prod -m build -f json --uri [[env]].env.json',
53
- 'Exports "prod" variables to a json file at root as "prod.env.json"'
54
- );
55
-
56
- return builder;
57
- },
58
- handler: async ({ providers, expand, ...argv }) => {
59
- const results = await loadVariablesFromProviders(providers, argv);
60
-
61
- let env = merge(
62
- { NODE_ENV: 'development' },
63
- ...flatAndValidateResults(results, argv)
64
- );
65
-
66
- // results normalization merging
67
- env = flatten(env, argv.nestingDelimiter);
68
- env = normalize(env, argv.nestingDelimiter, argv.arrayDescomposition);
69
- if (expand) env = interpolate(env, env);
70
-
71
- logger.debug('environment loaded:', env);
72
-
73
- const { format, uri } = argv;
74
-
75
- switch (format) {
76
- case 'dotenv':
77
- await writeEnvFromJson(uri, env, true);
78
- break;
79
-
80
- case 'json':
81
- await writeJson(uri, env, true);
82
- break;
83
-
84
- default:
85
- logger.error(`format ${format} not recognized`);
86
- }
87
- }
88
- };
@@ -1,52 +0,0 @@
1
- import chalk from 'chalk';
2
- import { CommandModule } from 'yargs';
3
- import { CommandArguments } from '../arguments';
4
- import { logger } from '../utils';
5
-
6
- export interface PullCommandArguments extends CommandArguments {
7
- // whether variables should be overwritten in already exists
8
- overwrite: boolean;
9
- }
10
-
11
- /**
12
- * Pulls environment variables from providers.
13
- *
14
- * @example [>_]: env pull -e dev
15
- */
16
- export const pullCommand: CommandModule<any, PullCommandArguments> = {
17
- command: 'pull [options..]',
18
- describe: 'Pulls environment variables from providers',
19
- builder: (builder) => {
20
- builder
21
- .options({
22
- overwrite: {
23
- alias: 'o',
24
- type: 'boolean',
25
- default: false,
26
- describe: 'Overwrite local variables'
27
- }
28
- })
29
- .example('env pull -e dev', 'Download "dev" environment secrets')
30
- .example(
31
- 'env pull -e dev -o',
32
- 'Download and overwrite (if any exists) "dev" environment secrets'
33
- );
34
-
35
- return builder;
36
- },
37
- handler: async ({ providers, ...argv }) => {
38
- const promises = await Promise.all(
39
- providers
40
- .filter(({ handler: { pull } }) => !!pull)
41
- .map(({ handler: { key, pull }, config }) => {
42
- logger.silly(`pulling from ${chalk.yellow(key)} provider`);
43
-
44
- return pull!(argv, config);
45
- })
46
- );
47
-
48
- if (promises.length > 0)
49
- logger.info('environment variables pulled successfully');
50
- else logger.warn('no providers for pull variables');
51
- }
52
- };
@@ -1,48 +0,0 @@
1
- import chalk from 'chalk';
2
- import { CommandModule } from 'yargs';
3
- import { CommandArguments } from '../arguments';
4
- import { logger } from '../utils';
5
-
6
- export interface PushCommandArguments extends CommandArguments {
7
- // forces to push in case of conflict
8
- force: boolean;
9
- }
10
-
11
- /**
12
- * Pushes environment variables to providers store.
13
- *
14
- * @example [>_]: env push -e dev
15
- */
16
- export const pushCommand: CommandModule<any, PushCommandArguments> = {
17
- command: 'push [options..]',
18
- describe: 'Pushes environment variables to providers store',
19
- builder: (builder) => {
20
- builder
21
- .options({
22
- force: {
23
- alias: 'f',
24
- type: 'boolean',
25
- default: false,
26
- describe: 'Force push for secrets'
27
- }
28
- })
29
- .example('env push -e dev', 'Download "dev" environment secrets');
30
-
31
- return builder;
32
- },
33
- handler: async ({ providers, ...argv }) => {
34
- const promises = await Promise.all(
35
- providers
36
- .filter(({ handler: { push } }) => !!push)
37
- .map(({ handler: { key, push }, config }) => {
38
- logger.debug(`pushing to ${chalk.yellow(key)} provider`);
39
-
40
- return push!(argv, config);
41
- })
42
- );
43
-
44
- if (promises.length > 0)
45
- logger.info('environment variables pushed successfully');
46
- else logger.warn('no providers for push variables');
47
- }
48
- };
@@ -1,31 +0,0 @@
1
- import { CommandModule } from 'yargs';
2
- import { CommandArguments } from '../arguments';
3
- import {
4
- generateSchemaFrom,
5
- loadVariablesFromProviders,
6
- logger
7
- } from '../utils';
8
-
9
- /**
10
- * Generates validation schema from providers environment variables.
11
- *
12
- * @example [>_]: env schema -e dev -m build
13
- */
14
- export const schemaCommand: CommandModule<any, CommandArguments> = {
15
- command: 'schema [options..]',
16
- describe: 'Generates validation schema from providers',
17
- builder: (builder) => {
18
- return builder.example(
19
- 'env schema --generate -e dev -m debug unit',
20
- 'Updates JSON schema'
21
- );
22
- },
23
- handler: async (argv) => {
24
- const results = await loadVariablesFromProviders(argv.providers, argv);
25
-
26
- const schema = await generateSchemaFrom(results, argv);
27
-
28
- logger.silly('schema:', schema);
29
- logger.info('schema updated successfully');
30
- }
31
- };
package/src/exec.ts DELETED
@@ -1,221 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import chalk from 'chalk';
4
- import yargsParser from 'yargs-parser';
5
- import yargs, { Arguments } from 'yargs';
6
- import { IntegratedProviders } from './providers';
7
- import { args, CommandArguments } from './arguments';
8
- import {
9
- envCommand,
10
- exportCommand,
11
- pullCommand,
12
- pushCommand,
13
- schemaCommand
14
- } from './commands';
15
- import {
16
- getSubcommand,
17
- interpolateJson,
18
- loadConfigFile,
19
- loadProjectInfo,
20
- loadSchemaFile,
21
- logger,
22
- resolvePath
23
- } from './utils';
24
-
25
- type Alias = string | string[];
26
-
27
- /**
28
- * Preload basic config from command line and config file.
29
- *
30
- * @param {string[]} rawArgv process.argv
31
- * @param {Partial<yargsParser.Configuration>} parser yargs parser config
32
- * @param {[string, string]} delimiters
33
- *
34
- * @returns {Promise<Partial<CommandArguments>>} preloaded config
35
- */
36
- async function preloadConfig(
37
- rawArgv: string[],
38
- parser: Partial<yargsParser.Configuration>,
39
- delimiters: [string, string]
40
- ): Promise<Partial<CommandArguments>> {
41
- // preload base config
42
- const preloadedArgv = yargsParser(rawArgv, {
43
- configuration: parser,
44
- boolean: ['help'],
45
- string: ['root', 'env', 'configFile', 'schemaFile', 'logLevel'],
46
- array: ['modes', 'logMaskAnyRegEx', 'logMaskValuesOfKeys'],
47
- alias: {
48
- env: args.env.alias as Alias,
49
- modes: args.modes.alias as Alias,
50
- configFile: args.configFile.alias as Alias,
51
- logLevel: args.logLevel.alias as Alias,
52
- logMaskAnyRegEx: args.logMaskAnyRegEx.alias as Alias,
53
- logMaskValuesOfKeys: args.logMaskValuesOfKeys.alias as Alias
54
- },
55
- default: {
56
- root: args.root.default,
57
- configFile: args.configFile.default
58
- }
59
- });
60
-
61
- // loads configuration file
62
- await loadConfigFile(preloadedArgv, delimiters);
63
-
64
- preloadedArgv.logLevel ??= args.logLevel.default;
65
- preloadedArgv.logMaskAnyRegEx ??= args.logMaskAnyRegEx.default;
66
- preloadedArgv.logMaskValuesOfKeys ??= args.logMaskValuesOfKeys.default;
67
- preloadedArgv.providers ??= args.providers.default;
68
-
69
- const { logLevel, logMaskAnyRegEx, logMaskValuesOfKeys } = preloadedArgv;
70
-
71
- // logging level
72
- logger.setSettings({
73
- minLevel: logLevel,
74
- maskAnyRegEx: logMaskAnyRegEx,
75
- maskValuesOfKeys: logMaskValuesOfKeys
76
- });
77
-
78
- return preloadedArgv;
79
- }
80
-
81
- /**
82
- * Command preprocessing and lib info
83
- * reading from package.json.
84
- * Preloads config file and setup basic config.
85
- *
86
- * @param {string[]} rawArgv process.argv
87
- */
88
- export async function exec(rawArgv: string[]) {
89
- // reads some lib base config from package.json
90
- const { config, version } = await import(`${__dirname}/package.json`);
91
-
92
- // execs yargs
93
- const subcommand = getSubcommand(rawArgv, config.delimiters.subcommand);
94
-
95
- const preloadedArgv = await preloadConfig(
96
- rawArgv,
97
- config.parser,
98
- config.delimiters.template
99
- );
100
-
101
- const { env, modes, providers, help } = preloadedArgv;
102
-
103
- if (help) build(rawArgv, preloadedArgv, subcommand, config, version);
104
-
105
- if (!Array.isArray(providers) || providers.length === 0) {
106
- logger.error('no providers found');
107
-
108
- process.exit(1);
109
- }
110
-
111
- logger.info(
112
- `loading ${chalk.bold.underline.green(env)} environment` +
113
- (modes ? ` in ${chalk.bold.magenta(modes.join('+'))} mode` : '')
114
- );
115
-
116
- // read loaders from config
117
- for (const provider of providers!) {
118
- try {
119
- logger.debug(`using ${chalk.yellow(provider.path)} provider`);
120
-
121
- if (!provider.type || provider.type === 'integrated') {
122
- provider.handler = IntegratedProviders[provider.path];
123
- } else {
124
- const { default: module } = await import(
125
- provider.type === 'module'
126
- ? provider.path
127
- : resolvePath(provider.path)
128
- );
129
-
130
- provider.handler = module;
131
- }
132
- } catch {
133
- logger.error(
134
- `${chalk.yellow(
135
- provider.path
136
- )} provider not found or not compatible`
137
- );
138
-
139
- process.exit(1);
140
- }
141
- }
142
-
143
- build(rawArgv, preloadedArgv, subcommand, config, version);
144
- }
145
-
146
- /**
147
- * Builds commands and execs Yargs.
148
- *
149
- * @param {string[]} rawArgv process.argv.slice(2)
150
- * @param {Partial<Arguments<CommandArguments>>} preloadedArgv
151
- * @param {string[]} subcommand subcommand for wrap if exists
152
- * @param {Record<string, any>} config lib config from package.json
153
- * @param {string} version lib version from package.json
154
- */
155
- function build(
156
- rawArgv: string[],
157
- preloadedArgv: Partial<Arguments<CommandArguments>>,
158
- subcommand: string[],
159
- config: Record<string, any>,
160
- version = 'unknown'
161
- ): void {
162
- const builder = yargs(rawArgv)
163
- .strict()
164
- .scriptName('env')
165
- .version(version)
166
- .detectLocale(false)
167
- .showHelpOnFail(false)
168
- .parserConfiguration(config.parser)
169
- .usage('Usage: $0 [command] [options..] [: subcmd [:]] [options..]')
170
- .options(args)
171
- .middleware(async (argv): Promise<void> => {
172
- // in case of subcommand argument for main
173
- if (subcommand?.length > 0) argv.subcmd = subcommand;
174
-
175
- // merges preloaded args
176
- Object.assign(argv, preloadedArgv);
177
-
178
- logger.silly(
179
- 'interpolating arguments surrounded by',
180
- chalk.bold.yellow(
181
- config.delimiters.template[0],
182
- config.delimiters.template[1]
183
- )
184
- );
185
-
186
- // applies string templating with current vars
187
- interpolateJson(argv, argv, config.delimiters.template);
188
-
189
- logger.silly('config loaded:', argv);
190
-
191
- // loads environment JSON schema if exists
192
- // and current project info from package.json
193
- [argv.app, argv.schema] = await Promise.all([
194
- loadProjectInfo(),
195
- loadSchemaFile(argv, config.delimiters.template)
196
- ]);
197
-
198
- if (argv.schemaValidate) {
199
- argv.schemaValidate = !!argv.schema;
200
-
201
- if (argv.schemaValidate)
202
- logger.silly('schema loaded:', argv.schema);
203
- }
204
- });
205
-
206
- // integrated commands builder
207
- builder.command(envCommand);
208
- builder.command(exportCommand);
209
- builder.command(pullCommand);
210
- builder.command(pushCommand);
211
- builder.command(schemaCommand);
212
-
213
- const { providers } = preloadedArgv;
214
-
215
- // extends command from plugins
216
- for (const { handler } of providers!)
217
- handler?.builder && handler.builder(builder);
218
-
219
- // executes command processing
220
- builder.parse();
221
- }
@@ -1,66 +0,0 @@
1
- import { Arguments, Argv } from 'yargs';
2
-
3
- /**
4
- * Result of provider environment load.
5
- *
6
- * @export
7
- * @type EnvResult
8
- */
9
- export type EnvResult =
10
- | Record<string, unknown>
11
- | Record<string, unknown>[]
12
- | Promise<Record<string, unknown>>
13
- | Promise<Record<string, unknown>[]>;
14
-
15
- /**
16
- * Wrapped provider result for inject to env.
17
- *
18
- * @export
19
- * @interface EnvProviderResult
20
- */
21
- export interface EnvProviderResult {
22
- key: string;
23
- config?: Record<string, unknown>;
24
- value: Record<string, any> | Record<string, any>[];
25
- }
26
-
27
- /**
28
- * Provider handler.
29
- *
30
- * @export
31
- * @interface EnvProvider
32
- * @template A define arguments used by provider
33
- * @template C define config used by provider
34
- */
35
- export interface EnvProvider<
36
- A,
37
- C extends Record<string, any> | undefined = undefined
38
- > {
39
- // unique key
40
- key: string;
41
-
42
- // modifies command building (adds or modifies commands, options .etc)
43
- builder?: (builder: Argv<unknown>) => void;
44
-
45
- // loads environment variables.
46
- load: (argv: Arguments<A>, config?: C) => EnvResult | never;
47
-
48
- // pulls vars
49
- pull?: (argv: Arguments<A>, config?: C) => void;
50
-
51
- // push vars
52
- push?: (argv: Arguments<A>, config?: C) => void;
53
- }
54
-
55
- /**
56
- * Provider definition for config file.
57
- *
58
- * @export
59
- * @interface EnvProviderConfig
60
- */
61
- export interface EnvProviderConfig {
62
- path: string;
63
- type: 'integrated' | 'module' | 'script';
64
- handler: EnvProvider<any, any>;
65
- config?: Record<string, unknown>;
66
- }
package/src/main.ts DELETED
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { exec } from './exec';
4
-
5
- // runs the program
6
- exec(process.argv.slice(2));