@graphty/layout 1.2.3 → 1.2.4

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 (201) hide show
  1. package/dist/src/algorithms/index.d.ts +5 -0
  2. package/dist/src/algorithms/index.js +6 -0
  3. package/dist/src/algorithms/index.js.map +1 -0
  4. package/dist/src/algorithms/optimization/index.d.ts +7 -0
  5. package/dist/src/algorithms/optimization/index.js +7 -0
  6. package/dist/src/algorithms/optimization/index.js.map +1 -0
  7. package/dist/src/algorithms/optimization/kamada-kawai-solver.d.ts +32 -0
  8. package/dist/src/algorithms/optimization/kamada-kawai-solver.js +176 -0
  9. package/dist/src/algorithms/optimization/kamada-kawai-solver.js.map +1 -0
  10. package/dist/src/algorithms/optimization/lbfgs.d.ts +13 -0
  11. package/dist/src/algorithms/optimization/lbfgs.js +56 -0
  12. package/dist/src/algorithms/optimization/lbfgs.js.map +1 -0
  13. package/dist/src/algorithms/optimization/line-search.d.ts +15 -0
  14. package/dist/src/algorithms/optimization/line-search.js +37 -0
  15. package/dist/src/algorithms/optimization/line-search.js.map +1 -0
  16. package/dist/src/algorithms/optimization/types.d.ts +5 -0
  17. package/dist/src/algorithms/optimization/types.js +5 -0
  18. package/dist/src/algorithms/optimization/types.js.map +1 -0
  19. package/dist/src/algorithms/planarity/check.d.ts +17 -0
  20. package/dist/src/algorithms/planarity/check.js +30 -0
  21. package/dist/src/algorithms/planarity/check.js.map +1 -0
  22. package/dist/src/algorithms/planarity/embedding.d.ts +29 -0
  23. package/dist/src/algorithms/planarity/embedding.js +179 -0
  24. package/dist/src/algorithms/planarity/embedding.js.map +1 -0
  25. package/dist/src/algorithms/planarity/index.d.ts +7 -0
  26. package/dist/src/algorithms/planarity/index.js +8 -0
  27. package/dist/src/algorithms/planarity/index.js.map +1 -0
  28. package/dist/src/algorithms/planarity/lr-test.d.ts +15 -0
  29. package/dist/src/algorithms/planarity/lr-test.js +54 -0
  30. package/dist/src/algorithms/planarity/lr-test.js.map +1 -0
  31. package/dist/src/algorithms/planarity/special-graphs.d.ts +28 -0
  32. package/dist/src/algorithms/planarity/special-graphs.js +108 -0
  33. package/dist/src/algorithms/planarity/special-graphs.js.map +1 -0
  34. package/dist/src/generators/basic.d.ts +28 -0
  35. package/dist/src/generators/basic.js +79 -0
  36. package/dist/src/generators/basic.js.map +1 -0
  37. package/dist/src/generators/bipartite.d.ts +16 -0
  38. package/dist/src/generators/bipartite.js +40 -0
  39. package/dist/src/generators/bipartite.js.map +1 -0
  40. package/dist/src/generators/grid.d.ts +11 -0
  41. package/dist/src/generators/grid.js +37 -0
  42. package/dist/src/generators/grid.js.map +1 -0
  43. package/dist/src/generators/index.d.ts +8 -0
  44. package/dist/src/generators/index.js +9 -0
  45. package/dist/src/generators/index.js.map +1 -0
  46. package/dist/src/generators/random.d.ts +12 -0
  47. package/dist/src/generators/random.js +34 -0
  48. package/dist/src/generators/random.js.map +1 -0
  49. package/dist/src/generators/scale-free.d.ts +12 -0
  50. package/dist/src/generators/scale-free.js +62 -0
  51. package/dist/src/generators/scale-free.js.map +1 -0
  52. package/dist/src/index.d.ts +10 -0
  53. package/dist/src/index.js +15 -0
  54. package/dist/src/index.js.map +1 -0
  55. package/dist/src/layouts/basic/index.d.ts +4 -0
  56. package/dist/src/layouts/basic/index.js +5 -0
  57. package/dist/src/layouts/basic/index.js.map +1 -0
  58. package/dist/src/layouts/basic/random.d.ts +14 -0
  59. package/dist/src/layouts/basic/random.js +27 -0
  60. package/dist/src/layouts/basic/random.js.map +1 -0
  61. package/dist/src/layouts/force-directed/arf.d.ts +13 -0
  62. package/dist/src/layouts/force-directed/arf.js +103 -0
  63. package/dist/src/layouts/force-directed/arf.js.map +1 -0
  64. package/dist/src/layouts/force-directed/forceatlas2.d.ts +22 -0
  65. package/dist/src/layouts/force-directed/forceatlas2.js +322 -0
  66. package/dist/src/layouts/force-directed/forceatlas2.js.map +1 -0
  67. package/dist/src/layouts/force-directed/fruchterman-reingold.d.ts +19 -0
  68. package/dist/src/layouts/force-directed/fruchterman-reingold.js +131 -0
  69. package/dist/src/layouts/force-directed/fruchterman-reingold.js.map +1 -0
  70. package/dist/src/layouts/force-directed/index.d.ts +8 -0
  71. package/dist/src/layouts/force-directed/index.js +9 -0
  72. package/dist/src/layouts/force-directed/index.js.map +1 -0
  73. package/dist/src/layouts/force-directed/kamada-kawai.d.ts +15 -0
  74. package/dist/src/layouts/force-directed/kamada-kawai.js +87 -0
  75. package/dist/src/layouts/force-directed/kamada-kawai.js.map +1 -0
  76. package/dist/src/layouts/force-directed/spring.d.ts +19 -0
  77. package/dist/src/layouts/force-directed/spring.js +23 -0
  78. package/dist/src/layouts/force-directed/spring.js.map +1 -0
  79. package/dist/src/layouts/geometric/circular.d.ts +14 -0
  80. package/dist/src/layouts/geometric/circular.js +67 -0
  81. package/dist/src/layouts/geometric/circular.js.map +1 -0
  82. package/dist/src/layouts/geometric/index.d.ts +6 -0
  83. package/dist/src/layouts/geometric/index.js +7 -0
  84. package/dist/src/layouts/geometric/index.js.map +1 -0
  85. package/dist/src/layouts/geometric/shell.d.ts +15 -0
  86. package/dist/src/layouts/geometric/shell.js +67 -0
  87. package/dist/src/layouts/geometric/shell.js.map +1 -0
  88. package/dist/src/layouts/geometric/spiral.d.ts +16 -0
  89. package/dist/src/layouts/geometric/spiral.js +73 -0
  90. package/dist/src/layouts/geometric/spiral.js.map +1 -0
  91. package/dist/src/layouts/hierarchical/bfs.d.ts +12 -0
  92. package/dist/src/layouts/hierarchical/bfs.js +62 -0
  93. package/dist/src/layouts/hierarchical/bfs.js.map +1 -0
  94. package/dist/src/layouts/hierarchical/bipartite.d.ts +16 -0
  95. package/dist/src/layouts/hierarchical/bipartite.js +72 -0
  96. package/dist/src/layouts/hierarchical/bipartite.js.map +1 -0
  97. package/dist/src/layouts/hierarchical/index.d.ts +6 -0
  98. package/dist/src/layouts/hierarchical/index.js +7 -0
  99. package/dist/src/layouts/hierarchical/index.js.map +1 -0
  100. package/dist/src/layouts/hierarchical/multipartite.d.ts +12 -0
  101. package/dist/src/layouts/hierarchical/multipartite.js +73 -0
  102. package/dist/src/layouts/hierarchical/multipartite.js.map +1 -0
  103. package/dist/src/layouts/index.d.ts +8 -0
  104. package/dist/src/layouts/index.js +9 -0
  105. package/dist/src/layouts/index.js.map +1 -0
  106. package/dist/src/layouts/specialized/index.d.ts +5 -0
  107. package/dist/src/layouts/specialized/index.js +6 -0
  108. package/dist/src/layouts/specialized/index.js.map +1 -0
  109. package/dist/src/layouts/specialized/planar.d.ts +14 -0
  110. package/dist/src/layouts/specialized/planar.js +47 -0
  111. package/dist/src/layouts/specialized/planar.js.map +1 -0
  112. package/dist/src/layouts/specialized/spectral.d.ts +14 -0
  113. package/dist/src/layouts/specialized/spectral.js +106 -0
  114. package/dist/src/layouts/specialized/spectral.js.map +1 -0
  115. package/dist/src/types/embedding.d.ts +9 -0
  116. package/dist/src/types/embedding.js +5 -0
  117. package/dist/src/types/embedding.js.map +1 -0
  118. package/dist/src/types/graph.d.ts +10 -0
  119. package/dist/src/types/graph.js +5 -0
  120. package/dist/src/types/graph.js.map +1 -0
  121. package/dist/src/types/index.d.ts +6 -0
  122. package/dist/src/types/index.js +7 -0
  123. package/dist/src/types/index.js.map +1 -0
  124. package/dist/src/types/layout.d.ts +6 -0
  125. package/dist/src/types/layout.js +5 -0
  126. package/dist/src/types/layout.js.map +1 -0
  127. package/dist/src/utils/graph.d.ts +34 -0
  128. package/dist/src/utils/graph.js +69 -0
  129. package/dist/src/utils/graph.js.map +1 -0
  130. package/dist/src/utils/index.d.ts +8 -0
  131. package/dist/src/utils/index.js +9 -0
  132. package/dist/src/utils/index.js.map +1 -0
  133. package/dist/src/utils/numpy.d.ts +17 -0
  134. package/dist/src/utils/numpy.js +101 -0
  135. package/dist/src/utils/numpy.js.map +1 -0
  136. package/dist/src/utils/params.d.ts +17 -0
  137. package/dist/src/utils/params.js +22 -0
  138. package/dist/src/utils/params.js.map +1 -0
  139. package/dist/src/utils/random.d.ts +14 -0
  140. package/dist/src/utils/random.js +42 -0
  141. package/dist/src/utils/random.js.map +1 -0
  142. package/dist/src/utils/rescale.d.ts +21 -0
  143. package/dist/src/utils/rescale.js +119 -0
  144. package/dist/src/utils/rescale.js.map +1 -0
  145. package/dist/vitest.config.js +1 -1
  146. package/dist/vitest.config.js.map +1 -1
  147. package/package.json +14 -1
  148. package/.env.example +0 -11
  149. package/.github/workflows/ci.yml +0 -101
  150. package/.releaserc.json +0 -22
  151. package/CHANGELOG.md +0 -52
  152. package/CLAUDE.md +0 -104
  153. package/CONTRIBUTING.md +0 -1
  154. package/DEPLOYMENT.md +0 -59
  155. package/build-examples-script.js +0 -26
  156. package/commitlint.config.js +0 -37
  157. package/examples/3d-force-directed.html +0 -611
  158. package/examples/3d-kamada-kawai.html +0 -379
  159. package/examples/3d-layout-comparison.html +0 -448
  160. package/examples/3d-spherical-layout.html +0 -319
  161. package/examples/arf-layout.html +0 -524
  162. package/examples/bfs-layout.html +0 -487
  163. package/examples/bipartite-layout.html +0 -382
  164. package/examples/circular-layout.html +0 -292
  165. package/examples/forceatlas2-layout.html +0 -588
  166. package/examples/index.html +0 -241
  167. package/examples/kamada-kawai-layout.html +0 -425
  168. package/examples/layout-helpers.js +0 -23
  169. package/examples/layout.js +0 -2304
  170. package/examples/multipartite-layout.html +0 -410
  171. package/examples/planar-layout.html +0 -388
  172. package/examples/random-layout.html +0 -328
  173. package/examples/shell-layout.html +0 -323
  174. package/examples/spectral-layout.html +0 -335
  175. package/examples/spiral-layout.html +0 -447
  176. package/examples/spring-layout.html +0 -313
  177. package/test/arf-layout.test.ts +0 -443
  178. package/test/bfs-layout.test.ts +0 -427
  179. package/test/bipartite-layout.test.ts +0 -344
  180. package/test/circular-layout.test.ts +0 -442
  181. package/test/forceatlas2-layout.test.ts +0 -405
  182. package/test/fruchterman-reingold-layout.test.ts +0 -477
  183. package/test/graph-generators.test.ts +0 -450
  184. package/test/kamada-kawai-layout.test.ts +0 -623
  185. package/test/multipartite-layout.test.ts +0 -404
  186. package/test/planar-layout.test.ts +0 -266
  187. package/test/random-layout.test.ts +0 -254
  188. package/test/rescale-layout.test.ts +0 -373
  189. package/test/shell-layout.test.ts +0 -347
  190. package/test/spectral-layout.test.ts +0 -378
  191. package/test/spiral-layout.test.ts +0 -338
  192. package/test/spring-layout.test.ts +0 -241
  193. package/test/test-utils.ts +0 -34
  194. package/test/utils-graph.test.ts +0 -155
  195. package/test/utils-index.test.ts +0 -77
  196. package/test/utils-numpy.test.ts +0 -272
  197. package/test/utils-params.test.ts +0 -99
  198. package/test/utils-random.test.ts +0 -229
  199. package/tsconfig.json +0 -16
  200. package/vite.config.js +0 -36
  201. package/vitest.config.ts +0 -30
