@walkeros/cli 0.3.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 (181) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/README.md +285 -0
  3. package/dist/__tests__/bundle/bundler-integration.test.d.ts +2 -0
  4. package/dist/__tests__/bundle/bundler-integration.test.d.ts.map +1 -0
  5. package/dist/__tests__/bundle/bundler-integration.test.js +106 -0
  6. package/dist/__tests__/bundle/bundler-integration.test.js.map +1 -0
  7. package/dist/__tests__/bundle/bundler.test.d.ts +2 -0
  8. package/dist/__tests__/bundle/bundler.test.d.ts.map +1 -0
  9. package/dist/__tests__/bundle/bundler.test.js +281 -0
  10. package/dist/__tests__/bundle/bundler.test.js.map +1 -0
  11. package/dist/__tests__/bundle/programmatic.test.d.ts +2 -0
  12. package/dist/__tests__/bundle/programmatic.test.d.ts.map +1 -0
  13. package/dist/__tests__/bundle/programmatic.test.js +118 -0
  14. package/dist/__tests__/bundle/programmatic.test.js.map +1 -0
  15. package/dist/__tests__/bundle/serializer.test.d.ts +2 -0
  16. package/dist/__tests__/bundle/serializer.test.d.ts.map +1 -0
  17. package/dist/__tests__/bundle/serializer.test.js +173 -0
  18. package/dist/__tests__/bundle/serializer.test.js.map +1 -0
  19. package/dist/__tests__/bundle/template-engine.test.d.ts +2 -0
  20. package/dist/__tests__/bundle/template-engine.test.d.ts.map +1 -0
  21. package/dist/__tests__/bundle/template-engine.test.js +107 -0
  22. package/dist/__tests__/bundle/template-engine.test.js.map +1 -0
  23. package/dist/__tests__/cli-e2e.test.d.ts +8 -0
  24. package/dist/__tests__/cli-e2e.test.d.ts.map +1 -0
  25. package/dist/__tests__/cli-e2e.test.js +144 -0
  26. package/dist/__tests__/cli-e2e.test.js.map +1 -0
  27. package/dist/__tests__/cli.test.d.ts +2 -0
  28. package/dist/__tests__/cli.test.d.ts.map +1 -0
  29. package/dist/__tests__/cli.test.js +255 -0
  30. package/dist/__tests__/cli.test.js.map +1 -0
  31. package/dist/__tests__/config-loader.test.d.ts +7 -0
  32. package/dist/__tests__/config-loader.test.d.ts.map +1 -0
  33. package/dist/__tests__/config-loader.test.js +393 -0
  34. package/dist/__tests__/config-loader.test.js.map +1 -0
  35. package/dist/__tests__/core/config.test.d.ts +2 -0
  36. package/dist/__tests__/core/config.test.d.ts.map +1 -0
  37. package/dist/__tests__/core/config.test.js +72 -0
  38. package/dist/__tests__/core/config.test.js.map +1 -0
  39. package/dist/__tests__/core/logger.test.d.ts +2 -0
  40. package/dist/__tests__/core/logger.test.d.ts.map +1 -0
  41. package/dist/__tests__/core/logger.test.js +53 -0
  42. package/dist/__tests__/core/logger.test.js.map +1 -0
  43. package/dist/__tests__/simulate/programmatic.test.d.ts +2 -0
  44. package/dist/__tests__/simulate/programmatic.test.d.ts.map +1 -0
  45. package/dist/__tests__/simulate/programmatic.test.js +51 -0
  46. package/dist/__tests__/simulate/programmatic.test.js.map +1 -0
  47. package/dist/__tests__/simulate/simulator.test.d.ts +2 -0
  48. package/dist/__tests__/simulate/simulator.test.d.ts.map +1 -0
  49. package/dist/__tests__/simulate/simulator.test.js +29 -0
  50. package/dist/__tests__/simulate/simulator.test.js.map +1 -0
  51. package/dist/commands/bundle/bundler.d.ts +14 -0
  52. package/dist/commands/bundle/bundler.d.ts.map +1 -0
  53. package/dist/commands/bundle/bundler.js +372 -0
  54. package/dist/commands/bundle/bundler.js.map +1 -0
  55. package/dist/commands/bundle/index.d.ts +51 -0
  56. package/dist/commands/bundle/index.d.ts.map +1 -0
  57. package/dist/commands/bundle/index.js +200 -0
  58. package/dist/commands/bundle/index.js.map +1 -0
  59. package/dist/commands/bundle/package-manager.d.ts +7 -0
  60. package/dist/commands/bundle/package-manager.d.ts.map +1 -0
  61. package/dist/commands/bundle/package-manager.js +170 -0
  62. package/dist/commands/bundle/package-manager.js.map +1 -0
  63. package/dist/commands/bundle/serializer.d.ts +23 -0
  64. package/dist/commands/bundle/serializer.d.ts.map +1 -0
  65. package/dist/commands/bundle/serializer.js +127 -0
  66. package/dist/commands/bundle/serializer.js.map +1 -0
  67. package/dist/commands/bundle/stats.d.ts +23 -0
  68. package/dist/commands/bundle/stats.d.ts.map +1 -0
  69. package/dist/commands/bundle/stats.js +52 -0
  70. package/dist/commands/bundle/stats.js.map +1 -0
  71. package/dist/commands/bundle/template-engine.d.ts +18 -0
  72. package/dist/commands/bundle/template-engine.d.ts.map +1 -0
  73. package/dist/commands/bundle/template-engine.js +49 -0
  74. package/dist/commands/bundle/template-engine.js.map +1 -0
  75. package/dist/commands/run/__tests__/run.integration.test.d.ts +8 -0
  76. package/dist/commands/run/__tests__/run.integration.test.d.ts.map +1 -0
  77. package/dist/commands/run/__tests__/run.integration.test.js +53 -0
  78. package/dist/commands/run/__tests__/run.integration.test.js.map +1 -0
  79. package/dist/commands/run/__tests__/validators.test.d.ts +2 -0
  80. package/dist/commands/run/__tests__/validators.test.d.ts.map +1 -0
  81. package/dist/commands/run/__tests__/validators.test.js +80 -0
  82. package/dist/commands/run/__tests__/validators.test.js.map +1 -0
  83. package/dist/commands/run/index.d.ts +39 -0
  84. package/dist/commands/run/index.d.ts.map +1 -0
  85. package/dist/commands/run/index.js +251 -0
  86. package/dist/commands/run/index.js.map +1 -0
  87. package/dist/commands/run/types.d.ts +56 -0
  88. package/dist/commands/run/types.d.ts.map +1 -0
  89. package/dist/commands/run/types.js +7 -0
  90. package/dist/commands/run/types.js.map +1 -0
  91. package/dist/commands/run/validators.d.ts +29 -0
  92. package/dist/commands/run/validators.d.ts.map +1 -0
  93. package/dist/commands/run/validators.js +54 -0
  94. package/dist/commands/run/validators.js.map +1 -0
  95. package/dist/commands/simulate/index.d.ts +47 -0
  96. package/dist/commands/simulate/index.d.ts.map +1 -0
  97. package/dist/commands/simulate/index.js +121 -0
  98. package/dist/commands/simulate/index.js.map +1 -0
  99. package/dist/commands/simulate/simulator.d.ts +18 -0
  100. package/dist/commands/simulate/simulator.d.ts.map +1 -0
  101. package/dist/commands/simulate/simulator.js +236 -0
  102. package/dist/commands/simulate/simulator.js.map +1 -0
  103. package/dist/commands/simulate/tracker.d.ts +30 -0
  104. package/dist/commands/simulate/tracker.d.ts.map +1 -0
  105. package/dist/commands/simulate/tracker.js +96 -0
  106. package/dist/commands/simulate/tracker.js.map +1 -0
  107. package/dist/commands/simulate/types.d.ts +18 -0
  108. package/dist/commands/simulate/types.d.ts.map +1 -0
  109. package/dist/commands/simulate/types.js +2 -0
  110. package/dist/commands/simulate/types.js.map +1 -0
  111. package/dist/config/defaults.d.ts +33 -0
  112. package/dist/config/defaults.d.ts.map +1 -0
  113. package/dist/config/defaults.js +73 -0
  114. package/dist/config/defaults.js.map +1 -0
  115. package/dist/config/index.d.ts +14 -0
  116. package/dist/config/index.d.ts.map +1 -0
  117. package/dist/config/index.js +16 -0
  118. package/dist/config/index.js.map +1 -0
  119. package/dist/config/loader.d.ts +74 -0
  120. package/dist/config/loader.d.ts.map +1 -0
  121. package/dist/config/loader.js +136 -0
  122. package/dist/config/loader.js.map +1 -0
  123. package/dist/config/parser.d.ts +64 -0
  124. package/dist/config/parser.d.ts.map +1 -0
  125. package/dist/config/parser.js +137 -0
  126. package/dist/config/parser.js.map +1 -0
  127. package/dist/config/utils.d.ts +38 -0
  128. package/dist/config/utils.d.ts.map +1 -0
  129. package/dist/config/utils.js +66 -0
  130. package/dist/config/utils.js.map +1 -0
  131. package/dist/config/validators.d.ts +23 -0
  132. package/dist/config/validators.d.ts.map +1 -0
  133. package/dist/config/validators.js +45 -0
  134. package/dist/config/validators.js.map +1 -0
  135. package/dist/core/docker.d.ts +42 -0
  136. package/dist/core/docker.d.ts.map +1 -0
  137. package/dist/core/docker.js +114 -0
  138. package/dist/core/docker.js.map +1 -0
  139. package/dist/core/execution.d.ts +33 -0
  140. package/dist/core/execution.d.ts.map +1 -0
  141. package/dist/core/execution.js +57 -0
  142. package/dist/core/execution.js.map +1 -0
  143. package/dist/core/index.d.ts +6 -0
  144. package/dist/core/index.d.ts.map +1 -0
  145. package/dist/core/index.js +6 -0
  146. package/dist/core/index.js.map +1 -0
  147. package/dist/core/logger.d.ts +17 -0
  148. package/dist/core/logger.d.ts.map +1 -0
  149. package/dist/core/logger.js +74 -0
  150. package/dist/core/logger.js.map +1 -0
  151. package/dist/core/output.d.ts +30 -0
  152. package/dist/core/output.d.ts.map +1 -0
  153. package/dist/core/output.js +46 -0
  154. package/dist/core/output.js.map +1 -0
  155. package/dist/core/timer.d.ts +14 -0
  156. package/dist/core/timer.d.ts.map +1 -0
  157. package/dist/core/timer.js +29 -0
  158. package/dist/core/timer.js.map +1 -0
  159. package/dist/index.d.ts +614 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +1940 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/types/bundle.d.ts +251 -0
  164. package/dist/types/bundle.d.ts.map +1 -0
  165. package/dist/types/bundle.js +10 -0
  166. package/dist/types/bundle.js.map +1 -0
  167. package/dist/types/global.d.ts +51 -0
  168. package/dist/types/global.d.ts.map +1 -0
  169. package/dist/types/global.js +30 -0
  170. package/dist/types/global.js.map +1 -0
  171. package/dist/types/index.d.ts +8 -0
  172. package/dist/types/index.d.ts.map +1 -0
  173. package/dist/types/index.js +8 -0
  174. package/dist/types/index.js.map +1 -0
  175. package/dist/types/template.d.ts +108 -0
  176. package/dist/types/template.d.ts.map +1 -0
  177. package/dist/types/template.js +10 -0
  178. package/dist/types/template.js.map +1 -0
  179. package/package.json +59 -0
  180. package/templates/base.hbs +44 -0
  181. package/templates/server.hbs +29 -0
