wrangler 0.0.0-e22f9d7 → 0.0.0-e273e09

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 (154) hide show
  1. package/Cloudflare_CA.pem +18 -0
  2. package/README.md +27 -14
  3. package/bin/wrangler.js +48 -4
  4. package/miniflare-dist/index.mjs +4886 -0
  5. package/package.json +60 -31
  6. package/pages/functions/buildPlugin.ts +105 -0
  7. package/pages/functions/buildWorker.ts +93 -4
  8. package/pages/functions/filepath-routing.test.ts +223 -28
  9. package/pages/functions/filepath-routing.ts +100 -132
  10. package/pages/functions/routes.ts +16 -18
  11. package/pages/functions/template-plugin.ts +147 -0
  12. package/pages/functions/template-worker.ts +37 -38
  13. package/src/__tests__/config-cache.test.ts +36 -0
  14. package/src/__tests__/configuration.test.ts +3487 -0
  15. package/src/__tests__/dev.test.tsx +977 -61
  16. package/src/__tests__/guess-worker-format.test.ts +85 -0
  17. package/src/__tests__/{clipboardy-mock.js → helpers/clipboardy-mock.js} +0 -0
  18. package/src/__tests__/helpers/cmd-shim.d.ts +11 -0
  19. package/src/__tests__/helpers/faye-websocket.d.ts +6 -0
  20. package/src/__tests__/helpers/mock-account-id.ts +48 -0
  21. package/src/__tests__/helpers/mock-bin.ts +36 -0
  22. package/src/__tests__/{mock-cfetch.ts → helpers/mock-cfetch.ts} +56 -16
  23. package/src/__tests__/helpers/mock-console.ts +87 -0
  24. package/src/__tests__/helpers/mock-dialogs.ts +130 -0
  25. package/src/__tests__/helpers/mock-http-server.ts +46 -0
  26. package/src/__tests__/helpers/mock-istty.ts +27 -0
  27. package/src/__tests__/helpers/mock-kv.ts +33 -0
  28. package/src/__tests__/helpers/mock-oauth-flow.ts +255 -0
  29. package/src/__tests__/helpers/mock-stdin.ts +103 -0
  30. package/src/__tests__/helpers/mock-web-socket.ts +29 -0
  31. package/src/__tests__/helpers/run-in-tmp.ts +39 -0
  32. package/src/__tests__/helpers/run-wrangler.ts +16 -0
  33. package/src/__tests__/helpers/write-worker-source.ts +31 -0
  34. package/src/__tests__/helpers/write-wrangler-toml.ts +17 -0
  35. package/src/__tests__/https-options.test.ts +130 -0
  36. package/src/__tests__/index.test.ts +179 -209
  37. package/src/__tests__/init.test.ts +1637 -0
  38. package/src/__tests__/jest.setup.ts +61 -6
  39. package/src/__tests__/kv.test.ts +842 -472
  40. package/src/__tests__/logger.test.ts +115 -0
  41. package/src/__tests__/package-manager.test.ts +353 -0
  42. package/src/__tests__/pages.test.ts +754 -0
  43. package/src/__tests__/parse.test.ts +330 -0
  44. package/src/__tests__/publish.test.ts +5755 -0
  45. package/src/__tests__/r2.test.ts +233 -0
  46. package/src/__tests__/route.test.ts +45 -0
  47. package/src/__tests__/secret.test.ts +481 -0
  48. package/src/__tests__/tail.test.ts +690 -0
  49. package/src/__tests__/user.test.ts +131 -0
  50. package/src/__tests__/whoami.test.tsx +139 -0
  51. package/src/abort.d.ts +3 -0
  52. package/src/bundle.ts +197 -0
  53. package/src/cfetch/index.ts +40 -21
  54. package/src/cfetch/internal.ts +102 -29
  55. package/src/cli.ts +6 -2
  56. package/src/config/README.md +107 -0
  57. package/src/config/config.ts +234 -0
  58. package/src/config/diagnostics.ts +80 -0
  59. package/src/config/environment.ts +420 -0
  60. package/src/config/index.ts +225 -0
  61. package/src/config/validation-helpers.ts +584 -0
  62. package/src/config/validation.ts +1548 -0
  63. package/src/config-cache.ts +45 -0
  64. package/src/create-worker-preview.ts +185 -0
  65. package/src/create-worker-upload-form.ts +254 -0
  66. package/src/dev/dev-vars.ts +36 -0
  67. package/src/dev/dev.tsx +401 -0
  68. package/src/dev/local.tsx +326 -0
  69. package/src/dev/remote.tsx +237 -0
  70. package/src/dev/use-esbuild.ts +118 -0
  71. package/src/dialogs.tsx +66 -8
  72. package/src/durable.ts +102 -0
  73. package/src/entry.ts +322 -0
  74. package/src/environment-variables.ts +35 -0
  75. package/src/errors.ts +11 -0
  76. package/src/https-options.ts +123 -0
  77. package/src/index.tsx +1848 -976
  78. package/src/inspect.ts +156 -33
  79. package/src/intl-polyfill.d.ts +139 -0
  80. package/src/{kv.tsx → kv.ts} +199 -67
  81. package/src/logger.ts +66 -0
  82. package/src/miniflare-cli/README.md +30 -0
  83. package/src/miniflare-cli/enum-keys.ts +17 -0
  84. package/src/miniflare-cli/index.ts +41 -0
  85. package/src/miniflare-cli/request-context.ts +40 -0
  86. package/src/module-collection.ts +229 -35
  87. package/src/open-in-browser.ts +19 -0
  88. package/src/package-manager.ts +174 -0
  89. package/src/pages.tsx +1162 -100
  90. package/src/parse.ts +203 -0
  91. package/src/paths.ts +26 -0
  92. package/src/proxy.ts +227 -51
  93. package/src/publish.ts +633 -276
  94. package/src/r2.ts +50 -0
  95. package/src/selfsigned.d.ts +29 -0
  96. package/src/sites.tsx +270 -62
  97. package/src/tail/filters.ts +279 -0
  98. package/src/tail/index.ts +299 -0
  99. package/src/tail/printing.ts +67 -0
  100. package/src/update-check.ts +19 -0
  101. package/src/user.tsx +382 -195
  102. package/src/whoami.tsx +71 -0
  103. package/src/{api/worker.ts → worker.ts} +66 -40
  104. package/src/zones.ts +73 -0
  105. package/templates/gitignore +171 -0
  106. package/templates/new-worker-scheduled.js +17 -0
  107. package/templates/new-worker-scheduled.ts +32 -0
  108. package/templates/new-worker.js +15 -0
  109. package/templates/new-worker.ts +30 -0
  110. package/{static-asset-facade.js → templates/static-asset-facade.js} +1 -5
  111. package/templates/tsconfig.json +105 -0
  112. package/wrangler-dist/cli.js +106332 -103741
  113. package/src/__tests__/mock-dialogs.ts +0 -65
  114. package/src/__tests__/run-in-tmp.ts +0 -19
  115. package/src/__tests__/run-wrangler.ts +0 -32
  116. package/src/api/form_data.ts +0 -131
  117. package/src/api/preview.ts +0 -128
  118. package/src/config.ts +0 -487
  119. package/src/dev.tsx +0 -784
  120. package/src/tail.tsx +0 -73
  121. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  122. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  123. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  124. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  125. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  126. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  127. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  128. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  129. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  130. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  131. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  132. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  133. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  134. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  135. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  136. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  137. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  138. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  139. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  140. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  141. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  142. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  143. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  144. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  145. package/vendor/wrangler-mime/LICENSE +0 -21
  146. package/vendor/wrangler-mime/Mime.js +0 -97
  147. package/vendor/wrangler-mime/README.md +0 -187
  148. package/vendor/wrangler-mime/cli.js +0 -46
  149. package/vendor/wrangler-mime/index.js +0 -4
  150. package/vendor/wrangler-mime/lite.js +0 -4
  151. package/vendor/wrangler-mime/package.json +0 -52
  152. package/vendor/wrangler-mime/types/other.js +0 -1
  153. package/vendor/wrangler-mime/types/standard.js +0 -1
  154. package/wrangler-dist/cli.js.map +0 -7
