wrangler 0.0.0-e2b7352 → 0.0.0-e305903a

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 (264) hide show
  1. package/Cloudflare_CA.pem +18 -0
  2. package/README.md +51 -14
  3. package/bin/wrangler.js +154 -31
  4. package/kv-asset-handler.js +1 -0
  5. package/miniflare-dist/index.mjs +6244 -21
  6. package/package.json +185 -141
  7. package/src/__tests__/api-dev.test.ts +209 -0
  8. package/src/__tests__/api-devregistry.test.js +56 -0
  9. package/src/__tests__/api.test.ts +80 -0
  10. package/src/__tests__/config-cache-without-cache-dir.test.ts +38 -0
  11. package/src/__tests__/config-cache.test.ts +42 -0
  12. package/src/__tests__/configuration.test.ts +4122 -2810
  13. package/src/__tests__/dev.test.tsx +1341 -527
  14. package/src/__tests__/dialogs.test.tsx +40 -0
  15. package/src/__tests__/generate.test.ts +91 -0
  16. package/src/__tests__/guess-worker-format.test.ts +74 -57
  17. package/src/__tests__/helpers/cmd-shim.d.ts +6 -6
  18. package/src/__tests__/helpers/mock-account-id.ts +24 -24
  19. package/src/__tests__/helpers/mock-bin.ts +20 -20
  20. package/src/__tests__/helpers/mock-cfetch.ts +202 -93
  21. package/src/__tests__/helpers/mock-console.ts +68 -32
  22. package/src/__tests__/helpers/mock-dialogs.ts +121 -33
  23. package/src/__tests__/helpers/mock-get-zone-from-host.ts +8 -0
  24. package/src/__tests__/helpers/mock-http-server.ts +46 -0
  25. package/src/__tests__/helpers/mock-istty.ts +74 -0
  26. package/src/__tests__/helpers/mock-known-routes.ts +7 -0
  27. package/src/__tests__/helpers/mock-kv.ts +26 -26
  28. package/src/__tests__/helpers/mock-oauth-flow.ts +252 -0
  29. package/src/__tests__/helpers/mock-process.ts +39 -0
  30. package/src/__tests__/helpers/mock-stdin.ts +82 -77
  31. package/src/__tests__/helpers/mock-web-socket.ts +21 -21
  32. package/src/__tests__/helpers/msw/handlers/index.ts +13 -0
  33. package/src/__tests__/helpers/msw/handlers/namespaces.ts +104 -0
  34. package/src/__tests__/helpers/msw/handlers/oauth.ts +36 -0
  35. package/src/__tests__/helpers/msw/handlers/r2.ts +80 -0
  36. package/src/__tests__/helpers/msw/handlers/user.ts +63 -0
  37. package/src/__tests__/helpers/msw/index.ts +4 -0
  38. package/src/__tests__/helpers/run-in-tmp.ts +28 -22
  39. package/src/__tests__/helpers/run-wrangler.ts +8 -8
  40. package/src/__tests__/helpers/worker-scripts/child-wrangler.toml +1 -0
  41. package/src/__tests__/helpers/worker-scripts/hello-world-worker.js +5 -0
  42. package/src/__tests__/helpers/worker-scripts/hello-world-wrangler.toml +1 -0
  43. package/src/__tests__/helpers/worker-scripts/parent-worker.js +8 -0
  44. package/src/__tests__/helpers/worker-scripts/parent-wrangler.toml +5 -0
  45. package/src/__tests__/helpers/write-worker-source.ts +31 -0
  46. package/src/__tests__/helpers/write-wrangler-toml.ts +9 -9
  47. package/src/__tests__/https-options.test.ts +144 -108
  48. package/src/__tests__/index.test.ts +233 -967
  49. package/src/__tests__/init.test.ts +2717 -0
  50. package/src/__tests__/jest.setup.ts +151 -34
  51. package/src/__tests__/kv.test.ts +1376 -1085
  52. package/src/__tests__/logger.test.ts +141 -0
  53. package/src/__tests__/metrics.test.ts +450 -0
  54. package/src/__tests__/middleware.scheduled.test.ts +135 -0
  55. package/src/__tests__/middleware.test.ts +726 -0
  56. package/src/__tests__/package-manager.test.ts +312 -165
  57. package/src/__tests__/pages.test.ts +1990 -77
  58. package/src/__tests__/parse.test.ts +253 -245
  59. package/src/__tests__/paths.test.ts +39 -0
  60. package/src/__tests__/publish.test.ts +6989 -3411
  61. package/src/__tests__/pubsub.test.ts +367 -0
  62. package/src/__tests__/r2.test.ts +363 -190
  63. package/src/__tests__/route.test.ts +22 -22
  64. package/src/__tests__/secret.test.ts +626 -407
  65. package/src/__tests__/tail.test.ts +653 -516
  66. package/src/__tests__/test-old-node-version.js +31 -0
  67. package/src/__tests__/user.test.ts +155 -0
  68. package/src/__tests__/validate-dev-props.test.ts +56 -0
  69. package/src/__tests__/version.test.ts +35 -0
  70. package/src/__tests__/whoami.test.tsx +261 -88
  71. package/src/__tests__/worker-namespace.test.ts +319 -0
  72. package/src/abort.d.ts +3 -0
  73. package/src/api/dev.ts +206 -0
  74. package/src/api/index.ts +2 -0
  75. package/src/bundle-reporter.tsx +29 -0
  76. package/src/bundle.ts +723 -122
  77. package/src/cfetch/index.ts +83 -66
  78. package/src/cfetch/internal.ts +267 -92
  79. package/src/cli.ts +24 -14
  80. package/src/config/README.md +1 -1
  81. package/src/config/config.ts +236 -179
  82. package/src/config/diagnostics.ts +61 -61
  83. package/src/config/environment.ts +450 -316
  84. package/src/config/index.ts +259 -38
  85. package/src/config/validation-helpers.ts +385 -342
  86. package/src/config/validation.ts +1797 -1099
  87. package/src/config-cache.ts +85 -0
  88. package/src/create-worker-preview.ts +233 -124
  89. package/src/create-worker-upload-form.ts +285 -201
  90. package/src/d1/backups.tsx +212 -0
  91. package/src/d1/create.tsx +54 -0
  92. package/src/d1/delete.tsx +56 -0
  93. package/src/d1/execute.tsx +294 -0
  94. package/src/d1/formatTimeAgo.ts +14 -0
  95. package/src/d1/index.ts +75 -0
  96. package/src/d1/list.tsx +48 -0
  97. package/src/d1/options.ts +12 -0
  98. package/src/d1/types.tsx +14 -0
  99. package/src/d1/utils.ts +39 -0
  100. package/src/dev/dev-vars.ts +36 -0
  101. package/src/dev/dev.tsx +501 -328
  102. package/src/dev/get-local-persistence-path.tsx +31 -0
  103. package/src/dev/local.tsx +629 -211
  104. package/src/dev/remote.tsx +398 -188
  105. package/src/dev/start-server.ts +443 -0
  106. package/src/dev/use-esbuild.ts +175 -82
  107. package/src/dev/validate-dev-props.ts +31 -0
  108. package/src/dev-registry.tsx +190 -0
  109. package/src/dev.tsx +869 -0
  110. package/src/dialogs.tsx +138 -57
  111. package/src/dispatch-namespace.ts +206 -0
  112. package/src/durable.ts +102 -0
  113. package/src/entry.ts +260 -171
  114. package/src/environment-variables.ts +40 -23
  115. package/src/errors.ts +11 -0
  116. package/src/faye-websocket.d.ts +6 -0
  117. package/src/generate.ts +131 -0
  118. package/src/git-client.ts +42 -0
  119. package/src/global-wrangler-config-path.ts +26 -0
  120. package/src/https-options.ts +85 -80
  121. package/src/index.tsx +2295 -2315
  122. package/src/init.ts +967 -0
  123. package/src/inspect.ts +687 -557
  124. package/src/intl-polyfill.d.ts +123 -123
  125. package/src/is-ci.ts +14 -0
  126. package/src/is-interactive.ts +12 -0
  127. package/src/kv.ts +353 -242
  128. package/src/logger.ts +80 -0
  129. package/src/metrics/index.ts +5 -0
  130. package/src/metrics/metrics-config.ts +239 -0
  131. package/src/metrics/metrics-dispatcher.ts +96 -0
  132. package/src/metrics/metrics-usage-headers.ts +24 -0
  133. package/src/metrics/send-event.ts +93 -0
  134. package/src/miniflare-cli/assets.ts +215 -0
  135. package/src/miniflare-cli/index.ts +201 -30
  136. package/src/miniflare-cli/request-context.ts +40 -0
  137. package/src/module-collection.ts +213 -213
  138. package/src/open-in-browser.ts +8 -16
  139. package/src/package-manager.ts +183 -90
  140. package/src/pages/build.tsx +238 -0
  141. package/src/pages/constants.ts +16 -0
  142. package/src/pages/deployments.tsx +106 -0
  143. package/src/pages/dev.tsx +684 -0
  144. package/src/pages/errors.ts +66 -0
  145. package/src/pages/functions/buildPlugin.ts +110 -0
  146. package/src/pages/functions/buildWorker.ts +156 -0
  147. package/src/pages/functions/filepath-routing.test.ts +234 -0
  148. package/src/pages/functions/filepath-routing.ts +189 -0
  149. package/src/pages/functions/identifiers.ts +78 -0
  150. package/src/pages/functions/routes-consolidation.test.ts +250 -0
  151. package/src/pages/functions/routes-consolidation.ts +73 -0
  152. package/src/pages/functions/routes-transformation.test.ts +282 -0
  153. package/src/pages/functions/routes-transformation.ts +115 -0
  154. package/src/pages/functions/routes-validation.test.ts +403 -0
  155. package/src/pages/functions/routes-validation.ts +202 -0
  156. package/src/pages/functions/routes.ts +151 -0
  157. package/src/pages/functions.tsx +82 -0
  158. package/src/pages/hash.tsx +13 -0
  159. package/src/pages/index.tsx +94 -0
  160. package/src/pages/projects.tsx +169 -0
  161. package/src/pages/publish.tsx +419 -0
  162. package/src/pages/types.ts +49 -0
  163. package/src/pages/upload.tsx +398 -0
  164. package/src/pages/utils.ts +12 -0
  165. package/src/parse.ts +224 -121
  166. package/src/paths.ts +53 -8
  167. package/src/preview.ts +31 -0
  168. package/src/proxy.ts +436 -370
  169. package/src/publish.ts +839 -324
  170. package/src/pubsub/index.ts +286 -0
  171. package/src/pubsub/pubsub-commands.tsx +623 -0
  172. package/src/r2.ts +100 -19
  173. package/src/selfsigned.d.ts +23 -23
  174. package/src/sites.tsx +281 -189
  175. package/src/tail/filters.ts +108 -110
  176. package/src/tail/index.ts +234 -218
  177. package/src/tail/printing.ts +92 -47
  178. package/src/update-check.ts +19 -0
  179. package/src/user/choose-account.tsx +69 -0
  180. package/src/user/env-vars.ts +46 -0
  181. package/src/user/generate-auth-url.ts +33 -0
  182. package/src/user/generate-random-state.ts +16 -0
  183. package/src/user/index.ts +3 -0
  184. package/src/user/user.tsx +1192 -0
  185. package/src/whoami.tsx +142 -42
  186. package/src/worker.ts +171 -100
  187. package/src/zones.ts +167 -0
  188. package/templates/checked-fetch.js +17 -0
  189. package/templates/d1-beta-facade.js +174 -0
  190. package/templates/experimental-local-cache-stubs.js +27 -0
  191. package/templates/first-party-worker-module-facade.ts +18 -0
  192. package/templates/format-dev-errors.ts +32 -0
  193. package/templates/gitignore +171 -0
  194. package/templates/init-tests/test-jest-new-worker.js +25 -0
  195. package/templates/init-tests/test-vitest-new-worker.js +26 -0
  196. package/templates/middleware/common.ts +62 -0
  197. package/templates/middleware/loader-modules.ts +84 -0
  198. package/templates/middleware/loader-sw.ts +213 -0
  199. package/templates/middleware/middleware-pretty-error.ts +40 -0
  200. package/templates/middleware/middleware-scheduled.ts +15 -0
  201. package/templates/new-worker-scheduled.js +17 -0
  202. package/templates/new-worker-scheduled.ts +32 -0
  203. package/templates/new-worker.js +3 -3
  204. package/templates/new-worker.ts +18 -3
  205. package/templates/no-op-worker.js +10 -0
  206. package/templates/pages-dev-pipeline.ts +35 -0
  207. package/templates/pages-shim.ts +9 -0
  208. package/templates/pages-template-plugin.ts +167 -0
  209. package/templates/pages-template-worker.ts +172 -0
  210. package/templates/serve-static-assets.ts +63 -0
  211. package/templates/service-bindings-module-facade.js +54 -0
  212. package/templates/service-bindings-sw-facade.js +42 -0
  213. package/templates/tsconfig.json +95 -95
  214. package/wrangler-dist/cli.d.ts +841 -0
  215. package/wrangler-dist/cli.js +129492 -108210
  216. package/miniflare-dist/index.mjs.map +0 -7
  217. package/pages/functions/buildWorker.ts +0 -62
  218. package/pages/functions/filepath-routing.test.ts +0 -223
  219. package/pages/functions/filepath-routing.ts +0 -181
  220. package/pages/functions/identifiers.ts +0 -78
  221. package/pages/functions/routes.ts +0 -151
  222. package/pages/functions/template-worker.ts +0 -130
  223. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  224. package/src/__tests__/logout.test.ts +0 -52
  225. package/src/__tests__/sentry.test.ts +0 -146
  226. package/src/miniflare-cli/enum-keys.ts +0 -17
  227. package/src/pages.tsx +0 -1061
  228. package/src/reporting.ts +0 -131
  229. package/src/user.tsx +0 -1127
  230. package/templates/static-asset-facade.js +0 -47
  231. package/vendor/@cloudflare/kv-asset-handler/CHANGELOG.md +0 -332
  232. package/vendor/@cloudflare/kv-asset-handler/LICENSE_APACHE +0 -176
  233. package/vendor/@cloudflare/kv-asset-handler/LICENSE_MIT +0 -25
  234. package/vendor/@cloudflare/kv-asset-handler/README.md +0 -245
  235. package/vendor/@cloudflare/kv-asset-handler/dist/index.d.ts +0 -32
  236. package/vendor/@cloudflare/kv-asset-handler/dist/index.js +0 -354
  237. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.d.ts +0 -13
  238. package/vendor/@cloudflare/kv-asset-handler/dist/mocks.js +0 -148
  239. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.d.ts +0 -1
  240. package/vendor/@cloudflare/kv-asset-handler/dist/test/getAssetFromKV.js +0 -436
  241. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.d.ts +0 -1
  242. package/vendor/@cloudflare/kv-asset-handler/dist/test/mapRequestToAsset.js +0 -40
  243. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.d.ts +0 -1
  244. package/vendor/@cloudflare/kv-asset-handler/dist/test/serveSinglePageApp.js +0 -42
  245. package/vendor/@cloudflare/kv-asset-handler/dist/types.d.ts +0 -26
  246. package/vendor/@cloudflare/kv-asset-handler/dist/types.js +0 -31
  247. package/vendor/@cloudflare/kv-asset-handler/package.json +0 -52
  248. package/vendor/@cloudflare/kv-asset-handler/src/index.ts +0 -296
  249. package/vendor/@cloudflare/kv-asset-handler/src/mocks.ts +0 -136
  250. package/vendor/@cloudflare/kv-asset-handler/src/test/getAssetFromKV.ts +0 -464
  251. package/vendor/@cloudflare/kv-asset-handler/src/test/mapRequestToAsset.ts +0 -33
  252. package/vendor/@cloudflare/kv-asset-handler/src/test/serveSinglePageApp.ts +0 -42
  253. package/vendor/@cloudflare/kv-asset-handler/src/types.ts +0 -39
  254. package/vendor/wrangler-mime/CHANGELOG.md +0 -289
  255. package/vendor/wrangler-mime/LICENSE +0 -21
  256. package/vendor/wrangler-mime/Mime.js +0 -97
  257. package/vendor/wrangler-mime/README.md +0 -187
  258. package/vendor/wrangler-mime/cli.js +0 -46
  259. package/vendor/wrangler-mime/index.js +0 -4
  260. package/vendor/wrangler-mime/lite.js +0 -4
  261. package/vendor/wrangler-mime/package.json +0 -52
  262. package/vendor/wrangler-mime/types/other.js +0 -1
  263. package/vendor/wrangler-mime/types/standard.js +0 -1
  264. package/wrangler-dist/cli.js.map +0 -7