@@ -0,0 +1,107 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import { TemplateEngine } from '../../commands/bundle/template-engine';
4
+ import { getId } from '@walkeros/core';
5
+ describe('TemplateEngine', () => {
6
+ const testOutputDir = path.join('.tmp', `template-${Date.now()}-${getId()}`);
7
+ const engine = new TemplateEngine();
8
+ beforeEach(async () => {
9
+ await fs.ensureDir(testOutputDir);
10
+ });
11
+ afterEach(async () => {
12
+ await fs.remove(testOutputDir);
13
+ });
14
+ describe('Templates', () => {
15
+ it('should process template with sources and destinations', async () => {
16
+ const templatePath = path.join(testOutputDir, 'test.hbs');
17
+ await fs.writeFile(templatePath, '{{{CODE}}}\nSources: {{#each sources}}{{@key}} {{/each}}\nDestinations: {{#each destinations}}{{@key}} {{/each}}');
18
+ const sources = {
19
+ browser: { code: 'sourceBrowser', config: {} },
20
+ };
21
+ const destinations = {
22
+ gtag: { code: 'destinationGtag', config: {} },
23
+ };
24
+ const collector = {};
25
+ const result = await engine.process(templatePath, 'console.log("test");', sources, destinations, collector, {});
26
+ expect(result).toContain('console.log("test");');
27
+ expect(result).toContain('Sources: browser');
28
+ expect(result).toContain('Destinations: gtag');
29
+ });
30
+ it('should replace bundle placeholder', async () => {
31
+ const templatePath = path.join(testOutputDir, 'test.hbs');
32
+ await fs.writeFile(templatePath, 'Start\n{{{CODE}}}\nEnd');
33
+ const result = await engine.process(templatePath, 'const x = 42;', {}, {}, {}, {});
34
+ expect(result).toBe('Start\nconst x = 42;\nEnd');
35
+ });
36
+ it('should handle missing variables gracefully', async () => {
37
+ const templatePath = path.join(testOutputDir, 'test.hbs');
38
+ await fs.writeFile(templatePath, '{{{CODE}}} - {{MISSING}}');
39
+ const result = await engine.process(templatePath, 'code', {}, {}, {}, {});
40
+ expect(result).toBe('code - ');
41
+ });
42
+ it('should handle config serialization', async () => {
43
+ const templatePath = path.join(testOutputDir, 'test.hbs');
44
+ await fs.writeFile(templatePath, '{{{CODE}}}\n{{#each sources}}Code: {{{code}}}, Config: {{{config}}}\n{{/each}}');
45
+ const sources = {
46
+ browser: {
47
+ code: 'sourceBrowser',
48
+ config: { settings: { prefix: 'data-elb' } },
49
+ },
50
+ };
51
+ const result = await engine.process(templatePath, 'const test = true;', sources, {}, {}, {});
52
+ expect(result).toContain('Code: sourceBrowser');
53
+ expect(result).toContain('Config: {');
54
+ expect(result).toContain('prefix');
55
+ });
56
+ });
57
+ describe('Object Iteration', () => {
58
+ it('should iterate over sources and destinations objects', async () => {
59
+ const templatePath = path.join(testOutputDir, 'test.hbs');
60
+ await fs.writeFile(templatePath, '{{#each sources}}Source {{@key}}: {{code}}\n{{/each}}{{#each destinations}}Destination {{@key}}: {{code}}\n{{/each}}{{{CODE}}}');
61
+ const sources = {
62
+ browser: { code: 'sourceBrowser' },
63
+ dataLayer: { code: 'sourceDataLayer' },
64
+ };
65
+ const destinations = {
66
+ gtag: { code: 'destinationGtag' },
67
+ api: { code: 'destinationAPI' },
68
+ };
69
+ const result = await engine.process(templatePath, 'const bundle = true;', sources, destinations, {});
70
+ expect(result).toContain('Source browser: sourceBrowser');
71
+ expect(result).toContain('Source dataLayer: sourceDataLayer');
72
+ expect(result).toContain('Destination gtag: destinationGtag');
73
+ expect(result).toContain('Destination api: destinationAPI');
74
+ expect(result).toContain('const bundle = true;');
75
+ });
76
+ it('should handle collector configuration', async () => {
77
+ const templatePath = path.join(testOutputDir, 'test.hbs');
78
+ await fs.writeFile(templatePath, '{{{CODE}}}{{#if collector}}\nCollector: {{{collector}}}{{/if}}');
79
+ const collector = { settings: { debug: true } };
80
+ const result = await engine.process(templatePath, 'const code = 1;', {}, {}, collector, {});
81
+ expect(result).toContain('const code = 1;');
82
+ expect(result).toContain('Collector: {');
83
+ expect(result).toContain('debug');
84
+ });
85
+ });
86
+ describe('Edge Cases', () => {
87
+ it('should handle template without CODE placeholder', async () => {
88
+ const templatePath = path.join(testOutputDir, 'test.hbs');
89
+ await fs.writeFile(templatePath, 'Header only');
90
+ const result = await engine.process(templatePath, 'const code = true;', {}, {}, {}, {});
91
+ expect(result).toBe('Header only');
92
+ });
93
+ it('should handle minimal template content', async () => {
94
+ const templatePath = path.join(testOutputDir, 'test.hbs');
95
+ await fs.writeFile(templatePath, '{{{CODE}}}');
96
+ const result = await engine.process(templatePath, 'just code', {}, {}, {}, {});
97
+ expect(result).toBe('just code');
98
+ });
99
+ it('should handle empty bundle code', async () => {
100
+ const templatePath = path.join(testOutputDir, 'test.hbs');
101
+ await fs.writeFile(templatePath, 'Template: {{{CODE}}}');
102
+ const result = await engine.process(templatePath, '', {}, {}, {}, {});
103
+ expect(result).toBe('Template: ');
104
+ });
105
+ });
106
+ });
107
+ //# sourceMappingURL=template-engine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-engine.test.js","sourceRoot":"","sources":["../../../src/__tests__/bundle/template-engine.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * CLI End-to-End Tests
3
+ *
4
+ * Tests the actual CLI commands as users would invoke them
5
+ * Spawns real processes to test complete workflows
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=cli-e2e.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-e2e.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cli-e2e.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * CLI End-to-End Tests
3
+ *
4
+ * Tests the actual CLI commands as users would invoke them
5
+ * Spawns real processes to test complete workflows
6
+ */
7
+ import { spawn } from 'child_process';
8
+ import { join } from 'path';
9
+ import { existsSync } from 'fs';
10
+ import fs from 'fs-extra';
11
+ const projectRoot = process.cwd();
12
+ describe('CLI E2E Tests', () => {
13
+ const cliPath = join(projectRoot, 'dist/index.js');
14
+ const tmpDir = join(projectRoot, '.tmp/e2e-tests');
15
+ beforeAll(async () => {
16
+ // Ensure CLI is built
17
+ if (!existsSync(cliPath)) {
18
+ throw new Error('CLI not built. Run `npm run build` first');
19
+ }
20
+ // Create temp directory for test outputs
21
+ await fs.ensureDir(tmpDir);
22
+ });
23
+ afterAll(async () => {
24
+ // Cleanup temp directory
25
+ await fs.remove(tmpDir).catch(() => { });
26
+ });
27
+ describe('bundle command', () => {
28
+ it('should bundle a simple server config', async () => {
29
+ const configPath = join(projectRoot, 'examples/server-collect.json');
30
+ const result = await runCLI(['bundle', '--config', configPath]);
31
+ expect(result.code).toBe(0);
32
+ // Verify the output file was created (as specified in the config)
33
+ const outputPath = join(projectRoot, 'examples/server-collect.mjs');
34
+ expect(existsSync(outputPath)).toBe(true);
35
+ }, 30000);
36
+ it('should show error for invalid config', async () => {
37
+ const result = await runCLI([
38
+ 'bundle',
39
+ '--config',
40
+ '/nonexistent/config.json',
41
+ ]);
42
+ expect(result.code).not.toBe(0);
43
+ expect(result.stderr || result.stdout).toContain('not found');
44
+ }, 10000);
45
+ it('should handle --stats flag', async () => {
46
+ const configPath = join(projectRoot, 'examples/server-collect.json');
47
+ const result = await runCLI([
48
+ 'bundle',
49
+ '--config',
50
+ configPath,
51
+ '--stats',
52
+ ]);
53
+ expect(result.code).toBe(0);
54
+ expect(result.stdout).toContain('Bundle Statistics');
55
+ }, 30000);
56
+ });
57
+ describe('simulate command', () => {
58
+ it('should simulate with --json output', async () => {
59
+ const configPath = join(projectRoot, 'examples/web-serve.json');
60
+ const result = await runCLI([
61
+ 'simulate',
62
+ '--config',
63
+ configPath,
64
+ '--event',
65
+ '{"name":"page view","data":{"title":"Test"}}',
66
+ '--json',
67
+ ]);
68
+ // Simulation may fail due to missing packages (mocked in unit tests)
69
+ // but should produce valid JSON output
70
+ if (result.code === 0) {
71
+ const output = JSON.parse(result.stdout);
72
+ expect(output).toHaveProperty('result');
73
+ expect(output).toHaveProperty('usage');
74
+ }
75
+ else {
76
+ // Acceptable failure - simulation requires real packages
77
+ expect(result.stderr || result.stdout).toBeTruthy();
78
+ }
79
+ }, 30000);
80
+ it('should handle invalid config gracefully', async () => {
81
+ const result = await runCLI([
82
+ 'simulate',
83
+ '--config',
84
+ '/invalid/path.json',
85
+ ]);
86
+ expect(result.code).not.toBe(0);
87
+ expect(result.stderr || result.stdout).toContain('not found');
88
+ }, 10000);
89
+ });
90
+ describe('help and version', () => {
91
+ it('should show help with --help', async () => {
92
+ const result = await runCLI(['--help']);
93
+ expect(result.code).toBe(0);
94
+ expect(result.stdout).toContain('Usage');
95
+ expect(result.stdout).toContain('bundle');
96
+ expect(result.stdout).toContain('simulate');
97
+ expect(result.stdout).toContain('run');
98
+ }, 5000);
99
+ it('should show version with --version', async () => {
100
+ const result = await runCLI(['--version']);
101
+ expect(result.code).toBe(0);
102
+ expect(result.stdout).toMatch(/\d+\.\d+\.\d+/);
103
+ }, 5000);
104
+ });
105
+ describe('error handling', () => {
106
+ it('should show error for unknown command', async () => {
107
+ const result = await runCLI(['unknown-command']);
108
+ expect(result.code).not.toBe(0);
109
+ expect(result.stderr || result.stdout).toContain('unknown');
110
+ }, 5000);
111
+ it('should show error for missing arguments', async () => {
112
+ const result = await runCLI(['bundle']);
113
+ expect(result.code).not.toBe(0);
114
+ }, 5000);
115
+ });
116
+ });
117
+ /**
118
+ * Helper to run CLI commands
119
+ */
120
+ function runCLI(args) {
121
+ return new Promise((resolve) => {
122
+ // Add --local flag to run tests without Docker
123
+ const child = spawn('node', [join(projectRoot, 'dist/index.js'), ...args, '--local'], {
124
+ cwd: projectRoot,
125
+ env: { ...process.env, FORCE_COLOR: '0' },
126
+ });
127
+ let stdout = '';
128
+ let stderr = '';
129
+ child.stdout?.on('data', (data) => {
130
+ stdout += data.toString();
131
+ });
132
+ child.stderr?.on('data', (data) => {
133
+ stderr += data.toString();
134
+ });
135
+ child.on('close', (code) => {
136
+ resolve({
137
+ code: code || 0,
138
+ stdout: stdout.trim(),
139
+ stderr: stderr.trim(),
140
+ });
141
+ });
142
+ });
143
+ }
144
+ //# sourceMappingURL=cli-e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/cli-e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,255 @@
1
+ import { spawn } from 'child_process';
2
+ import fs from 'fs-extra';
3
+ import path from 'path';
4
+ import { getId } from '@walkeros/core';
5
+ describe('CLI Bundle Command', () => {
6
+ const testOutputDir = path.join('.tmp', `cli-${Date.now()}-${getId()}`);
7
+ const testConfigPath = path.join(testOutputDir, 'test.config.json');
8
+ beforeEach(async () => {
9
+ await fs.ensureDir(testOutputDir);
10
+ // Mock console.log and console.error to suppress output during tests
11
+ jest.spyOn(console, 'log').mockImplementation(() => { });
12
+ jest.spyOn(console, 'error').mockImplementation(() => { });
13
+ });
14
+ afterEach(async () => {
15
+ await fs.remove(testOutputDir);
16
+ // Restore console methods
17
+ jest.restoreAllMocks();
18
+ });
19
+ const runCLI = (args) => {
20
+ return new Promise((resolve) => {
21
+ // Add --local flag to run tests without Docker
22
+ const child = spawn('node', ['dist/index.js', ...args, '--local'], {
23
+ stdio: 'pipe',
24
+ shell: false,
25
+ });
26
+ let stdout = '';
27
+ let stderr = '';
28
+ child.stdout.on('data', (data) => {
29
+ stdout += data.toString();
30
+ });
31
+ child.stderr.on('data', (data) => {
32
+ stderr += data.toString();
33
+ });
34
+ child.on('close', (exitCode) => {
35
+ resolve({ stdout, stderr, exitCode: exitCode || 0 });
36
+ });
37
+ });
38
+ };
39
+ it('should output JSON format for successful bundle', async () => {
40
+ const testConfig = {
41
+ flow: {
42
+ platform: 'web',
43
+ },
44
+ build: {
45
+ packages: {
46
+ '@walkeros/core': { imports: ['getId'] },
47
+ },
48
+ code: 'export const test = getId();',
49
+ output: path.join(testOutputDir, 'test.js'),
50
+ },
51
+ };
52
+ await fs.writeJson(testConfigPath, testConfig);
53
+ const result = await runCLI([
54
+ 'bundle',
55
+ '--config',
56
+ testConfigPath,
57
+ '--json',
58
+ ]);
59
+ expect(result.exitCode).toBe(0);
60
+ const output = JSON.parse(result.stdout);
61
+ expect(output).toMatchObject({
62
+ success: true,
63
+ data: {
64
+ environments: expect.arrayContaining([
65
+ {
66
+ environment: 'default',
67
+ success: true,
68
+ stats: {
69
+ totalSize: expect.any(Number),
70
+ packages: expect.any(Array),
71
+ buildTime: expect.any(Number),
72
+ treeshakingEffective: expect.any(Boolean),
73
+ },
74
+ },
75
+ ]),
76
+ summary: {
77
+ total: 1,
78
+ success: 1,
79
+ failed: 0,
80
+ },
81
+ },
82
+ duration: expect.any(Number),
83
+ });
84
+ expect(output.data.environments[0].stats.packages).toHaveLength(1);
85
+ expect(output.data.environments[0].stats.packages[0].name).toBe('@walkeros/core@latest');
86
+ });
87
+ it('should output JSON format for failed bundle', async () => {
88
+ const testConfig = {
89
+ flow: {
90
+ platform: 'web',
91
+ },
92
+ build: {
93
+ packages: {
94
+ '@walkeros/core': { imports: ['getId'] },
95
+ },
96
+ code: 'export const badCode = () => {\n return getId([1,2,3] x => x * 2);\n};',
97
+ output: path.join(testOutputDir, 'error-test.js'),
98
+ },
99
+ };
100
+ await fs.writeJson(testConfigPath, testConfig);
101
+ const result = await runCLI([
102
+ 'bundle',
103
+ '--config',
104
+ testConfigPath,
105
+ '--json',
106
+ ]);
107
+ expect(result.exitCode).toBe(1);
108
+ const output = JSON.parse(result.stdout);
109
+ expect(output).toMatchObject({
110
+ success: false,
111
+ error: expect.stringContaining('Code syntax error'),
112
+ duration: expect.any(Number),
113
+ });
114
+ expect(output.error).toContain('line 4, column 23');
115
+ });
116
+ it('should output JSON format when config file not found', async () => {
117
+ const result = await runCLI([
118
+ 'bundle',
119
+ '--config',
120
+ 'nonexistent.json',
121
+ '--json',
122
+ ]);
123
+ expect(result.exitCode).toBe(1);
124
+ const output = JSON.parse(result.stdout);
125
+ expect(output).toMatchObject({
126
+ success: false,
127
+ error: expect.stringContaining('Configuration file not found'),
128
+ });
129
+ });
130
+ it('should collect stats when --json flag is used (implies --stats)', async () => {
131
+ const testConfig = {
132
+ flow: {
133
+ platform: 'web',
134
+ },
135
+ build: {
136
+ packages: { '@walkeros/core': { imports: ['getId'] } },
137
+ code: 'export const test = getId;',
138
+ output: path.join(testOutputDir, 'wildcard-test.js'),
139
+ },
140
+ };
141
+ await fs.writeJson(testConfigPath, testConfig);
142
+ const result = await runCLI([
143
+ 'bundle',
144
+ '--config',
145
+ testConfigPath,
146
+ '--json',
147
+ ]);
148
+ expect(result.exitCode).toBe(0);
149
+ const output = JSON.parse(result.stdout);
150
+ expect(output.success).toBe(true);
151
+ expect(output.data.environments[0].stats.treeshakingEffective).toBe(true); // Should be effective with named imports
152
+ });
153
+ it('should suppress decorative output in JSON mode', async () => {
154
+ const testConfig = {
155
+ flow: {
156
+ platform: 'web',
157
+ },
158
+ build: {
159
+ packages: { '@walkeros/core': { imports: ['getId'] } },
160
+ code: 'export const test = getId();',
161
+ output: path.join(testOutputDir, 'minimal-test.js'),
162
+ },
163
+ };
164
+ await fs.writeJson(testConfigPath, testConfig);
165
+ const result = await runCLI([
166
+ 'bundle',
167
+ '--config',
168
+ testConfigPath,
169
+ '--json',
170
+ ]);
171
+ expect(result.exitCode).toBe(0);
172
+ // Should not contain decorative messages
173
+ expect(result.stdout).not.toContain('📦 Reading configuration');
174
+ expect(result.stdout).not.toContain('🔧 Starting bundle process');
175
+ expect(result.stdout).not.toContain('✅ Bundle created successfully');
176
+ // Should be valid JSON
177
+ const output = JSON.parse(result.stdout);
178
+ expect(output.success).toBe(true);
179
+ });
180
+ });
181
+ describe('CLI Simulate Command', () => {
182
+ const testConfigPath = path.join(__dirname, '../../examples/web-serve.json');
183
+ beforeEach(() => {
184
+ // Mock console.log and console.error to suppress output during tests
185
+ jest.spyOn(console, 'log').mockImplementation(() => { });
186
+ jest.spyOn(console, 'error').mockImplementation(() => { });
187
+ });
188
+ afterEach(() => {
189
+ // Restore console methods
190
+ jest.restoreAllMocks();
191
+ });
192
+ const runCLI = (args) => {
193
+ return new Promise((resolve) => {
194
+ // Add --local flag to run tests without Docker
195
+ const child = spawn('node', ['dist/index.js', ...args, '--local'], {
196
+ stdio: 'pipe',
197
+ shell: false,
198
+ });
199
+ let stdout = '';
200
+ let stderr = '';
201
+ child.stdout.on('data', (data) => {
202
+ stdout += data.toString();
203
+ });
204
+ child.stderr.on('data', (data) => {
205
+ stderr += data.toString();
206
+ });
207
+ child.on('close', (exitCode) => {
208
+ resolve({ stdout, stderr, exitCode: exitCode || 0 });
209
+ });
210
+ });
211
+ };
212
+ it('should output JSON format for simulation', async () => {
213
+ const result = await runCLI([
214
+ 'simulate',
215
+ '--config',
216
+ testConfigPath,
217
+ '--event',
218
+ '{"name":"product view","data":{"id":"P123"}}',
219
+ '--json',
220
+ ]);
221
+ if (result.exitCode !== 0) {
222
+ console.log('STDERR:', result.stderr);
223
+ console.log('STDOUT:', result.stdout);
224
+ }
225
+ expect(result.exitCode).toBe(0);
226
+ const output = JSON.parse(result.stdout);
227
+ expect(output).toMatchObject({
228
+ result: {
229
+ ok: true,
230
+ successful: expect.arrayContaining([
231
+ expect.objectContaining({ id: 'demo' }),
232
+ ]),
233
+ queued: [],
234
+ failed: [],
235
+ event: expect.objectContaining({
236
+ name: 'product view',
237
+ data: { id: 'P123' },
238
+ }),
239
+ },
240
+ usage: {
241
+ demo: expect.any(Array),
242
+ },
243
+ duration: expect.any(Number),
244
+ });
245
+ // Verify demo destination log calls
246
+ expect(output.usage.demo.length).toBeGreaterThan(0);
247
+ expect(output.usage.demo[0]).toMatchObject({
248
+ type: 'call',
249
+ path: 'log',
250
+ timestamp: expect.any(Number),
251
+ args: expect.any(Array),
252
+ });
253
+ });
254
+ });
255
+ //# sourceMappingURL=cli.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../../src/__tests__/cli.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Config Loader Tests
3
+ *
4
+ * Tests for multi-environment configuration loading.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=config-loader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config-loader.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}