@@ -1,229 +0,0 @@
1
- /**
2
- * Tests for random number generator utilities
3
- */
4
-
5
- import { describe, it, expect } from 'vitest';
6
- import { RandomNumberGenerator } from '../src/utils/random';
7
-
8
- describe('Random Utils', () => {
9
- describe('RandomNumberGenerator', () => {
10
- describe('constructor', () => {
11
- it('should use provided seed', () => {
12
- const rng = new RandomNumberGenerator(12345);
13
- expect(rng['seed']).toBe(12345);
14
- });
15
-
16
- it('should generate random seed when none provided', () => {
17
- const rng1 = new RandomNumberGenerator();
18
- const rng2 = new RandomNumberGenerator();
19
- // Seeds should be different (very high probability)
20
- expect(rng1['seed']).not.toBe(rng2['seed']);
21
- });
22
-
23
- it('should initialize state properly', () => {
24
- const rng = new RandomNumberGenerator(42);
25
- expect(rng['_state']).toBe(42);
26
- });
27
-
28
- it('should handle large seeds', () => {
29
- const largeSeed = 999999999;
30
- const rng = new RandomNumberGenerator(largeSeed);
31
- expect(rng['seed']).toBe(largeSeed);
32
- });
33
- });
34
-
35
- describe('_next', () => {
36
- it('should generate values between 0 and 1', () => {
37
- const rng = new RandomNumberGenerator(123);
38
- for (let i = 0; i < 100; i++) {
39
- const value = rng['_next']();
40
- expect(value).toBeGreaterThanOrEqual(0);
41
- expect(value).toBeLessThan(1);
42
- }
43
- });
44
-
45
- it('should be deterministic for same seed', () => {
46
- const rng1 = new RandomNumberGenerator(456);
47
- const rng2 = new RandomNumberGenerator(456);
48
-
49
- const sequence1 = Array.from({ length: 10 }, () => rng1['_next']());
50
- const sequence2 = Array.from({ length: 10 }, () => rng2['_next']());
51
-
52
- expect(sequence1).toEqual(sequence2);
53
- });
54
-
55
- it('should produce different sequences for different seeds', () => {
56
- const rng1 = new RandomNumberGenerator(111);
57
- const rng2 = new RandomNumberGenerator(222);
58
-
59
- const sequence1 = Array.from({ length: 10 }, () => rng1['_next']());
60
- const sequence2 = Array.from({ length: 10 }, () => rng2['_next']());
61
-
62
- expect(sequence1).not.toEqual(sequence2);
63
- });
64
- });
65
-
66
- describe('rand', () => {
67
- it('should return single number when no shape provided', () => {
68
- const rng = new RandomNumberGenerator(789);
69
- const value = rng.rand() as number;
70
- expect(typeof value).toBe('number');
71
- expect(value).toBeGreaterThanOrEqual(0);
72
- expect(value).toBeLessThan(1);
73
- });
74
-
75
- it('should return single number when null shape provided', () => {
76
- const rng = new RandomNumberGenerator(789);
77
- const value = rng.rand(null) as number;
78
- expect(typeof value).toBe('number');
79
- expect(value).toBeGreaterThanOrEqual(0);
80
- expect(value).toBeLessThan(1);
81
- });
82
-
83
- it('should return 1D array when given number shape', () => {
84
- const rng = new RandomNumberGenerator(101112);
85
- const values = rng.rand(5) as number[];
86
- expect(Array.isArray(values)).toBe(true);
87
- expect(values).toHaveLength(5);
88
- values.forEach(v => {
89
- expect(v).toBeGreaterThanOrEqual(0);
90
- expect(v).toBeLessThan(1);
91
- });
92
- });
93
-
94
- it('should return empty array for zero length', () => {
95
- const rng = new RandomNumberGenerator(123);
96
- expect(rng.rand(0)).toEqual([]);
97
- });
98
-
99
- it('should return 1D array when given single-element array shape', () => {
100
- const rng = new RandomNumberGenerator(131415);
101
- const values = rng.rand([4]) as number[];
102
- expect(Array.isArray(values)).toBe(true);
103
- expect(values).toHaveLength(4);
104
- values.forEach(v => {
105
- expect(v).toBeGreaterThanOrEqual(0);
106
- expect(v).toBeLessThan(1);
107
- });
108
- });
109
-
110
- it('should return 2D array when given 2D shape', () => {
111
- const rng = new RandomNumberGenerator(161718);
112
- const values = rng.rand([2, 3]) as number[][];
113
- expect(Array.isArray(values)).toBe(true);
114
- expect(values).toHaveLength(2);
115
- values.forEach(row => {
116
- expect(Array.isArray(row)).toBe(true);
117
- expect(row).toHaveLength(3);
118
- row.forEach(v => {
119
- expect(v).toBeGreaterThanOrEqual(0);
120
- expect(v).toBeLessThan(1);
121
- });
122
- });
123
- });
124
-
125
- it('should return 3D array when given 3D shape', () => {
126
- const rng = new RandomNumberGenerator(192021);
127
- const values = rng.rand([2, 2, 2]) as number[][][];
128
- expect(Array.isArray(values)).toBe(true);
129
- expect(values).toHaveLength(2);
130
- values.forEach(plane => {
131
- expect(Array.isArray(plane)).toBe(true);
132
- expect(plane).toHaveLength(2);
133
- plane.forEach(row => {
134
- expect(Array.isArray(row)).toBe(true);
135
- expect(row).toHaveLength(2);
136
- row.forEach(v => {
137
- expect(v).toBeGreaterThanOrEqual(0);
138
- expect(v).toBeLessThan(1);
139
- });
140
- });
141
- });
142
- });
143
-
144
- it('should handle edge cases with zeros in shape', () => {
145
- const rng = new RandomNumberGenerator(222324);
146
- expect(rng.rand([0])).toEqual([]);
147
- expect(rng.rand([3, 0])).toEqual([[], [], []]);
148
- expect(rng.rand([0, 3])).toEqual([]);
149
- });
150
-
151
- it('should be deterministic across calls with same seed', () => {
152
- const rng1 = new RandomNumberGenerator(252627);
153
- const rng2 = new RandomNumberGenerator(252627);
154
-
155
- const values1 = rng1.rand([2, 3]) as number[][];
156
- const values2 = rng2.rand([2, 3]) as number[][];
157
-
158
- expect(values1).toEqual(values2);
159
- });
160
-
161
- it('should handle single element arrays', () => {
162
- const rng = new RandomNumberGenerator(282930);
163
- const value1D = rng.rand(1) as number[];
164
- const value2D = rng.rand([1, 1]) as number[][];
165
-
166
- expect(value1D).toHaveLength(1);
167
- expect(value2D).toHaveLength(1);
168
- expect(value2D[0]).toHaveLength(1);
169
- });
170
-
171
- it('should produce different values in sequence', () => {
172
- const rng = new RandomNumberGenerator(313233);
173
- const values = rng.rand(10) as number[];
174
-
175
- // Check that not all values are the same (very high probability)
176
- const uniqueValues = new Set(values);
177
- expect(uniqueValues.size).toBeGreaterThan(1);
178
- });
179
- });
180
-
181
- describe('integration tests', () => {
182
- it('should work correctly for layout algorithm use cases', () => {
183
- const rng = new RandomNumberGenerator(424344);
184
-
185
- // Test typical usage patterns in layout algorithms
186
- const initialPositions = rng.rand([5, 2]) as number[][];
187
- expect(initialPositions).toHaveLength(5);
188
- initialPositions.forEach(pos => {
189
- expect(pos).toHaveLength(2);
190
- expect(pos[0]).toBeGreaterThanOrEqual(0);
191
- expect(pos[0]).toBeLessThan(1);
192
- expect(pos[1]).toBeGreaterThanOrEqual(0);
193
- expect(pos[1]).toBeLessThan(1);
194
- });
195
- });
196
-
197
- it('should maintain quality of randomness over many calls', () => {
198
- const rng = new RandomNumberGenerator(454647);
199
- const values: number[] = [];
200
-
201
- // Generate many values
202
- for (let i = 0; i < 1000; i++) {
203
- values.push(rng.rand() as number);
204
- }
205
-
206
- // Basic statistical tests
207
- const mean = values.reduce((a, b) => a + b) / values.length;
208
- expect(mean).toBeGreaterThan(0.4); // Should be around 0.5
209
- expect(mean).toBeLessThan(0.6);
210
-
211
- // Check distribution across range
212
- const firstQuartile = values.filter(v => v < 0.25).length;
213
- const secondQuartile = values.filter(v => v >= 0.25 && v < 0.5).length;
214
- const thirdQuartile = values.filter(v => v >= 0.5 && v < 0.75).length;
215
- const fourthQuartile = values.filter(v => v >= 0.75).length;
216
-
217
- // Each quartile should have roughly 1/4 of values (allow some variance)
218
- expect(firstQuartile).toBeGreaterThan(200);
219
- expect(firstQuartile).toBeLessThan(300);
220
- expect(secondQuartile).toBeGreaterThan(200);
221
- expect(secondQuartile).toBeLessThan(300);
222
- expect(thirdQuartile).toBeGreaterThan(200);
223
- expect(thirdQuartile).toBeLessThan(300);
224
- expect(fourthQuartile).toBeGreaterThan(200);
225
- expect(fourthQuartile).toBeLessThan(300);
226
- });
227
- });
228
- });
229
- });
package/tsconfig.json DELETED
@@ -1,16 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2020",
4
- "module": "ES2020",
5
- "moduleResolution": "node",
6
- "declaration": true,
7
- "outDir": "./dist",
8
- "esModuleInterop": true,
9
- "strict": true,
10
- "sourceMap": true,
11
- "lib": ["ES2020", "DOM"],
12
- "skipLibCheck": true
13
- },
14
- "include": ["*.ts"],
15
- "exclude": ["node_modules"]
16
- }
package/vite.config.js DELETED
@@ -1,36 +0,0 @@
1
- import { defineConfig, loadEnv } from 'vite';
2
-
3
- export default defineConfig(({ mode }) => {
4
- // Load env file based on `mode` in the current working directory.
5
- // Set the third parameter to '' to load all env regardless of the `VITE_` prefix.
6
- const env = loadEnv(mode, process.cwd(), '');
7
-
8
- const config = {
9
- server: {
10
- port: 3000,
11
- open: '/examples/',
12
- host: true,
13
- fs: {
14
- // Allow serving files from the dist directory
15
- allow: ['..']
16
- }
17
- },
18
- build: {
19
- // Ensure the examples can find the built files
20
- outDir: 'dist'
21
- },
22
- publicDir: false // Disable default public directory behavior
23
- };
24
-
25
- // Allow HOST configuration from .env
26
- if (env.HOST) {
27
- config.server.host = env.HOST;
28
- }
29
-
30
- // Allow PORT configuration from .env
31
- if (env.PORT) {
32
- config.server.port = parseInt(env.PORT);
33
- }
34
-
35
- return config;
36
- });
package/vitest.config.ts DELETED
@@ -1,30 +0,0 @@
1
- import { defineConfig } from 'vitest/config';
2
-
3
- export default defineConfig({
4
- test: {
5
- globals: true,
6
- environment: 'happy-dom',
7
- pool: 'forks',
8
- testTimeout: 30000,
9
- coverage: {
10
- provider: 'v8',
11
- reporter: ['text', 'json', 'html', 'lcov'],
12
- include: ['src/**/*.ts'],
13
- exclude: ['**/*.d.ts', '**/*.test.ts'],
14
- all: true,
15
- thresholds: {
16
- lines: 65,
17
- functions: 60,
18
- branches: 85,
19
- statements: 65
20
- }
21
- },
22
- include: ['test/**/*.test.ts'],
23
- reporters: ['verbose']
24
- },
25
- resolve: {
26
- alias: {
27
- '@': '/src'
28
- }
29
- }
30
- });