@mono-labs/cli 0.0.237 → 0.0.242

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 (179) hide show
  1. package/bin/mono.js +1 -1
  2. package/dist/index.js +32 -51
  3. package/dist/lib/app.js +52 -0
  4. package/dist/lib/commands/build-process/boot.js +12 -0
  5. package/dist/lib/commands/build-process/cliFactory.js +145 -0
  6. package/dist/lib/commands/build-process/dataLayer.js +56 -0
  7. package/dist/lib/commands/build-process/index.js +11 -0
  8. package/dist/lib/commands/build-process/readEnv.js +34 -0
  9. package/dist/lib/commands/build-process/runMonoCommand.js +82 -0
  10. package/dist/lib/commands/build-process/runners/processManager.js +45 -0
  11. package/dist/lib/commands/build-process/runners/runBackground.js +46 -0
  12. package/dist/lib/commands/build-process/runners/runForeground.js +52 -0
  13. package/dist/lib/commands/build-process/test.js +32 -0
  14. package/dist/lib/commands/build-process/testflag.js +4 -0
  15. package/dist/lib/commands/build-process/validators.js +17 -0
  16. package/dist/lib/commands/loadFromRoot.js +53 -0
  17. package/dist/lib/commands/prune/index.js +10 -0
  18. package/dist/lib/commands/prune/prune.js +49 -0
  19. package/dist/lib/config.js +6 -0
  20. package/dist/lib/filterUnwantedEnvVars.js +88 -0
  21. package/dist/lib/generateNewEnvList.js +17 -0
  22. package/dist/lib/index.js +49 -0
  23. package/dist/src/cdk/cdk.js +6 -0
  24. package/dist/src/cdk/index.js +17 -0
  25. package/dist/{expo.js → src/expo.js} +18 -34
  26. package/dist/src/index.js +56 -0
  27. package/dist/src/merge-env.js +25 -0
  28. package/dist/{project → src/project}/build-mono-readme.js +11 -20
  29. package/dist/{project → src/project}/generate-readme.js +6 -13
  30. package/dist/{project → src/project}/index.js +4 -12
  31. package/dist/{stack.js → src/stack.js} +2 -2
  32. package/dist/src/tools.js +39 -0
  33. package/dist/types/index.d.ts +50 -9
  34. package/dist/types/lib/app.d.ts +3 -0
  35. package/dist/types/lib/commands/build-process/boot.d.ts +8 -0
  36. package/dist/types/lib/commands/build-process/cliFactory.d.ts +32 -0
  37. package/dist/types/lib/commands/build-process/dataLayer.d.ts +7 -0
  38. package/dist/types/lib/commands/build-process/readEnv.d.ts +1 -0
  39. package/dist/types/lib/commands/build-process/runMonoCommand.d.ts +10 -0
  40. package/dist/types/lib/commands/build-process/runners/processManager.d.ts +5 -0
  41. package/dist/types/lib/commands/build-process/runners/runBackground.d.ts +2 -0
  42. package/dist/types/lib/commands/build-process/runners/runForeground.d.ts +6 -0
  43. package/dist/types/lib/commands/build-process/test.d.ts +1 -0
  44. package/dist/types/lib/commands/build-process/testflag.d.ts +1 -0
  45. package/dist/types/lib/commands/build-process/validators.d.ts +1 -0
  46. package/dist/types/lib/commands/loadFromRoot.d.ts +7 -0
  47. package/dist/types/lib/commands/prune/prune.d.ts +1 -0
  48. package/dist/types/lib/config.d.ts +2 -0
  49. package/dist/types/lib/filterUnwantedEnvVars.d.ts +2 -0
  50. package/dist/types/lib/generateNewEnvList.d.ts +1 -0
  51. package/dist/types/lib/index.d.ts +2 -0
  52. package/dist/types/src/cdk/cdk.d.ts +1 -0
  53. package/dist/types/src/cdk/index.d.ts +1 -0
  54. package/dist/types/src/expo.d.ts +4 -0
  55. package/dist/types/src/index.d.ts +15 -0
  56. package/dist/types/src/project/build-mono-readme.d.ts +1 -0
  57. package/dist/types/src/project/generate-readme.d.ts +1 -0
  58. package/dist/types/{project → src/project}/index.d.ts +1 -1
  59. package/dist/types/src/project/merge-env.d.ts +1 -0
  60. package/dist/types/src/tools.d.ts +3 -0
  61. package/lib/app.d.ts +3 -0
  62. package/lib/app.ts +58 -0
  63. package/lib/commands/build-process/boot.d.ts +8 -0
  64. package/lib/commands/build-process/boot.ts +21 -0
  65. package/lib/commands/build-process/cliFactory.d.ts +32 -0
  66. package/lib/commands/build-process/cliFactory.ts +219 -0
  67. package/lib/commands/build-process/dataLayer.d.ts +7 -0
  68. package/lib/commands/build-process/dataLayer.ts +61 -0
  69. package/lib/commands/build-process/index.d.ts +1 -0
  70. package/lib/commands/build-process/index.ts +14 -0
  71. package/lib/commands/build-process/readEnv.d.ts +1 -0
  72. package/lib/commands/build-process/readEnv.ts +37 -0
  73. package/lib/commands/build-process/runMonoCommand.d.ts +10 -0
  74. package/lib/commands/build-process/runMonoCommand.ts +96 -0
  75. package/lib/commands/build-process/runners/processManager.d.ts +5 -0
  76. package/lib/commands/build-process/runners/processManager.ts +42 -0
  77. package/lib/commands/build-process/runners/runBackground.d.ts +2 -0
  78. package/lib/commands/build-process/runners/runBackground.ts +56 -0
  79. package/lib/commands/build-process/runners/runForeground.d.ts +6 -0
  80. package/lib/commands/build-process/runners/runForeground.ts +59 -0
  81. package/lib/commands/build-process/test.d.ts +1 -0
  82. package/lib/commands/build-process/test.ts +42 -0
  83. package/lib/commands/build-process/testflag.d.ts +1 -0
  84. package/lib/commands/build-process/testflag.ts +1 -0
  85. package/lib/commands/build-process/validators.d.ts +1 -0
  86. package/lib/commands/build-process/validators.ts +16 -0
  87. package/lib/commands/loadFromRoot.d.ts +7 -0
  88. package/lib/commands/loadFromRoot.ts +51 -0
  89. package/lib/commands/prune/index.d.ts +1 -0
  90. package/lib/commands/prune/index.ts +9 -0
  91. package/lib/commands/prune/prune.d.ts +1 -0
  92. package/lib/commands/prune/prune.ts +50 -0
  93. package/lib/config.d.ts +2 -0
  94. package/lib/filterUnwantedEnvVars.d.ts +2 -0
  95. package/lib/filterUnwantedEnvVars.ts +95 -0
  96. package/lib/generateNewEnvList.d.ts +1 -0
  97. package/lib/generateNewEnvList.ts +17 -0
  98. package/lib/index.d.ts +2 -0
  99. package/lib/index.ts +59 -0
  100. package/package.json +99 -84
  101. package/src/cdk/cdk.d.ts +1 -7
  102. package/src/cdk/cdk.ts +1 -0
  103. package/src/cdk/index.d.ts +1 -0
  104. package/src/cdk/index.ts +1 -0
  105. package/src/expo-files/filterUnwantedEnvVars.d.ts +3 -0
  106. package/src/expo-files/filterUnwantedEnvVars.ts +141 -144
  107. package/src/expo.d.ts +2 -9
  108. package/src/expo.ts +116 -0
  109. package/src/index.d.ts +22 -0
  110. package/src/index.ts +39 -42
  111. package/src/loadFromRoot.d.ts +32 -0
  112. package/src/merge-env.d.ts +1 -0
  113. package/src/merge-env.ts +24 -0
  114. package/src/project/build-mono-readme.d.ts +1 -0
  115. package/src/project/build-mono-readme.ts +460 -514
  116. package/src/project/build-readme.d.ts +2 -0
  117. package/src/project/generate-docs.d.ts +11 -0
  118. package/src/project/generate-readme.d.ts +1 -0
  119. package/src/project/generate-readme.ts +259 -284
  120. package/src/project/index.d.ts +45 -0
  121. package/src/project/index.ts +134 -144
  122. package/src/project/merge-env.d.ts +1 -0
  123. package/src/stack.d.ts +21 -0
  124. package/src/stack.ts +54 -55
  125. package/src/tools.d.ts +3 -4
  126. package/src/tools.ts +48 -0
  127. package/src/types/expo-config.d.ts +49 -0
  128. package/dist/cdk/index.js +0 -55
  129. package/dist/project/merge-env.js +0 -31
  130. package/dist/tools.js +0 -35
  131. package/dist/types/cdk/index.d.ts +0 -2
  132. package/dist/types/expo.d.ts +0 -3
  133. package/dist/types/merge-env.d.ts +0 -1
  134. package/dist/types/tools.d.ts +0 -1
  135. package/lib/app.js +0 -49
  136. package/lib/commands/build-process/boot.js +0 -15
  137. package/lib/commands/build-process/cliFactory.js +0 -161
  138. package/lib/commands/build-process/dataLayer.js +0 -59
  139. package/lib/commands/build-process/index.js +0 -13
  140. package/lib/commands/build-process/readEnv.js +0 -37
  141. package/lib/commands/build-process/runMonoCommand.js +0 -102
  142. package/lib/commands/build-process/runners/processManager.js +0 -38
  143. package/lib/commands/build-process/runners/runBackground.js +0 -60
  144. package/lib/commands/build-process/runners/runForeground.js +0 -60
  145. package/lib/commands/build-process/test.js +0 -50
  146. package/lib/commands/build-process/testflag.js +0 -1
  147. package/lib/commands/build-process/validators.js +0 -17
  148. package/lib/commands/generate/generateSeed.js +0 -223
  149. package/lib/commands/generate/index.js +0 -30
  150. package/lib/commands/loadFromRoot.js +0 -55
  151. package/lib/commands/prune/index.js +0 -12
  152. package/lib/commands/prune/prune.js +0 -50
  153. package/lib/commands/seed/import.js +0 -30
  154. package/lib/commands/seed/index.js +0 -12
  155. package/lib/commands/submit/index.js +0 -38
  156. package/lib/commands/update/eas.js +0 -39
  157. package/lib/commands/update/index.js +0 -87
  158. package/lib/filterUnwantedEnvVars.js +0 -123
  159. package/lib/generateNewEnvList.js +0 -14
  160. package/lib/index.js +0 -58
  161. package/src/cdk/index.js +0 -59
  162. package/src/expo.js +0 -133
  163. package/src/merge-env.js +0 -32
  164. package/src/tools.js +0 -36
  165. package/types.d.ts +0 -83
  166. /package/dist/{expo-files → src/expo-files}/filterUnwantedEnvVars.js +0 -0
  167. /package/dist/{loadFromRoot.js → src/loadFromRoot.js} +0 -0
  168. /package/dist/{project → src/project}/build-readme.js +0 -0
  169. /package/dist/{project → src/project}/generate-docs.js +0 -0
  170. /package/dist/{merge-env.js → src/project/merge-env.js} +0 -0
  171. /package/dist/types/{project/build-mono-readme.d.ts → lib/commands/build-process/index.d.ts} +0 -0
  172. /package/dist/types/{project/generate-readme.d.ts → lib/commands/prune/index.d.ts} +0 -0
  173. /package/dist/types/{expo-files → src/expo-files}/filterUnwantedEnvVars.d.ts +0 -0
  174. /package/dist/types/{loadFromRoot.d.ts → src/loadFromRoot.d.ts} +0 -0
  175. /package/dist/types/{project → src}/merge-env.d.ts +0 -0
  176. /package/dist/types/{project → src/project}/build-readme.d.ts +0 -0
  177. /package/dist/types/{project → src/project}/generate-docs.d.ts +0 -0
  178. /package/dist/types/{stack.d.ts → src/stack.d.ts} +0 -0
  179. /package/lib/{config.js → config.ts} +0 -0
