@lage-run/hasher 0.1.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 (73) hide show
  1. package/.eslintignore +2 -0
  2. package/CHANGELOG.json +20 -0
  3. package/CHANGELOG.md +13 -0
  4. package/README.md +2 -0
  5. package/jest.config.js +1 -0
  6. package/lib/__fixtures__/config/backfill.config.d.ts +1 -0
  7. package/lib/__fixtures__/config/backfill.config.js +5 -0
  8. package/lib/__fixtures__/config/backfill.config.js.map +1 -0
  9. package/lib/__fixtures__/config/packages/package-1/backfill.config.d.ts +0 -0
  10. package/lib/__fixtures__/config/packages/package-1/backfill.config.js +2 -0
  11. package/lib/__fixtures__/config/packages/package-1/backfill.config.js.map +1 -0
  12. package/lib/__tests__/createPackageHashes.test.d.ts +1 -0
  13. package/lib/__tests__/createPackageHashes.test.js +43 -0
  14. package/lib/__tests__/createPackageHashes.test.js.map +1 -0
  15. package/lib/__tests__/getPackageDeps.test.d.ts +1 -0
  16. package/lib/__tests__/getPackageDeps.test.js +287 -0
  17. package/lib/__tests__/getPackageDeps.test.js.map +1 -0
  18. package/lib/__tests__/getRepoDeps.test.d.ts +1 -0
  19. package/lib/__tests__/getRepoDeps.test.js +238 -0
  20. package/lib/__tests__/getRepoDeps.test.js.map +1 -0
  21. package/lib/__tests__/getRepoState.test.d.ts +1 -0
  22. package/lib/__tests__/getRepoState.test.js +67 -0
  23. package/lib/__tests__/getRepoState.test.js.map +1 -0
  24. package/lib/__tests__/hashOfFiles.test.d.ts +1 -0
  25. package/lib/__tests__/hashOfFiles.test.js +100 -0
  26. package/lib/__tests__/hashOfFiles.test.js.map +1 -0
  27. package/lib/__tests__/helpers.test.d.ts +1 -0
  28. package/lib/__tests__/helpers.test.js +27 -0
  29. package/lib/__tests__/helpers.test.js.map +1 -0
  30. package/lib/__tests__/index.test.d.ts +1 -0
  31. package/lib/__tests__/index.test.js +87 -0
  32. package/lib/__tests__/index.test.js.map +1 -0
  33. package/lib/__tests__/resolveDependenciesHelper.d.ts +3 -0
  34. package/lib/__tests__/resolveDependenciesHelper.js +41 -0
  35. package/lib/__tests__/resolveDependenciesHelper.js.map +1 -0
  36. package/lib/__tests__/resolveExternalDependencies.test.d.ts +1 -0
  37. package/lib/__tests__/resolveExternalDependencies.test.js +108 -0
  38. package/lib/__tests__/resolveExternalDependencies.test.js.map +1 -0
  39. package/lib/__tests__/resolveInternalDependencies.test.d.ts +1 -0
  40. package/lib/__tests__/resolveInternalDependencies.test.js +100 -0
  41. package/lib/__tests__/resolveInternalDependencies.test.js.map +1 -0
  42. package/lib/createPackageHashes.d.ts +4 -0
  43. package/lib/createPackageHashes.js +41 -0
  44. package/lib/createPackageHashes.js.map +1 -0
  45. package/lib/getPackageDeps.d.ts +45 -0
  46. package/lib/getPackageDeps.js +254 -0
  47. package/lib/getPackageDeps.js.map +1 -0
  48. package/lib/getRepoState.d.ts +76 -0
  49. package/lib/getRepoState.js +271 -0
  50. package/lib/getRepoState.js.map +1 -0
  51. package/lib/hashOfFiles.d.ts +14 -0
  52. package/lib/hashOfFiles.js +65 -0
  53. package/lib/hashOfFiles.js.map +1 -0
  54. package/lib/hashOfPackage.d.ts +9 -0
  55. package/lib/hashOfPackage.js +52 -0
  56. package/lib/hashOfPackage.js.map +1 -0
  57. package/lib/helpers.d.ts +3 -0
  58. package/lib/helpers.js +31 -0
  59. package/lib/helpers.js.map +1 -0
  60. package/lib/index.d.ts +13 -0
  61. package/lib/index.js +66 -0
  62. package/lib/index.js.map +1 -0
  63. package/lib/repoInfo.d.ts +26 -0
  64. package/lib/repoInfo.js +68 -0
  65. package/lib/repoInfo.js.map +1 -0
  66. package/lib/resolveExternalDependencies.d.ts +11 -0
  67. package/lib/resolveExternalDependencies.js +59 -0
  68. package/lib/resolveExternalDependencies.js.map +1 -0
  69. package/lib/resolveInternalDependencies.d.ts +6 -0
  70. package/lib/resolveInternalDependencies.js +15 -0
  71. package/lib/resolveInternalDependencies.js.map +1 -0
  72. package/package.json +30 -0
  73. package/tsconfig.json +7 -0
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const path = __importStar(require("path"));
27
+ const fs = __importStar(require("fs"));
28
+ const child_process_1 = require("child_process");
29
+ const getRepoState_1 = require("../getRepoState");
30
+ const SOURCE_PATH = path.join(__dirname).replace(path.join("lib", "__tests__"), path.join("src", "__tests__"));
31
+ const TEST_PREFIX = `packages/hasher/src/__tests__/`;
32
+ const TEST_PROJECT_PATH = path.join(SOURCE_PATH, "testProject");
33
+ const FILTERS = [`testProject/`, `nestedTestProject/`];
34
+ const FileSystem = {
35
+ writeFile: fs.writeFileSync,
36
+ deleteFile: fs.rmSync,
37
+ };
38
+ function getRelevantEntries(results) {
39
+ const relevantResults = new Map();
40
+ for (const [key, hash] of results) {
41
+ if (key.startsWith(TEST_PREFIX)) {
42
+ const partialKey = key.slice(TEST_PREFIX.length);
43
+ for (const filter of FILTERS) {
44
+ if (partialKey.startsWith(filter)) {
45
+ relevantResults.set(partialKey, hash);
46
+ }
47
+ }
48
+ }
49
+ }
50
+ return relevantResults;
51
+ }
52
+ describe(getRepoState_1.getRepoRoot.name, () => {
53
+ it(`returns the correct directory`, () => {
54
+ const root = (0, getRepoState_1.getRepoRoot)(__dirname);
55
+ const expectedRoot = path.resolve(__dirname, "../../../..").replace(/\\/g, "/");
56
+ expect(root).toEqual(expectedRoot);
57
+ });
58
+ });
59
+ describe(getRepoState_1.parseGitLsTree.name, () => {
60
+ it("can handle a blob", () => {
61
+ const filename = "src/typings/tsd.d.ts";
62
+ const hash = "3451bccdc831cb43d7a70ed8e628dcf9c7f888c8";
63
+ const output = `100644 blob ${hash}\t${filename}\x00`;
64
+ const changes = (0, getRepoState_1.parseGitLsTree)(output);
65
+ expect(changes.size).toEqual(1); // Expect there to be exactly 1 change
66
+ expect(changes.get(filename)).toEqual(hash); // Expect the hash to be ${hash}
67
+ });
68
+ it("can handle a submodule", () => {
69
+ const filename = "rushstack";
70
+ const hash = "c5880bf5b0c6c1f2e2c43c95beeb8f0a808e8bac";
71
+ const output = `160000 commit ${hash}\t${filename}\x00`;
72
+ const changes = (0, getRepoState_1.parseGitLsTree)(output);
73
+ expect(changes.size).toEqual(1); // Expect there to be exactly 1 change
74
+ expect(changes.get(filename)).toEqual(hash); // Expect the hash to be ${hash}
75
+ });
76
+ it("can handle multiple lines", () => {
77
+ const filename1 = "src/typings/tsd.d.ts";
78
+ const hash1 = "3451bccdc831cb43d7a70ed8e628dcf9c7f888c8";
79
+ const filename2 = "src/foo bar/tsd.d.ts";
80
+ const hash2 = "0123456789abcdef1234567890abcdef01234567";
81
+ const output = `100644 blob ${hash1}\t${filename1}\x00100666 blob ${hash2}\t${filename2}\0`;
82
+ const changes = (0, getRepoState_1.parseGitLsTree)(output);
83
+ expect(changes.size).toEqual(2); // Expect there to be exactly 2 changes
84
+ expect(changes.get(filename1)).toEqual(hash1); // Expect the hash to be ${hash1}
85
+ expect(changes.get(filename2)).toEqual(hash2); // Expect the hash to be ${hash2}
86
+ });
87
+ });
88
+ describe(getRepoState_1.getRepoState.name, () => {
89
+ it("can parse committed files", () => {
90
+ const results = (0, getRepoState_1.getRepoState)(__dirname);
91
+ const filteredResults = getRelevantEntries(results);
92
+ const expectedFiles = new Map(Object.entries({
93
+ "nestedTestProject/src/file 1.txt": "c7b2f707ac99ca522f965210a7b6b0b109863f34",
94
+ [`nestedTestProject/package.json`]: "18a1e415e56220fa5122428a4ef8eb8874756576",
95
+ "testProject/file1.txt": "c7b2f707ac99ca522f965210a7b6b0b109863f34",
96
+ "testProject/file 2.txt": "a385f754ec4fede884a4864d090064d9aeef8ccb",
97
+ "testProject/file蝴蝶.txt": "ae814af81e16cb2ae8c57503c77e2cab6b5462ba",
98
+ [`testProject/package.json`]: "18a1e415e56220fa5122428a4ef8eb8874756576",
99
+ }));
100
+ for (const [filePath, hash] of expectedFiles) {
101
+ expect(filteredResults.get(filePath)).toEqual(hash);
102
+ }
103
+ expect(filteredResults.size).toEqual(expectedFiles.size);
104
+ });
105
+ it("can handle adding one file", () => {
106
+ const tempFilePath = path.join(TEST_PROJECT_PATH, "a.txt");
107
+ FileSystem.writeFile(tempFilePath, "a");
108
+ const results = (0, getRepoState_1.getRepoState)(__dirname);
109
+ const filteredResults = getRelevantEntries(results);
110
+ try {
111
+ const expectedFiles = new Map(Object.entries({
112
+ "nestedTestProject/src/file 1.txt": "c7b2f707ac99ca522f965210a7b6b0b109863f34",
113
+ [`nestedTestProject/package.json`]: "18a1e415e56220fa5122428a4ef8eb8874756576",
114
+ "testProject/a.txt": "2e65efe2a145dda7ee51d1741299f848e5bf752e",
115
+ "testProject/file1.txt": "c7b2f707ac99ca522f965210a7b6b0b109863f34",
116
+ "testProject/file 2.txt": "a385f754ec4fede884a4864d090064d9aeef8ccb",
117
+ "testProject/file蝴蝶.txt": "ae814af81e16cb2ae8c57503c77e2cab6b5462ba",
118
+ [`testProject/package.json`]: "18a1e415e56220fa5122428a4ef8eb8874756576",
119
+ }));
120
+ for (const [filePath, hash] of expectedFiles) {
121
+ expect(filteredResults.get(filePath)).toEqual(hash);
122
+ }
123
+ expect(filteredResults.size).toEqual(expectedFiles.size);
124
+ }
125
+ finally {
126
+ FileSystem.deleteFile(tempFilePath);
127
+ }
128
+ });
129
+ it("can handle adding two files", () => {
130
+ const tempFilePath1 = path.join(TEST_PROJECT_PATH, "a.txt");
131
+ const tempFilePath2 = path.join(TEST_PROJECT_PATH, "b.txt");
132
+ FileSystem.writeFile(tempFilePath1, "a");
133
+ FileSystem.writeFile(tempFilePath2, "a");
134
+ const results = (0, getRepoState_1.getRepoState)(__dirname);
135
+ const filteredResults = getRelevantEntries(results);
136
+ try {
137
+ const expectedFiles = new Map(Object.entries({
138
+ "nestedTestProject/src/file 1.txt": "c7b2f707ac99ca522f965210a7b6b0b109863f34",
139
+ [`nestedTestProject/package.json`]: "18a1e415e56220fa5122428a4ef8eb8874756576",
140
+ "testProject/a.txt": "2e65efe2a145dda7ee51d1741299f848e5bf752e",
141
+ "testProject/b.txt": "2e65efe2a145dda7ee51d1741299f848e5bf752e",
142
+ "testProject/file1.txt": "c7b2f707ac99ca522f965210a7b6b0b109863f34",
143
+ "testProject/file 2.txt": "a385f754ec4fede884a4864d090064d9aeef8ccb",
144
+ "testProject/file蝴蝶.txt": "ae814af81e16cb2ae8c57503c77e2cab6b5462ba",
145
+ [`testProject/package.json`]: "18a1e415e56220fa5122428a4ef8eb8874756576",
146
+ }));
147
+ for (const [filePath, hash] of expectedFiles) {
148
+ expect(filteredResults.get(filePath)).toEqual(hash);
149
+ }
150
+ expect(filteredResults.size).toEqual(expectedFiles.size);
151
+ }
152
+ finally {
153
+ FileSystem.deleteFile(tempFilePath1);
154
+ FileSystem.deleteFile(tempFilePath2);
155
+ }
156
+ });
157
+ it("can handle removing one file", () => {
158
+ const testFilePath = path.join(TEST_PROJECT_PATH, "file1.txt");
159
+ FileSystem.deleteFile(testFilePath);
160
+ const results = (0, getRepoState_1.getRepoState)(__dirname);
161
+ const filteredResults = getRelevantEntries(results);
162
+ try {
163
+ const expectedFiles = new Map(Object.entries({
164
+ "nestedTestProject/src/file 1.txt": "c7b2f707ac99ca522f965210a7b6b0b109863f34",
165
+ [`nestedTestProject/package.json`]: "18a1e415e56220fa5122428a4ef8eb8874756576",
166
+ "testProject/file 2.txt": "a385f754ec4fede884a4864d090064d9aeef8ccb",
167
+ "testProject/file蝴蝶.txt": "ae814af81e16cb2ae8c57503c77e2cab6b5462ba",
168
+ [`testProject/package.json`]: "18a1e415e56220fa5122428a4ef8eb8874756576",
169
+ }));
170
+ for (const [filePath, hash] of expectedFiles) {
171
+ expect(filteredResults.get(filePath)).toEqual(hash);
172
+ }
173
+ expect(filteredResults.size).toEqual(expectedFiles.size);
174
+ }
175
+ finally {
176
+ (0, child_process_1.execSync)(`git checkout --force HEAD -- ${TEST_PREFIX}testProject/file1.txt`, {
177
+ stdio: "ignore",
178
+ cwd: (0, getRepoState_1.getRepoRoot)(__dirname),
179
+ });
180
+ }
181
+ });
182
+ it("can handle changing one file", () => {
183
+ const testFilePath = path.join(TEST_PROJECT_PATH, "file1.txt");
184
+ FileSystem.writeFile(testFilePath, "abc");
185
+ const results = (0, getRepoState_1.getRepoState)(__dirname);
186
+ const filteredResults = getRelevantEntries(results);
187
+ try {
188
+ const expectedFiles = new Map(Object.entries({
189
+ "nestedTestProject/src/file 1.txt": "c7b2f707ac99ca522f965210a7b6b0b109863f34",
190
+ [`nestedTestProject/package.json`]: "18a1e415e56220fa5122428a4ef8eb8874756576",
191
+ "testProject/file1.txt": "f2ba8f84ab5c1bce84a7b441cb1959cfc7093b7f",
192
+ "testProject/file 2.txt": "a385f754ec4fede884a4864d090064d9aeef8ccb",
193
+ "testProject/file蝴蝶.txt": "ae814af81e16cb2ae8c57503c77e2cab6b5462ba",
194
+ [`testProject/package.json`]: "18a1e415e56220fa5122428a4ef8eb8874756576",
195
+ }));
196
+ for (const [filePath, hash] of expectedFiles) {
197
+ expect(filteredResults.get(filePath)).toEqual(hash);
198
+ }
199
+ expect(filteredResults.size).toEqual(expectedFiles.size);
200
+ }
201
+ finally {
202
+ FileSystem.writeFile(testFilePath, "file1.");
203
+ }
204
+ });
205
+ it("can handle uncommitted filenames with spaces and non-ASCII characters", () => {
206
+ const tempFilePath1 = path.join(TEST_PROJECT_PATH, "a file.txt");
207
+ const tempFilePath2 = path.join(TEST_PROJECT_PATH, "a file name.txt");
208
+ const tempFilePath3 = path.join(TEST_PROJECT_PATH, "newFile批把.txt");
209
+ FileSystem.writeFile(tempFilePath1, "a");
210
+ FileSystem.writeFile(tempFilePath2, "a");
211
+ FileSystem.writeFile(tempFilePath3, "a");
212
+ const results = (0, getRepoState_1.getRepoState)(__dirname);
213
+ const filteredResults = getRelevantEntries(results);
214
+ try {
215
+ const expectedFiles = new Map(Object.entries({
216
+ "nestedTestProject/src/file 1.txt": "c7b2f707ac99ca522f965210a7b6b0b109863f34",
217
+ [`nestedTestProject/package.json`]: "18a1e415e56220fa5122428a4ef8eb8874756576",
218
+ "testProject/a file.txt": "2e65efe2a145dda7ee51d1741299f848e5bf752e",
219
+ "testProject/a file name.txt": "2e65efe2a145dda7ee51d1741299f848e5bf752e",
220
+ "testProject/file1.txt": "c7b2f707ac99ca522f965210a7b6b0b109863f34",
221
+ "testProject/file 2.txt": "a385f754ec4fede884a4864d090064d9aeef8ccb",
222
+ "testProject/file蝴蝶.txt": "ae814af81e16cb2ae8c57503c77e2cab6b5462ba",
223
+ "testProject/newFile批把.txt": "2e65efe2a145dda7ee51d1741299f848e5bf752e",
224
+ [`testProject/package.json`]: "18a1e415e56220fa5122428a4ef8eb8874756576",
225
+ }));
226
+ for (const [filePath, hash] of expectedFiles) {
227
+ expect(filteredResults.get(filePath)).toEqual(hash);
228
+ }
229
+ expect(filteredResults.size).toEqual(expectedFiles.size);
230
+ }
231
+ finally {
232
+ FileSystem.deleteFile(tempFilePath1);
233
+ FileSystem.deleteFile(tempFilePath2);
234
+ FileSystem.deleteFile(tempFilePath3);
235
+ }
236
+ });
237
+ });
238
+ //# sourceMappingURL=getRepoDeps.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRepoDeps.test.js","sourceRoot":"","sources":["../../src/__tests__/getRepoDeps.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const getRepoState_1 = require("../getRepoState");
4
+ describe(getRepoState_1.parseGitVersion.name, () => {
5
+ it("Can parse valid git version responses", () => {
6
+ expect((0, getRepoState_1.parseGitVersion)("git version 2.30.2.windows.1")).toEqual({
7
+ major: 2,
8
+ minor: 30,
9
+ patch: 2,
10
+ });
11
+ expect((0, getRepoState_1.parseGitVersion)("git version 2.30.2.windows.1.g8b8f8e")).toEqual({
12
+ major: 2,
13
+ minor: 30,
14
+ patch: 2,
15
+ });
16
+ expect((0, getRepoState_1.parseGitVersion)("git version 2.30.2")).toEqual({
17
+ major: 2,
18
+ minor: 30,
19
+ patch: 2,
20
+ });
21
+ });
22
+ it("Rejects invalid git version responses", () => {
23
+ expect(() => (0, getRepoState_1.parseGitVersion)("2.22.0.windows.1")).toThrowErrorMatchingInlineSnapshot(`"While validating the Git installation, the "git version" command produced unexpected output: "2.22.0.windows.1""`);
24
+ expect(() => (0, getRepoState_1.parseGitVersion)("git version 2.30.A")).toThrowErrorMatchingInlineSnapshot(`"While validating the Git installation, the "git version" command produced unexpected output: "git version 2.30.A""`);
25
+ expect(() => (0, getRepoState_1.parseGitVersion)("git version 2.30")).toThrowErrorMatchingInlineSnapshot(`"While validating the Git installation, the "git version" command produced unexpected output: "git version 2.30""`);
26
+ expect(() => (0, getRepoState_1.parseGitVersion)("git version .2.30")).toThrowErrorMatchingInlineSnapshot(`"While validating the Git installation, the "git version" command produced unexpected output: "git version .2.30""`);
27
+ });
28
+ });
29
+ describe(getRepoState_1.parseGitStatus.name, () => {
30
+ it("Finds index entries", () => {
31
+ const files = [`A.ts`, `B.ts`, `C.ts`];
32
+ const input = [`A ${files[0]}`, `D ${files[1]}`, `M ${files[2]}`, ""].join("\0");
33
+ const result = (0, getRepoState_1.parseGitStatus)(input);
34
+ expect(result.size).toEqual(3);
35
+ expect(result.get(files[0])).toEqual(true);
36
+ expect(result.get(files[1])).toEqual(false);
37
+ expect(result.get(files[2])).toEqual(true);
38
+ });
39
+ it("Finds working tree entries", () => {
40
+ const files = [`A.ts`, `B.ts`, `C.ts`];
41
+ const input = [` A ${files[0]}`, ` D ${files[1]}`, ` M ${files[2]}`, ""].join("\0");
42
+ const result = (0, getRepoState_1.parseGitStatus)(input);
43
+ expect(result.size).toEqual(3);
44
+ expect(result.get(files[0])).toEqual(true);
45
+ expect(result.get(files[1])).toEqual(false);
46
+ expect(result.get(files[2])).toEqual(true);
47
+ });
48
+ it("Can handle untracked files", () => {
49
+ const files = [`A.ts`, `B.ts`, `C.ts`];
50
+ const input = [`?? ${files[0]}`, `?? ${files[1]}`, `?? ${files[2]}`, ""].join("\0");
51
+ const result = (0, getRepoState_1.parseGitStatus)(input);
52
+ expect(result.size).toEqual(3);
53
+ expect(result.get(files[0])).toEqual(true);
54
+ expect(result.get(files[1])).toEqual(true);
55
+ expect(result.get(files[2])).toEqual(true);
56
+ });
57
+ it("Can handle files modified in both index and working tree", () => {
58
+ const files = [`A.ts`, `B.ts`, `C.ts`];
59
+ const input = [`D ${files[0]}`, `AD ${files[1]}`, `DA ${files[2]}`, ""].join("\0");
60
+ const result = (0, getRepoState_1.parseGitStatus)(input);
61
+ expect(result.size).toEqual(3);
62
+ expect(result.get(files[0])).toEqual(false);
63
+ expect(result.get(files[1])).toEqual(false);
64
+ expect(result.get(files[2])).toEqual(true);
65
+ });
66
+ });
67
+ //# sourceMappingURL=getRepoState.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRepoState.test.js","sourceRoot":"","sources":["../../src/__tests__/getRepoState.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,100 @@
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 fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const monorepo_fixture_1 = require("@lage-run/monorepo-fixture");
9
+ const hashOfFiles_1 = require("../hashOfFiles");
10
+ const repoInfo_1 = require("../repoInfo");
11
+ const fixturesPath = path_1.default.join(__dirname, "..", "__fixtures__");
12
+ describe("generateHashOfFiles()", () => {
13
+ it("creates different hashes for different hashes", async () => {
14
+ const monorepo = new monorepo_fixture_1.Monorepo("monorepo");
15
+ await monorepo.init(path_1.default.join(fixturesPath, "monorepo"));
16
+ const packageRoot = monorepo.root;
17
+ let repoInfo = await (0, repoInfo_1.getRepoInfoNoCache)(packageRoot);
18
+ const hashOfPackage = await (0, hashOfFiles_1.generateHashOfFiles)(packageRoot, repoInfo);
19
+ fs_extra_1.default.writeFileSync(path_1.default.join(packageRoot, "foo.txt"), "bar");
20
+ repoInfo = await (0, repoInfo_1.getRepoInfoNoCache)(packageRoot);
21
+ const hashOfPackageWithFoo = await (0, hashOfFiles_1.generateHashOfFiles)(packageRoot, repoInfo);
22
+ expect(hashOfPackage).not.toEqual(hashOfPackageWithFoo);
23
+ fs_extra_1.default.writeFileSync(path_1.default.join(packageRoot, "foo.txt"), "foo");
24
+ repoInfo = await (0, repoInfo_1.getRepoInfoNoCache)(packageRoot);
25
+ const hashOfPackageWithFoo2 = await (0, hashOfFiles_1.generateHashOfFiles)(packageRoot, repoInfo);
26
+ expect(hashOfPackageWithFoo).not.toEqual(hashOfPackageWithFoo2);
27
+ fs_extra_1.default.unlinkSync(path_1.default.join(packageRoot, "foo.txt"));
28
+ repoInfo = await (0, repoInfo_1.getRepoInfoNoCache)(packageRoot);
29
+ const hashOfPackageWithoutFoo = await (0, hashOfFiles_1.generateHashOfFiles)(packageRoot, repoInfo);
30
+ expect(hashOfPackage).toEqual(hashOfPackageWithoutFoo);
31
+ await monorepo.cleanup();
32
+ });
33
+ it("is not confused by package names being substring of other packages", async () => {
34
+ const monorepo = new monorepo_fixture_1.Monorepo("monorepo");
35
+ await monorepo.init(path_1.default.join(fixturesPath, "monorepo"));
36
+ const packageRoot = monorepo.root;
37
+ let repoInfo = await (0, repoInfo_1.getRepoInfoNoCache)(packageRoot);
38
+ const hashOfPackageA = await (0, hashOfFiles_1.generateHashOfFiles)(path_1.default.join(packageRoot, "packages", "package-a"), repoInfo);
39
+ await fs_extra_1.default.mkdir(path_1.default.join(packageRoot, "packages", "package-abc"));
40
+ await fs_extra_1.default.writeFile(path_1.default.join(packageRoot, "packages", "package-abc", "foo"), "bar");
41
+ repoInfo = await (0, repoInfo_1.getRepoInfoNoCache)(packageRoot);
42
+ const newHashOfPackageA = await (0, hashOfFiles_1.generateHashOfFiles)(path_1.default.join(packageRoot, "packages", "package-a"), repoInfo);
43
+ expect(hashOfPackageA).toEqual(newHashOfPackageA);
44
+ await monorepo.cleanup();
45
+ });
46
+ it("file paths are included in hash", async () => {
47
+ const monorepo = new monorepo_fixture_1.Monorepo("monorepo");
48
+ await monorepo.init(path_1.default.join(fixturesPath, "empty"));
49
+ const packageRoot = monorepo.root;
50
+ fs_extra_1.default.writeFileSync(path_1.default.join(packageRoot, "foo.txt"), "bar");
51
+ let repoInfo = await (0, repoInfo_1.getRepoInfoNoCache)(packageRoot);
52
+ const hashOfPackageWithFoo = await (0, hashOfFiles_1.generateHashOfFiles)(packageRoot, repoInfo);
53
+ fs_extra_1.default.unlinkSync(path_1.default.join(packageRoot, "foo.txt"));
54
+ fs_extra_1.default.writeFileSync(path_1.default.join(packageRoot, "bar.txt"), "bar");
55
+ repoInfo = await (0, repoInfo_1.getRepoInfoNoCache)(packageRoot);
56
+ const hashOfPackageWithBar = await (0, hashOfFiles_1.generateHashOfFiles)(packageRoot, repoInfo);
57
+ expect(hashOfPackageWithFoo).not.toEqual(hashOfPackageWithBar);
58
+ await monorepo.cleanup();
59
+ });
60
+ // This test will be run on Windows and on Linux on the CI
61
+ it("file paths are consistent across platforms", async () => {
62
+ const monorepo = new monorepo_fixture_1.Monorepo("monorepo");
63
+ await monorepo.init(path_1.default.join(fixturesPath, "empty"));
64
+ const packageRoot = monorepo.root;
65
+ // Create a folder to make sure we get folder separators as part of the file name
66
+ const folder = path_1.default.join(packageRoot, "foo");
67
+ fs_extra_1.default.mkdirpSync(folder);
68
+ fs_extra_1.default.writeFileSync(path_1.default.join(folder, "foo.txt"), "bar");
69
+ let repoInfo = await (0, repoInfo_1.getRepoInfoNoCache)(packageRoot);
70
+ const hashOfPackage = await (0, hashOfFiles_1.generateHashOfFiles)(packageRoot, repoInfo);
71
+ expect(hashOfPackage).toEqual("4d4ca2ecc436e1198554f5d03236ea8f956ac0c4");
72
+ await monorepo.cleanup();
73
+ });
74
+ // This test will be run on Windows and on Linux on the CI
75
+ it("file paths in a package not defined in a workspace (malformed monorepo) are consistent across platforms (uses slow path)", async () => {
76
+ const monorepo = new monorepo_fixture_1.Monorepo("monorepo");
77
+ await monorepo.init(path_1.default.join(fixturesPath, "empty"));
78
+ const workspaceRoot = monorepo.root;
79
+ // Create a folder to make sure we get folder separators as part of the file name
80
+ const folder = path_1.default.join(workspaceRoot, "packages", "foo");
81
+ fs_extra_1.default.mkdirpSync(folder);
82
+ fs_extra_1.default.writeFileSync(path_1.default.join(folder, "foo.txt"), "bar");
83
+ let repoInfo = await (0, repoInfo_1.getRepoInfoNoCache)(workspaceRoot);
84
+ const hashOfPackage = await (0, hashOfFiles_1.generateHashOfFiles)(folder, repoInfo);
85
+ expect(hashOfPackage).toEqual("438b5f734e6de1ef0eb9114a28ef230a9ff83f54");
86
+ await monorepo.cleanup();
87
+ });
88
+ it("file paths in a monorepo are consistent across platforms (uses fast path)", async () => {
89
+ const monorepo = new monorepo_fixture_1.Monorepo("monorepo");
90
+ await monorepo.init(path_1.default.join(fixturesPath, "monorepo"));
91
+ const workspaceRoot = monorepo.root;
92
+ const folder = path_1.default.join(workspaceRoot, "packages", "package-a");
93
+ fs_extra_1.default.writeFileSync(path_1.default.join(folder, "foo.txt"), "bar");
94
+ let repoInfo = await (0, repoInfo_1.getRepoInfoNoCache)(workspaceRoot);
95
+ const hashOfPackage = await (0, hashOfFiles_1.generateHashOfFiles)(folder, repoInfo);
96
+ expect(hashOfPackage).toEqual("b91634233c6a3768136391c804967bf0e0a6578d");
97
+ await monorepo.cleanup();
98
+ });
99
+ });
100
+ //# sourceMappingURL=hashOfFiles.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashOfFiles.test.js","sourceRoot":"","sources":["../../src/__tests__/hashOfFiles.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const helpers_1 = require("../helpers");
4
+ describe("hashStrings()", () => {
5
+ it("creates different hashes given different lists", () => {
6
+ const list = [];
7
+ list.push("foo");
8
+ list.push("bar");
9
+ const hash = (0, helpers_1.hashStrings)(list);
10
+ list.push("baz");
11
+ const hashWithBaz = (0, helpers_1.hashStrings)(list);
12
+ expect(hash).not.toEqual(hashWithBaz);
13
+ list.pop();
14
+ const hashWithoutBaz = (0, helpers_1.hashStrings)(list);
15
+ expect(hash).toEqual(hashWithoutBaz);
16
+ });
17
+ it("lists of different order produce the same hash", () => {
18
+ const list = [];
19
+ list.push("foo");
20
+ list.push("bar");
21
+ const hash = (0, helpers_1.hashStrings)(list);
22
+ list.reverse();
23
+ const hashReverse = (0, helpers_1.hashStrings)(list);
24
+ expect(hash).toEqual(hashReverse);
25
+ });
26
+ });
27
+ //# sourceMappingURL=helpers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.test.js","sourceRoot":"","sources":["../../src/__tests__/helpers.test.ts"],"names":[],"mappings":";;AAAA,wCAAyC;AAEzC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjB,MAAM,IAAI,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,MAAM,WAAW,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEtC,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,MAAM,cAAc,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,CAAC;QAEzC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjB,MAAM,IAAI,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,MAAM,WAAW,GAAG,IAAA,qBAAW,EAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,87 @@
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 index_1 = require("../index");
8
+ const monorepo_fixture_1 = require("@lage-run/monorepo-fixture");
9
+ const fixturesPath = path_1.default.join(__dirname, "..", "__fixtures__");
10
+ describe("addToQueue", () => {
11
+ const setupAddToQueue = async () => {
12
+ const monorepo = new monorepo_fixture_1.Monorepo("monorepo");
13
+ await monorepo.init(path_1.default.join(fixturesPath, "monorepo"));
14
+ const packageRoot = monorepo.root;
15
+ const packageToAdd = "package-a";
16
+ const packagePath = path_1.default.join(packageRoot, "packages", packageToAdd);
17
+ const workspaces = [
18
+ {
19
+ name: packageToAdd,
20
+ path: packagePath,
21
+ packageJson: {
22
+ name: "",
23
+ packageJsonPath: "",
24
+ version: "",
25
+ },
26
+ },
27
+ ];
28
+ const internalDependencies = [packageToAdd];
29
+ const queue = [];
30
+ const done = [];
31
+ return {
32
+ internalDependencies,
33
+ queue,
34
+ done,
35
+ workspaces,
36
+ packageToAdd,
37
+ packagePath,
38
+ };
39
+ };
40
+ it("adds internal dependencies to the queue", async () => {
41
+ const { internalDependencies, queue, done, workspaces, packagePath } = await setupAddToQueue();
42
+ (0, index_1.addToQueue)(internalDependencies, queue, done, workspaces);
43
+ const expectedQueue = [packagePath];
44
+ expect(queue).toEqual(expectedQueue);
45
+ });
46
+ it("doesn't add to the queue if the package has been evaluated", async () => {
47
+ let { internalDependencies, queue, done, workspaces, packageToAdd } = await setupAddToQueue();
48
+ // Override
49
+ done = [
50
+ {
51
+ name: packageToAdd,
52
+ filesHash: "",
53
+ dependenciesHash: "",
54
+ internalDependencies: [],
55
+ },
56
+ ];
57
+ (0, index_1.addToQueue)(internalDependencies, queue, done, workspaces);
58
+ expect(queue).toEqual([]);
59
+ });
60
+ it("doesn't add to the queue if the package is already in the queue", async () => {
61
+ let { internalDependencies, queue, done, workspaces, packagePath } = await setupAddToQueue();
62
+ // Override
63
+ queue = [packagePath];
64
+ (0, index_1.addToQueue)(internalDependencies, queue, done, workspaces);
65
+ const expectedQueue = [packagePath];
66
+ expect(queue).toEqual(expectedQueue);
67
+ });
68
+ });
69
+ describe("The main Hasher class", () => {
70
+ const setupFixtureAndReturnHash = async (fixture = "monorepo") => {
71
+ const monorepo = new monorepo_fixture_1.Monorepo("monorepo");
72
+ await monorepo.init(path_1.default.join(fixturesPath, fixture));
73
+ const packageRoot = monorepo.root;
74
+ const buildSignature = "yarn build";
75
+ const hasher = new index_1.Hasher(packageRoot);
76
+ const hash = await hasher.createPackageHash(buildSignature);
77
+ return hash;
78
+ };
79
+ it("creates different hashes given different fixtures", async () => {
80
+ const hash = await setupFixtureAndReturnHash();
81
+ const hashOfBasic = await setupFixtureAndReturnHash("basic");
82
+ expect(hash).not.toEqual(hashOfBasic);
83
+ const hashOfMonorepoAgain = await setupFixtureAndReturnHash();
84
+ expect(hash).toEqual(hashOfMonorepoAgain);
85
+ });
86
+ });
87
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/__tests__/index.test.ts"],"names":[],"mappings":";;;;;AAAA,gDAAwB;AAIxB,oCAA8C;AAE9C,iEAAsD;AACtD,MAAM,YAAY,GAAG,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAEhE,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE;QACjC,MAAM,QAAQ,GAAG,IAAI,2BAAQ,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC;QACzD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC;QAElC,MAAM,YAAY,GAAG,WAAW,CAAC;QACjC,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QACrE,MAAM,UAAU,GAAkB;YAChC;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE;oBACX,IAAI,EAAE,EAAE;oBACR,eAAe,EAAE,EAAE;oBACnB,OAAO,EAAE,EAAE;iBACZ;aACF;SACF,CAAC;QACF,MAAM,oBAAoB,GAAG,CAAC,YAAY,CAAC,CAAC;QAE5C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAsB,EAAE,CAAC;QAEnC,OAAO;YACL,oBAAoB;YACpB,KAAK;YACL,IAAI;YACJ,UAAU;YACV,YAAY;YACZ,WAAW;SACZ,CAAC;IACJ,CAAC,CAAC;IAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE/F,IAAA,kBAAU,EAAC,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAE1D,MAAM,aAAa,GAAG,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE9F,WAAW;QACX,IAAI,GAAG;YACL;gBACE,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,EAAE;gBACb,gBAAgB,EAAE,EAAE;gBACpB,oBAAoB,EAAE,EAAE;aACzB;SACF,CAAC;QAEF,IAAA,kBAAU,EAAC,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAE1D,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAE7F,WAAW;QACX,KAAK,GAAG,CAAC,WAAW,CAAC,CAAC;QAEtB,IAAA,kBAAU,EAAC,oBAAoB,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;QAE1D,MAAM,aAAa,GAAG,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,MAAM,yBAAyB,GAAG,KAAK,EAAE,OAAO,GAAG,UAAU,EAAE,EAAE;QAC/D,MAAM,QAAQ,GAAG,IAAI,2BAAQ,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QACtD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC;QAElC,MAAM,cAAc,GAAG,YAAY,CAAC;QAEpC,MAAM,MAAM,GAAG,IAAI,cAAM,CAAC,WAAW,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAE5D,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,IAAI,GAAG,MAAM,yBAAyB,EAAE,CAAC;QAE/C,MAAM,WAAW,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAEtC,MAAM,mBAAmB,GAAG,MAAM,yBAAyB,EAAE,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function filterDependenciesInYarnFixture(fixture: string, filterFunction: any): Promise<any>;
2
+ export declare function filterDependenciesInPnpmFixture(fixture: string, filterFunction: any): Promise<any>;
3
+ export declare function filterDependenciesInRushFixture(fixture: string, filterFunction: any): Promise<any>;
@@ -0,0 +1,41 @@
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.filterDependenciesInRushFixture = exports.filterDependenciesInPnpmFixture = exports.filterDependenciesInYarnFixture = void 0;
7
+ const path_1 = __importDefault(require("path"));
8
+ const monorepo_fixture_1 = require("@lage-run/monorepo-fixture");
9
+ const fixturesPath = path_1.default.join(__dirname, "..", "__fixtures__");
10
+ const workspace_tools_1 = require("workspace-tools");
11
+ async function filterDependenciesInYarnFixture(fixture, filterFunction) {
12
+ const monorepo = new monorepo_fixture_1.Monorepo("monorepo");
13
+ await monorepo.init(path_1.default.join(fixturesPath, fixture));
14
+ const packageRoot = monorepo.root;
15
+ const workspacesPackageInfo = (0, workspace_tools_1.getYarnWorkspaces)(packageRoot);
16
+ const dependencies = { "package-a": "1.0.0", foo: "1.0.0" };
17
+ const filteredDependencies = filterFunction(dependencies, workspacesPackageInfo);
18
+ return filteredDependencies;
19
+ }
20
+ exports.filterDependenciesInYarnFixture = filterDependenciesInYarnFixture;
21
+ async function filterDependenciesInPnpmFixture(fixture, filterFunction) {
22
+ const monorepo = new monorepo_fixture_1.Monorepo("monorepo");
23
+ await monorepo.init(path_1.default.join(fixturesPath, fixture));
24
+ const packageRoot = monorepo.root;
25
+ const workspacesPackageInfo = (0, workspace_tools_1.getPnpmWorkspaces)(packageRoot);
26
+ const dependencies = { "package-a": "1.0.0", foo: "1.0.0" };
27
+ const filteredDependencies = filterFunction(dependencies, workspacesPackageInfo);
28
+ return filteredDependencies;
29
+ }
30
+ exports.filterDependenciesInPnpmFixture = filterDependenciesInPnpmFixture;
31
+ async function filterDependenciesInRushFixture(fixture, filterFunction) {
32
+ const monorepo = new monorepo_fixture_1.Monorepo("monorepo");
33
+ await monorepo.init(path_1.default.join(fixturesPath, fixture));
34
+ const packageRoot = monorepo.root;
35
+ const workspacesPackageInfo = (0, workspace_tools_1.getRushWorkspaces)(packageRoot);
36
+ const dependencies = { "package-a": "1.0.0", foo: "1.0.0" };
37
+ const filteredDependencies = filterFunction(dependencies, workspacesPackageInfo);
38
+ return filteredDependencies;
39
+ }
40
+ exports.filterDependenciesInRushFixture = filterDependenciesInRushFixture;
41
+ //# sourceMappingURL=resolveDependenciesHelper.js.map