package/package.json CHANGED
@@ -1,143 +1,187 @@
1
1
  {
2
- "name": "wrangler",
3
- "version": "0.0.0-e2b7352",
4
- "author": "wrangler@cloudflare.com",
5
- "description": "Command-line interface for all things Cloudflare Workers",
6
- "bin": {
7
- "wrangler": "./bin/wrangler.js",
8
- "wrangler2": "./bin/wrangler.js"
9
- },
10
- "license": "MIT OR Apache-2.0",
11
- "bugs": {
12
- "url": "https://github.com/cloudflare/wrangler/issues"
13
- },
14
- "homepage": "https://github.com/cloudflare/wrangler#readme",
15
- "keywords": [
16
- "wrangler",
17
- "cloudflare",
18
- "workers",
19
- "cloudflare workers",
20
- "edge",
21
- "compute",
22
- "serverless",
23
- "serverless application",
24
- "serverless module",
25
- "wasm",
26
- "web",
27
- "assembly",
28
- "webassembly",
29
- "rust",
30
- "emscripten",
31
- "rust",
32
- "typescript",
33
- "graphql",
34
- "router",
35
- "http",
36
- "cli"
37
- ],
38
- "dependencies": {
39
- "esbuild": "0.14.23",
40
- "miniflare": "2.3.0",
41
- "path-to-regexp": "^6.2.0",
42
- "selfsigned": "^2.0.0",
43
- "semiver": "^1.1.0",
44
- "xxhash-wasm": "^1.0.1"
45
- },
46
- "optionalDependencies": {
47
- "fsevents": "~2.3.2"
48
- },
49
- "devDependencies": {
50
- "@iarna/toml": "^2.2.5",
51
- "@sentry/cli": "^1.71.0",
52
- "@sentry/integrations": "^6.17.6",
53
- "@sentry/node": "^6.17.6",
54
- "@types/command-exists": "^1.2.0",
55
- "@types/glob-to-regexp": "0.4.1",
56
- "@types/mime": "^2.0.3",
57
- "@types/prompts": "^2.0.14",
58
- "@types/react": "^17.0.37",
59
- "@types/serve-static": "^1.13.10",
60
- "@types/signal-exit": "^3.0.1",
61
- "@types/supports-color": "^8.1.1",
62
- "@types/ws": "^8.2.1",
63
- "@types/yargs": "^17.0.7",
64
- "chokidar": "^3.5.2",
65
- "clipboardy": "^3.0.0",
66
- "cmd-shim": "^4.1.0",
67
- "command-exists": "^1.2.9",
68
- "devtools-protocol": "^0.0.955664",
69
- "execa": "^6.0.0",
70
- "faye-websocket": "^0.11.4",
71
- "finalhandler": "^1.1.2",
72
- "find-up": "^6.2.0",
73
- "get-port": "^6.1.2",
74
- "glob-to-regexp": "0.4.1",
75
- "ignore": "^5.2.0",
76
- "ink": "^3.2.0",
77
- "ink-select-input": "^4.2.1",
78
- "ink-table": "^3.0.0",
79
- "ink-testing-library": "^2.1.0",
80
- "ink-text-input": "^4.0.2",
81
- "jest-fetch-mock": "^3.0.3",
82
- "jest-websocket-mock": "^2.3.0",
83
- "mime": "^3.0.0",
84
- "open": "^8.4.0",
85
- "prompts": "^2.4.2",
86
- "react": "^17.0.2",
87
- "react-error-boundary": "^3.1.4",
88
- "serve-static": "^1.14.1",
89
- "signal-exit": "^3.0.6",
90
- "supports-color": "^9.2.1",
91
- "tmp-promise": "^3.0.3",
92
- "undici": "^4.15.1",
93
- "ws": "^8.3.0",
94
- "yargs": "^17.3.0"
95
- },
96
- "files": [
97
- "src",
98
- "bin",
99
- "pages",
100
- "miniflare-config-stubs",
101
- "miniflare-dist",
102
- "wrangler-dist",
103
- "templates",
104
- "vendor",
105
- "import_meta_url.js"
106
- ],
107
- "scripts": {
108
- "clean": "rm -rf wrangler-dist miniflare-dist",
109
- "check:type": "tsc",
110
- "bundle": "node -r esbuild-register scripts/bundle.ts",
111
- "build": "npm run clean && npm run bundle",
112
- "prepublishOnly": "npm run build",
113
- "start": "npm run bundle && NODE_OPTIONS=--enable-source-maps ./bin/wrangler.js",
114
- "test": "jest --silent=false --verbose=true",
115
- "test-watch": "npm run test -- --runInBand --testTimeout=50000 --watch"
116
- },
117
- "engines": {
118
- "node": ">=16.7.0"
119
- },
120
- "jest": {
121
- "restoreMocks": true,
122
- "testTimeout": 30000,
123
- "testRegex": ".*.(test|spec)\\.[jt]sx?$",
124
- "transformIgnorePatterns": [
125
- "node_modules/(?!find-up|locate-path|p-locate|p-limit|yocto-queue|path-exists|execa|strip-final-newline|npm-run-path|path-key|onetime|mimic-fn|human-signals|is-stream|get-port|supports-color)"
126
- ],
127
- "moduleNameMapper": {
128
- "clipboardy": "<rootDir>/src/__tests__/helpers/clipboardy-mock.js",
129
- "miniflare/cli": "<rootDir>/../../node_modules/miniflare/dist/src/cli.js"
130
- },
131
- "transform": {
132
- "^.+\\.c?(t|j)sx?$": [
133
- "esbuild-jest",
134
- {
135
- "sourcemap": true
136
- }
137
- ]
138
- },
139
- "setupFilesAfterEnv": [
140
- "<rootDir>/src/__tests__/jest.setup.ts"
141
- ]
142
- }
2
+ "name": "wrangler",
3
+ "version": "0.0.0-e305903a",
4
+ "description": "Command-line interface for all things Cloudflare Workers",
5
+ "keywords": [
6
+ "wrangler",
7
+ "cloudflare",
8
+ "workers",
9
+ "cloudflare workers",
10
+ "edge",
11
+ "compute",
12
+ "serverless",
13
+ "serverless application",
14
+ "serverless module",
15
+ "wasm",
16
+ "web",
17
+ "assembly",
18
+ "webassembly",
19
+ "rust",
20
+ "emscripten",
21
+ "typescript",
22
+ "graphql",
23
+ "router",
24
+ "http",
25
+ "cli"
26
+ ],
27
+ "homepage": "https://github.com/cloudflare/wrangler2#readme",
28
+ "bugs": {
29
+ "url": "https://github.com/cloudflare/wrangler2/issues"
30
+ },
31
+ "license": "MIT OR Apache-2.0",
32
+ "author": "wrangler@cloudflare.com",
33
+ "main": "wrangler-dist/cli.js",
34
+ "types": "wrangler-dist/cli.d.ts",
35
+ "bin": {
36
+ "wrangler": "./bin/wrangler.js",
37
+ "wrangler2": "./bin/wrangler.js"
38
+ },
39
+ "files": [
40
+ "src",
41
+ "bin",
42
+ "miniflare-config-stubs",
43
+ "miniflare-dist",
44
+ "wrangler-dist",
45
+ "templates",
46
+ "vendor",
47
+ "import_meta_url.js",
48
+ "kv-asset-handler.js",
49
+ "Cloudflare_CA.pem"
50
+ ],
51
+ "scripts": {
52
+ "build": "npm run clean && npm run bundle && npm run emit-types",
53
+ "bundle": "node -r esbuild-register scripts/bundle.ts",
54
+ "check:type": "tsc",
55
+ "clean": "rimraf wrangler-dist miniflare-dist emitted-types",
56
+ "dev": "npm run clean && concurrently -c black,blue --kill-others-on-fail false 'npm run bundle -- --watch' 'npm run check:type -- --watch --preserveWatchOutput'",
57
+ "emit-types": "tsc -p tsconfig.emit.json && node -r esbuild-register scripts/emit-types.ts",
58
+ "prepublishOnly": "SOURCEMAPS=false npm run build",
59
+ "start": "npm run bundle && cross-env NODE_OPTIONS=--enable-source-maps ./bin/wrangler.js",
60
+ "test": "jest --silent=false --verbose=true",
61
+ "test-watch": "npm run test -- --runInBand --testTimeout=50000 --watch",
62
+ "test:ci": "npm run test -- --verbose=true --coverage"
63
+ },
64
+ "jest": {
65
+ "coverageReporters": [
66
+ "json",
67
+ "html",
68
+ "text",
69
+ "cobertura"
70
+ ],
71
+ "moduleNameMapper": {
72
+ "clipboardy": "<rootDir>/src/__tests__/helpers/clipboardy-mock.js",
73
+ "miniflare/cli": "<rootDir>/../../node_modules/miniflare/dist/src/cli.js"
74
+ },
75
+ "restoreMocks": true,
76
+ "setupFilesAfterEnv": [
77
+ "<rootDir>/src/__tests__/jest.setup.ts"
78
+ ],
79
+ "testRegex": ".*.(test|spec)\\.[jt]sx?$",
80
+ "testTimeout": 30000,
81
+ "transform": {
82
+ "^.+\\.c?(t|j)sx?$": [
83
+ "esbuild-jest",
84
+ {
85
+ "sourcemap": true
86
+ }
87
+ ]
88
+ },
89
+ "transformIgnorePatterns": [
90
+ "node_modules/(?!find-up|locate-path|p-locate|p-limit|p-timeout|p-queue|yocto-queue|path-exists|execa|strip-final-newline|npm-run-path|path-key|onetime|mimic-fn|human-signals|is-stream|get-port|supports-color|pretty-bytes|npx-import)"
91
+ ]
92
+ },
93
+ "dependencies": {
94
+ "@cloudflare/kv-asset-handler": "^0.2.0",
95
+ "@esbuild-plugins/node-globals-polyfill": "^0.1.1",
96
+ "@esbuild-plugins/node-modules-polyfill": "^0.1.4",
97
+ "@miniflare/core": "2.9.0",
98
+ "@miniflare/d1": "2.9.0",
99
+ "@miniflare/durable-objects": "2.9.0",
100
+ "blake3-wasm": "^2.1.5",
101
+ "chokidar": "^3.5.3",
102
+ "esbuild": "0.14.51",
103
+ "miniflare": "2.9.0",
104
+ "nanoid": "^3.3.3",
105
+ "path-to-regexp": "^6.2.0",
106
+ "selfsigned": "^2.0.1",
107
+ "source-map": "^0.7.4",
108
+ "xxhash-wasm": "^1.0.1"
109
+ },
110
+ "devDependencies": {
111
+ "@databases/split-sql-query": "^1.0.3",
112
+ "@databases/sql": "^3.2.0",
113
+ "@iarna/toml": "^3.0.0",
114
+ "@microsoft/api-extractor": "^7.28.3",
115
+ "@miniflare/tre": "3.0.0-next.1",
116
+ "@types/better-sqlite3": "^7.6.0",
117
+ "@types/busboy": "^1.5.0",
118
+ "@types/command-exists": "^1.2.0",
119
+ "@types/express": "^4.17.13",
120
+ "@types/glob-to-regexp": "0.4.1",
121
+ "@types/javascript-time-ago": "^2.0.3",
122
+ "@types/mime": "^2.0.3",
123
+ "@types/prompts": "^2.0.14",
124
+ "@types/react": "^17.0.37",
125
+ "@types/serve-static": "^1.13.10",
126
+ "@types/signal-exit": "^3.0.1",
127
+ "@types/supports-color": "^8.1.1",
128
+ "@types/ws": "^8.5.3",
129
+ "@types/yargs": "^17.0.10",
130
+ "@webcontainer/env": "^1.0.1",
131
+ "body-parser": "^1.20.0",
132
+ "busboy": "^1.6.0",
133
+ "clipboardy": "^3.0.0",
134
+ "cmd-shim": "^4.1.0",
135
+ "command-exists": "^1.2.9",
136
+ "concurrently": "^7.2.2",
137
+ "create-cloudflare": "^1.0.0",
138
+ "devtools-protocol": "^0.0.955664",
139
+ "dotenv": "^16.0.0",
140
+ "execa": "^6.1.0",
141
+ "express": "^4.18.1",
142
+ "faye-websocket": "^0.11.4",
143
+ "finalhandler": "^1.2.0",
144
+ "find-up": "^6.3.0",
145
+ "get-port": "^6.1.2",
146
+ "glob-to-regexp": "0.4.1",
147
+ "http-terminator": "^3.2.0",
148
+ "ignore": "^5.2.0",
149
+ "ink": "^3.2.0",
150
+ "ink-select-input": "^4.2.1",
151
+ "ink-spinner": "^4.0.3",
152
+ "ink-table": "^3.0.0",
153
+ "ink-testing-library": "^2.1.0",
154
+ "ink-text-input": "^4.0.3",
155
+ "is-ci": "^3.0.1",
156
+ "javascript-time-ago": "^2.5.4",
157
+ "jest-fetch-mock": "^3.0.3",
158
+ "jest-websocket-mock": "^2.3.0",
159
+ "mime": "^3.0.0",
160
+ "msw": "^0.47.1",
161
+ "npx-import": "^1.1.3",
162
+ "open": "^8.4.0",
163
+ "p-queue": "^7.2.0",
164
+ "pretty-bytes": "^6.0.0",
165
+ "prompts": "^2.4.2",
166
+ "react": "^17.0.2",
167
+ "react-error-boundary": "^3.1.4",
168
+ "remove-accents-esm": "^0.0.1",
169
+ "serve-static": "^1.15.0",
170
+ "signal-exit": "^3.0.7",
171
+ "supports-color": "^9.2.2",
172
+ "timeago.js": "^4.0.2",
173
+ "tmp-promise": "^3.0.3",
174
+ "ts-dedent": "^2.2.0",
175
+ "undici": "^5.9.1",
176
+ "update-check": "^1.5.4",
177
+ "ws": "^8.5.0",
178
+ "xdg-app-paths": "^7.3.0",
179
+ "yargs": "^17.4.1"
180
+ },
181
+ "optionalDependencies": {
182
+ "fsevents": "~2.3.2"
183
+ },
184
+ "engines": {
185
+ "node": ">=16.13.0"
186
+ }
143
187
  }
