elit 3.3.3 → 3.3.5

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 (145) hide show
  1. package/dist/build.d.mts +1 -1
  2. package/dist/build.js +1 -0
  3. package/dist/build.js.map +1 -0
  4. package/dist/build.mjs +1 -0
  5. package/dist/build.mjs.map +1 -0
  6. package/dist/chokidar.js +1 -0
  7. package/dist/chokidar.js.map +1 -0
  8. package/dist/chokidar.mjs +1 -0
  9. package/dist/chokidar.mjs.map +1 -0
  10. package/dist/cli.js +4720 -37
  11. package/dist/config.d.mts +3 -1
  12. package/dist/config.d.ts +3 -1
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +1 -0
  15. package/dist/config.js.map +1 -0
  16. package/dist/config.mjs +1 -0
  17. package/dist/config.mjs.map +1 -0
  18. package/dist/coverage.d.mts +85 -0
  19. package/dist/coverage.d.ts +76 -0
  20. package/dist/coverage.d.ts.map +1 -0
  21. package/dist/coverage.js +1549 -0
  22. package/dist/coverage.js.map +1 -0
  23. package/dist/coverage.mjs +1520 -0
  24. package/dist/coverage.mjs.map +1 -0
  25. package/dist/database.d.mts +31 -6
  26. package/dist/database.d.ts +31 -6
  27. package/dist/database.d.ts.map +1 -1
  28. package/dist/database.js +60 -33
  29. package/dist/database.js.map +1 -0
  30. package/dist/database.mjs +60 -33
  31. package/dist/database.mjs.map +1 -0
  32. package/dist/dom.js +1 -0
  33. package/dist/dom.js.map +1 -0
  34. package/dist/dom.mjs +1 -0
  35. package/dist/dom.mjs.map +1 -0
  36. package/dist/el.js +1 -0
  37. package/dist/el.js.map +1 -0
  38. package/dist/el.mjs +1 -0
  39. package/dist/el.mjs.map +1 -0
  40. package/dist/fs.js +1 -0
  41. package/dist/fs.js.map +1 -0
  42. package/dist/fs.mjs +1 -0
  43. package/dist/fs.mjs.map +1 -0
  44. package/dist/hmr.js +1 -0
  45. package/dist/hmr.js.map +1 -0
  46. package/dist/hmr.mjs +1 -0
  47. package/dist/hmr.mjs.map +1 -0
  48. package/dist/http.js +1 -0
  49. package/dist/http.js.map +1 -0
  50. package/dist/http.mjs +1 -0
  51. package/dist/http.mjs.map +1 -0
  52. package/dist/https.d.mts +1 -1
  53. package/dist/https.js +1 -0
  54. package/dist/https.js.map +1 -0
  55. package/dist/https.mjs +1 -0
  56. package/dist/https.mjs.map +1 -0
  57. package/dist/index.d.mts +1 -1
  58. package/dist/index.js +1 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/index.mjs +1 -0
  61. package/dist/index.mjs.map +1 -0
  62. package/dist/mime-types.js +1 -0
  63. package/dist/mime-types.js.map +1 -0
  64. package/dist/mime-types.mjs +1 -0
  65. package/dist/mime-types.mjs.map +1 -0
  66. package/dist/path.js +1 -0
  67. package/dist/path.js.map +1 -0
  68. package/dist/path.mjs +1 -0
  69. package/dist/path.mjs.map +1 -0
  70. package/dist/router.js +1 -0
  71. package/dist/router.js.map +1 -0
  72. package/dist/router.mjs +1 -0
  73. package/dist/router.mjs.map +1 -0
  74. package/dist/runtime.js +1 -0
  75. package/dist/runtime.js.map +1 -0
  76. package/dist/runtime.mjs +1 -0
  77. package/dist/runtime.mjs.map +1 -0
  78. package/dist/{server-Cz3z-5ls.d.mts → server-BFTzgJpO.d.mts} +62 -1
  79. package/dist/{server-BG2CaVMh.d.ts → server-CIXtexNS.d.ts} +62 -1
  80. package/dist/server.d.mts +1 -1
  81. package/dist/server.d.ts +9 -0
  82. package/dist/server.d.ts.map +1 -1
  83. package/dist/server.js +45 -3
  84. package/dist/server.js.map +1 -0
  85. package/dist/server.mjs +45 -3
  86. package/dist/server.mjs.map +1 -0
  87. package/dist/state.d.mts +1 -1
  88. package/dist/state.js +1 -0
  89. package/dist/state.js.map +1 -0
  90. package/dist/state.mjs +1 -0
  91. package/dist/state.mjs.map +1 -0
  92. package/dist/style.js +1 -0
  93. package/dist/style.js.map +1 -0
  94. package/dist/style.mjs +1 -0
  95. package/dist/style.mjs.map +1 -0
  96. package/dist/test-globals.d.ts +184 -0
  97. package/dist/test-reporter.d.mts +77 -0
  98. package/dist/test-reporter.d.ts +73 -0
  99. package/dist/test-reporter.d.ts.map +1 -0
  100. package/dist/test-reporter.js +726 -0
  101. package/dist/test-reporter.js.map +1 -0
  102. package/dist/test-reporter.mjs +696 -0
  103. package/dist/test-reporter.mjs.map +1 -0
  104. package/dist/test-runtime.d.mts +122 -0
  105. package/dist/test-runtime.d.ts +120 -0
  106. package/dist/test-runtime.d.ts.map +1 -0
  107. package/dist/test-runtime.js +1292 -0
  108. package/dist/test-runtime.js.map +1 -0
  109. package/dist/test-runtime.mjs +1269 -0
  110. package/dist/test-runtime.mjs.map +1 -0
  111. package/dist/test.d.mts +39 -0
  112. package/dist/test.d.ts +38 -0
  113. package/dist/test.d.ts.map +1 -0
  114. package/dist/test.js +4966 -0
  115. package/dist/test.js.map +1 -0
  116. package/dist/test.mjs +4944 -0
  117. package/dist/test.mjs.map +1 -0
  118. package/dist/types.d.mts +62 -1
  119. package/dist/types.d.ts +52 -0
  120. package/dist/types.d.ts.map +1 -1
  121. package/dist/types.js +1 -0
  122. package/dist/types.js.map +1 -0
  123. package/dist/types.mjs +1 -0
  124. package/dist/types.mjs.map +1 -0
  125. package/dist/ws.d.ts.map +1 -1
  126. package/dist/ws.js +24 -2
  127. package/dist/ws.js.map +1 -0
  128. package/dist/ws.mjs +24 -2
  129. package/dist/ws.mjs.map +1 -0
  130. package/dist/wss.js +24 -2
  131. package/dist/wss.js.map +1 -0
  132. package/dist/wss.mjs +24 -2
  133. package/dist/wss.mjs.map +1 -0
  134. package/package.json +37 -5
  135. package/src/cli.ts +165 -1
  136. package/src/config.ts +3 -1
  137. package/src/coverage.ts +1479 -0
  138. package/src/database.ts +71 -35
  139. package/src/server.ts +25 -1
  140. package/src/test-globals.d.ts +184 -0
  141. package/src/test-reporter.ts +609 -0
  142. package/src/test-runtime.ts +1359 -0
  143. package/src/test.ts +368 -0
  144. package/src/types.ts +59 -0
  145. package/src/ws.ts +32 -2
