@graphty/layout 1.2.3 → 1.2.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 (203) 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 +340 -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 +194 -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 +19 -4
  148. package/src/layouts/force-directed/forceatlas2.ts +23 -4
  149. package/src/utils/rescale.ts +90 -15
  150. package/.env.example +0 -11
  151. package/.github/workflows/ci.yml +0 -101
  152. package/.releaserc.json +0 -22
  153. package/CHANGELOG.md +0 -52
  154. package/CLAUDE.md +0 -104
  155. package/CONTRIBUTING.md +0 -1
  156. package/DEPLOYMENT.md +0 -59
  157. package/build-examples-script.js +0 -26
  158. package/commitlint.config.js +0 -37
  159. package/examples/3d-force-directed.html +0 -611
  160. package/examples/3d-kamada-kawai.html +0 -379
  161. package/examples/3d-layout-comparison.html +0 -448
  162. package/examples/3d-spherical-layout.html +0 -319
  163. package/examples/arf-layout.html +0 -524
  164. package/examples/bfs-layout.html +0 -487
  165. package/examples/bipartite-layout.html +0 -382
  166. package/examples/circular-layout.html +0 -292
  167. package/examples/forceatlas2-layout.html +0 -588
  168. package/examples/index.html +0 -241
  169. package/examples/kamada-kawai-layout.html +0 -425
  170. package/examples/layout-helpers.js +0 -23
  171. package/examples/layout.js +0 -2304
  172. package/examples/multipartite-layout.html +0 -410
  173. package/examples/planar-layout.html +0 -388
  174. package/examples/random-layout.html +0 -328
  175. package/examples/shell-layout.html +0 -323
  176. package/examples/spectral-layout.html +0 -335
  177. package/examples/spiral-layout.html +0 -447
  178. package/examples/spring-layout.html +0 -313
  179. package/test/arf-layout.test.ts +0 -443
  180. package/test/bfs-layout.test.ts +0 -427
  181. package/test/bipartite-layout.test.ts +0 -344
  182. package/test/circular-layout.test.ts +0 -442
  183. package/test/forceatlas2-layout.test.ts +0 -405
  184. package/test/fruchterman-reingold-layout.test.ts +0 -477
  185. package/test/graph-generators.test.ts +0 -450
  186. package/test/kamada-kawai-layout.test.ts +0 -623
  187. package/test/multipartite-layout.test.ts +0 -404
  188. package/test/planar-layout.test.ts +0 -266
  189. package/test/random-layout.test.ts +0 -254
  190. package/test/rescale-layout.test.ts +0 -373
  191. package/test/shell-layout.test.ts +0 -347
  192. package/test/spectral-layout.test.ts +0 -378
  193. package/test/spiral-layout.test.ts +0 -338
  194. package/test/spring-layout.test.ts +0 -241
  195. package/test/test-utils.ts +0 -34
  196. package/test/utils-graph.test.ts +0 -155
  197. package/test/utils-index.test.ts +0 -77
  198. package/test/utils-numpy.test.ts +0 -272
  199. package/test/utils-params.test.ts +0 -99
  200. package/test/utils-random.test.ts +0 -229
  201. package/tsconfig.json +0 -16
  202. package/vite.config.js +0 -36
  203. 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
- });