@fnd-platform/cli 1.0.0-alpha.3 → 1.0.0-alpha.31

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 (237) hide show
  1. package/LICENSE +21 -0
  2. package/lib/bin/fnd.js +101 -4
  3. package/lib/bin/fnd.js.map +1 -1
  4. package/lib/commands/add.d.ts.map +1 -1
  5. package/lib/commands/add.js +134 -67
  6. package/lib/commands/add.js.map +1 -1
  7. package/lib/commands/build.js +29 -34
  8. package/lib/commands/build.js.map +1 -1
  9. package/lib/commands/deploy.d.ts +34 -9
  10. package/lib/commands/deploy.d.ts.map +1 -1
  11. package/lib/commands/deploy.js +246 -52
  12. package/lib/commands/deploy.js.map +1 -1
  13. package/lib/commands/destroy.d.ts +69 -0
  14. package/lib/commands/destroy.d.ts.map +1 -0
  15. package/lib/commands/destroy.js +172 -0
  16. package/lib/commands/destroy.js.map +1 -0
  17. package/lib/commands/index.d.ts +2 -0
  18. package/lib/commands/index.d.ts.map +1 -1
  19. package/lib/commands/index.js +7 -13
  20. package/lib/commands/index.js.map +1 -1
  21. package/lib/commands/new.js +46 -50
  22. package/lib/commands/new.js.map +1 -1
  23. package/lib/commands/synth.d.ts +8 -1
  24. package/lib/commands/synth.d.ts.map +1 -1
  25. package/lib/commands/synth.js +82 -22
  26. package/lib/commands/synth.js.map +1 -1
  27. package/lib/commands/test.d.ts +73 -0
  28. package/lib/commands/test.d.ts.map +1 -0
  29. package/lib/commands/test.js +193 -0
  30. package/lib/commands/test.js.map +1 -0
  31. package/lib/index.d.ts +11 -2
  32. package/lib/index.d.ts.map +1 -1
  33. package/lib/index.js +31 -15
  34. package/lib/index.js.map +1 -1
  35. package/lib/lib/deploy-utils.d.ts +190 -0
  36. package/lib/lib/deploy-utils.d.ts.map +1 -0
  37. package/lib/lib/deploy-utils.js +372 -0
  38. package/lib/lib/deploy-utils.js.map +1 -0
  39. package/lib/lib/infra-generator.d.ts +118 -0
  40. package/lib/lib/infra-generator.d.ts.map +1 -1
  41. package/lib/lib/infra-generator.js +1051 -59
  42. package/lib/lib/infra-generator.js.map +1 -1
  43. package/lib/lib/logger.js +23 -29
  44. package/lib/lib/logger.js.map +1 -1
  45. package/lib/lib/nx-stats.js +12 -18
  46. package/lib/lib/nx-stats.js.map +1 -1
  47. package/lib/lib/project.js +7 -11
  48. package/lib/lib/project.js.map +1 -1
  49. package/lib/lib/templates.js +2 -6
  50. package/lib/lib/templates.js.map +1 -1
  51. package/lib/lib/timer.js +2 -7
  52. package/lib/lib/timer.js.map +1 -1
  53. package/lib/lib/validation.d.ts +135 -0
  54. package/lib/lib/validation.d.ts.map +1 -0
  55. package/lib/lib/validation.js +233 -0
  56. package/lib/lib/validation.js.map +1 -0
  57. package/lib/tui/App.d.ts +11 -0
  58. package/lib/tui/App.d.ts.map +1 -0
  59. package/lib/tui/App.js +98 -0
  60. package/lib/tui/App.js.map +1 -0
  61. package/lib/tui/components/branding/AsciiBanner.d.ts +21 -0
  62. package/lib/tui/components/branding/AsciiBanner.d.ts.map +1 -0
  63. package/lib/tui/components/branding/AsciiBanner.js +15 -0
  64. package/lib/tui/components/branding/AsciiBanner.js.map +1 -0
  65. package/lib/tui/components/branding/index.d.ts +5 -0
  66. package/lib/tui/components/branding/index.d.ts.map +1 -0
  67. package/lib/tui/components/branding/index.js +5 -0
  68. package/lib/tui/components/branding/index.js.map +1 -0
  69. package/lib/tui/components/feedback/Notification.d.ts +51 -0
  70. package/lib/tui/components/feedback/Notification.d.ts.map +1 -0
  71. package/lib/tui/components/feedback/Notification.js +89 -0
  72. package/lib/tui/components/feedback/Notification.js.map +1 -0
  73. package/lib/tui/components/feedback/ProgressBar.d.ts +46 -0
  74. package/lib/tui/components/feedback/ProgressBar.d.ts.map +1 -0
  75. package/lib/tui/components/feedback/ProgressBar.js +30 -0
  76. package/lib/tui/components/feedback/ProgressBar.js.map +1 -0
  77. package/lib/tui/components/feedback/ProgressSteps.d.ts +35 -0
  78. package/lib/tui/components/feedback/ProgressSteps.d.ts.map +1 -0
  79. package/lib/tui/components/feedback/ProgressSteps.js +37 -0
  80. package/lib/tui/components/feedback/ProgressSteps.js.map +1 -0
  81. package/lib/tui/components/feedback/Spinner.d.ts +18 -0
  82. package/lib/tui/components/feedback/Spinner.d.ts.map +1 -0
  83. package/lib/tui/components/feedback/Spinner.js +28 -0
  84. package/lib/tui/components/feedback/Spinner.js.map +1 -0
  85. package/lib/tui/components/feedback/index.d.ts +8 -0
  86. package/lib/tui/components/feedback/index.d.ts.map +1 -0
  87. package/lib/tui/components/feedback/index.js +8 -0
  88. package/lib/tui/components/feedback/index.js.map +1 -0
  89. package/lib/tui/components/index.d.ts +8 -0
  90. package/lib/tui/components/index.d.ts.map +1 -0
  91. package/lib/tui/components/index.js +8 -0
  92. package/lib/tui/components/index.js.map +1 -0
  93. package/lib/tui/components/input/Checkbox.d.ts +26 -0
  94. package/lib/tui/components/input/Checkbox.d.ts.map +1 -0
  95. package/lib/tui/components/input/Checkbox.js +20 -0
  96. package/lib/tui/components/input/Checkbox.js.map +1 -0
  97. package/lib/tui/components/input/SelectInput.d.ts +41 -0
  98. package/lib/tui/components/input/SelectInput.d.ts.map +1 -0
  99. package/lib/tui/components/input/SelectInput.js +53 -0
  100. package/lib/tui/components/input/SelectInput.js.map +1 -0
  101. package/lib/tui/components/input/TextInput.d.ts +30 -0
  102. package/lib/tui/components/input/TextInput.d.ts.map +1 -0
  103. package/lib/tui/components/input/TextInput.js +48 -0
  104. package/lib/tui/components/input/TextInput.js.map +1 -0
  105. package/lib/tui/components/input/index.d.ts +7 -0
  106. package/lib/tui/components/input/index.d.ts.map +1 -0
  107. package/lib/tui/components/input/index.js +7 -0
  108. package/lib/tui/components/input/index.js.map +1 -0
  109. package/lib/tui/components/layout/Breadcrumbs.d.ts +11 -0
  110. package/lib/tui/components/layout/Breadcrumbs.d.ts.map +1 -0
  111. package/lib/tui/components/layout/Breadcrumbs.js +34 -0
  112. package/lib/tui/components/layout/Breadcrumbs.js.map +1 -0
  113. package/lib/tui/components/layout/Footer.d.ts +11 -0
  114. package/lib/tui/components/layout/Footer.d.ts.map +1 -0
  115. package/lib/tui/components/layout/Footer.js +20 -0
  116. package/lib/tui/components/layout/Footer.js.map +1 -0
  117. package/lib/tui/components/layout/Header.d.ts +21 -0
  118. package/lib/tui/components/layout/Header.d.ts.map +1 -0
  119. package/lib/tui/components/layout/Header.js +21 -0
  120. package/lib/tui/components/layout/Header.js.map +1 -0
  121. package/lib/tui/components/layout/Screen.d.ts +27 -0
  122. package/lib/tui/components/layout/Screen.d.ts.map +1 -0
  123. package/lib/tui/components/layout/Screen.js +11 -0
  124. package/lib/tui/components/layout/Screen.js.map +1 -0
  125. package/lib/tui/components/layout/index.d.ts +8 -0
  126. package/lib/tui/components/layout/index.d.ts.map +1 -0
  127. package/lib/tui/components/layout/index.js +8 -0
  128. package/lib/tui/components/layout/index.js.map +1 -0
  129. package/lib/tui/hooks/index.d.ts +20 -0
  130. package/lib/tui/hooks/index.d.ts.map +1 -0
  131. package/lib/tui/hooks/index.js +18 -0
  132. package/lib/tui/hooks/index.js.map +1 -0
  133. package/lib/tui/hooks/useAddPackage.d.ts +120 -0
  134. package/lib/tui/hooks/useAddPackage.d.ts.map +1 -0
  135. package/lib/tui/hooks/useAddPackage.js +357 -0
  136. package/lib/tui/hooks/useAddPackage.js.map +1 -0
  137. package/lib/tui/hooks/useCreateProject.d.ts +66 -0
  138. package/lib/tui/hooks/useCreateProject.d.ts.map +1 -0
  139. package/lib/tui/hooks/useCreateProject.js +158 -0
  140. package/lib/tui/hooks/useCreateProject.js.map +1 -0
  141. package/lib/tui/hooks/useDeploy.d.ts +93 -0
  142. package/lib/tui/hooks/useDeploy.d.ts.map +1 -0
  143. package/lib/tui/hooks/useDeploy.js +254 -0
  144. package/lib/tui/hooks/useDeploy.js.map +1 -0
  145. package/lib/tui/hooks/useKeyboard.d.ts +66 -0
  146. package/lib/tui/hooks/useKeyboard.d.ts.map +1 -0
  147. package/lib/tui/hooks/useKeyboard.js +102 -0
  148. package/lib/tui/hooks/useKeyboard.js.map +1 -0
  149. package/lib/tui/hooks/useNavigation.d.ts +33 -0
  150. package/lib/tui/hooks/useNavigation.d.ts.map +1 -0
  151. package/lib/tui/hooks/useNavigation.js +27 -0
  152. package/lib/tui/hooks/useNavigation.js.map +1 -0
  153. package/lib/tui/hooks/useProject.d.ts +36 -0
  154. package/lib/tui/hooks/useProject.d.ts.map +1 -0
  155. package/lib/tui/hooks/useProject.js +47 -0
  156. package/lib/tui/hooks/useProject.js.map +1 -0
  157. package/lib/tui/index.d.ts +15 -0
  158. package/lib/tui/index.d.ts.map +1 -0
  159. package/lib/tui/index.js +16 -0
  160. package/lib/tui/index.js.map +1 -0
  161. package/lib/tui/lib/add-package-tui.d.ts +130 -0
  162. package/lib/tui/lib/add-package-tui.d.ts.map +1 -0
  163. package/lib/tui/lib/add-package-tui.js +492 -0
  164. package/lib/tui/lib/add-package-tui.js.map +1 -0
  165. package/lib/tui/lib/create-project-tui.d.ts +92 -0
  166. package/lib/tui/lib/create-project-tui.d.ts.map +1 -0
  167. package/lib/tui/lib/create-project-tui.js +181 -0
  168. package/lib/tui/lib/create-project-tui.js.map +1 -0
  169. package/lib/tui/lib/deploy-tui.d.ts +131 -0
  170. package/lib/tui/lib/deploy-tui.d.ts.map +1 -0
  171. package/lib/tui/lib/deploy-tui.js +347 -0
  172. package/lib/tui/lib/deploy-tui.js.map +1 -0
  173. package/lib/tui/screens/AddPackageScreen.d.ts +12 -0
  174. package/lib/tui/screens/AddPackageScreen.d.ts.map +1 -0
  175. package/lib/tui/screens/AddPackageScreen.js +436 -0
  176. package/lib/tui/screens/AddPackageScreen.js.map +1 -0
  177. package/lib/tui/screens/CreateProjectScreen.d.ts +12 -0
  178. package/lib/tui/screens/CreateProjectScreen.d.ts.map +1 -0
  179. package/lib/tui/screens/CreateProjectScreen.js +261 -0
  180. package/lib/tui/screens/CreateProjectScreen.js.map +1 -0
  181. package/lib/tui/screens/DeployScreen.d.ts +11 -0
  182. package/lib/tui/screens/DeployScreen.d.ts.map +1 -0
  183. package/lib/tui/screens/DeployScreen.js +224 -0
  184. package/lib/tui/screens/DeployScreen.js.map +1 -0
  185. package/lib/tui/screens/ProjectDashboard.d.ts +11 -0
  186. package/lib/tui/screens/ProjectDashboard.d.ts.map +1 -0
  187. package/lib/tui/screens/ProjectDashboard.js +81 -0
  188. package/lib/tui/screens/ProjectDashboard.js.map +1 -0
  189. package/lib/tui/screens/WelcomeScreen.d.ts +11 -0
  190. package/lib/tui/screens/WelcomeScreen.d.ts.map +1 -0
  191. package/lib/tui/screens/WelcomeScreen.js +26 -0
  192. package/lib/tui/screens/WelcomeScreen.js.map +1 -0
  193. package/lib/tui/screens/index.d.ts +9 -0
  194. package/lib/tui/screens/index.d.ts.map +1 -0
  195. package/lib/tui/screens/index.js +9 -0
  196. package/lib/tui/screens/index.js.map +1 -0
  197. package/lib/tui/services/ConfigService.d.ts +133 -0
  198. package/lib/tui/services/ConfigService.d.ts.map +1 -0
  199. package/lib/tui/services/ConfigService.js +221 -0
  200. package/lib/tui/services/ConfigService.js.map +1 -0
  201. package/lib/tui/services/ProjectService.d.ts +55 -0
  202. package/lib/tui/services/ProjectService.d.ts.map +1 -0
  203. package/lib/tui/services/ProjectService.js +179 -0
  204. package/lib/tui/services/ProjectService.js.map +1 -0
  205. package/lib/tui/services/index.d.ts +6 -0
  206. package/lib/tui/services/index.d.ts.map +1 -0
  207. package/lib/tui/services/index.js +6 -0
  208. package/lib/tui/services/index.js.map +1 -0
  209. package/lib/tui/state/AppContext.d.ts +58 -0
  210. package/lib/tui/state/AppContext.d.ts.map +1 -0
  211. package/lib/tui/state/AppContext.js +75 -0
  212. package/lib/tui/state/AppContext.js.map +1 -0
  213. package/lib/tui/state/index.d.ts +7 -0
  214. package/lib/tui/state/index.d.ts.map +1 -0
  215. package/lib/tui/state/index.js +7 -0
  216. package/lib/tui/state/index.js.map +1 -0
  217. package/lib/tui/state/reducer.d.ts +13 -0
  218. package/lib/tui/state/reducer.d.ts.map +1 -0
  219. package/lib/tui/state/reducer.js +136 -0
  220. package/lib/tui/state/reducer.js.map +1 -0
  221. package/lib/tui/state/types.d.ts +132 -0
  222. package/lib/tui/state/types.d.ts.map +1 -0
  223. package/lib/tui/state/types.js +38 -0
  224. package/lib/tui/state/types.js.map +1 -0
  225. package/lib/tui/utils/ascii.d.ts +42 -0
  226. package/lib/tui/utils/ascii.d.ts.map +1 -0
  227. package/lib/tui/utils/ascii.js +63 -0
  228. package/lib/tui/utils/ascii.js.map +1 -0
  229. package/lib/tui/utils/colors.d.ts +65 -0
  230. package/lib/tui/utils/colors.d.ts.map +1 -0
  231. package/lib/tui/utils/colors.js +65 -0
  232. package/lib/tui/utils/colors.js.map +1 -0
  233. package/lib/tui/utils/index.d.ts +6 -0
  234. package/lib/tui/utils/index.d.ts.map +1 -0
  235. package/lib/tui/utils/index.js +6 -0
  236. package/lib/tui/utils/index.js.map +1 -0
  237. package/package.json +23 -14
