wrangler 0.0.0-e492c10 → 0.0.0-e4abed3e

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 (182) hide show
  1. package/README.md +30 -12
  2. package/bin/wrangler.js +90 -39
  3. package/config-schema.json +3059 -0
  4. package/kv-asset-handler.js +1 -0
  5. package/package.json +132 -86
  6. package/templates/__tests__/pages-dev-util.test.ts +128 -0
  7. package/templates/__tests__/tsconfig-sanity.ts +12 -0
  8. package/templates/__tests__/tsconfig.json +8 -0
  9. package/templates/checked-fetch.js +30 -0
  10. package/templates/facade.d.ts +19 -0
  11. package/templates/gitignore +2 -3
  12. package/templates/init-tests/test-jest-new-worker.js +23 -0
  13. package/templates/init-tests/test-vitest-new-worker.js +24 -0
  14. package/templates/init-tests/test-vitest-new-worker.ts +25 -0
  15. package/templates/middleware/common.ts +67 -0
  16. package/templates/middleware/loader-modules.ts +134 -0
  17. package/templates/middleware/loader-sw.ts +229 -0
  18. package/templates/middleware/middleware-ensure-req-body-drained.ts +18 -0
  19. package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
  20. package/templates/middleware/middleware-pretty-error.ts +40 -0
  21. package/templates/middleware/middleware-scheduled.ts +15 -0
  22. package/templates/middleware/middleware-serve-static-assets.d.ts +6 -0
  23. package/templates/middleware/middleware-serve-static-assets.ts +56 -0
  24. package/templates/modules-watch-stub.js +4 -0
  25. package/templates/new-worker-scheduled.js +17 -0
  26. package/templates/new-worker-scheduled.ts +32 -0
  27. package/templates/new-worker.js +3 -3
  28. package/templates/new-worker.ts +22 -4
  29. package/templates/no-op-worker.js +10 -0
  30. package/templates/pages-dev-pipeline.ts +32 -0
  31. package/templates/pages-dev-util.ts +55 -0
  32. package/templates/pages-shim.ts +9 -0
  33. package/templates/pages-template-plugin.ts +190 -0
  34. package/templates/pages-template-worker.ts +198 -0
  35. package/templates/startDevWorker/InspectorProxyWorker.ts +664 -0
  36. package/templates/startDevWorker/ProxyWorker.ts +334 -0
  37. package/templates/tsconfig-sanity.ts +11 -0
  38. package/templates/tsconfig.init.json +22 -0
  39. package/templates/tsconfig.json +6 -103
  40. package/wrangler-dist/InspectorProxyWorker.js +464 -0
  41. package/wrangler-dist/InspectorProxyWorker.js.map +6 -0
  42. package/wrangler-dist/ProxyWorker.js +240 -0
  43. package/wrangler-dist/ProxyWorker.js.map +6 -0
  44. package/wrangler-dist/cli.d.ts +26390 -0
  45. package/wrangler-dist/cli.js +201375 -103384
  46. package/wrangler-dist/wasm-sync.wasm +0 -0
  47. package/import_meta_url.js +0 -3
  48. package/miniflare-config-stubs/.env.empty +0 -0
  49. package/miniflare-config-stubs/package.empty.json +0 -1
  50. package/miniflare-config-stubs/wrangler.empty.toml +0 -0
  51. package/miniflare-dist/index.mjs +0 -4886
  52. package/pages/functions/buildPlugin.ts +0 -92
  53. package/pages/functions/buildWorker.ts +0 -138
  54. package/pages/functions/filepath-routing.test.ts +0 -234
  55. package/pages/functions/filepath-routing.ts +0 -189
  56. package/pages/functions/identifiers.ts +0 -78
  57. package/pages/functions/routes.ts +0 -156
  58. package/pages/functions/template-plugin.ts +0 -146
  59. package/pages/functions/template-worker.ts +0 -143
  60. package/src/__tests__/config-cache.test.ts +0 -36
  61. package/src/__tests__/configuration.test.ts +0 -3125
  62. package/src/__tests__/dev.test.tsx +0 -827
  63. package/src/__tests__/guess-worker-format.test.ts +0 -85
  64. package/src/__tests__/helpers/clipboardy-mock.js +0 -4
  65. package/src/__tests__/helpers/cmd-shim.d.ts +0 -11
  66. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  67. package/src/__tests__/helpers/mock-account-id.ts +0 -48
  68. package/src/__tests__/helpers/mock-bin.ts +0 -36
  69. package/src/__tests__/helpers/mock-cfetch.ts +0 -211
  70. package/src/__tests__/helpers/mock-console.ts +0 -87
  71. package/src/__tests__/helpers/mock-dialogs.ts +0 -90
  72. package/src/__tests__/helpers/mock-http-server.ts +0 -46
  73. package/src/__tests__/helpers/mock-istty.ts +0 -27
  74. package/src/__tests__/helpers/mock-kv.ts +0 -33
  75. package/src/__tests__/helpers/mock-oauth-flow.ts +0 -255
  76. package/src/__tests__/helpers/mock-stdin.ts +0 -103
  77. package/src/__tests__/helpers/mock-web-socket.ts +0 -29
  78. package/src/__tests__/helpers/run-in-tmp.ts +0 -39
  79. package/src/__tests__/helpers/run-wrangler.ts +0 -16
  80. package/src/__tests__/helpers/write-worker-source.ts +0 -31
  81. package/src/__tests__/helpers/write-wrangler-toml.ts +0 -17
  82. package/src/__tests__/https-options.test.ts +0 -130
  83. package/src/__tests__/index.test.ts +0 -242
  84. package/src/__tests__/init.test.ts +0 -1516
  85. package/src/__tests__/jest.setup.ts +0 -77
  86. package/src/__tests__/kv.test.ts +0 -1442
  87. package/src/__tests__/logger.test.ts +0 -115
  88. package/src/__tests__/package-manager.test.ts +0 -206
  89. package/src/__tests__/pages.test.ts +0 -327
  90. package/src/__tests__/parse.test.ts +0 -326
  91. package/src/__tests__/publish.test.ts +0 -4948
  92. package/src/__tests__/r2.test.ts +0 -210
  93. package/src/__tests__/route.test.ts +0 -45
  94. package/src/__tests__/secret.test.ts +0 -446
  95. package/src/__tests__/tail.test.ts +0 -690
  96. package/src/__tests__/user.test.ts +0 -131
  97. package/src/__tests__/whoami.test.tsx +0 -105
  98. package/src/bundle.ts +0 -169
  99. package/src/cfetch/index.ts +0 -104
  100. package/src/cfetch/internal.ts +0 -137
  101. package/src/cli.ts +0 -13
  102. package/src/config/README.md +0 -107
  103. package/src/config/config.ts +0 -234
  104. package/src/config/diagnostics.ts +0 -80
  105. package/src/config/environment.ts +0 -394
  106. package/src/config/index.ts +0 -63
  107. package/src/config/validation-helpers.ts +0 -575
  108. package/src/config/validation.ts +0 -1424
  109. package/src/config-cache.ts +0 -45
  110. package/src/create-worker-preview.ts +0 -175
  111. package/src/create-worker-upload-form.ts +0 -240
  112. package/src/dev/dev-vars.ts +0 -36
  113. package/src/dev/dev.tsx +0 -418
  114. package/src/dev/local.tsx +0 -312
  115. package/src/dev/remote.tsx +0 -213
  116. package/src/dev/use-esbuild.ts +0 -118
  117. package/src/dialogs.tsx +0 -87
  118. package/src/entry.ts +0 -267
  119. package/src/environment-variables.ts +0 -35
  120. package/src/errors.ts +0 -11
  121. package/src/https-options.ts +0 -123
  122. package/src/index.tsx +0 -2698
  123. package/src/inspect.ts +0 -623
  124. package/src/intl-polyfill.d.ts +0 -139
  125. package/src/kv.ts +0 -319
  126. package/src/logger.ts +0 -66
  127. package/src/miniflare-cli/README.md +0 -30
  128. package/src/miniflare-cli/enum-keys.ts +0 -17
  129. package/src/miniflare-cli/index.ts +0 -41
  130. package/src/miniflare-cli/request-context.ts +0 -40
  131. package/src/module-collection.ts +0 -258
  132. package/src/open-in-browser.ts +0 -26
  133. package/src/package-manager.ts +0 -127
  134. package/src/pages.tsx +0 -1875
  135. package/src/parse.ts +0 -185
  136. package/src/paths.ts +0 -26
  137. package/src/proxy.ts +0 -449
  138. package/src/publish.ts +0 -469
  139. package/src/r2.ts +0 -50
  140. package/src/selfsigned.d.ts +0 -29
  141. package/src/sites.tsx +0 -293
  142. package/src/tail/filters.ts +0 -279
  143. package/src/tail/index.ts +0 -299
  144. package/src/tail/printing.ts +0 -67
  145. package/src/update-check.ts +0 -19
  146. package/src/user.tsx +0 -1203
  147. package/src/whoami.tsx +0 -70
  148. package/src/worker.ts +0 -172
  149. package/templates/static-asset-facade.js +0 -47
  150. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  151. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  152. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  153. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  154. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  155. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  156. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  157. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  158. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  159. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  160. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  161. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  162. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  163. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  164. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  165. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  166. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  167. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  168. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  169. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  170. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  171. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  172. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  173. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  174. package/vendor/wrangler-mime/LICENSE +0 -21
  175. package/vendor/wrangler-mime/Mime.js +0 -97
  176. package/vendor/wrangler-mime/README.md +0 -187
  177. package/vendor/wrangler-mime/cli.js +0 -46
  178. package/vendor/wrangler-mime/index.js +0 -4
  179. package/vendor/wrangler-mime/lite.js +0 -4
  180. package/vendor/wrangler-mime/package.json +0 -52
  181. package/vendor/wrangler-mime/types/other.js +0 -1
  182. package/vendor/wrangler-mime/types/standard.js +0 -1
