wrangler 0.0.0-e0d2f35 → 0.0.0-e178d6fb

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 (215) hide show
  1. package/Cloudflare_CA.pem +18 -0
  2. package/README.md +33 -14
  3. package/bin/wrangler.js +159 -27
  4. package/kv-asset-handler.js +1 -0
  5. package/miniflare-dist/index.mjs +5354 -0
  6. package/package.json +166 -129
  7. package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
  8. package/src/__tests__/config-cache.test.ts +42 -0
  9. package/src/__tests__/configuration.test.ts +3950 -0
  10. package/src/__tests__/dev.test.tsx +1199 -67
  11. package/src/__tests__/guess-worker-format.test.ts +85 -0
  12. package/src/__tests__/{clipboardy-mock.js → helpers/clipboardy-mock.js} +0 -0
  13. package/src/__tests__/helpers/cmd-shim.d.ts +11 -0
  14. package/src/__tests__/helpers/mock-account-id.ts +48 -0
  15. package/src/__tests__/helpers/mock-bin.ts +36 -0
  16. package/src/__tests__/helpers/mock-cfetch.ts +211 -0
  17. package/src/__tests__/helpers/mock-console.ts +97 -0
  18. package/src/__tests__/helpers/mock-dialogs.ts +153 -0
  19. package/src/__tests__/helpers/mock-http-server.ts +46 -0
  20. package/src/__tests__/helpers/mock-istty.ts +74 -0
  21. package/src/__tests__/helpers/mock-kv.ts +33 -0
  22. package/src/__tests__/helpers/mock-oauth-flow.ts +250 -0
  23. package/src/__tests__/helpers/mock-process.ts +39 -0
  24. package/src/__tests__/helpers/mock-stdin.ts +108 -0
  25. package/src/__tests__/helpers/mock-web-socket.ts +29 -0
  26. package/src/__tests__/helpers/run-in-tmp.ts +38 -0
  27. package/src/__tests__/helpers/run-wrangler.ts +16 -0
  28. package/src/__tests__/helpers/write-worker-source.ts +31 -0
  29. package/src/__tests__/helpers/write-wrangler-toml.ts +17 -0
  30. package/src/__tests__/https-options.test.ts +163 -0
  31. package/src/__tests__/index.test.ts +259 -421
  32. package/src/__tests__/init.test.ts +1992 -0
  33. package/src/__tests__/jest.setup.ts +105 -14
  34. package/src/__tests__/kv.test.ts +1420 -973
  35. package/src/__tests__/logger.test.ts +141 -0
  36. package/src/__tests__/metrics.test.ts +445 -0
  37. package/src/__tests__/package-manager.test.ts +353 -0
  38. package/src/__tests__/pages.test.ts +1261 -0
  39. package/src/__tests__/parse.test.ts +330 -0
  40. package/src/__tests__/publish.test.ts +6639 -1174
  41. package/src/__tests__/pubsub.test.ts +367 -0
  42. package/src/__tests__/r2.test.ts +233 -0
  43. package/src/__tests__/route.test.ts +45 -0
  44. package/src/__tests__/secret.test.ts +489 -203
  45. package/src/__tests__/tail.test.ts +698 -0
  46. package/src/__tests__/test-old-node-version.js +31 -0
  47. package/src/__tests__/user.test.ts +143 -0
  48. package/src/__tests__/version.test.ts +35 -0
  49. package/src/__tests__/whoami.test.tsx +222 -93
  50. package/src/__tests__/worker-namespace.test.ts +327 -0
  51. package/src/abort.d.ts +3 -0
  52. package/src/api/dev.ts +86 -0
  53. package/src/api/index.ts +1 -0
  54. package/src/bundle-reporter.tsx +29 -0
  55. package/src/bundle.ts +236 -0
  56. package/src/cfetch/index.ts +88 -78
  57. package/src/cfetch/internal.ts +124 -46
  58. package/src/cli.ts +24 -6
  59. package/src/config/README.md +107 -0
  60. package/src/config/config.ts +251 -0
  61. package/src/config/diagnostics.ts +80 -0
  62. package/src/config/environment.ts +453 -0
  63. package/src/config/index.ts +238 -0
  64. package/src/config/validation-helpers.ts +584 -0
  65. package/src/config/validation.ts +1754 -0
  66. package/src/config-cache.ts +84 -0
  67. package/src/create-worker-preview.ts +257 -0
  68. package/src/create-worker-upload-form.ts +263 -0
  69. package/src/dev/dev-vars.ts +36 -0
  70. package/src/dev/dev.tsx +452 -0
  71. package/src/dev/local.tsx +373 -0
  72. package/src/dev/remote.tsx +386 -0
  73. package/src/dev/use-esbuild.ts +150 -0
  74. package/src/dev.tsx +580 -817
  75. package/src/dialogs.tsx +117 -59
  76. package/src/durable.ts +102 -0
  77. package/src/entry.ts +328 -0
  78. package/src/environment-variables.ts +35 -0
  79. package/src/errors.ts +11 -0
  80. package/src/faye-websocket.d.ts +6 -0
  81. package/src/generate.ts +33 -0
  82. package/src/git-client.ts +42 -0
  83. package/src/global-wrangler-config-path.ts +26 -0
  84. package/src/https-options.ts +127 -0
  85. package/src/index.tsx +1978 -2051
  86. package/src/init.ts +549 -0
  87. package/src/inspect.ts +610 -543
  88. package/src/intl-polyfill.d.ts +139 -0
  89. package/src/is-interactive.ts +12 -0
  90. package/src/kv.ts +430 -0
  91. package/src/logger.ts +73 -0
  92. package/src/metrics/index.ts +4 -0
  93. package/src/metrics/is-ci.ts +14 -0
  94. package/src/metrics/metrics-config.ts +239 -0
  95. package/src/metrics/metrics-dispatcher.ts +95 -0
  96. package/src/metrics/send-event.ts +92 -0
  97. package/src/miniflare-cli/README.md +30 -0
  98. package/src/miniflare-cli/assets.ts +543 -0
  99. package/src/miniflare-cli/enum-keys.ts +17 -0
  100. package/src/miniflare-cli/index.ts +85 -0
  101. package/src/miniflare-cli/request-context.ts +40 -0
  102. package/src/module-collection.ts +247 -52
  103. package/src/open-in-browser.ts +17 -0
  104. package/src/package-manager.ts +219 -0
  105. package/src/pages/build.tsx +204 -0
  106. package/src/pages/constants.ts +7 -0
  107. package/src/pages/deployments.tsx +106 -0
  108. package/src/pages/dev.tsx +401 -0
  109. package/src/pages/functions/buildPlugin.ts +105 -0
  110. package/src/pages/functions/buildWorker.ts +151 -0
  111. package/src/pages/functions/filepath-routing.test.ts +234 -0
  112. package/src/pages/functions/filepath-routing.ts +189 -0
  113. package/src/pages/functions/identifiers.ts +78 -0
  114. package/src/pages/functions/routes.ts +151 -0
  115. package/src/pages/index.tsx +84 -0
  116. package/src/pages/projects.tsx +163 -0
  117. package/src/pages/publish.tsx +338 -0
  118. package/src/pages/types.ts +40 -0
  119. package/src/pages/upload.tsx +396 -0
  120. package/src/pages/utils.ts +12 -0
  121. package/src/parse.ts +286 -0
  122. package/src/paths.ts +26 -0
  123. package/src/preview.ts +31 -0
  124. package/src/proxy.ts +421 -315
  125. package/src/publish.ts +776 -393
  126. package/src/pubsub/index.ts +286 -0
  127. package/src/pubsub/pubsub-commands.tsx +623 -0
  128. package/src/r2.ts +50 -0
  129. package/src/selfsigned.d.ts +29 -0
  130. package/src/sites.tsx +293 -161
  131. package/src/tail/filters.ts +279 -0
  132. package/src/tail/index.ts +299 -0
  133. package/src/tail/printing.ts +67 -0
  134. package/src/update-check.ts +19 -0
  135. package/src/user/choose-account.tsx +69 -0
  136. package/src/user/env-vars.ts +46 -0
  137. package/src/user/generate-auth-url.ts +33 -0
  138. package/src/user/generate-random-state.ts +16 -0
  139. package/src/user/index.ts +3 -0
  140. package/src/user/user.tsx +1171 -0
  141. package/src/whoami.tsx +63 -41
  142. package/src/worker-namespace.ts +206 -0
  143. package/src/worker.ts +191 -0
  144. package/src/zones.ts +76 -0
  145. package/templates/checked-fetch.js +17 -0
  146. package/templates/gitignore +171 -0
  147. package/templates/new-worker-scheduled.js +17 -0
  148. package/templates/new-worker-scheduled.ts +32 -0
  149. package/templates/new-worker.js +15 -0
  150. package/templates/new-worker.ts +30 -0
  151. package/templates/no-op-worker.js +10 -0
  152. package/templates/pages-shim.ts +9 -0
  153. package/templates/pages-template-plugin.ts +155 -0
  154. package/templates/pages-template-worker.ts +161 -0
  155. package/templates/static-asset-facade.js +49 -0
  156. package/templates/tsconfig.json +105 -0
  157. package/wrangler-dist/cli.d.ts +327 -0
  158. package/wrangler-dist/cli.js +91375 -92119
  159. package/pages/functions/buildWorker.ts +0 -62
  160. package/pages/functions/filepath-routing.test.ts +0 -39
  161. package/pages/functions/filepath-routing.ts +0 -228
  162. package/pages/functions/identifiers.ts +0 -78
  163. package/pages/functions/routes.ts +0 -158
  164. package/pages/functions/template-worker.ts +0 -136
  165. package/src/__tests__/logout.test.ts +0 -64
  166. package/src/__tests__/mock-cfetch.ts +0 -173
  167. package/src/__tests__/mock-console.ts +0 -34
  168. package/src/__tests__/mock-dialogs.ts +0 -65
  169. package/src/__tests__/mock-kv.ts +0 -40
  170. package/src/__tests__/mock-user.ts +0 -27
  171. package/src/__tests__/run-in-tmp.ts +0 -29
  172. package/src/__tests__/run-wrangler.ts +0 -8
  173. package/src/api/form_data.ts +0 -135
  174. package/src/api/preview.ts +0 -128
  175. package/src/api/worker.ts +0 -155
  176. package/src/config.ts +0 -641
  177. package/src/kv.tsx +0 -276
  178. package/src/pages.tsx +0 -1043
  179. package/src/tail.tsx +0 -73
  180. package/src/user.tsx +0 -1019
  181. package/static-asset-facade.js +0 -47
  182. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  183. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  184. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  185. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  186. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  187. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  188. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  189. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  190. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  191. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  192. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  193. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  194. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  195. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  196. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  197. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  198. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  199. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  200. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  201. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  202. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  203. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  204. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  205. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  206. package/vendor/wrangler-mime/LICENSE +0 -21
  207. package/vendor/wrangler-mime/Mime.js +0 -97
  208. package/vendor/wrangler-mime/README.md +0 -187
  209. package/vendor/wrangler-mime/cli.js +0 -46
  210. package/vendor/wrangler-mime/index.js +0 -4
  211. package/vendor/wrangler-mime/lite.js +0 -4
  212. package/vendor/wrangler-mime/package.json +0 -52
  213. package/vendor/wrangler-mime/types/other.js +0 -1
  214. package/vendor/wrangler-mime/types/standard.js +0 -1
  215. package/wrangler-dist/cli.js.map +0 -7