@@ -0,0 +1,115 @@
1
+ import { logger } from "../logger";
2
+ import { mockConsoleMethods } from "./helpers/mock-console";
3
+
4
+ describe("logger", () => {
5
+ const std = mockConsoleMethods();
6
+
7
+ it("should add colored markers to error and warning messages", () => {
8
+ logger.loggerLevel = "debug";
9
+ logger.debug("This is a debug message");
10
+ logger.log("This is a log message");
11
+ logger.warn("This is a warn message");
12
+ logger.error("This is a error message");
13
+
14
+ expect(std.debug).toMatchInlineSnapshot(`"This is a debug message"`);
15
+ expect(std.out).toMatchInlineSnapshot(`"This is a log message"`);
16
+ expect(std.warn).toMatchInlineSnapshot(`
17
+ "▲ [WARNING] This is a warn message
18
+
19
+ "
20
+ `);
21
+ expect(std.err).toMatchInlineSnapshot(`
22
+ "X [ERROR] This is a error message
23
+
24
+ "
25
+ `);
26
+ });
27
+
28
+ describe("loggerLevel=debug", () => {
29
+ it("should render messages that are at or above the log level set in the logger", () => {
30
+ logger.loggerLevel = "debug";
31
+ logger.debug("This is a debug message");
32
+ logger.log("This is a log message");
33
+ logger.warn("This is a warn message");
34
+ logger.error("This is a error message");
35
+
36
+ expect(std.debug).toMatchInlineSnapshot(`"This is a debug message"`);
37
+ expect(std.out).toMatchInlineSnapshot(`"This is a log message"`);
38
+ expect(std.warn).toMatchInlineSnapshot(`
39
+ "▲ [WARNING] This is a warn message
40
+
41
+ "
42
+ `);
43
+ expect(std.err).toMatchInlineSnapshot(`
44
+ "X [ERROR] This is a error message
45
+
46
+ "
47
+ `);
48
+ });
49
+ });
50
+
51
+ describe("loggerLevel=log", () => {
52
+ it("should render messages that are at or above the log level set in the logger", () => {
53
+ logger.loggerLevel = "log";
54
+ logger.debug("This is a debug message");
55
+ logger.log("This is a log message");
56
+ logger.warn("This is a warn message");
57
+ logger.error("This is a error message");
58
+
59
+ expect(std.debug).toMatchInlineSnapshot(`""`);
60
+ expect(std.out).toMatchInlineSnapshot(`"This is a log message"`);
61
+ expect(std.warn).toMatchInlineSnapshot(`
62
+ "▲ [WARNING] This is a warn message
63
+
64
+ "
65
+ `);
66
+ expect(std.err).toMatchInlineSnapshot(`
67
+ "X [ERROR] This is a error message
68
+
69
+ "
70
+ `);
71
+ });
72
+ });
73
+
74
+ describe("loggerLevel=warn", () => {
75
+ it("should render messages that are at or above the log level set in the logger", () => {
76
+ logger.loggerLevel = "warn";
77
+ logger.debug("This is a debug message");
78
+ logger.log("This is a log message");
79
+ logger.warn("This is a warn message");
80
+ logger.error("This is a error message");
81
+
82
+ expect(std.debug).toMatchInlineSnapshot(`""`);
83
+ expect(std.out).toMatchInlineSnapshot(`""`);
84
+ expect(std.warn).toMatchInlineSnapshot(`
85
+ "▲ [WARNING] This is a warn message
86
+
87
+ "
88
+ `);
89
+ expect(std.err).toMatchInlineSnapshot(`
90
+ "X [ERROR] This is a error message
91
+
92
+ "
93
+ `);
94
+ });
95
+ });
96
+
97
+ describe("loggerLevel=error", () => {
98
+ it("should render messages that are at or above the log level set in the logger", () => {
99
+ logger.loggerLevel = "error";
100
+ logger.debug("This is a debug message");
101
+ logger.log("This is a log message");
102
+ logger.warn("This is a warn message");
103
+ logger.error("This is a error message");
104
+
105
+ expect(std.debug).toMatchInlineSnapshot(`""`);
106
+ expect(std.out).toMatchInlineSnapshot(`""`);
107
+ expect(std.warn).toMatchInlineSnapshot(`""`);
108
+ expect(std.err).toMatchInlineSnapshot(`
109
+ "X [ERROR] This is a error message
110
+
111
+ "
112
+ `);
113
+ });
114
+ });
115
+ });
@@ -0,0 +1,353 @@
1
+ import { writeFileSync } from "node:fs";
2
+ import { mockBinary } from "./helpers/mock-bin";
3
+ import { mockConsoleMethods } from "./helpers/mock-console";
4
+ import { runInTempDir } from "./helpers/run-in-tmp";
5
+
6
+ const { getPackageManager, getPackageManagerName } =
7
+ jest.requireActual("../package-manager");
8
+ interface TestCase {
9
+ npm: boolean;
10
+ pnpm: boolean;
11
+ yarn: boolean;
12
+ npmLockFile: boolean;
13
+ yarnLockFile: boolean;
14
+ pnpmLockFile: boolean;
15
+ expectedPackageManager: string;
16
+ }
17
+
18
+ const testCases: TestCase[] = [
19
+ // npm binary only
20
+ {
21
+ npm: true,
22
+ yarn: false,
23
+ pnpm: false,
24
+ npmLockFile: false,
25
+ yarnLockFile: false,
26
+ pnpmLockFile: false,
27
+ expectedPackageManager: "npm",
28
+ },
29
+ {
30
+ npm: true,
31
+ yarn: false,
32
+ pnpm: false,
33
+ npmLockFile: true,
34
+ yarnLockFile: false,
35
+ pnpmLockFile: false,
36
+ expectedPackageManager: "npm",
37
+ },
38
+ {
39
+ npm: true,
40
+ yarn: false,
41
+ pnpm: false,
42
+ npmLockFile: false,
43
+ yarnLockFile: true,
44
+ pnpmLockFile: false,
45
+ expectedPackageManager: "npm",
46
+ },
47
+ {
48
+ npm: true,
49
+ yarn: false,
50
+ pnpm: false,
51
+ npmLockFile: true,
52
+ yarnLockFile: true,
53
+ pnpmLockFile: false,
54
+ expectedPackageManager: "npm",
55
+ },
56
+
57
+ // yarn binary only
58
+ {
59
+ npm: false,
60
+ yarn: true,
61
+ pnpm: false,
62
+ npmLockFile: false,
63
+ yarnLockFile: false,
64
+ pnpmLockFile: false,
65
+ expectedPackageManager: "yarn",
66
+ },
67
+ {
68
+ npm: false,
69
+ yarn: true,
70
+ pnpm: false,
71
+ npmLockFile: true,
72
+ yarnLockFile: false,
73
+ pnpmLockFile: false,
74
+ expectedPackageManager: "yarn",
75
+ },
76
+ {
77
+ npm: false,
78
+ yarn: true,
79
+ pnpm: false,
80
+ npmLockFile: false,
81
+ yarnLockFile: true,
82
+ pnpmLockFile: false,
83
+ expectedPackageManager: "yarn",
84
+ },
85
+ {
86
+ npm: false,
87
+ yarn: true,
88
+ pnpm: false,
89
+ npmLockFile: true,
90
+ yarnLockFile: true,
91
+ pnpmLockFile: false,
92
+ expectedPackageManager: "yarn",
93
+ },
94
+
95
+ // pnpm binary only
96
+ {
97
+ npm: false,
98
+ yarn: false,
99
+ pnpm: true,
100
+ npmLockFile: false,
101
+ yarnLockFile: false,
102
+ pnpmLockFile: true,
103
+ expectedPackageManager: "pnpm",
104
+ },
105
+ {
106
+ npm: false,
107
+ yarn: false,
108
+ pnpm: true,
109
+ npmLockFile: true,
110
+ yarnLockFile: false,
111
+ pnpmLockFile: false,
112
+ expectedPackageManager: "pnpm",
113
+ },
114
+ {
115
+ npm: false,
116
+ yarn: false,
117
+ pnpm: true,
118
+ npmLockFile: false,
119
+ yarnLockFile: true,
120
+ pnpmLockFile: false,
121
+ expectedPackageManager: "pnpm",
122
+ },
123
+ {
124
+ npm: false,
125
+ yarn: false,
126
+ pnpm: true,
127
+ npmLockFile: true,
128
+ yarnLockFile: true,
129
+ pnpmLockFile: true,
130
+ expectedPackageManager: "pnpm",
131
+ },
132
+
133
+ // npm and yarn binaries
134
+ {
135
+ npm: true,
136
+ yarn: true,
137
+ pnpm: false,
138
+ npmLockFile: false,
139
+ yarnLockFile: false,
140
+ pnpmLockFile: false,
141
+ expectedPackageManager: "npm",
142
+ },
143
+ {
144
+ npm: true,
145
+ yarn: true,
146
+ pnpm: false,
147
+ npmLockFile: true,
148
+ yarnLockFile: false,
149
+ pnpmLockFile: false,
150
+ expectedPackageManager: "npm",
151
+ },
152
+ {
153
+ npm: true,
154
+ yarn: true,
155
+ pnpm: false,
156
+ npmLockFile: false,
157
+ yarnLockFile: true,
158
+ pnpmLockFile: false,
159
+ expectedPackageManager: "yarn",
160
+ },
161
+ {
162
+ npm: true,
163
+ yarn: true,
164
+ pnpm: false,
165
+ npmLockFile: true,
166
+ yarnLockFile: true,
167
+ pnpmLockFile: false,
168
+ expectedPackageManager: "npm",
169
+ },
170
+ // npm, yarn and pnpm binaries
171
+ {
172
+ npm: true,
173
+ yarn: true,
174
+ pnpm: true,
175
+ npmLockFile: false,
176
+ yarnLockFile: false,
177
+ pnpmLockFile: false,
178
+ expectedPackageManager: "npm",
179
+ },
180
+ {
181
+ npm: true,
182
+ yarn: true,
183
+ pnpm: true,
184
+ npmLockFile: true,
185
+ yarnLockFile: false,
186
+ pnpmLockFile: false,
187
+ expectedPackageManager: "npm",
188
+ },
189
+ {
190
+ npm: true,
191
+ yarn: true,
192
+ pnpm: true,
193
+ npmLockFile: false,
194
+ yarnLockFile: true,
195
+ pnpmLockFile: false,
196
+ expectedPackageManager: "yarn",
197
+ },
198
+ {
199
+ npm: true,
200
+ yarn: true,
201
+ pnpm: true,
202
+ npmLockFile: false,
203
+ yarnLockFile: false,
204
+ pnpmLockFile: true,
205
+ expectedPackageManager: "pnpm",
206
+ },
207
+ {
208
+ npm: true,
209
+ yarn: true,
210
+ pnpm: true,
211
+ npmLockFile: true,
212
+ yarnLockFile: true,
213
+ pnpmLockFile: true,
214
+ expectedPackageManager: "npm",
215
+ },
216
+ ];
217
+
218
+ describe("getPackageManager()", () => {
219
+ runInTempDir();
220
+ mockConsoleMethods();
221
+
222
+ describe("no supported package manager", () => {
223
+ mockYarn(false);
224
+ mockNpm(false);
225
+ mockPnpm(false);
226
+
227
+ it("should throw an error", async () => {
228
+ await expect(() =>
229
+ getPackageManager(process.cwd())
230
+ ).rejects.toThrowErrorMatchingInlineSnapshot(
231
+ `"Unable to find a package manager. Supported managers are: npm, yarn, and pnpm."`
232
+ );
233
+ });
234
+ });
235
+
236
+ for (const {
237
+ npm,
238
+ yarn,
239
+ pnpm,
240
+ npmLockFile,
241
+ yarnLockFile,
242
+ pnpmLockFile,
243
+ expectedPackageManager,
244
+ } of testCases) {
245
+ describe(
246
+ getTestCaseDescription(
247
+ npm,
248
+ yarn,
249
+ pnpm,
250
+ npmLockFile,
251
+ yarnLockFile,
252
+ pnpmLockFile
253
+ ),
254
+ () => {
255
+ mockYarn(yarn);
256
+ mockNpm(npm);
257
+ mockPnpm(pnpm);
258
+ mockLockFiles(npmLockFile, yarnLockFile, pnpmLockFile);
259
+
260
+ it(`should return the ${expectedPackageManager} package manager`, async () => {
261
+ const actualPackageManager = await getPackageManager(process.cwd());
262
+ expect(getPackageManagerName(actualPackageManager)).toEqual(
263
+ expectedPackageManager
264
+ );
265
+ });
266
+ }
267
+ );
268
+ }
269
+ });
270
+
271
+ /**
272
+ * Create a fake yarn binary
273
+ */
274
+ function mockYarn(succeed: boolean): void {
275
+ let unMock: () => void;
276
+ beforeEach(async () => {
277
+ unMock = await mockBinary("yarn", `process.exit(${succeed ? 0 : 1})`);
278
+ });
279
+ afterEach(() => unMock());
280
+ }
281
+
282
+ /**
283
+ * Create a fake npm binary
284
+ */
285
+ function mockNpm(succeed: boolean): void {
286
+ let unMock: () => void;
287
+ beforeEach(async () => {
288
+ unMock = await mockBinary("npm", `process.exit(${succeed ? 0 : 1})`);
289
+ });
290
+ afterEach(() => unMock());
291
+ }
292
+
293
+ /**
294
+ * Create a fake pnpm binary
295
+ */
296
+ function mockPnpm(succeed: boolean): void {
297
+ let unMock: () => void;
298
+ beforeEach(async () => {
299
+ unMock = await mockBinary("pnpm", `process.exit(${succeed ? 0 : 1})`);
300
+ });
301
+ afterEach(() => unMock());
302
+ }
303
+
304
+ /**
305
+ * Create a fake lock files.
306
+ */
307
+ function mockLockFiles(
308
+ npmLockFile: boolean,
309
+ yarnLockFile: boolean,
310
+ pnpmLockFile: boolean
311
+ ) {
312
+ beforeEach(() => {
313
+ if (npmLockFile) {
314
+ writeFileSync("package-lock.json", "");
315
+ }
316
+ if (yarnLockFile) {
317
+ writeFileSync("yarn.lock", "");
318
+ }
319
+ if (pnpmLockFile) {
320
+ writeFileSync("pnpm-lock.yaml", "");
321
+ }
322
+ });
323
+ }
324
+
325
+ function getTestCaseDescription(
326
+ npm: boolean,
327
+ yarn: boolean,
328
+ pnpm: boolean,
329
+ npmLockFile: boolean,
330
+ yarnLockFile: boolean,
331
+ pnpmLockFile: boolean
332
+ ): string {
333
+ const criteria: string[] = [];
334
+ if (npm) {
335
+ criteria.push("npm");
336
+ }
337
+ if (npmLockFile) {
338
+ criteria.push("package-lock.json");
339
+ }
340
+ if (yarn) {
341
+ criteria.push("yarn");
342
+ }
343
+ if (yarnLockFile) {
344
+ criteria.push("yarn.lock");
345
+ }
346
+ if (pnpm) {
347
+ criteria.push("pnpm");
348
+ }
349
+ if (pnpmLockFile) {
350
+ criteria.push("pnpm-lock.yaml");
351
+ }
352
+ return "using " + criteria.join("; ");
353
+ }