@cloud-ru/ft-deps-validator 1.1.1 → 1.1.2-preview-8996d18.0

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 (115) hide show
  1. package/README.md +34 -15
  2. package/dist/cjs/Checker/MonorepoChecker.d.ts +10 -0
  3. package/dist/cjs/Checker/MonorepoChecker.js +57 -0
  4. package/dist/cjs/Checker/RepoChecker.d.ts +8 -0
  5. package/dist/cjs/Checker/RepoChecker.js +36 -0
  6. package/dist/cjs/Checker/__tests__/MonorepoChecker.spec.js +305 -0
  7. package/dist/cjs/Checker/__tests__/RepoChecker.spec.js +116 -0
  8. package/dist/cjs/Checker/index.d.ts +2 -0
  9. package/dist/cjs/Checker/index.js +7 -0
  10. package/dist/cjs/Config/MonorepoConfig.d.ts +12 -0
  11. package/dist/cjs/Config/MonorepoConfig.js +42 -0
  12. package/dist/cjs/Config/RepoConfig.d.ts +10 -0
  13. package/dist/cjs/Config/RepoConfig.js +27 -0
  14. package/dist/cjs/Config/__tests__/MonorepoConfig.spec.js +291 -0
  15. package/dist/cjs/Config/__tests__/RepoConfig.spec.d.ts +1 -0
  16. package/dist/cjs/Config/__tests__/RepoConfig.spec.js +99 -0
  17. package/dist/cjs/Config/index.d.ts +2 -0
  18. package/dist/cjs/Config/index.js +7 -0
  19. package/dist/cjs/Report/__tests__/Report.spec.d.ts +1 -0
  20. package/dist/cjs/Report/__tests__/Report.spec.js +176 -0
  21. package/dist/cjs/Report/index.d.ts +11 -0
  22. package/dist/cjs/Report/index.js +55 -0
  23. package/dist/cjs/index.d.ts +0 -1
  24. package/dist/cjs/index.js +13 -57
  25. package/dist/{esm/types/config.d.ts → cjs/types.d.ts} +14 -3
  26. package/dist/cjs/utils/__tests__/getCliArguments.spec.d.ts +1 -0
  27. package/dist/cjs/utils/__tests__/getCliArguments.spec.js +70 -0
  28. package/dist/cjs/utils/getCliArguments.d.ts +6 -6
  29. package/dist/cjs/utils/getCliArguments.js +1 -27
  30. package/dist/cjs/utils/getConfigFile.d.ts +4 -3
  31. package/dist/cjs/utils/getConfigFile.js +3 -9
  32. package/dist/cjs/utils/getEnvironment.d.ts +3 -0
  33. package/dist/cjs/utils/getEnvironment.js +50 -0
  34. package/dist/cjs/utils/readPackageJsonFile.d.ts +9 -0
  35. package/dist/cjs/utils/readPackageJsonFile.js +28 -0
  36. package/dist/esm/Checker/MonorepoChecker.d.ts +10 -0
  37. package/dist/esm/Checker/MonorepoChecker.js +53 -0
  38. package/dist/esm/Checker/RepoChecker.d.ts +8 -0
  39. package/dist/esm/Checker/RepoChecker.js +29 -0
  40. package/dist/esm/Checker/__tests__/MonorepoChecker.spec.d.ts +1 -0
  41. package/dist/esm/Checker/__tests__/MonorepoChecker.spec.js +300 -0
  42. package/dist/esm/Checker/__tests__/RepoChecker.spec.d.ts +1 -0
  43. package/dist/esm/Checker/__tests__/RepoChecker.spec.js +111 -0
  44. package/dist/esm/Checker/index.d.ts +2 -0
  45. package/dist/esm/Checker/index.js +2 -0
  46. package/dist/esm/Config/MonorepoConfig.d.ts +12 -0
  47. package/dist/esm/Config/MonorepoConfig.js +35 -0
  48. package/dist/esm/Config/RepoConfig.d.ts +10 -0
  49. package/dist/esm/Config/RepoConfig.js +20 -0
  50. package/dist/esm/Config/__tests__/MonorepoConfig.spec.d.ts +1 -0
  51. package/dist/esm/Config/__tests__/MonorepoConfig.spec.js +289 -0
  52. package/dist/esm/Config/__tests__/RepoConfig.spec.d.ts +1 -0
  53. package/dist/esm/Config/__tests__/RepoConfig.spec.js +94 -0
  54. package/dist/esm/Config/index.d.ts +2 -0
  55. package/dist/esm/Config/index.js +2 -0
  56. package/dist/esm/Report/__tests__/Report.spec.d.ts +1 -0
  57. package/dist/esm/Report/__tests__/Report.spec.js +174 -0
  58. package/dist/esm/Report/index.d.ts +11 -0
  59. package/dist/esm/Report/index.js +51 -0
  60. package/dist/esm/index.d.ts +0 -1
  61. package/dist/esm/index.js +14 -55
  62. package/dist/{cjs/types/config.d.ts → esm/types.d.ts} +14 -3
  63. package/dist/esm/types.js +1 -0
  64. package/dist/esm/utils/__tests__/getCliArguments.spec.d.ts +1 -0
  65. package/dist/esm/utils/__tests__/getCliArguments.spec.js +68 -0
  66. package/dist/esm/utils/getCliArguments.d.ts +6 -6
  67. package/dist/esm/utils/getCliArguments.js +1 -27
  68. package/dist/esm/utils/getConfigFile.d.ts +4 -3
  69. package/dist/esm/utils/getConfigFile.js +3 -9
  70. package/dist/esm/utils/getEnvironment.d.ts +3 -0
  71. package/dist/esm/utils/getEnvironment.js +42 -0
  72. package/dist/esm/utils/readPackageJsonFile.d.ts +9 -0
  73. package/dist/esm/utils/readPackageJsonFile.js +20 -0
  74. package/package.json +2 -2
  75. package/src/Checker/MonorepoChecker.ts +45 -0
  76. package/src/Checker/RepoChecker.ts +23 -0
  77. package/src/Checker/__tests__/MonorepoChecker.spec.ts +330 -0
  78. package/src/Checker/__tests__/RepoChecker.spec.ts +132 -0
  79. package/src/Checker/index.ts +2 -0
  80. package/src/Config/MonorepoConfig.ts +51 -0
  81. package/src/Config/RepoConfig.ts +30 -0
  82. package/src/Config/__tests__/MonorepoConfig.spec.ts +346 -0
  83. package/src/Config/__tests__/RepoConfig.spec.ts +131 -0
  84. package/src/Config/index.ts +2 -0
  85. package/src/Report/__tests__/Report.spec.ts +221 -0
  86. package/src/Report/index.ts +75 -0
  87. package/src/index.ts +14 -67
  88. package/src/{types/config.ts → types.ts} +15 -3
  89. package/src/utils/__tests__/getCliArguments.spec.ts +89 -0
  90. package/src/utils/getCliArguments.ts +1 -35
  91. package/src/utils/getConfigFile.ts +7 -11
  92. package/src/utils/getEnvironment.ts +53 -0
  93. package/src/utils/readPackageJsonFile.ts +20 -0
  94. package/dist/cjs/types/cliArguments.d.ts +0 -4
  95. package/dist/cjs/types/config.js +0 -2
  96. package/dist/cjs/types/state.d.ts +0 -6
  97. package/dist/cjs/types/state.js +0 -2
  98. package/dist/cjs/utils/getMonorepoPrefix.d.ts +0 -6
  99. package/dist/cjs/utils/getMonorepoPrefix.js +0 -33
  100. package/dist/cjs/utils/initializeState.d.ts +0 -8
  101. package/dist/cjs/utils/initializeState.js +0 -40
  102. package/dist/esm/types/cliArguments.d.ts +0 -4
  103. package/dist/esm/types/state.d.ts +0 -6
  104. package/dist/esm/utils/getMonorepoPrefix.d.ts +0 -6
  105. package/dist/esm/utils/getMonorepoPrefix.js +0 -27
  106. package/dist/esm/utils/initializeState.d.ts +0 -8
  107. package/dist/esm/utils/initializeState.js +0 -34
  108. package/src/types/cliArguments.ts +0 -5
  109. package/src/types/state.ts +0 -6
  110. package/src/utils/getMonorepoPrefix.ts +0 -32
  111. package/src/utils/initializeState.ts +0 -51
  112. /package/dist/{esm/types/cliArguments.js → cjs/Checker/__tests__/MonorepoChecker.spec.d.ts} +0 -0
  113. /package/dist/{esm/types/config.js → cjs/Checker/__tests__/RepoChecker.spec.d.ts} +0 -0
  114. /package/dist/{esm/types/state.js → cjs/Config/__tests__/MonorepoConfig.spec.d.ts} +0 -0
  115. /package/dist/cjs/{types/cliArguments.js → types.js} +0 -0
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MonorepoConfig = void 0;
7
+ const glob_1 = require("glob");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const RepoConfig_1 = require("./RepoConfig");
10
+ class MonorepoConfig extends RepoConfig_1.RepoConfig {
11
+ constructor(env) {
12
+ super(env);
13
+ this.rootPackagesFolderPattern = env.rootPackagesFolderPattern;
14
+ this.ignoredPackagesFolderFiles = env.ignoredPackagesFolderFiles || [];
15
+ this.packages = env.packages || {};
16
+ }
17
+ getFolderOptions(folderPath) {
18
+ var _a, _b;
19
+ const options = super.getFolderOptions(folderPath);
20
+ const folder = node_path_1.default.basename(folderPath);
21
+ const folderIgnores = this.packages[folder];
22
+ if (!folderIgnores) {
23
+ return options;
24
+ }
25
+ if ((_a = folderIgnores.ignorePatterns) === null || _a === void 0 ? void 0 : _a.length) {
26
+ options.ignorePatterns = [...(options.ignorePatterns || []), ...folderIgnores.ignorePatterns];
27
+ }
28
+ if ((_b = folderIgnores.ignoreMatches) === null || _b === void 0 ? void 0 : _b.length) {
29
+ options.ignoreMatches = [...(options.ignoreMatches || []), ...folderIgnores.ignoreMatches];
30
+ }
31
+ return options;
32
+ }
33
+ getFolders() {
34
+ if (!this.folders) {
35
+ this.folders = (0, glob_1.globSync)(this.rootPackagesFolderPattern, {
36
+ ignore: this.ignoredPackagesFolderFiles,
37
+ });
38
+ }
39
+ return this.folders;
40
+ }
41
+ }
42
+ exports.MonorepoConfig = MonorepoConfig;
@@ -0,0 +1,10 @@
1
+ import { Options } from 'depcheck';
2
+ import { RepoEnvType } from '../types';
3
+ export declare class RepoConfig {
4
+ protected pwd: string;
5
+ private ignorePatterns?;
6
+ private ignoreMatches?;
7
+ constructor(env: RepoEnvType);
8
+ getFolders(): string[];
9
+ getFolderOptions(_folder: string): Options;
10
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RepoConfig = void 0;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ class RepoConfig {
9
+ constructor(env) {
10
+ this.pwd = node_path_1.default.resolve(env.cwd);
11
+ this.ignoreMatches = env.ignoreMatches || [];
12
+ this.ignorePatterns = env.ignorePatterns || [];
13
+ }
14
+ getFolders() {
15
+ return [this.pwd];
16
+ }
17
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
18
+ getFolderOptions(_folder) {
19
+ return {
20
+ ignoreBinPackage: false,
21
+ skipMissing: false,
22
+ ignorePatterns: this.ignorePatterns,
23
+ ignoreMatches: this.ignoreMatches,
24
+ };
25
+ }
26
+ }
27
+ exports.RepoConfig = RepoConfig;
@@ -0,0 +1,291 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const glob_1 = require("glob");
4
+ const vitest_1 = require("vitest");
5
+ const MonorepoConfig_1 = require("../MonorepoConfig");
6
+ vitest_1.vi.mock('glob', () => ({
7
+ globSync: vitest_1.vi.fn(),
8
+ }));
9
+ (0, vitest_1.describe)('MonorepoConfig', () => {
10
+ const mockGlobSync = vitest_1.vi.mocked(glob_1.globSync);
11
+ (0, vitest_1.beforeEach)(() => {
12
+ vitest_1.vi.clearAllMocks();
13
+ });
14
+ (0, vitest_1.describe)('constructor', () => {
15
+ (0, vitest_1.it)('should initialize with required fields', () => {
16
+ const testCwd = '/test/directory';
17
+ const rootPackagesFolderPattern = 'packages/*';
18
+ mockGlobSync.mockReturnValueOnce(['packages/package1']);
19
+ const config = new MonorepoConfig_1.MonorepoConfig({
20
+ cwd: testCwd,
21
+ rootPackagesFolderPattern,
22
+ });
23
+ (0, vitest_1.expect)(config.getFolders()).toBeDefined();
24
+ });
25
+ (0, vitest_1.it)('should use empty array as default for ignoredPackagesFolderFiles', () => {
26
+ const testCwd = '/test/directory';
27
+ const rootPackagesFolderPattern = 'packages/*';
28
+ const config = new MonorepoConfig_1.MonorepoConfig({
29
+ cwd: testCwd,
30
+ rootPackagesFolderPattern,
31
+ });
32
+ mockGlobSync.mockReturnValueOnce(['packages/package1']);
33
+ config.getFolders();
34
+ (0, vitest_1.expect)(mockGlobSync).toHaveBeenCalledWith(rootPackagesFolderPattern, {
35
+ ignore: [],
36
+ });
37
+ });
38
+ (0, vitest_1.it)('should initialize with packages', () => {
39
+ const testCwd = '/test/directory';
40
+ const rootPackagesFolderPattern = 'packages/*';
41
+ const packages = {
42
+ package1: {
43
+ ignorePatterns: ['dist'],
44
+ ignoreMatches: ['@cloud-ru/test'],
45
+ },
46
+ };
47
+ const config = new MonorepoConfig_1.MonorepoConfig({
48
+ cwd: testCwd,
49
+ rootPackagesFolderPattern,
50
+ packages,
51
+ });
52
+ const options = config.getFolderOptions('/test/directory/packages/package1');
53
+ (0, vitest_1.expect)(options.ignorePatterns).toContain('dist');
54
+ (0, vitest_1.expect)(options.ignoreMatches).toContain('@cloud-ru/test');
55
+ });
56
+ (0, vitest_1.it)('should use empty object as default for packages', () => {
57
+ const testCwd = '/test/directory';
58
+ const rootPackagesFolderPattern = 'packages/*';
59
+ const config = new MonorepoConfig_1.MonorepoConfig({
60
+ cwd: testCwd,
61
+ rootPackagesFolderPattern,
62
+ });
63
+ const options = config.getFolderOptions('/test/directory/packages/package1');
64
+ (0, vitest_1.expect)(options).toEqual({
65
+ ignoreBinPackage: false,
66
+ skipMissing: false,
67
+ ignorePatterns: [],
68
+ ignoreMatches: [],
69
+ });
70
+ });
71
+ (0, vitest_1.it)('should call parent constructor with cwd', () => {
72
+ const testCwd = '/test/directory';
73
+ const rootPackagesFolderPattern = 'packages/*';
74
+ const config = new MonorepoConfig_1.MonorepoConfig({
75
+ cwd: testCwd,
76
+ rootPackagesFolderPattern,
77
+ });
78
+ mockGlobSync.mockReturnValueOnce(['packages/package1']);
79
+ const folders = config.getFolders();
80
+ (0, vitest_1.expect)(mockGlobSync).toHaveBeenCalled();
81
+ (0, vitest_1.expect)(folders).toEqual(['packages/package1']);
82
+ });
83
+ });
84
+ (0, vitest_1.describe)('getFolders', () => {
85
+ (0, vitest_1.it)('should return folders from globSync', () => {
86
+ const testCwd = '/test/directory';
87
+ const rootPackagesFolderPattern = 'packages/*';
88
+ const mockFolders = ['packages/package1', 'packages/package2'];
89
+ mockGlobSync.mockReturnValueOnce(mockFolders);
90
+ const config = new MonorepoConfig_1.MonorepoConfig({
91
+ cwd: testCwd,
92
+ rootPackagesFolderPattern,
93
+ });
94
+ const folders = config.getFolders();
95
+ (0, vitest_1.expect)(folders).toEqual(mockFolders);
96
+ (0, vitest_1.expect)(mockGlobSync).toHaveBeenCalledWith(rootPackagesFolderPattern, {
97
+ ignore: [],
98
+ });
99
+ });
100
+ (0, vitest_1.it)('should use ignoredPackagesFolderFiles in globSync', () => {
101
+ const testCwd = '/test/directory';
102
+ const rootPackagesFolderPattern = 'packages/*';
103
+ const ignoredPackagesFolderFiles = ['file1.json'];
104
+ const mockFolders = ['packages/package1'];
105
+ mockGlobSync.mockReturnValueOnce(mockFolders);
106
+ const config = new MonorepoConfig_1.MonorepoConfig({
107
+ cwd: testCwd,
108
+ rootPackagesFolderPattern,
109
+ ignoredPackagesFolderFiles,
110
+ });
111
+ const folders = config.getFolders();
112
+ (0, vitest_1.expect)(folders).toEqual(mockFolders);
113
+ (0, vitest_1.expect)(mockGlobSync).toHaveBeenCalledWith(rootPackagesFolderPattern, {
114
+ ignore: ignoredPackagesFolderFiles,
115
+ });
116
+ });
117
+ (0, vitest_1.it)('should cache folders result', () => {
118
+ const testCwd = '/test/directory';
119
+ const rootPackagesFolderPattern = 'packages/*';
120
+ const mockFolders = ['packages/package1'];
121
+ mockGlobSync.mockReturnValueOnce(mockFolders);
122
+ const config = new MonorepoConfig_1.MonorepoConfig({
123
+ cwd: testCwd,
124
+ rootPackagesFolderPattern,
125
+ });
126
+ const folders1 = config.getFolders();
127
+ const folders2 = config.getFolders();
128
+ (0, vitest_1.expect)(folders1).toEqual(mockFolders);
129
+ (0, vitest_1.expect)(folders2).toEqual(mockFolders);
130
+ (0, vitest_1.expect)(mockGlobSync).toHaveBeenCalledTimes(1);
131
+ });
132
+ });
133
+ (0, vitest_1.describe)('getFolderOptions', () => {
134
+ (0, vitest_1.it)('should return Options object with correct structure', () => {
135
+ const testCwd = '/test/directory';
136
+ const rootPackagesFolderPattern = 'packages/*';
137
+ const config = new MonorepoConfig_1.MonorepoConfig({
138
+ cwd: testCwd,
139
+ rootPackagesFolderPattern,
140
+ });
141
+ const options = config.getFolderOptions('/test/directory/packages/package1');
142
+ (0, vitest_1.expect)(options).toHaveProperty('ignoreBinPackage');
143
+ (0, vitest_1.expect)(options).toHaveProperty('skipMissing');
144
+ (0, vitest_1.expect)(options).toHaveProperty('ignorePatterns');
145
+ (0, vitest_1.expect)(options).toHaveProperty('ignoreMatches');
146
+ });
147
+ (0, vitest_1.it)('should merge ignorePatterns from parent and package config', () => {
148
+ const testCwd = '/test/directory';
149
+ const rootPackagesFolderPattern = 'packages/*';
150
+ const parentIgnorePatterns = ['dist', 'node_modules'];
151
+ const packageIgnorePatterns = ['build', 'coverage'];
152
+ const config = new MonorepoConfig_1.MonorepoConfig({
153
+ cwd: testCwd,
154
+ rootPackagesFolderPattern,
155
+ ignorePatterns: parentIgnorePatterns,
156
+ packages: {
157
+ package1: {
158
+ ignorePatterns: packageIgnorePatterns,
159
+ },
160
+ },
161
+ });
162
+ const options = config.getFolderOptions('/test/directory/packages/package1');
163
+ (0, vitest_1.expect)(options.ignorePatterns).toEqual([...parentIgnorePatterns, ...packageIgnorePatterns]);
164
+ });
165
+ (0, vitest_1.it)('should merge ignoreMatches from parent and package config', () => {
166
+ const testCwd = '/test/directory';
167
+ const rootPackagesFolderPattern = 'packages/*';
168
+ const parentIgnoreMatches = ['@cloud-ru/package1'];
169
+ const packageIgnoreMatches = ['@cloud-ru/package2'];
170
+ const config = new MonorepoConfig_1.MonorepoConfig({
171
+ cwd: testCwd,
172
+ rootPackagesFolderPattern,
173
+ ignoreMatches: parentIgnoreMatches,
174
+ packages: {
175
+ package1: {
176
+ ignoreMatches: packageIgnoreMatches,
177
+ },
178
+ },
179
+ });
180
+ const options = config.getFolderOptions('/test/directory/packages/package1');
181
+ (0, vitest_1.expect)(options.ignoreMatches).toEqual([...parentIgnoreMatches, ...packageIgnoreMatches]);
182
+ });
183
+ (0, vitest_1.it)('should merge both ignorePatterns and ignoreMatches from package config', () => {
184
+ const testCwd = '/test/directory';
185
+ const rootPackagesFolderPattern = 'packages/*';
186
+ const parentIgnorePatterns = ['dist'];
187
+ const parentIgnoreMatches = ['@cloud-ru/package1'];
188
+ const packageIgnorePatterns = ['build'];
189
+ const packageIgnoreMatches = ['@cloud-ru/package2'];
190
+ const config = new MonorepoConfig_1.MonorepoConfig({
191
+ cwd: testCwd,
192
+ rootPackagesFolderPattern,
193
+ ignorePatterns: parentIgnorePatterns,
194
+ ignoreMatches: parentIgnoreMatches,
195
+ packages: {
196
+ package1: {
197
+ ignorePatterns: packageIgnorePatterns,
198
+ ignoreMatches: packageIgnoreMatches,
199
+ },
200
+ },
201
+ });
202
+ const options = config.getFolderOptions('/test/directory/packages/package1');
203
+ (0, vitest_1.expect)(options.ignorePatterns).toEqual([...parentIgnorePatterns, ...packageIgnorePatterns]);
204
+ (0, vitest_1.expect)(options.ignoreMatches).toEqual([...parentIgnoreMatches, ...packageIgnoreMatches]);
205
+ });
206
+ (0, vitest_1.it)('should use only parent options when package config is not provided', () => {
207
+ const testCwd = '/test/directory';
208
+ const rootPackagesFolderPattern = 'packages/*';
209
+ const parentIgnorePatterns = ['dist'];
210
+ const parentIgnoreMatches = ['@cloud-ru/package1'];
211
+ const config = new MonorepoConfig_1.MonorepoConfig({
212
+ cwd: testCwd,
213
+ rootPackagesFolderPattern,
214
+ ignorePatterns: parentIgnorePatterns,
215
+ ignoreMatches: parentIgnoreMatches,
216
+ });
217
+ const options = config.getFolderOptions('/test/directory/packages/package1');
218
+ (0, vitest_1.expect)(options.ignorePatterns).toEqual(parentIgnorePatterns);
219
+ (0, vitest_1.expect)(options.ignoreMatches).toEqual(parentIgnoreMatches);
220
+ });
221
+ (0, vitest_1.it)('should use only parent options when package config does not have ignorePatterns', () => {
222
+ const testCwd = '/test/directory';
223
+ const rootPackagesFolderPattern = 'packages/*';
224
+ const parentIgnorePatterns = ['dist'];
225
+ const config = new MonorepoConfig_1.MonorepoConfig({
226
+ cwd: testCwd,
227
+ rootPackagesFolderPattern,
228
+ ignorePatterns: parentIgnorePatterns,
229
+ packages: {
230
+ package1: {
231
+ ignoreMatches: ['@cloud-ru/package2'],
232
+ },
233
+ },
234
+ });
235
+ const options = config.getFolderOptions('/test/directory/packages/package1');
236
+ (0, vitest_1.expect)(options.ignorePatterns).toEqual(parentIgnorePatterns);
237
+ });
238
+ (0, vitest_1.it)('should use only parent options when package config does not have ignoreMatches', () => {
239
+ const testCwd = '/test/directory';
240
+ const rootPackagesFolderPattern = 'packages/*';
241
+ const parentIgnoreMatches = ['@cloud-ru/package1'];
242
+ const config = new MonorepoConfig_1.MonorepoConfig({
243
+ cwd: testCwd,
244
+ rootPackagesFolderPattern,
245
+ ignoreMatches: parentIgnoreMatches,
246
+ packages: {
247
+ package1: {
248
+ ignorePatterns: ['build'],
249
+ },
250
+ },
251
+ });
252
+ const options = config.getFolderOptions('/test/directory/packages/package1');
253
+ (0, vitest_1.expect)(options.ignoreMatches).toEqual(parentIgnoreMatches);
254
+ });
255
+ (0, vitest_1.it)('should use folder name from path to get package config', () => {
256
+ const testCwd = '/test/directory';
257
+ const rootPackagesFolderPattern = 'packages/*';
258
+ const config = new MonorepoConfig_1.MonorepoConfig({
259
+ cwd: testCwd,
260
+ rootPackagesFolderPattern,
261
+ packages: {
262
+ package1: {
263
+ ignorePatterns: ['dist'],
264
+ },
265
+ package2: {
266
+ ignorePatterns: ['build'],
267
+ },
268
+ },
269
+ });
270
+ const options1 = config.getFolderOptions('/test/directory/packages/package1');
271
+ const options2 = config.getFolderOptions('/test/directory/packages/package2');
272
+ (0, vitest_1.expect)(options1.ignorePatterns).toContain('dist');
273
+ (0, vitest_1.expect)(options2.ignorePatterns).toContain('build');
274
+ });
275
+ (0, vitest_1.it)('should return parent options when package config is empty', () => {
276
+ const testCwd = '/test/directory';
277
+ const rootPackagesFolderPattern = 'packages/*';
278
+ const parentIgnorePatterns = ['dist'];
279
+ const config = new MonorepoConfig_1.MonorepoConfig({
280
+ cwd: testCwd,
281
+ rootPackagesFolderPattern,
282
+ ignorePatterns: parentIgnorePatterns,
283
+ packages: {
284
+ package1: {},
285
+ },
286
+ });
287
+ const options = config.getFolderOptions('/test/directory/packages/package1');
288
+ (0, vitest_1.expect)(options.ignorePatterns).toEqual(parentIgnorePatterns);
289
+ });
290
+ });
291
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const path_1 = __importDefault(require("path"));
7
+ const vitest_1 = require("vitest");
8
+ const RepoConfig_1 = require("../RepoConfig");
9
+ (0, vitest_1.describe)('RepoConfig', () => {
10
+ (0, vitest_1.describe)('constructor', () => {
11
+ (0, vitest_1.it)('should initialize with cwd and resolve path', () => {
12
+ const testCwd = '/test/directory';
13
+ const config = new RepoConfig_1.RepoConfig({ cwd: testCwd });
14
+ (0, vitest_1.expect)(config.getFolders()).toEqual([path_1.default.resolve(testCwd)]);
15
+ });
16
+ (0, vitest_1.it)('should initialize with ignorePatterns', () => {
17
+ const testCwd = '/test/directory';
18
+ const ignorePatterns = ['dist', 'node_modules'];
19
+ const config = new RepoConfig_1.RepoConfig({ cwd: testCwd, ignorePatterns });
20
+ const options = config.getFolderOptions('any-folder');
21
+ (0, vitest_1.expect)(options.ignorePatterns).toEqual(ignorePatterns);
22
+ });
23
+ (0, vitest_1.it)('should initialize with ignoreMatches', () => {
24
+ const testCwd = '/test/directory';
25
+ const ignoreMatches = ['@cloud-ru/package1', '@cloud-ru/package2'];
26
+ const config = new RepoConfig_1.RepoConfig({ cwd: testCwd, ignoreMatches });
27
+ const options = config.getFolderOptions('any-folder');
28
+ (0, vitest_1.expect)(options.ignoreMatches).toEqual(ignoreMatches);
29
+ });
30
+ (0, vitest_1.it)('should initialize with both ignorePatterns and ignoreMatches', () => {
31
+ const testCwd = '/test/directory';
32
+ const ignorePatterns = ['dist'];
33
+ const ignoreMatches = ['@cloud-ru/package'];
34
+ const config = new RepoConfig_1.RepoConfig({ cwd: testCwd, ignorePatterns, ignoreMatches });
35
+ const options = config.getFolderOptions('any-folder');
36
+ (0, vitest_1.expect)(options.ignorePatterns).toEqual(ignorePatterns);
37
+ (0, vitest_1.expect)(options.ignoreMatches).toEqual(ignoreMatches);
38
+ });
39
+ (0, vitest_1.it)('should use empty arrays as default for optional fields', () => {
40
+ const testCwd = '/test/directory';
41
+ const config = new RepoConfig_1.RepoConfig({ cwd: testCwd });
42
+ const options = config.getFolderOptions('any-folder');
43
+ (0, vitest_1.expect)(options.ignorePatterns).toEqual([]);
44
+ (0, vitest_1.expect)(options.ignoreMatches).toEqual([]);
45
+ });
46
+ (0, vitest_1.it)('should resolve relative cwd path to absolute', () => {
47
+ const relativePath = './test';
48
+ const config = new RepoConfig_1.RepoConfig({ cwd: relativePath });
49
+ const folders = config.getFolders();
50
+ (0, vitest_1.expect)(folders[0]).toBe(path_1.default.resolve(relativePath));
51
+ (0, vitest_1.expect)(path_1.default.isAbsolute(folders[0])).toBe(true);
52
+ });
53
+ });
54
+ (0, vitest_1.describe)('getFolders', () => {
55
+ (0, vitest_1.it)('should return array with resolved pwd', () => {
56
+ const testCwd = '/test/directory';
57
+ const config = new RepoConfig_1.RepoConfig({ cwd: testCwd });
58
+ const folders = config.getFolders();
59
+ (0, vitest_1.expect)(folders).toEqual([path_1.default.resolve(testCwd)]);
60
+ });
61
+ (0, vitest_1.it)('should always return absolute path', () => {
62
+ const relativeCwd = '../test';
63
+ const config = new RepoConfig_1.RepoConfig({ cwd: relativeCwd });
64
+ const folders = config.getFolders();
65
+ (0, vitest_1.expect)(path_1.default.isAbsolute(folders[0])).toBe(true);
66
+ });
67
+ });
68
+ (0, vitest_1.describe)('getFolderOptions', () => {
69
+ (0, vitest_1.it)('should return Options object with correct structure', () => {
70
+ const testCwd = '/test/directory';
71
+ const config = new RepoConfig_1.RepoConfig({ cwd: testCwd });
72
+ const folder = 'any-folder';
73
+ const options = config.getFolderOptions(folder);
74
+ (0, vitest_1.expect)(options).toHaveProperty('ignoreBinPackage');
75
+ (0, vitest_1.expect)(options).toHaveProperty('skipMissing');
76
+ (0, vitest_1.expect)(options).toHaveProperty('ignorePatterns');
77
+ (0, vitest_1.expect)(options).toHaveProperty('ignoreMatches');
78
+ });
79
+ (0, vitest_1.it)('should return ignoreBinPackage as false', () => {
80
+ const testCwd = '/test/directory';
81
+ const config = new RepoConfig_1.RepoConfig({ cwd: testCwd });
82
+ const options = config.getFolderOptions('any-folder');
83
+ (0, vitest_1.expect)(options.ignoreBinPackage).toBe(false);
84
+ });
85
+ (0, vitest_1.it)('should return skipMissing as false', () => {
86
+ const testCwd = '/test/directory';
87
+ const config = new RepoConfig_1.RepoConfig({ cwd: testCwd });
88
+ const options = config.getFolderOptions('any-folder');
89
+ (0, vitest_1.expect)(options.skipMissing).toBe(false);
90
+ });
91
+ (0, vitest_1.it)('should return empty arrays when optional fields are not provided', () => {
92
+ const testCwd = '/test/directory';
93
+ const config = new RepoConfig_1.RepoConfig({ cwd: testCwd });
94
+ const options = config.getFolderOptions('any-folder');
95
+ (0, vitest_1.expect)(options.ignorePatterns).toEqual([]);
96
+ (0, vitest_1.expect)(options.ignoreMatches).toEqual([]);
97
+ });
98
+ });
99
+ });
@@ -0,0 +1,2 @@
1
+ export { RepoConfig } from './RepoConfig';
2
+ export { MonorepoConfig } from './MonorepoConfig';
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MonorepoConfig = exports.RepoConfig = void 0;
4
+ var RepoConfig_1 = require("./RepoConfig");
5
+ Object.defineProperty(exports, "RepoConfig", { enumerable: true, get: function () { return RepoConfig_1.RepoConfig; } });
6
+ var MonorepoConfig_1 = require("./MonorepoConfig");
7
+ Object.defineProperty(exports, "MonorepoConfig", { enumerable: true, get: function () { return MonorepoConfig_1.MonorepoConfig; } });
@@ -0,0 +1 @@
1
+ export {};