@@ -1,11 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.synthCommand = synthCommand;
4
- exports.runSynth = runSynth;
5
- const commander_1 = require("commander");
6
- const child_process_1 = require("child_process");
7
- const project_js_1 = require("../lib/project.js");
8
- const logger_js_1 = require("../lib/logger.js");
1
+ import { Command } from 'commander';
2
+ import { execSync } from 'child_process';
3
+ import { watch, existsSync } from 'fs';
4
+ import { join } from 'path';
5
+ import { requireProjectRoot } from '../lib/project.js';
6
+ import { logger } from '../lib/logger.js';
9
7
  /**
10
8
  * Creates the `fnd synth` command.
11
9
  *
@@ -20,10 +18,10 @@ const logger_js_1 = require("../lib/logger.js");
20
18
  * program.parse(['node', 'fnd', 'synth']);
21
19
  * ```
22
20
  */
23
- function synthCommand() {
24
- return new commander_1.Command('synth')
21
+ export function synthCommand() {
22
+ return new Command('synth')
25
23
  .description('Synthesize project configuration using Projen')
26
- .option('--watch', 'Watch for changes and re-synthesize (not yet implemented)')
24
+ .option('--watch', 'Watch for changes and re-synthesize')
27
25
  .action(async (options) => {
28
26
  await runSynth(options);
29
27
  });
@@ -38,35 +36,97 @@ function synthCommand() {
38
36
  * // Run synthesis with default options
39
37
  * await runSynth({});
40
38
  *
41
- * // Run synthesis with watch mode (when implemented)
39
+ * // Run synthesis with watch mode
42
40
  * await runSynth({ watch: true });
43
41
  * ```
44
42
  */
45
- async function runSynth(options) {
43
+ export async function runSynth(options) {
46
44
  let projectRoot;
47
45
  try {
48
- projectRoot = (0, project_js_1.requireProjectRoot)();
46
+ projectRoot = requireProjectRoot();
49
47
  }
50
48
  catch (error) {
51
- logger_js_1.logger.error(error.message);
49
+ logger.error(error.message);
52
50
  process.exit(1);
53
51
  }
54
- logger_js_1.logger.info('Synthesizing project configuration...');
55
- logger_js_1.logger.debug(`Project root: ${projectRoot}`);
52
+ logger.info('Synthesizing project configuration...');
53
+ logger.debug(`Project root: ${projectRoot}`);
54
+ // Run initial synthesis
55
+ if (!runProjenSynth(projectRoot)) {
56
+ process.exit(1);
57
+ }
58
+ // If watch mode, set up file watcher
56
59
  if (options.watch) {
57
- logger_js_1.logger.warn('Watch mode is not yet implemented');
60
+ await watchForChanges(projectRoot);
58
61
  }
62
+ }
63
+ /**
64
+ * Runs the Projen synthesis command.
65
+ *
66
+ * @param projectRoot - Root directory of the project
67
+ * @returns true if successful, false otherwise
68
+ */
69
+ export function runProjenSynth(projectRoot) {
59
70
  try {
60
- (0, child_process_1.execSync)('npx projen', {
71
+ execSync('npx projen', {
61
72
  cwd: projectRoot,
62
73
  stdio: 'inherit',
63
74
  });
64
- logger_js_1.logger.success('Synthesis complete');
75
+ logger.success('Synthesis complete');
76
+ return true;
65
77
  }
66
78
  catch (error) {
67
- logger_js_1.logger.error('Synthesis failed');
68
- logger_js_1.logger.debug(`Error: ${error.message}`);
79
+ logger.error('Synthesis failed');
80
+ logger.debug(`Error: ${error.message}`);
81
+ return false;
82
+ }
83
+ }
84
+ /**
85
+ * Watches for changes to .projenrc.ts and re-runs synthesis.
86
+ *
87
+ * @param projectRoot - Root directory of the project
88
+ */
89
+ async function watchForChanges(projectRoot) {
90
+ const projenrcPath = join(projectRoot, '.projenrc.ts');
91
+ if (!existsSync(projenrcPath)) {
92
+ logger.error('.projenrc.ts not found');
69
93
  process.exit(1);
70
94
  }
95
+ logger.info('Watching for changes to .projenrc.ts... (Ctrl+C to stop)');
96
+ // Debounce timer to avoid rapid re-runs
97
+ let debounceTimer = null;
98
+ const debounceMs = 500;
99
+ const watcher = watch(projenrcPath, (eventType) => {
100
+ if (eventType === 'change') {
101
+ // Clear existing timer if present
102
+ if (debounceTimer) {
103
+ clearTimeout(debounceTimer);
104
+ }
105
+ // Set new debounce timer
106
+ debounceTimer = setTimeout(() => {
107
+ logger.info('');
108
+ logger.info('Detected change in .projenrc.ts, re-synthesizing...');
109
+ runProjenSynth(projectRoot);
110
+ logger.info('Watching for changes... (Ctrl+C to stop)');
111
+ }, debounceMs);
112
+ }
113
+ });
114
+ // Handle graceful shutdown
115
+ const cleanup = () => {
116
+ if (debounceTimer) {
117
+ clearTimeout(debounceTimer);
118
+ }
119
+ watcher.close();
120
+ logger.info('');
121
+ logger.info('Watch mode stopped');
122
+ process.exit(0);
123
+ };
124
+ process.on('SIGINT', cleanup);
125
+ process.on('SIGTERM', cleanup);
126
+ // Keep the process running
127
+ await new Promise(() => {
128
+ // This promise never resolves, keeping the process alive
129
+ // The process will exit via SIGINT/SIGTERM handlers
130
+ });
71
131
  }
72
132
  //# sourceMappingURL=synth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"synth.js","sourceRoot":"","sources":["../../src/commands/synth.ts"],"names":[],"mappings":";;AA0BA,oCAOC;AAgBD,4BA4BC;AA7ED,yCAAoC;AACpC,iDAAyC;AACzC,kDAAuD;AACvD,gDAA0C;AAS1C;;;;;;;;;;;;;GAaG;AACH,SAAgB,YAAY;IAC1B,OAAO,IAAI,mBAAO,CAAC,OAAO,CAAC;SACxB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,SAAS,EAAE,2DAA2D,CAAC;SAC9E,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC7C,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,QAAQ,CAAC,OAA4B;IACzD,IAAI,WAAmB,CAAC;IAExB,IAAI,CAAC;QACH,WAAW,GAAG,IAAA,+BAAkB,GAAE,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAM,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,kBAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACrD,kBAAM,CAAC,KAAK,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;IAE7C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,kBAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,YAAY,EAAE;YACrB,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,kBAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,kBAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjC,kBAAM,CAAC,KAAK,CAAC,UAAW,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"synth.js","sourceRoot":"","sources":["../../src/commands/synth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAS1C;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;SACxB,WAAW,CAAC,+CAA+C,CAAC;SAC5D,MAAM,CAAC,SAAS,EAAE,qCAAqC,CAAC;SACxD,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC7C,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAA4B;IACzD,IAAI,WAAmB,CAAC;IAExB,IAAI,CAAC;QACH,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;IAE7C,wBAAwB;IACxB,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qCAAqC;IACrC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB;IAChD,IAAI,CAAC;QACH,QAAQ,CAAC,YAAY,EAAE;YACrB,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACjC,MAAM,CAAC,KAAK,CAAC,UAAW,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,eAAe,CAAC,WAAmB;IAChD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAEvD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAExE,wCAAwC;IACxC,IAAI,aAAa,GAAyC,IAAI,CAAC;IAC/D,MAAM,UAAU,GAAG,GAAG,CAAC;IAEvB,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE;QAChD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,kCAAkC;YAClC,IAAI,aAAa,EAAE,CAAC;gBAClB,YAAY,CAAC,aAAa,CAAC,CAAC;YAC9B,CAAC;YAED,yBAAyB;YACzB,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;gBACnE,cAAc,CAAC,WAAW,CAAC,CAAC;gBAC5B,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YAC1D,CAAC,EAAE,UAAU,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,2BAA2B;IAC3B,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,aAAa,EAAE,CAAC;YAClB,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAE/B,2BAA2B;IAC3B,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE;QACrB,yDAAyD;QACzD,oDAAoD;IACtD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * Options for the test command.
4
+ */
5
+ interface TestCommandOptions {
6
+ package?: string;
7
+ coverage?: boolean;
8
+ watch?: boolean;
9
+ update?: boolean;
10
+ ci?: boolean;
11
+ skipCache?: boolean;
12
+ parallel?: string;
13
+ }
14
+ /**
15
+ * Creates the `fnd test` command.
16
+ *
17
+ * @returns Commander command instance
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * import { testCommand } from '@fnd-platform/cli';
22
+ *
23
+ * const program = new Command();
24
+ * program.addCommand(testCommand());
25
+ * program.parse(['node', 'fnd', 'test']);
26
+ * ```
27
+ */
28
+ export declare function testCommand(): Command;
29
+ /**
30
+ * Runs the NX test.
31
+ *
32
+ * @param options - Command options
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * // Run all tests
37
+ * await runTest({});
38
+ *
39
+ * // Test a specific package with coverage
40
+ * await runTest({ package: 'api', coverage: true });
41
+ *
42
+ * // Run tests in watch mode
43
+ * await runTest({ watch: true });
44
+ *
45
+ * // Run tests in CI mode
46
+ * await runTest({ ci: true });
47
+ * ```
48
+ */
49
+ export declare function runTest(options: TestCommandOptions): Promise<void>;
50
+ /**
51
+ * Builds the NX command arguments based on options.
52
+ *
53
+ * @param options - Command options
54
+ * @returns Array of command arguments
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * // Run all tests
59
+ * buildNxTestArgs({});
60
+ * // Returns: ['npx', 'nx', 'run-many', '--target=test', '--all']
61
+ *
62
+ * // Test specific package with coverage
63
+ * buildNxTestArgs({ package: 'api', coverage: true });
64
+ * // Returns: ['npx', 'nx', 'run', 'api:test', '--', '--coverage']
65
+ *
66
+ * // Run all tests in CI mode
67
+ * buildNxTestArgs({ ci: true });
68
+ * // Returns: ['npx', 'nx', 'run-many', '--target=test', '--all', '--', '--ci']
69
+ * ```
70
+ */
71
+ export declare function buildNxTestArgs(options: TestCommandOptions): string[];
72
+ export {};
73
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;GAEG;AACH,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,IAAI,OAAO,CAarC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwExE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAiCrE"}
@@ -0,0 +1,193 @@
1
+ import { Command } from 'commander';
2
+ import { execSync } from 'child_process';
3
+ import { requireProjectRoot } from '../lib/project.js';
4
+ import { logger } from '../lib/logger.js';
5
+ import { PerformanceTimer } from '../lib/timer.js';
6
+ import { parseNxOutput } from '../lib/nx-stats.js';
7
+ /**
8
+ * Creates the `fnd test` command.
9
+ *
10
+ * @returns Commander command instance
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * import { testCommand } from '@fnd-platform/cli';
15
+ *
16
+ * const program = new Command();
17
+ * program.addCommand(testCommand());
18
+ * program.parse(['node', 'fnd', 'test']);
19
+ * ```
20
+ */
21
+ export function testCommand() {
22
+ return new Command('test')
23
+ .description('Run tests across all packages using NX')
24
+ .option('--package <name>', 'Test specific package only')
25
+ .option('--coverage', 'Generate coverage report')
26
+ .option('--watch', 'Watch mode')
27
+ .option('--update', 'Update snapshots')
28
+ .option('--ci', 'CI mode (no watch, fail on threshold)')
29
+ .option('--skip-cache', 'Skip NX cache')
30
+ .option('--parallel <n>', 'Number of parallel tasks')
31
+ .action(async (options) => {
32
+ await runTest(options);
33
+ });
34
+ }
35
+ /**
36
+ * Runs the NX test.
37
+ *
38
+ * @param options - Command options
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * // Run all tests
43
+ * await runTest({});
44
+ *
45
+ * // Test a specific package with coverage
46
+ * await runTest({ package: 'api', coverage: true });
47
+ *
48
+ * // Run tests in watch mode
49
+ * await runTest({ watch: true });
50
+ *
51
+ * // Run tests in CI mode
52
+ * await runTest({ ci: true });
53
+ * ```
54
+ */
55
+ export async function runTest(options) {
56
+ // Initialize profiling if enabled
57
+ const timer = PerformanceTimer.isEnabled() ? new PerformanceTimer('fnd test') : null;
58
+ let projectRoot;
59
+ timer?.start('project-detection');
60
+ try {
61
+ projectRoot = requireProjectRoot();
62
+ }
63
+ catch (error) {
64
+ if (timer) {
65
+ timer.end('project-detection');
66
+ logger.report(timer.getReport(false));
67
+ }
68
+ logger.error(error.message);
69
+ process.exit(1);
70
+ }
71
+ const detectResult = timer?.end('project-detection');
72
+ if (detectResult) {
73
+ logger.timing('project-detection', detectResult.durationMs);
74
+ }
75
+ logger.info('Running tests...');
76
+ logger.debug(`Project root: ${projectRoot}`);
77
+ // Build the NX command arguments
78
+ const args = buildNxTestArgs(options);
79
+ const command = args.join(' ');
80
+ logger.debug(`Running: ${command}`);
81
+ timer?.start('nx-test');
82
+ try {
83
+ if (timer) {
84
+ // Capture output for cache statistics when profiling is enabled
85
+ const output = execSync(command, {
86
+ cwd: projectRoot,
87
+ stdio: 'pipe',
88
+ encoding: 'utf-8',
89
+ });
90
+ const testResult = timer.end('nx-test');
91
+ logger.timing('nx-test', testResult.durationMs);
92
+ // Print output since we captured it
93
+ console.log(output);
94
+ // Parse and display NX cache statistics
95
+ const stats = parseNxOutput(output);
96
+ if (stats) {
97
+ logger.cacheStats(stats);
98
+ }
99
+ logger.success('Tests complete');
100
+ logger.report(timer.getReport(true));
101
+ }
102
+ else {
103
+ // Normal execution without profiling
104
+ execSync(command, {
105
+ cwd: projectRoot,
106
+ stdio: 'inherit',
107
+ });
108
+ logger.success('Tests complete');
109
+ }
110
+ }
111
+ catch (error) {
112
+ if (timer) {
113
+ timer.end('nx-test');
114
+ logger.report(timer.getReport(false));
115
+ }
116
+ logger.error('Tests failed');
117
+ logger.debug(`Error: ${error.message}`);
118
+ process.exit(1);
119
+ }
120
+ }
121
+ /**
122
+ * Builds the NX command arguments based on options.
123
+ *
124
+ * @param options - Command options
125
+ * @returns Array of command arguments
126
+ *
127
+ * @example
128
+ * ```typescript
129
+ * // Run all tests
130
+ * buildNxTestArgs({});
131
+ * // Returns: ['npx', 'nx', 'run-many', '--target=test', '--all']
132
+ *
133
+ * // Test specific package with coverage
134
+ * buildNxTestArgs({ package: 'api', coverage: true });
135
+ * // Returns: ['npx', 'nx', 'run', 'api:test', '--', '--coverage']
136
+ *
137
+ * // Run all tests in CI mode
138
+ * buildNxTestArgs({ ci: true });
139
+ * // Returns: ['npx', 'nx', 'run-many', '--target=test', '--all', '--', '--ci']
140
+ * ```
141
+ */
142
+ export function buildNxTestArgs(options) {
143
+ // If testing a specific package
144
+ if (options.package) {
145
+ const args = ['npx', 'nx', 'run', `${options.package}:test`];
146
+ if (options.skipCache) {
147
+ args.push('--skip-nx-cache');
148
+ }
149
+ // Vitest/Jest options go after --
150
+ const vitestArgs = buildVitestArgs(options);
151
+ if (vitestArgs.length > 0) {
152
+ args.push('--', ...vitestArgs);
153
+ }
154
+ return args;
155
+ }
156
+ // Testing all packages
157
+ const args = ['npx', 'nx', 'run-many', '--target=test', '--all'];
158
+ if (options.skipCache) {
159
+ args.push('--skip-nx-cache');
160
+ }
161
+ if (options.parallel) {
162
+ args.push(`--parallel=${options.parallel}`);
163
+ }
164
+ // Vitest/Jest options go after --
165
+ const vitestArgs = buildVitestArgs(options);
166
+ if (vitestArgs.length > 0) {
167
+ args.push('--', ...vitestArgs);
168
+ }
169
+ return args;
170
+ }
171
+ /**
172
+ * Builds Vitest/Jest specific arguments.
173
+ *
174
+ * @param options - Command options
175
+ * @returns Array of test runner arguments
176
+ */
177
+ function buildVitestArgs(options) {
178
+ const args = [];
179
+ if (options.coverage) {
180
+ args.push('--coverage');
181
+ }
182
+ if (options.watch) {
183
+ args.push('--watch');
184
+ }
185
+ if (options.update) {
186
+ args.push('--update');
187
+ }
188
+ if (options.ci) {
189
+ args.push('--ci');
190
+ }
191
+ return args;
192
+ }
193
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -6,10 +6,19 @@
6
6
  * @packageDocumentation
7
7
  */
8
8
  /**
9
- * Runs the fnd CLI.
9
+ * Gets the CLI version.
10
+ */
11
+ export declare function getVersion(): string;
12
+ /**
13
+ * Runs the fnd CLI in traditional Commander.js mode.
10
14
  *
11
15
  * @param args - Command line arguments (defaults to process.argv)
12
16
  * @returns Promise that resolves when command completes
13
17
  */
14
- export declare function run(args?: string[]): Promise<void>;
18
+ export declare function runCommander(args?: string[]): Promise<void>;
19
+ /**
20
+ * Backward-compatible alias for runCommander.
21
+ * @deprecated Use runCommander instead.
22
+ */
23
+ export declare const run: typeof runCommander;
15
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH;;;;;GAKG;AACH,wBAAsB,GAAG,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBtE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAwBH;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B/E;AAED;;;GAGG;AACH,eAAO,MAAM,GAAG,qBAAe,CAAC"}
package/lib/index.js CHANGED
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  /**
3
2
  * @fnd-platform/cli
4
3
  *
@@ -6,32 +5,44 @@
6
5
  *
7
6
  * @packageDocumentation
8
7
  */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.run = run;
11
- const commander_1 = require("commander");
12
- const index_js_1 = require("./commands/index.js");
8
+ import { Command } from 'commander';
9
+ import { readFileSync } from 'fs';
10
+ import { dirname, join } from 'path';
11
+ import { fileURLToPath } from 'url';
12
+ import { newCommand, synthCommand, buildCommand, testCommand, addCommand, deployCommand, destroyCommand, } from './commands/index.js';
13
13
  /**
14
- * CLI version - should match package.json.
14
+ * CLI version from package.json.
15
15
  */
16
- const VERSION = '0.1.0';
16
+ const __filename = fileURLToPath(import.meta.url);
17
+ const __dirname = dirname(__filename);
18
+ const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
19
+ const VERSION = pkg.version;
17
20
  /**
18
- * Runs the fnd CLI.
21
+ * Gets the CLI version.
22
+ */
23
+ export function getVersion() {
24
+ return VERSION;
25
+ }
26
+ /**
27
+ * Runs the fnd CLI in traditional Commander.js mode.
19
28
  *
20
29
  * @param args - Command line arguments (defaults to process.argv)
21
30
  * @returns Promise that resolves when command completes
22
31
  */
23
- async function run(args = process.argv) {
24
- const program = new commander_1.Command();
32
+ export async function runCommander(args = process.argv) {
33
+ const program = new Command();
25
34
  program
26
35
  .name('fnd')
27
36
  .description('fnd-platform CLI - Scaffold AWS-native TypeScript monorepo projects')
28
37
  .version(VERSION, '-v, --version', 'Display version number');
29
38
  // Register commands
30
- program.addCommand((0, index_js_1.newCommand)());
31
- program.addCommand((0, index_js_1.synthCommand)());
32
- program.addCommand((0, index_js_1.buildCommand)());
33
- program.addCommand((0, index_js_1.addCommand)());
34
- program.addCommand((0, index_js_1.deployCommand)());
39
+ program.addCommand(newCommand());
40
+ program.addCommand(synthCommand());
41
+ program.addCommand(buildCommand());
42
+ program.addCommand(testCommand());
43
+ program.addCommand(addCommand());
44
+ program.addCommand(deployCommand());
45
+ program.addCommand(destroyCommand());
35
46
  // Handle unknown commands
36
47
  program.on('command:*', () => {
37
48
  console.error(`Invalid command: ${program.args.join(' ')}\n` +
@@ -40,4 +51,9 @@ async function run(args = process.argv) {
40
51
  });
41
52
  await program.parseAsync(args);
42
53
  }
54
+ /**
55
+ * Backward-compatible alias for runCommander.
56
+ * @deprecated Use runCommander instead.
57
+ */
58
+ export const run = runCommander;
43
59
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAsBH,kBAyBC;AA7CD,yCAAoC;AACpC,kDAM6B;AAE7B;;GAEG;AACH,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB;;;;;GAKG;AACI,KAAK,UAAU,GAAG,CAAC,OAAiB,OAAO,CAAC,IAAI;IACrD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,KAAK,CAAC;SACX,WAAW,CAAC,qEAAqE,CAAC;SAClF,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,wBAAwB,CAAC,CAAC;IAE/D,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAC,IAAA,qBAAU,GAAE,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,IAAA,uBAAY,GAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,IAAA,uBAAY,GAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,IAAA,qBAAU,GAAE,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,IAAA,wBAAa,GAAE,CAAC,CAAC;IAEpC,0BAA0B;IAC1B,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;QAC3B,OAAO,CAAC,KAAK,CACX,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;YAC5C,8CAA8C,CACjD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACrF,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AAE5B;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAiB,OAAO,CAAC,IAAI;IAC9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,KAAK,CAAC;SACX,WAAW,CAAC,qEAAqE,CAAC;SAClF,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,wBAAwB,CAAC,CAAC;IAE/D,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;IAErC,0BAA0B;IAC1B,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;QAC3B,OAAO,CAAC,KAAK,CACX,oBAAoB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI;YAC5C,8CAA8C,CACjD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,YAAY,CAAC"}