@@ -1,115 +0,0 @@
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
- });
@@ -1,206 +0,0 @@
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
- yarn: boolean;
11
- npmLockFile: boolean;
12
- yarnLockFile: boolean;
13
- expectedPackageManager: string;
14
- }
15
-
16
- const testCases: TestCase[] = [
17
- // npm binary - no yarn binary
18
- {
19
- npm: true,
20
- yarn: false,
21
- npmLockFile: false,
22
- yarnLockFile: false,
23
- expectedPackageManager: "npm",
24
- },
25
- {
26
- npm: true,
27
- yarn: false,
28
- npmLockFile: true,
29
- yarnLockFile: false,
30
- expectedPackageManager: "npm",
31
- },
32
- {
33
- npm: true,
34
- yarn: false,
35
- npmLockFile: false,
36
- yarnLockFile: true,
37
- expectedPackageManager: "npm",
38
- },
39
- {
40
- npm: true,
41
- yarn: false,
42
- npmLockFile: true,
43
- yarnLockFile: true,
44
- expectedPackageManager: "npm",
45
- },
46
-
47
- // yarn binary - no npm binary
48
- {
49
- npm: false,
50
- yarn: true,
51
- npmLockFile: false,
52
- yarnLockFile: false,
53
- expectedPackageManager: "yarn",
54
- },
55
- {
56
- npm: false,
57
- yarn: true,
58
- npmLockFile: true,
59
- yarnLockFile: false,
60
- expectedPackageManager: "yarn",
61
- },
62
- {
63
- npm: false,
64
- yarn: true,
65
- npmLockFile: false,
66
- yarnLockFile: true,
67
- expectedPackageManager: "yarn",
68
- },
69
- {
70
- npm: false,
71
- yarn: true,
72
- npmLockFile: true,
73
- yarnLockFile: true,
74
- expectedPackageManager: "yarn",
75
- },
76
-
77
- // npm and yarn binaries
78
- {
79
- npm: true,
80
- yarn: true,
81
- npmLockFile: false,
82
- yarnLockFile: false,
83
- expectedPackageManager: "npm",
84
- },
85
- {
86
- npm: true,
87
- yarn: true,
88
- npmLockFile: true,
89
- yarnLockFile: false,
90
- expectedPackageManager: "npm",
91
- },
92
- {
93
- npm: true,
94
- yarn: true,
95
- npmLockFile: false,
96
- yarnLockFile: true,
97
- expectedPackageManager: "yarn",
98
- },
99
- {
100
- npm: true,
101
- yarn: true,
102
- npmLockFile: true,
103
- yarnLockFile: true,
104
- expectedPackageManager: "npm",
105
- },
106
- ];
107
-
108
- describe("getPackageManager()", () => {
109
- runInTempDir();
110
- mockConsoleMethods();
111
-
112
- describe("no supported package manager", () => {
113
- mockYarn(false);
114
- mockNpm(false);
115
-
116
- it("should throw an error", async () => {
117
- await expect(() =>
118
- getPackageManager(process.cwd())
119
- ).rejects.toThrowErrorMatchingInlineSnapshot(
120
- `"Unable to find a package manager. Supported managers are: npm and yarn."`
121
- );
122
- });
123
- });
124
-
125
- for (const {
126
- npm,
127
- yarn,
128
- npmLockFile,
129
- yarnLockFile,
130
- expectedPackageManager,
131
- } of testCases) {
132
- describe(
133
- getTestCaseDescription(npm, yarn, npmLockFile, yarnLockFile),
134
- () => {
135
- mockYarn(yarn);
136
- mockNpm(npm);
137
- mockLockFiles(npmLockFile, yarnLockFile);
138
-
139
- it(`should return the ${expectedPackageManager} package manager`, async () => {
140
- const actualPackageManager = await getPackageManager(process.cwd());
141
- expect(getPackageManagerName(actualPackageManager)).toEqual(
142
- expectedPackageManager
143
- );
144
- });
145
- }
146
- );
147
- }
148
- });
149
-
150
- /**
151
- * Create a fake yarn binary
152
- */
153
- function mockYarn(succeed: boolean): void {
154
- let unMock: () => void;
155
- beforeEach(async () => {
156
- unMock = await mockBinary("yarn", `process.exit(${succeed ? 0 : 1})`);
157
- });
158
- afterEach(() => unMock());
159
- }
160
-
161
- /**
162
- * Create a fake npm binary
163
- */
164
- function mockNpm(succeed: boolean): void {
165
- let unMock: () => void;
166
- beforeEach(async () => {
167
- unMock = await mockBinary("npm", `process.exit(${succeed ? 0 : 1})`);
168
- });
169
- afterEach(() => unMock());
170
- }
171
-
172
- /**
173
- * Create a fake lock files.
174
- */
175
- function mockLockFiles(npmLockFile: boolean, yarnLockFile: boolean) {
176
- beforeEach(() => {
177
- if (npmLockFile) {
178
- writeFileSync("package-lock.json", "");
179
- }
180
- if (yarnLockFile) {
181
- writeFileSync("yarn.lock", "");
182
- }
183
- });
184
- }
185
-
186
- function getTestCaseDescription(
187
- npm: boolean,
188
- yarn: boolean,
189
- npmLockFile: boolean,
190
- yarnLockFile: boolean
191
- ): string {
192
- const criteria: string[] = [];
193
- if (npm) {
194
- criteria.push("npm");
195
- }
196
- if (npmLockFile) {
197
- criteria.push("package-lock.json");
198
- }
199
- if (yarn) {
200
- criteria.push("yarn");
201
- }
202
- if (yarnLockFile) {
203
- criteria.push("yarn.lock");
204
- }
205
- return "using " + criteria.join("; ");
206
- }
@@ -1,327 +0,0 @@
1
- import { writeFileSync } from "node:fs";
2
- import { mockAccountId, mockApiToken } from "./helpers/mock-account-id";
3
- import { setMockResponse, unsetAllMocks } from "./helpers/mock-cfetch";
4
- import { mockConsoleMethods } from "./helpers/mock-console";
5
- import { runInTempDir } from "./helpers/run-in-tmp";
6
- import { runWrangler } from "./helpers/run-wrangler";
7
- import type { Project, Deployment } from "../pages";
8
- import type { File, FormData } from "undici";
9
-
10
- describe("pages", () => {
11
- runInTempDir();
12
- const std = mockConsoleMethods();
13
- function endEventLoop() {
14
- return new Promise((resolve) => setImmediate(resolve));
15
- }
16
-
17
- it("should should display a list of available subcommands, for pages with no subcommand", async () => {
18
- await runWrangler("pages");
19
- await endEventLoop();
20
-
21
- expect(std.out).toMatchInlineSnapshot(`
22
- "wrangler pages
23
-
24
- ⚡️ Configure Cloudflare Pages
25
-
26
- Commands:
27
- wrangler pages dev [directory] [-- command] 🧑‍💻 Develop your full-stack Pages application locally
28
- wrangler pages project ⚡️ Interact with your Pages projects
29
- wrangler pages deployment 🚀 Interact with the deployments of a project
30
- wrangler pages publish [directory] 🆙 Publish a directory of static assets as a Pages deployment
31
-
32
- Flags:
33
- -c, --config Path to .toml configuration file [string]
34
- -h, --help Show help [boolean]
35
- -v, --version Show version number [boolean]
36
-
37
- 🚧 'wrangler pages <command>' is a beta command. Please report any issues to https://github.com/cloudflare/wrangler2/issues/new/choose"
38
- `);
39
- });
40
-
41
- describe("beta message for subcommands", () => {
42
- it("should display for pages:dev", async () => {
43
- await expect(
44
- runWrangler("pages dev")
45
- ).rejects.toThrowErrorMatchingInlineSnapshot(
46
- `"Must specify a directory of static assets to serve or a command to run."`
47
- );
48
-
49
- expect(std.out).toMatchInlineSnapshot(`
50
- "🚧 'wrangler pages <command>' is a beta command. Please report any issues to https://github.com/cloudflare/wrangler2/issues/new/choose
51
-
52
- If you think this is a bug then please create an issue at https://github.com/cloudflare/wrangler2/issues/new."
53
- `);
54
- });
55
-
56
- it("should display for pages:functions:build", async () => {
57
- await expect(runWrangler("pages functions build")).rejects.toThrowError();
58
-
59
- expect(std.out).toMatchInlineSnapshot(`
60
- "🚧 'wrangler pages <command>' is a beta command. Please report any issues to https://github.com/cloudflare/wrangler2/issues/new/choose
61
-
62
- If you think this is a bug then please create an issue at https://github.com/cloudflare/wrangler2/issues/new."
63
- `);
64
- });
65
- });
66
-
67
- describe("project list", () => {
68
- mockAccountId();
69
- mockApiToken();
70
-
71
- afterEach(() => {
72
- unsetAllMocks();
73
- });
74
-
75
- function mockListRequest(projects: unknown[]) {
76
- const requests = { count: 0 };
77
- setMockResponse(
78
- "/accounts/:accountId/pages/projects",
79
- ([_url, accountId], init, query) => {
80
- requests.count++;
81
- expect(accountId).toEqual("some-account-id");
82
- expect(query.get("per_page")).toEqual("10");
83
- expect(query.get("page")).toEqual(`${requests.count}`);
84
- expect(init).toEqual({});
85
- const pageSize = Number(query.get("per_page"));
86
- const page = Number(query.get("page"));
87
- return projects.slice((page - 1) * pageSize, page * pageSize);
88
- }
89
- );
90
- return requests;
91
- }
92
-
93
- it("should make request to list projects", async () => {
94
- const projects: Project[] = [
95
- {
96
- name: "dogs",
97
- subdomain: "docs.pages.dev",
98
- domains: ["dogs.pages.dev"],
99
- source: {
100
- type: "github",
101
- },
102
- latest_deployment: {
103
- modified_on: "2021-11-17T14:52:26.133835Z",
104
- },
105
- created_on: "2021-11-17T14:52:26.133835Z",
106
- production_branch: "main",
107
- },
108
- {
109
- name: "cats",
110
- subdomain: "cats.pages.dev",
111
- domains: ["cats.pages.dev", "kitten.com"],
112
- latest_deployment: {
113
- modified_on: "2021-11-17T14:52:26.133835Z",
114
- },
115
- created_on: "2021-11-17T14:52:26.133835Z",
116
- production_branch: "main",
117
- },
118
- ];
119
-
120
- const requests = mockListRequest(projects);
121
- await runWrangler("pages project list");
122
-
123
- expect(requests.count).toBe(1);
124
- });
125
-
126
- it("should make multiple requests for paginated results", async () => {
127
- const projects: Project[] = [];
128
- for (let i = 0; i < 15; i++) {
129
- projects.push({
130
- name: "dogs" + i,
131
- subdomain: i + "dogs.pages.dev",
132
- domains: [i + "dogs.pages.dev"],
133
- source: {
134
- type: "github",
135
- },
136
- latest_deployment: {
137
- modified_on: "2021-11-17T14:52:26.133835Z",
138
- },
139
- created_on: "2021-11-17T14:52:26.133835Z",
140
- production_branch: "main",
141
- });
142
- }
143
- const requests = mockListRequest(projects);
144
- await runWrangler("pages project list");
145
- expect(requests.count).toEqual(2);
146
- });
147
- });
148
-
149
- describe("project create", () => {
150
- mockAccountId();
151
- mockApiToken();
152
-
153
- afterEach(() => {
154
- unsetAllMocks();
155
- });
156
-
157
- it("should create a project with a production branch", async () => {
158
- setMockResponse(
159
- "/accounts/:accountId/pages/projects",
160
- ([_url, accountId], init) => {
161
- expect(accountId).toEqual("some-account-id");
162
- expect(init.method).toEqual("POST");
163
- const body = JSON.parse(init.body as string);
164
- expect(body).toEqual({
165
- name: "a-new-project",
166
- production_branch: "main",
167
- });
168
- return {
169
- name: "a-new-project",
170
- subdomain: "a-new-project.pages.dev",
171
- production_branch: "main",
172
- };
173
- }
174
- );
175
- await runWrangler(
176
- "pages project create a-new-project --production-branch=main"
177
- );
178
- expect(std.out).toMatchInlineSnapshot(`
179
- "✨ Successfully created the 'a-new-project' project. It will be available at https://a-new-project.pages.dev/ once you create your first deployment.
180
- To deploy a folder of assets, run 'wrangler pages publish [directory]'."
181
- `);
182
- });
183
- });
184
-
185
- describe("deployment list", () => {
186
- mockAccountId();
187
- mockApiToken();
188
-
189
- afterEach(() => {
190
- unsetAllMocks();
191
- });
192
- function mockListRequest(deployments: unknown[]) {
193
- const requests = { count: 0 };
194
- setMockResponse(
195
- "/accounts/:accountId/pages/projects/:project/deployments",
196
- ([_url, accountId, project]) => {
197
- requests.count++;
198
- expect(project).toEqual("images");
199
- expect(accountId).toEqual("some-account-id");
200
- return deployments;
201
- }
202
- );
203
- return requests;
204
- }
205
-
206
- it("should make request to list deployments", async () => {
207
- const deployments: Deployment[] = [
208
- {
209
- id: "87bbc8fe-16be-45cd-81e0-63d722e82cdf",
210
- url: "https://87bbc8fe.images.pages.dev",
211
- environment: "preview",
212
- latest_stage: {
213
- ended_on: "2021-11-17T14:52:26.133835Z",
214
- status: "success",
215
- },
216
- deployment_trigger: {
217
- metadata: {
218
- branch: "main",
219
- commit_hash: "c7649364c4cb32ad4f65b530b9424e8be5bec9d6",
220
- },
221
- },
222
- project_name: "images",
223
- },
224
- ];
225
-
226
- const requests = mockListRequest(deployments);
227
- await runWrangler("pages deployment list --project-name=images");
228
-
229
- expect(requests.count).toBe(1);
230
- });
231
- });
232
-
233
- describe("deployment create", () => {
234
- let actualProcessEnvCI: string | undefined;
235
-
236
- mockAccountId();
237
- mockApiToken();
238
- runInTempDir();
239
-
240
- beforeEach(() => {
241
- actualProcessEnvCI = process.env.CI;
242
- process.env.CI = "true";
243
- });
244
-
245
- afterEach(() => {
246
- unsetAllMocks();
247
- process.env.CI = actualProcessEnvCI;
248
- });
249
-
250
- it("should be aliased with 'wrangler pages publish'", async () => {
251
- await runWrangler("pages publish --help");
252
- await endEventLoop();
253
-
254
- expect(std.out).toMatchInlineSnapshot(`
255
- "wrangler pages publish [directory]
256
-
257
- 🆙 Publish a directory of static assets as a Pages deployment
258
-
259
- Positionals:
260
- directory The directory of static files to upload [string]
261
-
262
- Flags:
263
- -c, --config Path to .toml configuration file [string]
264
- -h, --help Show help [boolean]
265
- -v, --version Show version number [boolean]
266
-
267
- Options:
268
- --project-name The name of the project you want to deploy to [string]
269
- --branch The name of the branch you want to deploy to [string]
270
- --commit-hash The SHA to attach to this deployment [string]
271
- --commit-message The commit message to attach to this deployment [string]
272
- --commit-dirty Whether or not the workspace should be considered dirty for this deployment [boolean]
273
-
274
- 🚧 'wrangler pages <command>' is a beta command. Please report any issues to https://github.com/cloudflare/wrangler2/issues/new/choose"
275
- `);
276
- });
277
-
278
- it("should upload a directory of files", async () => {
279
- writeFileSync("logo.png", "foobar");
280
-
281
- setMockResponse(
282
- "/accounts/:accountId/pages/projects/foo/file",
283
- async ([_url, accountId], init) => {
284
- expect(accountId).toEqual("some-account-id");
285
- expect(init.method).toEqual("POST");
286
- const body = init.body as FormData;
287
- const logoPNGFile = body.get("file") as File;
288
- expect(await logoPNGFile.text()).toEqual("foobar");
289
- expect(logoPNGFile.name).toEqual("logo.png");
290
-
291
- return {
292
- id: "2082190357cfd3617ccfe04f340c6247",
293
- };
294
- }
295
- );
296
-
297
- setMockResponse(
298
- "/accounts/:accountId/pages/projects/foo/deployments",
299
- async ([_url, accountId], init) => {
300
- expect(accountId).toEqual("some-account-id");
301
- expect(init.method).toEqual("POST");
302
- const body = init.body as FormData;
303
- const manifest = JSON.parse(body.get("manifest") as string);
304
- expect(manifest).toMatchInlineSnapshot(`
305
- Object {
306
- "/logo.png": "2082190357cfd3617ccfe04f340c6247",
307
- }
308
- `);
309
-
310
- return {
311
- url: "https://abcxyz.foo.pages.dev/",
312
- };
313
- }
314
- );
315
-
316
- await runWrangler("pages publish . --project-name=foo");
317
-
318
- // TODO: Unmounting somehow loses this output
319
-
320
- // expect(std.out).toMatchInlineSnapshot(`
321
- // "✨ Success! Uploaded 1 files (TIMINGS)
322
-
323
- // ✨ Deployment complete! Take a peek over at https://abcxyz.foo.pages.dev/"
324
- // `);
325
- });
326
- });
327
- });