@@ -0,0 +1,209 @@
1
+ import * as fs from "node:fs";
2
+ import { Request } from "undici";
3
+ import { unstable_dev } from "../api";
4
+ import { runInTempDir } from "./helpers/run-in-tmp";
5
+
6
+ jest.unmock("undici");
7
+
8
+ describe("unstable_dev", () => {
9
+ it("should return Hello World", async () => {
10
+ const worker = await unstable_dev(
11
+ "src/__tests__/helpers/worker-scripts/hello-world-worker.js",
12
+ {},
13
+ { disableExperimentalWarning: true }
14
+ );
15
+ const resp = await worker.fetch();
16
+ if (resp) {
17
+ const text = await resp.text();
18
+ expect(text).toMatchInlineSnapshot(`"Hello World!"`);
19
+ }
20
+ await worker.stop();
21
+ });
22
+
23
+ it("should return the port that the server started on (1)", async () => {
24
+ const worker = await unstable_dev(
25
+ "src/__tests__/helpers/worker-scripts/hello-world-worker.js",
26
+ {},
27
+ { disableExperimentalWarning: true }
28
+ );
29
+ expect(worker.port).toBeGreaterThan(0);
30
+ await worker.stop();
31
+ });
32
+
33
+ it("should return the port that the server started on (2)", async () => {
34
+ const worker = await unstable_dev(
35
+ "src/__tests__/helpers/worker-scripts/hello-world-worker.js",
36
+ { port: 9191 },
37
+ { disableExperimentalWarning: true }
38
+ );
39
+ expect(worker.port).toBe(9191);
40
+ await worker.stop();
41
+ });
42
+ });
43
+
44
+ describe("unstable dev fetch input protocol", () => {
45
+ it("should use http localProtocol", async () => {
46
+ const worker = await unstable_dev(
47
+ "src/__tests__/helpers/worker-scripts/hello-world-worker.js",
48
+ { localProtocol: "http" },
49
+ { disableExperimentalWarning: true }
50
+ );
51
+ const res = await worker.fetch();
52
+ if (res) {
53
+ const text = await res.text();
54
+ expect(text).toMatchInlineSnapshot(`"Hello World!"`);
55
+ }
56
+ await worker.stop();
57
+ });
58
+
59
+ it("should use undefined localProtocol", async () => {
60
+ const worker = await unstable_dev(
61
+ "src/__tests__/helpers/worker-scripts/hello-world-worker.js",
62
+ { localProtocol: undefined },
63
+ { disableExperimentalWarning: true }
64
+ );
65
+ const res = await worker.fetch();
66
+ if (res) {
67
+ const text = await res.text();
68
+ expect(text).toMatchInlineSnapshot(`"Hello World!"`);
69
+ }
70
+ await worker.stop();
71
+ });
72
+ });
73
+
74
+ describe("unstable dev fetch input parsing", () => {
75
+ runInTempDir();
76
+
77
+ it("should pass in a request object unchanged", async () => {
78
+ const scriptContent = `
79
+ export default {
80
+ fetch(request, env, ctx) {
81
+ const url = new URL(request.url);
82
+ if (url.pathname === "/test") {
83
+ if (request.method === "POST") {
84
+ return new Response("requestPOST");
85
+ }
86
+ return new Response("requestGET");
87
+ }
88
+ return new Response('Hello world');
89
+ }
90
+ };
91
+ `;
92
+ fs.writeFileSync("index.js", scriptContent);
93
+ const port = 21213;
94
+ const worker = await unstable_dev(
95
+ "index.js",
96
+ { port },
97
+ { disableExperimentalWarning: true }
98
+ );
99
+ const req = new Request("http://0.0.0.0:21213/test", {
100
+ method: "POST",
101
+ });
102
+ const resp = await worker.fetch(req);
103
+ let text;
104
+ if (resp) text = await resp.text();
105
+ expect(text).toMatchInlineSnapshot(`"requestPOST"`);
106
+ await worker.stop();
107
+ });
108
+
109
+ it("should strip back to pathname for URL objects", async () => {
110
+ const scriptContent = `
111
+ export default {
112
+ fetch(request, env, ctx) {
113
+ const url = new URL(request.url);
114
+ if (url.pathname === "/test") {
115
+ return new Response("request");
116
+ }
117
+ return new Response('Hello world');
118
+ }
119
+ };
120
+ `;
121
+ fs.writeFileSync("index.js", scriptContent);
122
+ const worker = await unstable_dev(
123
+ "index.js",
124
+ {},
125
+ { disableExperimentalWarning: true }
126
+ );
127
+ const url = new URL("http://localhost:80/test");
128
+ const resp = await worker.fetch(url);
129
+ let text;
130
+ if (resp) text = await resp.text();
131
+ expect(text).toMatchInlineSnapshot(`"request"`);
132
+ await worker.stop();
133
+ });
134
+
135
+ it("should allow full url passed in string, and stripped back to pathname", async () => {
136
+ const scriptContent = `
137
+ export default {
138
+ fetch(request, env, ctx) {
139
+ const url = new URL(request.url);
140
+ if (url.pathname === "/test") {
141
+ return new Response("request");
142
+ }
143
+ return new Response('Hello world');
144
+ }
145
+ };
146
+ `;
147
+ fs.writeFileSync("index.js", scriptContent);
148
+ const worker = await unstable_dev(
149
+ "index.js",
150
+ {},
151
+ { disableExperimentalWarning: true }
152
+ );
153
+ const resp = await worker.fetch("http://example.com/test");
154
+ let text;
155
+ if (resp) text = await resp.text();
156
+ expect(text).toMatchInlineSnapshot(`"request"`);
157
+ await worker.stop();
158
+ });
159
+
160
+ it("should allow pathname to be passed in", async () => {
161
+ const scriptContent = `
162
+ export default {
163
+ fetch(request, env, ctx) {
164
+ const url = new URL(request.url);
165
+ if (url.pathname === "/test") {
166
+ return new Response("request");
167
+ }
168
+ return new Response('Hello world');
169
+ }
170
+ };
171
+ `;
172
+ fs.writeFileSync("index.js", scriptContent);
173
+ const worker = await unstable_dev(
174
+ "index.js",
175
+ {},
176
+ { disableExperimentalWarning: true }
177
+ );
178
+ const resp = await worker.fetch("/test");
179
+ let text;
180
+ if (resp) text = await resp.text();
181
+ expect(text).toMatchInlineSnapshot(`"request"`);
182
+ await worker.stop();
183
+ });
184
+
185
+ it("should allow no input be passed in", async () => {
186
+ const scriptContent = `
187
+ export default {
188
+ fetch(request, env, ctx) {
189
+ const url = new URL(request.url);
190
+ if (url.pathname === "/test") {
191
+ return new Response("request");
192
+ }
193
+ return new Response('Hello world');
194
+ }
195
+ };
196
+ `;
197
+ fs.writeFileSync("index.js", scriptContent);
198
+ const worker = await unstable_dev(
199
+ "index.js",
200
+ {},
201
+ { disableExperimentalWarning: true }
202
+ );
203
+ const resp = await worker.fetch("");
204
+ let text;
205
+ if (resp) text = await resp.text();
206
+ expect(text).toMatchInlineSnapshot(`"Hello world"`);
207
+ await worker.stop();
208
+ });
209
+ });
@@ -0,0 +1,56 @@
1
+ import { unstable_dev } from "../api";
2
+ import { fetch } from "undici";
3
+
4
+ jest.unmock("undici");
5
+
6
+ /**
7
+ * a huge caveat to how testing multi-worker scripts works:
8
+ * you can't shutdown the first worker you spun up, or it'll kill the devRegistry
9
+ */
10
+ describe("multi-worker testing", () => {
11
+ let childWorker;
12
+ let parentWorker;
13
+
14
+ beforeAll(async () => {
15
+ childWorker = await unstable_dev(
16
+ "src/__tests__/helpers/worker-scripts/hello-world-worker.js",
17
+ { config: "src/__tests__/helpers/worker-scripts/child-wrangler.toml" },
18
+ { disableExperimentalWarning: true }
19
+ );
20
+ parentWorker = await unstable_dev(
21
+ "src/__tests__/helpers/worker-scripts/parent-worker.js",
22
+ { config: "src/__tests__/helpers/worker-scripts/parent-wrangler.toml" },
23
+ { disableExperimentalWarning: true }
24
+ );
25
+ });
26
+
27
+ afterAll(async () => {
28
+ await childWorker.stop();
29
+ await parentWorker.stop();
30
+ });
31
+
32
+ it("parentWorker and childWorker should be added devRegistry", async () => {
33
+ const resp = await fetch("http://localhost:6284/workers");
34
+ if (resp) {
35
+ const parsedResp = await resp.json();
36
+ expect(parsedResp.parent).toBeTruthy();
37
+ expect(parsedResp.child).toBeTruthy();
38
+ }
39
+ });
40
+
41
+ it("childWorker should return Hello World itself", async () => {
42
+ const resp = await childWorker.fetch();
43
+ if (resp) {
44
+ const text = await resp.text();
45
+ expect(text).toMatchInlineSnapshot(`"Hello World!"`);
46
+ }
47
+ });
48
+
49
+ it("parentWorker should return Hello World by invoking the child worker", async () => {
50
+ const resp = await parentWorker.fetch();
51
+ if (resp) {
52
+ const parsedResp = await resp.text();
53
+ expect(parsedResp).toEqual("Parent worker sees: Hello World!");
54
+ }
55
+ });
56
+ });