@@ -1,64 +0,0 @@
1
- import os from "node:os";
2
- import path from "node:path";
3
- import { existsSync } from "node:fs";
4
- import fetchMock from "jest-fetch-mock";
5
- import { runWrangler } from "./run-wrangler";
6
- import { runInTempDir } from "./run-in-tmp";
7
- import { initialise } from "../user";
8
- import { mockConsoleMethods } from "./mock-console";
9
- import { writeUserConfig } from "./mock-user";
10
-
11
- const ORIGINAL_CF_API_TOKEN = process.env.CF_API_TOKEN;
12
- const ORIGINAL_CF_ACCOUNT_ID = process.env.CF_ACCOUNT_ID;
13
-
14
- describe("wrangler", () => {
15
- runInTempDir({ homedir: "./home" });
16
- const std = mockConsoleMethods();
17
-
18
- beforeEach(() => {
19
- delete process.env.CF_API_TOKEN;
20
- delete process.env.CF_ACCOUNT_ID;
21
- });
22
-
23
- afterEach(() => {
24
- // Reset any changes to the environment variables
25
- process.env.CF_API_TOKEN = ORIGINAL_CF_API_TOKEN;
26
- process.env.CF_ACCOUNT_ID = ORIGINAL_CF_ACCOUNT_ID;
27
- });
28
-
29
- describe("logout", () => {
30
- it("should exit with a message stating the user is not logged in", async () => {
31
- await initialise();
32
- await runWrangler("logout");
33
- expect(std.out).toMatchInlineSnapshot(`"Not logged in, exiting..."`);
34
- });
35
-
36
- it("should logout user that has been properly logged in", async () => {
37
- writeUserConfig("some-oauth-tok", "some-refresh-tok");
38
-
39
- // Mock out the response for a request to revoke the auth tokens,
40
- // checking the form of the request is as expected.
41
- fetchMock.mockResponseOnce(async (req) => {
42
- expect(req.url).toEqual("https://dash.cloudflare.com/oauth2/revoke");
43
- expect(req.method).toEqual("POST");
44
- return "";
45
- });
46
-
47
- await initialise();
48
- await runWrangler("logout");
49
-
50
- expect(std.out).toMatchInlineSnapshot(`
51
- "💁 Wrangler is configured with an OAuth token. The token has been successfully revoked
52
- Removing ./home/.wrangler/config/default.toml.. success!"
53
- `);
54
-
55
- // Make sure that we made the request to logout.
56
- expect(fetchMock).toHaveBeenCalledTimes(1);
57
-
58
- // Make sure that logout removed the config file containing the auth tokens.
59
- expect(
60
- existsSync(path.join(os.homedir(), ".wrangler/config/default.toml"))
61
- ).toBe(false);
62
- });
63
- });
64
- });
@@ -1,173 +0,0 @@
1
- import type { RequestInit } from "node-fetch";
2
- import { URLSearchParams } from "node:url";
3
- import { pathToRegexp } from "path-to-regexp";
4
- import { CF_API_BASE_URL } from "../cfetch";
5
- import type { FetchResult } from "../cfetch";
6
-
7
- /**
8
- * The signature of the function that will handle a mock request.
9
- */
10
- export type MockHandler<ResponseType> = (
11
- uri: RegExpExecArray,
12
- init: RequestInit,
13
- queryParams: URLSearchParams
14
- ) => ResponseType | Promise<ResponseType>;
15
-
16
- type RemoveMockFn = () => void;
17
-
18
- interface MockFetch<ResponseType> {
19
- regexp: RegExp;
20
- method: string | undefined;
21
- handler: MockHandler<ResponseType>;
22
- }
23
- const mocks: MockFetch<unknown>[] = [];
24
-
25
- /**
26
- * The mock implementation of `cfApi.fetch()`.
27
- *
28
- * This function will attempt to match the given request to one of the mock handlers configured by calls to `setMock`.
29
- *
30
- * Once found the handler will be used to generate a mock response.
31
- */
32
- export async function mockFetchInternal(
33
- resource: string,
34
- init: RequestInit = {},
35
- queryParams: URLSearchParams = new URLSearchParams()
36
- ) {
37
- for (const { regexp, method, handler } of mocks) {
38
- const resourcePath = new URL(resource, CF_API_BASE_URL).pathname;
39
- const uri = regexp.exec(resourcePath);
40
- // Do the resource path and (if specified) the HTTP method match?
41
- if (uri !== null && (!method || method === (init.method ?? "GET"))) {
42
- // The `resource` regular expression will extract the labelled groups from the URL.
43
- // These are passed through to the `handler` call, to allow it to do additional checks or behaviour.
44
- return await handler(uri, init, queryParams); // TODO: should we have some kind of fallthrough system? we'll see.
45
- }
46
- }
47
- throw new Error(
48
- `no mocks found for ${init.method ?? "any HTTP"} request to ${resource}`
49
- );
50
- }
51
-
52
- /**
53
- * Specify an expected resource path that is to be handled, resulting in a raw JSON response.
54
- *
55
- * @param resource The path of the resource to be matched.
56
- * This can include wildcards whose value will be passed to the `handler`.
57
- * @param handler The function that will generate the mock response for this request.
58
- */
59
- export function setMockRawResponse<ResponseType>(
60
- resource: string,
61
- handler: MockHandler<ResponseType>
62
- ): RemoveMockFn;
63
- /**
64
- * Specify an expected resource path that is to be handled, resulting in a raw JSON response.
65
- *
66
- * @param resource The path of the resource to be matched.
67
- * This can include wildcards whose value will be passed to the `handler`.
68
- * @param method The HTTP method (e.g. GET, POST, etc) that the request must have to match this mock handler.
69
- * @param handler The function that will generate the mock response for this request.
70
- */
71
- export function setMockRawResponse<ResponseType>(
72
- resource: string,
73
- method: string,
74
- handler: MockHandler<ResponseType>
75
- ): RemoveMockFn;
76
- /**
77
- * Specify an expected resource path that is to be handled, resulting in a raw JSON response.
78
- */
79
- export function setMockRawResponse<ResponseType>(
80
- resource: string,
81
- ...args: [string, MockHandler<ResponseType>] | [MockHandler<ResponseType>]
82
- ): RemoveMockFn {
83
- const handler = args.pop() as MockHandler<ResponseType>;
84
- const method = args.pop() as string;
85
- const mock = {
86
- resource,
87
- method,
88
- handler,
89
- regexp: pathToRegexp(resource),
90
- };
91
- mocks.push(mock);
92
- return () => {
93
- const mockIndex = mocks.indexOf(mock);
94
- if (mockIndex !== -1) {
95
- mocks.splice(mockIndex, 1);
96
- }
97
- };
98
- }
99
-
100
- /**
101
- * Specify an expected resource path that is to be handled, resulting in a `FetchRequest`.
102
- *
103
- * The mock `handler` should return the `result`, which will then be wrapped in a `FetchRequest` object.
104
- *
105
- * @param resource The path of the resource to be matched.
106
- * This can include wildcards whose value will be passed to the `handler`.
107
- * @param handler The function that will generate the mock response for this request.
108
- */
109
- export function setMockResponse<ResponseType>(
110
- resource: string,
111
- handler: MockHandler<ResponseType>
112
- ): RemoveMockFn;
113
- /**
114
- * Specify an expected resource path that is to be handled, resulting in a FetchRequest..
115
- *
116
- * @param resource The path of the resource to be matched.
117
- * This can include wildcards whose value will be passed to the `handler`.
118
- * @param method The HTTP method (e.g. GET, POST, etc) that the request must have to match this mock handler.
119
- * @param handler The function that will generate the mock response for this request.
120
- */
121
- export function setMockResponse<ResponseType>(
122
- resource: string,
123
- method: string,
124
- handler: MockHandler<ResponseType>
125
- ): RemoveMockFn;
126
- /**
127
- * Specify an expected resource path that is to be handled, resulting in a FetchRequest.
128
- */
129
- export function setMockResponse<ResponseType>(
130
- resource: string,
131
- ...args: [string, MockHandler<ResponseType>] | [MockHandler<ResponseType>]
132
- ): RemoveMockFn {
133
- const handler = args.pop() as MockHandler<ResponseType>;
134
- const method = args.pop() as string;
135
- return setMockRawResponse(resource, method, (...handlerArgs) =>
136
- createFetchResult(handler(...handlerArgs))
137
- );
138
- }
139
-
140
- /**
141
- * A helper to make it easier to create `FetchResult` objects in tests.
142
- */
143
- export function createFetchResult<ResponseType>(
144
- result: ResponseType,
145
- success = true,
146
- errors = [],
147
- messages = [],
148
- result_info?: unknown
149
- ): FetchResult<ResponseType> {
150
- return result_info
151
- ? {
152
- result,
153
- success,
154
- errors,
155
- messages,
156
- result_info,
157
- }
158
- : {
159
- result,
160
- success,
161
- errors,
162
- messages,
163
- };
164
- }
165
-
166
- /**
167
- * Remove all the configured mock handlers.
168
- *
169
- * This should be called in an `afterEach()` block to ensure that mock handlers do not leak between tests.
170
- */
171
- export function unsetAllMocks() {
172
- mocks.length = 0;
173
- }
@@ -1,34 +0,0 @@
1
- /**
2
- * We use this module to mock console methods, and optionally
3
- * assert on the values they're called with in our tests.
4
- */
5
-
6
- let logSpy: jest.SpyInstance,
7
- errorSpy: jest.SpyInstance,
8
- warnSpy: jest.SpyInstance;
9
-
10
- const std = {
11
- get out() {
12
- return logSpy.mock.calls.flat(2).join("\n");
13
- },
14
- get err() {
15
- return errorSpy.mock.calls.flat(2).join("\n");
16
- },
17
- get warn() {
18
- return warnSpy.mock.calls.flat(2).join("\n");
19
- },
20
- };
21
-
22
- export function mockConsoleMethods() {
23
- beforeEach(() => {
24
- logSpy = jest.spyOn(console, "log").mockImplementation();
25
- errorSpy = jest.spyOn(console, "error").mockImplementation();
26
- warnSpy = jest.spyOn(console, "warn").mockImplementation();
27
- });
28
- afterEach(() => {
29
- logSpy.mockRestore();
30
- errorSpy.mockRestore();
31
- warnSpy.mockRestore();
32
- });
33
- return std;
34
- }
@@ -1,65 +0,0 @@
1
- import { confirm, prompt } from "../dialogs";
2
-
3
- /**
4
- * The expected values for a confirmation request.
5
- */
6
- export interface ConfirmExpectation {
7
- /** The text expected to be seen in the confirmation dialog. */
8
- text: string;
9
- /** The mock response send back from the confirmation dialog. */
10
- result: boolean;
11
- }
12
-
13
- /**
14
- * Mock the implementation of `confirm()` that will respond with configured results
15
- * for configured confirmation text messages.
16
- *
17
- * If there is a call to `confirm()` that does not match any of the expectations
18
- * then an error is thrown.
19
- */
20
- export function mockConfirm(...expectations: ConfirmExpectation[]) {
21
- (confirm as jest.Mock).mockImplementation((text: string) => {
22
- for (const { text: expectedText, result } of expectations) {
23
- if (text === expectedText) {
24
- return Promise.resolve(result);
25
- }
26
- }
27
- throw new Error(`Unexpected confirmation message: ${text}`);
28
- });
29
- }
30
-
31
- /**
32
- * The expected values for a prompt request.
33
- */
34
- export interface PromptExpectation {
35
- /** The text expected to be seen in the prompt dialog. */
36
- text: string;
37
- /** The type of the prompt. */
38
- type: "text" | "password";
39
- /** The mock response send back from the prompt dialog. */
40
- result: string;
41
- }
42
-
43
- /**
44
- * Mock the implementation of `prompt()` that will respond with configured results
45
- * for configured prompt text messages.
46
- *
47
- * If there is a call to `prompt()` that does not match any of the expectations
48
- * then an error is thrown.
49
- */
50
- export function mockPrompt(...expectations: PromptExpectation[]) {
51
- (prompt as jest.Mock).mockImplementation(
52
- (text: string, type: "text" | "password") => {
53
- for (const {
54
- text: expectedText,
55
- type: expectedType,
56
- result,
57
- } of expectations) {
58
- if (text === expectedText && type == expectedType) {
59
- return Promise.resolve(result);
60
- }
61
- }
62
- throw new Error(`Unexpected confirmation message: ${text}`);
63
- }
64
- );
65
- }
@@ -1,40 +0,0 @@
1
- import { createFetchResult, setMockRawResponse } from "./mock-cfetch";
2
-
3
- export function mockKeyListRequest(
4
- expectedNamespaceId: string,
5
- expectedKeys: string[],
6
- keysPerRequest = 1000,
7
- blankCursorValue: "" | undefined | null = undefined
8
- ) {
9
- const requests = { count: 0 };
10
- // See https://api.cloudflare.com/#workers-kv-namespace-list-a-namespace-s-keys
11
- const expectedKeyObjects = expectedKeys.map((name) => ({
12
- name,
13
- expiration: 123456789,
14
- metadata: {},
15
- }));
16
- setMockRawResponse(
17
- "/accounts/:accountId/storage/kv/namespaces/:namespaceId/keys",
18
- "GET",
19
- ([_url, accountId, namespaceId], _init, query) => {
20
- requests.count++;
21
- expect(accountId).toEqual("some-account-id");
22
- expect(namespaceId).toEqual(expectedNamespaceId);
23
- if (expectedKeyObjects.length <= keysPerRequest) {
24
- return createFetchResult(expectedKeyObjects);
25
- } else {
26
- const start = parseInt(query.get("cursor") ?? "0") || 0;
27
- const end = start + keysPerRequest;
28
- const cursor = end < expectedKeyObjects.length ? end : blankCursorValue;
29
- return createFetchResult(
30
- expectedKeyObjects.slice(start, end),
31
- true,
32
- [],
33
- [],
34
- { cursor }
35
- );
36
- }
37
- }
38
- );
39
- return requests;
40
- }
@@ -1,27 +0,0 @@
1
- import path from "path";
2
- import os from "os";
3
- import { mkdirSync, writeFileSync } from "node:fs";
4
-
5
- export function writeUserConfig(
6
- oauth_token?: string,
7
- refresh_token?: string,
8
- expiration_time?: string
9
- ) {
10
- const lines: string[] = [];
11
- if (oauth_token) {
12
- lines.push(`oauth_token = "${oauth_token}"`);
13
- }
14
- if (refresh_token) {
15
- lines.push(`refresh_token = "${refresh_token}"`);
16
- }
17
- if (expiration_time) {
18
- lines.push(`expiration_time = "${expiration_time}"`);
19
- }
20
- const configPath = path.join(os.homedir(), ".wrangler/config");
21
- mkdirSync(configPath, { recursive: true });
22
- writeFileSync(
23
- path.join(configPath, "default.toml"),
24
- lines.join("\n"),
25
- "utf-8"
26
- );
27
- }
@@ -1,29 +0,0 @@
1
- import os from "node:os";
2
- import * as path from "node:path";
3
- import * as fs from "fs";
4
-
5
- const originalCwd = process.cwd();
6
-
7
- export function runInTempDir({ homedir }: { homedir?: string } = {}) {
8
- let tmpDir: string;
9
-
10
- beforeEach(() => {
11
- tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "wrangler-tests"));
12
- process.chdir(tmpDir);
13
- if (homedir !== undefined) {
14
- // Override where the home directory is so that we can write our own user config,
15
- // without destroying the real thing.
16
- fs.mkdirSync(homedir);
17
- // Note it is very important that we use the "default" value from "node:os" (e.g. `import os from "node:os";`)
18
- // rather than an alias to the module (e.g. `import * as os from "node:os";`).
19
- // This is because the module gets transpiled so that the "method" `homedir()` gets converted to a
20
- // getter that is not configurable (and so cannot be spied upon).
21
- jest.spyOn(os, "homedir").mockReturnValue(homedir);
22
- }
23
- });
24
-
25
- afterEach(() => {
26
- process.chdir(originalCwd);
27
- fs.rmSync(tmpDir, { recursive: true });
28
- });
29
- }
@@ -1,8 +0,0 @@
1
- import { main } from "../index";
2
-
3
- /**
4
- * A helper to 'run' wrangler commands for tests.
5
- */
6
- export async function runWrangler(cmd?: string) {
7
- await main(cmd?.split(" ") ?? []);
8
- }
@@ -1,135 +0,0 @@
1
- import type {
2
- CfWorkerInit,
3
- CfModuleType,
4
- CfModule,
5
- CfDurableObjectMigrations,
6
- } from "./worker.js";
7
- import { FormData, Blob } from "formdata-node";
8
-
9
- export function toMimeType(type: CfModuleType): string {
10
- switch (type) {
11
- case "esm":
12
- return "application/javascript+module";
13
- case "commonjs":
14
- return "application/javascript";
15
- case "compiled-wasm":
16
- return "application/wasm";
17
- case "buffer":
18
- return "application/octet-stream";
19
- case "text":
20
- return "text/plain";
21
- default:
22
- throw new TypeError("Unsupported module: " + type);
23
- }
24
- }
25
-
26
- function toModule(module: CfModule, entryType: CfModuleType): Blob {
27
- const { type: moduleType, content } = module;
28
- const type = toMimeType(moduleType ?? entryType);
29
-
30
- return new Blob([content], { type });
31
- }
32
-
33
- export interface WorkerMetadata {
34
- /** The name of the entry point module. Only exists when the worker is in the ES module format */
35
- main_module?: string;
36
- /** The name of the entry point module. Only exists when the worker is in the Service Worker format */
37
- body_part?: string;
38
- compatibility_date?: string;
39
- compatibility_flags?: string[];
40
- usage_model?: "bundled" | "unbound";
41
- migrations?: CfDurableObjectMigrations;
42
- bindings: (
43
- | { type: "kv_namespace"; name: string; namespace_id: string }
44
- | { type: "plain_text"; name: string; text: string }
45
- | {
46
- type: "durable_object_namespace";
47
- name: string;
48
- class_name: string;
49
- script_name?: string;
50
- }
51
- | {
52
- type: "service";
53
- name: string;
54
- service: string;
55
- environment: string;
56
- }
57
- )[];
58
- }
59
-
60
- /**
61
- * Creates a `FormData` upload from a `CfWorkerInit`.
62
- */
63
- export function toFormData(worker: CfWorkerInit): FormData {
64
- const formData = new FormData();
65
- const {
66
- main,
67
- modules,
68
- bindings,
69
- migrations,
70
- usage_model,
71
- compatibility_date,
72
- compatibility_flags,
73
- } = worker;
74
-
75
- const metadataBindings: WorkerMetadata["bindings"] = [];
76
-
77
- bindings.kv_namespaces?.forEach(({ id, binding }) => {
78
- metadataBindings.push({
79
- name: binding,
80
- type: "kv_namespace",
81
- namespace_id: id,
82
- });
83
- });
84
-
85
- bindings.durable_objects?.bindings.forEach(
86
- ({ name, class_name, script_name }) => {
87
- metadataBindings.push({
88
- name,
89
- type: "durable_object_namespace",
90
- class_name: class_name,
91
- ...(script_name && { script_name }),
92
- });
93
- }
94
- );
95
-
96
- Object.entries(bindings.vars || {})?.forEach(([key, value]) => {
97
- metadataBindings.push({ name: key, type: "plain_text", text: value });
98
- });
99
-
100
- bindings.services?.forEach(({ name, service, environment }) => {
101
- metadataBindings.push({
102
- name,
103
- type: "service",
104
- service,
105
- environment,
106
- });
107
- });
108
-
109
- const metadata: WorkerMetadata = {
110
- ...(main.type !== "commonjs"
111
- ? { main_module: main.name }
112
- : { body_part: main.name }),
113
- bindings: metadataBindings,
114
- ...(compatibility_date && { compatibility_date }),
115
- ...(compatibility_flags && { compatibility_flags }),
116
- ...(usage_model && { usage_model }),
117
- ...(migrations && { migrations }),
118
- };
119
-
120
- formData.set("metadata", JSON.stringify(metadata));
121
-
122
- if (main.type === "commonjs" && modules && modules.length > 0) {
123
- throw new TypeError(
124
- "More than one module can only be specified when type = 'esm'"
125
- );
126
- }
127
-
128
- for (const module of [main].concat(modules || [])) {
129
- const { name } = module;
130
- const blob = toModule(module, main.type ?? "esm");
131
- formData.set(name, blob, name);
132
- }
133
-
134
- return formData;
135
- }