package/bin/mono.js CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import '../lib/index.js'
2
+ require('../dist/lib/index.js')
package/dist/index.js CHANGED
@@ -1,56 +1,37 @@
1
1
  "use strict";
2
2
  // Main entry point for @mono-labs/cli package
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.filterUnwantedEnvVarsEAS = exports.filterUnwantedEnvVars = exports.generateNewEnvList = void 0;
5
- exports.setData = setData;
6
- exports.mergeData = mergeData;
7
- exports.getData = getData;
8
- exports.hasData = hasData;
9
- exports.replaceTokens = replaceTokens;
10
- const filterUnwantedEnvVars_js_1 = require("./expo-files/filterUnwantedEnvVars.js");
11
- Object.defineProperty(exports, "filterUnwantedEnvVars", { enumerable: true, get: function () { return filterUnwantedEnvVars_js_1.filterUnwantedEnvVars; } });
12
- Object.defineProperty(exports, "filterUnwantedEnvVarsEAS", { enumerable: true, get: function () { return filterUnwantedEnvVars_js_1.filterUnwantedEnvVarsEAS; } });
13
- Object.defineProperty(exports, "generateNewEnvList", { enumerable: true, get: function () { return filterUnwantedEnvVars_js_1.generateNewEnvList; } });
14
- const dataLayer = Object.create(null);
15
- function setData(key, value) {
16
- if (value !== undefined) {
17
- dataLayer[key] = value;
18
- }
19
- }
20
- function mergeData(obj = {}) {
21
- Object.entries(obj).forEach(([k, v]) => setData(k, v));
22
- return dataLayer;
23
- }
24
- function getData(key) {
25
- return key ? dataLayer[key] : dataLayer;
26
- }
27
- function hasData(key) {
28
- return Object.prototype.hasOwnProperty.call(dataLayer, key);
29
- }
30
- /* ------------------------------------------------------------------
31
- * Token replacement
32
- * ------------------------------------------------------------------ */
33
- function replaceTokens(str, env) {
34
- if (typeof str !== 'string')
35
- return str;
36
- return str.replace(/\$\{([^}]+)\}|\$([A-Z0-9_]+)/g, (_match, k1, k2) => {
37
- const key = k1 || k2;
38
- // data layer takes priority
39
- if (hasData(key)) {
40
- const val = getData(key);
41
- return val == null ? '' : String(val);
42
- }
43
- // environment variables
44
- if (env && Object.prototype.hasOwnProperty.call(env, key)) {
45
- const val = env[key];
46
- return val == null ? '' : String(val);
47
- }
48
- return '';
49
- });
50
- }
4
+ exports.verifyOptionValue = exports.runMonoCommand = exports.buildCommands = exports.getRootJson = exports.getRootDirectory = exports.getMonoConfig = exports.boot = exports.hasData = exports.getData = exports.mergeData = exports.setData = exports.replaceTokens = exports.filterUnwantedEnvVarsEAS = exports.filterUnwantedEnvVars = exports.generateNewEnvList = void 0;
5
+ var generateNewEnvList_1 = require("./lib/generateNewEnvList");
6
+ Object.defineProperty(exports, "generateNewEnvList", { enumerable: true, get: function () { return generateNewEnvList_1.generateNewEnvList; } });
7
+ var filterUnwantedEnvVars_1 = require("./lib/filterUnwantedEnvVars");
8
+ Object.defineProperty(exports, "filterUnwantedEnvVars", { enumerable: true, get: function () { return filterUnwantedEnvVars_1.filterUnwantedEnvVars; } });
9
+ Object.defineProperty(exports, "filterUnwantedEnvVarsEAS", { enumerable: true, get: function () { return filterUnwantedEnvVars_1.filterUnwantedEnvVarsEAS; } });
10
+ var dataLayer_1 = require("./lib/commands/build-process/dataLayer");
11
+ Object.defineProperty(exports, "replaceTokens", { enumerable: true, get: function () { return dataLayer_1.replaceTokens; } });
12
+ Object.defineProperty(exports, "setData", { enumerable: true, get: function () { return dataLayer_1.setData; } });
13
+ Object.defineProperty(exports, "mergeData", { enumerable: true, get: function () { return dataLayer_1.mergeData; } });
14
+ Object.defineProperty(exports, "getData", { enumerable: true, get: function () { return dataLayer_1.getData; } });
15
+ Object.defineProperty(exports, "hasData", { enumerable: true, get: function () { return dataLayer_1.hasData; } });
16
+ var boot_1 = require("./lib/commands/build-process/boot");
17
+ Object.defineProperty(exports, "boot", { enumerable: true, get: function () { return boot_1.boot; } });
18
+ var loadFromRoot_1 = require("./lib/commands/loadFromRoot");
19
+ Object.defineProperty(exports, "getMonoConfig", { enumerable: true, get: function () { return loadFromRoot_1.getMonoConfig; } });
20
+ Object.defineProperty(exports, "getRootDirectory", { enumerable: true, get: function () { return loadFromRoot_1.getRootDirectory; } });
21
+ Object.defineProperty(exports, "getRootJson", { enumerable: true, get: function () { return loadFromRoot_1.getRootJson; } });
22
+ var cliFactory_1 = require("./lib/commands/build-process/cliFactory");
23
+ Object.defineProperty(exports, "buildCommands", { enumerable: true, get: function () { return cliFactory_1.buildCommands; } });
24
+ var runMonoCommand_1 = require("./lib/commands/build-process/runMonoCommand");
25
+ Object.defineProperty(exports, "runMonoCommand", { enumerable: true, get: function () { return runMonoCommand_1.runMonoCommand; } });
26
+ var validators_1 = require("./lib/commands/build-process/validators");
27
+ Object.defineProperty(exports, "verifyOptionValue", { enumerable: true, get: function () { return validators_1.verifyOptionValue; } });
28
+ const generateNewEnvList_2 = require("./lib/generateNewEnvList");
29
+ const filterUnwantedEnvVars_2 = require("./lib/filterUnwantedEnvVars");
30
+ const dataLayer_2 = require("./lib/commands/build-process/dataLayer");
31
+ // Default export for convenience
51
32
  exports.default = {
52
- generateNewEnvList: filterUnwantedEnvVars_js_1.generateNewEnvList,
53
- replaceTokens,
54
- filterUnwantedEnvVars: filterUnwantedEnvVars_js_1.filterUnwantedEnvVars,
55
- filterUnwantedEnvVarsEAS: filterUnwantedEnvVars_js_1.filterUnwantedEnvVarsEAS,
33
+ replaceTokens: dataLayer_2.replaceTokens,
34
+ generateNewEnvList: generateNewEnvList_2.generateNewEnvList,
35
+ filterUnwantedEnvVars: filterUnwantedEnvVars_2.filterUnwantedEnvVars,
36
+ filterUnwantedEnvVarsEAS: filterUnwantedEnvVars_2.filterUnwantedEnvVarsEAS,
56
37
  };
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateEnvValues = exports.program = void 0;
7
+ const commander_1 = require("commander");
8
+ const config_1 = require("./config");
9
+ const node_fs_1 = __importDefault(require("node:fs"));
10
+ const node_path_1 = require("node:path");
11
+ function findNearestPackageJson(startDir) {
12
+ let current = startDir;
13
+ while (true) {
14
+ const candidate = (0, node_path_1.join)(current, 'package.json');
15
+ if (node_fs_1.default.existsSync(candidate))
16
+ return candidate;
17
+ const parent = (0, node_path_1.dirname)(current);
18
+ if (parent === current) {
19
+ throw new Error('Unable to locate package.json for CLI');
20
+ }
21
+ current = parent;
22
+ }
23
+ }
24
+ const pkgPath = findNearestPackageJson(__dirname);
25
+ const pkg = JSON.parse(node_fs_1.default.readFileSync(pkgPath, 'utf8'));
26
+ const version = pkg.version || '0.0.1';
27
+ exports.program = new commander_1.Command();
28
+ const getBinFromPackageJSON = () => {
29
+ const keyList = Object.keys(pkg.bin ?? {});
30
+ if (keyList.length === 0) {
31
+ throw new Error('No bin field found in package.json');
32
+ }
33
+ return keyList[0];
34
+ };
35
+ const programName = getBinFromPackageJSON();
36
+ exports.program
37
+ .name(programName)
38
+ .description(pkg.description || '')
39
+ .version(version);
40
+ const NEXT_PUBLIC_API_URL = ((process.env.NEXT_PUBLIC_API_URL &&
41
+ process.env.NEXT_PUBLIC_API_URL.length > 0) ||
42
+ config_1.STAGING_URL);
43
+ const generateEnvValues = (forceProd = false, ngrokUrl = 'localhost:3000', useAtlas = false) => {
44
+ return {
45
+ ...process.env,
46
+ NEXT_PUBLIC_API_URL,
47
+ NEXT_FORCE_PROD: String(forceProd),
48
+ EXPO_PRIVATE_API_URL: ngrokUrl,
49
+ EXPO_UNSTABLE_ATLAS: String(useAtlas),
50
+ };
51
+ };
52
+ exports.generateEnvValues = generateEnvValues;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.boot = boot;
4
+ // Boot logic: load root + mono configuration
5
+ const loadFromRoot_1 = require("../loadFromRoot");
6
+ function boot() {
7
+ const rootDir = (0, loadFromRoot_1.getRootDirectory)();
8
+ const rootJson = (0, loadFromRoot_1.getRootJson)();
9
+ const { files, config } = (0, loadFromRoot_1.getMonoConfig)();
10
+ return { rootDir, rootJson, files, config };
11
+ }
12
+ exports.default = boot;
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createConfigCommands = createConfigCommands;
7
+ exports.createCliCommands = createCliCommands;
8
+ exports.buildCommands = buildCommands;
9
+ const app_1 = require("../../app");
10
+ const commander_1 = require("commander");
11
+ const runMonoCommand_1 = __importDefault(require("./runMonoCommand"));
12
+ const validators_1 = require("./validators");
13
+ const dataLayer_1 = require("./dataLayer");
14
+ const loadFromRoot_1 = require("../loadFromRoot");
15
+ const prune_1 = require("../prune/prune");
16
+ const testflag_1 = require("./testflag");
17
+ function buildDefaultLookup(config) {
18
+ const defaults = {};
19
+ // Handle argument default
20
+ if (config.argument?.default !== undefined) {
21
+ defaults.arg = config.argument.default;
22
+ }
23
+ // Handle options defaults
24
+ if (config.options) {
25
+ for (const [key, option] of Object.entries(config.options)) {
26
+ if (option.default !== undefined) {
27
+ defaults[key] = option.default;
28
+ }
29
+ }
30
+ }
31
+ return defaults;
32
+ }
33
+ /**
34
+ * Register commander commands for each mono file definition.
35
+ * Handles argument, options, validation, and action wiring.
36
+ */
37
+ function createConfigCommands() {
38
+ const config = new commander_1.Command('config').description('Manage configuration');
39
+ config
40
+ .command('set <key> <value>')
41
+ .description('Set a configuration value')
42
+ .action((_key, _value) => { });
43
+ config
44
+ .command('get <key>')
45
+ .description('Get a configuration value')
46
+ .action((_key) => { });
47
+ config
48
+ .command('list')
49
+ .description('List all configuration values')
50
+ .action(() => { });
51
+ return config;
52
+ }
53
+ function createCliCommands() {
54
+ const tools = new commander_1.Command('tools').description('Manage tools');
55
+ tools
56
+ .command('prune')
57
+ .description('Prune unused branches in git')
58
+ .action(() => {
59
+ (0, prune_1.pruneRepo)();
60
+ });
61
+ return tools;
62
+ }
63
+ function buildCommands(files) {
64
+ try {
65
+ const { config } = (0, loadFromRoot_1.getMonoConfig)();
66
+ Object.entries(files).forEach(([commandName, configObject]) => {
67
+ const optionsData = configObject.options || {};
68
+ let current = app_1.program
69
+ .command(commandName)
70
+ .description(configObject.description || 'Mono command');
71
+ const argInfo = configObject.argument;
72
+ // Argument
73
+ if (argInfo) {
74
+ const required = !!argInfo.required;
75
+ const type = argInfo.type || 'string';
76
+ const argSpec = required ? `<${type}>` : `[${type}]`;
77
+ current = current.argument(argSpec, argInfo.description || '');
78
+ }
79
+ // Options
80
+ Object.entries(optionsData).forEach(([optionKey, meta]) => {
81
+ const type = meta.type || 'boolean';
82
+ const shortcut = meta.shortcut ? `-${meta.shortcut}, ` : '';
83
+ if (type === 'string') {
84
+ current = current.option(`${shortcut}--${optionKey} <${optionKey}>`, meta.description || '');
85
+ }
86
+ else {
87
+ current = current.option(`${shortcut}--${optionKey}`, meta.description || '');
88
+ }
89
+ });
90
+ config.prodFlag = config.prodFlag || 'prod';
91
+ current = current.option(`--${config.prodFlag}`, 'Process execution mode: prduction or dev', false);
92
+ current.action(async (arg, cmd) => {
93
+ const envDefaults = {};
94
+ const optionValueList = argInfo?.options;
95
+ let actualOptions = optionValueList;
96
+ if (optionValueList) {
97
+ actualOptions = argInfo?.allowAll ? [...optionValueList, 'all'] : [...optionValueList];
98
+ }
99
+ if (argInfo) {
100
+ if (argInfo &&
101
+ optionValueList &&
102
+ actualOptions &&
103
+ !actualOptions.includes(String(arg ?? argInfo.default))) {
104
+ throw new Error(`Invalid argument value for ${commandName}, must be one of: ${actualOptions.join(', ')}`);
105
+ }
106
+ }
107
+ const optionsDataList = Object.keys(optionsData).map((key) => ({
108
+ ...optionsData[key],
109
+ name: key,
110
+ }));
111
+ optionsDataList.forEach((item) => {
112
+ if (item.default) {
113
+ envDefaults[item.name] = item.default;
114
+ }
115
+ });
116
+ try {
117
+ const optionVals = {
118
+ ...envDefaults,
119
+ ...(cmd.opts ? cmd.opts() : cmd),
120
+ };
121
+ Object.keys(optionVals).forEach((k) => {
122
+ optionVals[k] = (0, validators_1.verifyOptionValue)(k, optionVals[k], optionsData);
123
+ });
124
+ optionVals['prod'] = optionVals[config.prodFlag] || false;
125
+ const defaultLookups = buildDefaultLookup(configObject);
126
+ const argVal = arg || configObject.argument?.default;
127
+ const args = { ...defaultLookups, arg: argVal };
128
+ if (testflag_1.testFlag) {
129
+ console.log('defaults', optionVals);
130
+ console.log('object', { ...optionVals, ...args });
131
+ }
132
+ (0, dataLayer_1.mergeData)({ ...optionVals, ...args });
133
+ await (0, runMonoCommand_1.default)(configObject, optionVals);
134
+ }
135
+ catch (err) {
136
+ console.error('Error executing mono command:', err?.message);
137
+ }
138
+ });
139
+ });
140
+ }
141
+ catch (err) {
142
+ console.error('Error executing mono command:', err?.message);
143
+ }
144
+ }
145
+ exports.default = buildCommands;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ // Shared mutable key/value store for build-process commands.
3
+ // Extracts dynamic values from preactions and holds defaults from options.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.setData = setData;
6
+ exports.mergeData = mergeData;
7
+ exports.getData = getData;
8
+ exports.hasData = hasData;
9
+ exports.replaceTokens = replaceTokens;
10
+ const testflag_1 = require("./testflag");
11
+ const dataLayer = {};
12
+ function setData(key, value) {
13
+ if (testflag_1.testFlag) {
14
+ console.log(`→ dataLayer set: ${key} = ${String(value)}`);
15
+ }
16
+ if (value !== undefined)
17
+ dataLayer[key] = value;
18
+ }
19
+ function mergeData(obj = {}) {
20
+ if (testflag_1.testFlag) {
21
+ console.log(`→ dataLayer mergeData: ${JSON.stringify(obj)}`);
22
+ }
23
+ Object.entries(obj).forEach(([k, v]) => setData(k, v));
24
+ return dataLayer;
25
+ }
26
+ function getData(key) {
27
+ if (testflag_1.testFlag) {
28
+ console.log(`→ dataLayer get: ${String(key)}`);
29
+ }
30
+ return key ? dataLayer[key] : dataLayer;
31
+ }
32
+ function hasData(key) {
33
+ return Object.prototype.hasOwnProperty.call(dataLayer, key);
34
+ }
35
+ function replaceTokens(str, env) {
36
+ if (typeof str !== 'string')
37
+ return str;
38
+ console.log('→ replaceTokens called');
39
+ console.log('dataLayer:', dataLayer);
40
+ return str.replace(/\$\{([^}]+)\}|\$([A-Z0-9_]+)/g, (_m, k1, k2) => {
41
+ const k = (k1 || k2);
42
+ // existing data layer takes priority
43
+ if (hasData(k)) {
44
+ const val = getData(k);
45
+ return val == null ? '' : String(val);
46
+ }
47
+ // environment variables
48
+ if (env && Object.prototype.hasOwnProperty.call(env, k)) {
49
+ const val = env[k];
50
+ return val == null ? '' : String(val);
51
+ }
52
+ // fallback
53
+ return '';
54
+ });
55
+ }
56
+ exports.default = dataLayer;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ // Orchestrator for modular build-process command system.
4
+ const boot_1 = require("./boot");
5
+ const cliFactory_1 = require("./cliFactory");
6
+ const processManager_1 = require("./runners/processManager");
7
+ const app_1 = require("../../app");
8
+ const { files } = (0, boot_1.boot)();
9
+ (0, processManager_1.ensureSignalHandlers)();
10
+ (0, cliFactory_1.buildCommands)(files);
11
+ app_1.program.addCommand((0, cliFactory_1.createCliCommands)());
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseEnvFile = parseEnvFile;
7
+ // scripts/read-env.mjs
8
+ const node_fs_1 = __importDefault(require("node:fs"));
9
+ function parseEnvFile(filePath) {
10
+ if (!node_fs_1.default.existsSync(filePath)) {
11
+ return {};
12
+ }
13
+ const content = node_fs_1.default.readFileSync(filePath, 'utf8');
14
+ const keymap = {};
15
+ for (const line of content.split(/\r?\n/)) {
16
+ const trimmed = line.trim();
17
+ // skip empty lines and comments
18
+ if (!trimmed || trimmed.startsWith('#'))
19
+ continue;
20
+ // split on first "=" only
21
+ const idx = trimmed.indexOf('=');
22
+ if (idx === -1)
23
+ continue;
24
+ const key = trimmed.slice(0, idx).trim();
25
+ let value = trimmed.slice(idx + 1).trim();
26
+ // strip surrounding quotes if present
27
+ if ((value.startsWith('"') && value.endsWith('"')) ||
28
+ (value.startsWith("'") && value.endsWith("'"))) {
29
+ value = value.slice(1, -1);
30
+ }
31
+ keymap[key] = value;
32
+ }
33
+ return keymap;
34
+ }
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getAllowAllKeys = getAllowAllKeys;
7
+ exports.runMonoCommand = runMonoCommand;
8
+ const runForeground_1 = require("./runners/runForeground");
9
+ const runBackground_1 = require("./runners/runBackground");
10
+ const processManager_1 = require("./runners/processManager");
11
+ const loadFromRoot_1 = require("../loadFromRoot");
12
+ const readEnv_1 = require("./readEnv");
13
+ const node_path_1 = __importDefault(require("node:path"));
14
+ function getAllowAllKeys(cfg) {
15
+ const decls = cfg.options ?? {};
16
+ return Object.entries(decls)
17
+ .filter(([, v]) => Boolean(v?.allowAll) &&
18
+ Array.isArray(v?.options) &&
19
+ v.options.length > 0)
20
+ .map(([k]) => k);
21
+ }
22
+ /**
23
+ * Orchestrate execution of a single mono command definition.
24
+ * Phases:
25
+ * 1. Preactions (sequential, blocking) via runForeground
26
+ * 2. Actions (background except last; last attached) via runBackground
27
+ * Environment selection based on --stage flag and injection of AWS_PROFILE.
28
+ */
29
+ async function runMonoCommand(configObject, options = {}) {
30
+ const { config } = (0, loadFromRoot_1.getMonoConfig)();
31
+ const devConfig = configObject.environments?.dev ?? {};
32
+ console.log('configObject:', JSON.stringify(configObject, null, 2));
33
+ // Usage:
34
+ const envPath = node_path_1.default.resolve(process.cwd(), '.env');
35
+ const keymap = (0, readEnv_1.parseEnvFile)(envPath);
36
+ const prodConfig = configObject.environments?.prod ?? {};
37
+ const awsProfile = process.env.CDK_DEPLOY_PROFILE || 'default';
38
+ const envObjBase = options.prod ? { ...prodConfig } : { ...devConfig };
39
+ Object.keys(envObjBase).forEach((k) => {
40
+ if (typeof envObjBase[k] === 'string' &&
41
+ envObjBase[k].startsWith('$') &&
42
+ !envObjBase[k].startsWith('${')) {
43
+ const refKey = envObjBase[k].substring(1);
44
+ envObjBase[k] = keymap[refKey] || '';
45
+ }
46
+ });
47
+ envObjBase.AWS_PROFILE = awsProfile;
48
+ const envKeys = Object.keys(process.env).filter((k) => k.startsWith('MONO_'));
49
+ const envMapList = config.envMap ?? ['FAILURE'];
50
+ const combinedEnv = { ...process.env, ...envObjBase };
51
+ const envMapVals = {};
52
+ envKeys.forEach((k) => {
53
+ envMapList.forEach((item) => {
54
+ envMapVals[k.replace('MONO', item)] = combinedEnv[k];
55
+ });
56
+ });
57
+ const envObj = { ...envObjBase, ...envMapVals };
58
+ const preactions = configObject.preactions ?? [];
59
+ const actions = configObject.actions ?? [];
60
+ console.log(`→ Executing mono command: ${configObject.name || 'Unnamed Command'}`);
61
+ console.log(`→ Using AWS profile: ${awsProfile}`);
62
+ console.log(`→ Using environment: ${options.stage ? 'stage' : 'dev'}`);
63
+ console.log('→ Environment variables:', envObj);
64
+ // Run preactions sequentially
65
+ for (const cmd of preactions) {
66
+ await (0, runForeground_1.runForeground)(cmd, envObj);
67
+ }
68
+ if (actions.length === 0)
69
+ return;
70
+ const bg = actions.slice(0, -1);
71
+ const fg = actions[actions.length - 1];
72
+ for (const cmd of bg) {
73
+ void (0, runBackground_1.runBackground)(cmd, envObj, 'background');
74
+ }
75
+ try {
76
+ await (0, runBackground_1.runBackground)(fg, envObj, 'foreground', true);
77
+ }
78
+ finally {
79
+ (0, processManager_1.killAllBackground)();
80
+ }
81
+ }
82
+ exports.default = runMonoCommand;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bgChildren = void 0;
4
+ exports.registerBackground = registerBackground;
5
+ exports.killAllBackground = killAllBackground;
6
+ exports.ensureSignalHandlers = ensureSignalHandlers;
7
+ const child_process_1 = require("child_process");
8
+ // Track background processes so we can kill them on exit
9
+ exports.bgChildren = new Set();
10
+ function registerBackground(child) {
11
+ exports.bgChildren.add(child);
12
+ }
13
+ function killAllBackground() {
14
+ for (const child of Array.from(exports.bgChildren)) {
15
+ try {
16
+ if (process.platform === 'win32') {
17
+ (0, child_process_1.spawn)('taskkill', ['/PID', String(child.pid), '/T', '/F'], {
18
+ shell: true,
19
+ stdio: 'ignore',
20
+ });
21
+ }
22
+ else if (child.pid) {
23
+ process.kill(-child.pid, 'SIGTERM');
24
+ }
25
+ }
26
+ catch {
27
+ // ignore
28
+ }
29
+ }
30
+ exports.bgChildren.clear();
31
+ }
32
+ let signalsRegistered = false;
33
+ function ensureSignalHandlers() {
34
+ if (signalsRegistered)
35
+ return;
36
+ signalsRegistered = true;
37
+ process.on('SIGINT', () => {
38
+ killAllBackground();
39
+ process.exit(130);
40
+ });
41
+ process.on('SIGTERM', () => {
42
+ killAllBackground();
43
+ process.exit(143);
44
+ });
45
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runBackground = runBackground;
4
+ const child_process_1 = require("child_process");
5
+ const dataLayer_1 = require("../dataLayer");
6
+ const processManager_1 = require("./processManager");
7
+ function createdExpandedEnv(envObj) {
8
+ const expandedEnv = {};
9
+ for (const k of Object.keys(envObj)) {
10
+ const v = envObj[k];
11
+ expandedEnv[k] = typeof v === 'string' ? (0, dataLayer_1.replaceTokens)(v) : v;
12
+ }
13
+ return expandedEnv;
14
+ }
15
+ function runBackground(cmd, envObj = {}, logName = 'background', attached = false) {
16
+ const isWin = process.platform === 'win32';
17
+ // Replace ${field} tokens in env values using dataLayer
18
+ const expandedEnv = createdExpandedEnv(envObj);
19
+ console.log(`→ ${logName} action ${attached ? '(attached)' : ''}: ${cmd}`);
20
+ // Replace in command string
21
+ const outCmd = (0, dataLayer_1.replaceTokens)(cmd);
22
+ console.log(`→ ${logName} action ${attached ? '(attached)' : ''}: ${outCmd}`);
23
+ return new Promise((resolve, reject) => {
24
+ const child = (0, child_process_1.spawn)(outCmd, {
25
+ shell: true,
26
+ stdio: attached ? 'inherit' : 'ignore',
27
+ env: { ...process.env, ...expandedEnv },
28
+ detached: !attached && !isWin,
29
+ windowsHide: !attached && isWin,
30
+ });
31
+ if (!attached && !isWin)
32
+ child.unref();
33
+ (0, processManager_1.registerBackground)(child);
34
+ child.once('error', (err) => {
35
+ reject(err);
36
+ });
37
+ child.once('exit', (code, signal) => {
38
+ if (signal)
39
+ return reject(new Error(`${cmd} exited via signal ${signal}`));
40
+ if (code === 0)
41
+ return resolve();
42
+ reject(new Error(`${cmd} exited with code ${code}`));
43
+ });
44
+ });
45
+ }
46
+ exports.default = runBackground;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runForeground = runForeground;
4
+ const child_process_1 = require("child_process");
5
+ const dataLayer_1 = require("../dataLayer");
6
+ const filterUnwantedEnvVars_1 = require("../../../../lib/filterUnwantedEnvVars");
7
+ // Regex to capture tokens like: {out:field value}
8
+ const TOKEN_RX = /\{out:(?<field>[^\s}]+)\s+(?<value>[^\s}]+)\}/g;
9
+ /**
10
+ * Run a command in the foreground, capturing stdout/stderr. Extracts token patterns
11
+ * of the form {out:field value} and stores them in the shared dataLayer.
12
+ */
13
+ function runForeground(cmd, envObj = {}, _options = {}) {
14
+ const filteredEnv = (0, filterUnwantedEnvVars_1.filterUnwantedEnvVars)(process.env);
15
+ const newEnv = { ...filteredEnv, ...envObj };
16
+ const newCmd = (0, dataLayer_1.replaceTokens)(cmd, newEnv);
17
+ return new Promise((resolve, reject) => {
18
+ let lastLine = '';
19
+ let buffer = '';
20
+ const child = (0, child_process_1.spawn)(newCmd, [], {
21
+ shell: true,
22
+ env: { ...newEnv },
23
+ stdio: ['inherit', 'pipe', 'pipe'],
24
+ });
25
+ const handleData = (chunk) => {
26
+ const text = chunk.toString();
27
+ buffer += text;
28
+ const lines = text.trim().split(/\r?\n/);
29
+ if (lines.length)
30
+ lastLine = lines[lines.length - 1];
31
+ process.stdout.write(text); // echo output
32
+ };
33
+ child.stdout.on('data', handleData);
34
+ child.stderr.on('data', handleData);
35
+ child.on('error', reject);
36
+ child.on('exit', (code, signal) => {
37
+ // Extract tokens and populate dataLayer
38
+ for (const match of buffer.matchAll(TOKEN_RX)) {
39
+ const groups = match.groups;
40
+ if (groups?.field) {
41
+ (0, dataLayer_1.setData)(groups.field, groups.value);
42
+ }
43
+ }
44
+ if (signal)
45
+ return reject(new Error(`${cmd} exited via signal ${signal}`));
46
+ if (code === 0)
47
+ return resolve(lastLine);
48
+ reject(new Error(`${cmd} exited with code ${code}. Last line: ${lastLine}`));
49
+ });
50
+ });
51
+ }
52
+ exports.default = runForeground;