package/src/cli.ts CHANGED
@@ -8,7 +8,7 @@ import { createDevServer } from './server';
8
8
  import { build } from './build';
9
9
  import type { DevServerOptions, BuildOptions, PreviewOptions } from './types';
10
10
 
11
- const COMMANDS = ['dev', 'build', 'preview', 'help', 'version'] as const;
11
+ const COMMANDS = ['dev', 'build', 'preview', 'test', 'help', 'version'] as const;
12
12
  type Command = typeof COMMANDS[number];
13
13
 
14
14
  /**
@@ -97,6 +97,9 @@ async function main() {
97
97
  case 'preview':
98
98
  await runPreview(args.slice(1));
99
99
  break;
100
+ case 'test':
101
+ await runTest(args.slice(1));
102
+ break;
100
103
  case 'version':
101
104
  printVersion();
102
105
  break;
@@ -278,6 +281,148 @@ async function runPreview(args: string[]) {
278
281
  setupShutdownHandlers(() => devServer.close());
279
282
  }
280
283
 
284
+ async function runTest(args: string[]) {
285
+ const cliOptions = parseTestArgs(args);
286
+ const config = await loadConfig();
287
+
288
+ // Merge config test options with CLI options (CLI options take precedence)
289
+ let options = config?.test
290
+ ? { ...config.test, ...cliOptions } as TestOptions
291
+ : cliOptions;
292
+
293
+ // Import test runner dynamically
294
+ const { runJestTests, runWatchMode } = await import('./test');
295
+
296
+ // Determine run mode based on flags
297
+ // Default behavior: run once, use --watch/-w for watch mode
298
+ const isWatch = options.watch;
299
+
300
+ if (isWatch) {
301
+ // Watch mode (explicit --watch or -w flag)
302
+ await runWatchMode({
303
+ files: options.files,
304
+ include: options.include,
305
+ exclude: options.exclude,
306
+ reporter: options.reporter,
307
+ timeout: options.timeout,
308
+ bail: options.bail,
309
+ coverage: options.coverage,
310
+ describePattern: options.describe,
311
+ testPattern: options.testName,
312
+ });
313
+ } else {
314
+ // Run once mode (default behavior)
315
+ await runJestTests({
316
+ files: options.files,
317
+ include: options.include,
318
+ exclude: options.exclude,
319
+ reporter: options.reporter,
320
+ timeout: options.timeout,
321
+ bail: options.bail,
322
+ coverage: options.coverage,
323
+ describePattern: options.describe,
324
+ testPattern: options.testName,
325
+ });
326
+
327
+ // Exit with appropriate code
328
+ process.exit(0);
329
+ }
330
+ }
331
+
332
+ interface TestOptions {
333
+ files?: string[];
334
+ include?: string[];
335
+ exclude?: string[];
336
+ reporter?: 'default' | 'dot' | 'json' | 'verbose';
337
+ timeout?: number;
338
+ testTimeout?: number;
339
+ bail?: boolean;
340
+ run?: boolean;
341
+ watch?: boolean;
342
+ describe?: string;
343
+ testName?: string;
344
+ coverage?: {
345
+ enabled: boolean;
346
+ provider: 'v8' | 'istanbul';
347
+ reporter?: ('text' | 'html' | 'lcov' | 'json' | 'coverage-final.json' | 'clover')[];
348
+ include?: string[];
349
+ exclude?: string[];
350
+ };
351
+ }
352
+
353
+ function parseTestArgs(args: string[]): TestOptions {
354
+ const options: TestOptions = {};
355
+
356
+ // Parse flags first to determine mode
357
+ for (let i = 0; i < args.length; i++) {
358
+ const arg = args[i];
359
+
360
+ switch (arg) {
361
+ case '--run':
362
+ case '-r':
363
+ options.run = true;
364
+ break;
365
+ case '--watch':
366
+ case '-w':
367
+ options.watch = true;
368
+ break;
369
+ case '--coverage':
370
+ case '-c':
371
+ options.coverage = {
372
+ enabled: true,
373
+ provider: 'v8',
374
+ reporter: ['text', 'html'],
375
+ };
376
+ break;
377
+ case '--coverage-reporter':
378
+ case '-cr':
379
+ // Parse comma-separated reporter list
380
+ const reporterValue = args[++i];
381
+ if (reporterValue) {
382
+ const reporters = reporterValue.split(',').map(r => r.trim()) as ('text' | 'html' | 'lcov' | 'json' | 'coverage-final.json' | 'clover')[];
383
+ if (!options.coverage) {
384
+ options.coverage = {
385
+ enabled: true,
386
+ provider: 'v8',
387
+ reporter: reporters,
388
+ };
389
+ } else {
390
+ options.coverage.enabled = true;
391
+ options.coverage.reporter = reporters;
392
+ }
393
+ }
394
+ break;
395
+ case '--file':
396
+ case '-f':
397
+ // Parse comma-separated file list
398
+ const filesValue = args[++i];
399
+ if (filesValue) {
400
+ // Split by comma and trim whitespace
401
+ options.files = filesValue.split(',').map(f => f.trim());
402
+ }
403
+ break;
404
+ case '--describe':
405
+ case '-d':
406
+ // Parse describe name filter
407
+ const describeValue = args[++i];
408
+ if (describeValue) {
409
+ options.describe = describeValue;
410
+ }
411
+ break;
412
+ case '--it':
413
+ case '-t':
414
+ // Parse test name filter
415
+ const testValue = args[++i];
416
+ if (testValue) {
417
+ options.testName = testValue;
418
+ }
419
+ break;
420
+ }
421
+ }
422
+
423
+ return options;
424
+ }
425
+
281
426
  function parseDevArgs(args: string[]): Partial<DevServerOptions> {
282
427
  const options: Partial<DevServerOptions> = {};
283
428
 
@@ -345,6 +490,7 @@ Commands:
345
490
  dev Start development server
346
491
  build Build for production
347
492
  preview Preview production build
493
+ test Run tests
348
494
  version Show version number
349
495
  help Show this help message
350
496
 
@@ -382,6 +528,24 @@ Note: Preview mode has full feature parity with dev mode:
382
528
  - Proxy forwarding and Web Workers
383
529
  - HTTPS support, custom middleware, and SSR
384
530
 
531
+ Test Options:
532
+ -r, --run Run all tests once (default, same as no flags)
533
+ -w, --watch Run in watch mode
534
+ -f, --file <files> Run specific files (comma-separated), e.g.: --file ./test1.test.ts,./test2.spec.ts
535
+ -d, --describe <name> Run only tests matching describe name, e.g.: --describe "Footer Component"
536
+ -t, --it <name> Run only tests matching test name, e.g.: --it "should create"
537
+ -c, --coverage Generate coverage report
538
+ -cr, --coverage-reporter <reporters> Coverage reporter formats (comma-separated): text, html, lcov, json, coverage-final.json, clover
539
+
540
+ Note: Test command behaviors:
541
+ - elit test Run all tests once (default)
542
+ - elit test --run Run all tests once (same as default)
543
+ - elit test -f ./test.ts Run specific file(s) once
544
+ - elit test -d "Footer" Run only tests in describe blocks matching "Footer"
545
+ - elit test -t "should create" Run only tests matching "should create"
546
+ - elit test --watch Run in watch mode
547
+ - elit test --coverage Run with coverage report
548
+
385
549
  Config File:
386
550
  Create elit.config.ts, elit.config.js, or elit.config.json in project root
387
551
 
package/src/config.ts CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { existsSync, readFileSync } from './fs';
6
6
  import { resolve } from './path';
7
- import type { DevServerOptions, BuildOptions, PreviewOptions } from './types';
7
+ import type { DevServerOptions, BuildOptions, PreviewOptions, TestOptions } from './types';
8
8
 
9
9
  /**
10
10
  * Helper: Read file and ensure string output (eliminates duplication in file reading)
@@ -54,6 +54,8 @@ export interface ElitConfig {
54
54
  build?: BuildOptions | BuildOptions[];
55
55
  /** Preview server configuration */
56
56
  preview?: PreviewOptions;
57
+ /** Test configuration */
58
+ test?: TestOptions;
57
59
  }
58
60
 
59
61
  /**