wrangler 0.0.0-e273e09 → 0.0.0-e2972cf2

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 (153) hide show
  1. package/README.md +29 -11
  2. package/bin/wrangler.js +86 -67
  3. package/config-schema.json +3052 -0
  4. package/kv-asset-handler.js +1 -0
  5. package/package.json +128 -88
  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 +3 -3
  26. package/templates/new-worker-scheduled.ts +16 -16
  27. package/templates/new-worker.js +3 -3
  28. package/templates/new-worker.ts +19 -16
  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 +105 -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 +26478 -0
  45. package/wrangler-dist/cli.js +193053 -110794
  46. package/wrangler-dist/wasm-sync.wasm +0 -0
  47. package/Cloudflare_CA.pem +0 -18
  48. package/import_meta_url.js +0 -3
  49. package/miniflare-config-stubs/.env.empty +0 -0
  50. package/miniflare-config-stubs/package.empty.json +0 -1
  51. package/miniflare-config-stubs/wrangler.empty.toml +0 -0
  52. package/miniflare-dist/index.mjs +0 -4886
  53. package/pages/functions/buildPlugin.ts +0 -105
  54. package/pages/functions/buildWorker.ts +0 -151
  55. package/pages/functions/filepath-routing.test.ts +0 -234
  56. package/pages/functions/filepath-routing.ts +0 -189
  57. package/pages/functions/identifiers.ts +0 -78
  58. package/pages/functions/routes.ts +0 -156
  59. package/pages/functions/template-plugin.ts +0 -147
  60. package/pages/functions/template-worker.ts +0 -143
  61. package/src/__tests__/config-cache.test.ts +0 -36
  62. package/src/__tests__/configuration.test.ts +0 -3487
  63. package/src/__tests__/dev.test.tsx +0 -983
  64. package/src/__tests__/guess-worker-format.test.ts +0 -85
  65. package/src/__tests__/helpers/clipboardy-mock.js +0 -4
  66. package/src/__tests__/helpers/cmd-shim.d.ts +0 -11
  67. package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
  68. package/src/__tests__/helpers/mock-account-id.ts +0 -48
  69. package/src/__tests__/helpers/mock-bin.ts +0 -36
  70. package/src/__tests__/helpers/mock-cfetch.ts +0 -211
  71. package/src/__tests__/helpers/mock-console.ts +0 -87
  72. package/src/__tests__/helpers/mock-dialogs.ts +0 -130
  73. package/src/__tests__/helpers/mock-http-server.ts +0 -46
  74. package/src/__tests__/helpers/mock-istty.ts +0 -27
  75. package/src/__tests__/helpers/mock-kv.ts +0 -33
  76. package/src/__tests__/helpers/mock-oauth-flow.ts +0 -255
  77. package/src/__tests__/helpers/mock-stdin.ts +0 -103
  78. package/src/__tests__/helpers/mock-web-socket.ts +0 -29
  79. package/src/__tests__/helpers/run-in-tmp.ts +0 -39
  80. package/src/__tests__/helpers/run-wrangler.ts +0 -16
  81. package/src/__tests__/helpers/write-worker-source.ts +0 -31
  82. package/src/__tests__/helpers/write-wrangler-toml.ts +0 -17
  83. package/src/__tests__/https-options.test.ts +0 -130
  84. package/src/__tests__/index.test.ts +0 -257
  85. package/src/__tests__/init.test.ts +0 -1637
  86. package/src/__tests__/jest.setup.ts +0 -77
  87. package/src/__tests__/kv.test.ts +0 -1481
  88. package/src/__tests__/logger.test.ts +0 -115
  89. package/src/__tests__/package-manager.test.ts +0 -353
  90. package/src/__tests__/pages.test.ts +0 -754
  91. package/src/__tests__/parse.test.ts +0 -330
  92. package/src/__tests__/publish.test.ts +0 -5755
  93. package/src/__tests__/r2.test.ts +0 -233
  94. package/src/__tests__/route.test.ts +0 -45
  95. package/src/__tests__/secret.test.ts +0 -481
  96. package/src/__tests__/tail.test.ts +0 -690
  97. package/src/__tests__/user.test.ts +0 -131
  98. package/src/__tests__/whoami.test.tsx +0 -139
  99. package/src/abort.d.ts +0 -3
  100. package/src/bundle.ts +0 -197
  101. package/src/cfetch/index.ts +0 -121
  102. package/src/cfetch/internal.ts +0 -142
  103. package/src/cli.ts +0 -13
  104. package/src/config/README.md +0 -107
  105. package/src/config/config.ts +0 -234
  106. package/src/config/diagnostics.ts +0 -80
  107. package/src/config/environment.ts +0 -420
  108. package/src/config/index.ts +0 -225
  109. package/src/config/validation-helpers.ts +0 -584
  110. package/src/config/validation.ts +0 -1548
  111. package/src/config-cache.ts +0 -45
  112. package/src/create-worker-preview.ts +0 -185
  113. package/src/create-worker-upload-form.ts +0 -254
  114. package/src/dev/dev-vars.ts +0 -36
  115. package/src/dev/dev.tsx +0 -401
  116. package/src/dev/local.tsx +0 -326
  117. package/src/dev/remote.tsx +0 -237
  118. package/src/dev/use-esbuild.ts +0 -118
  119. package/src/dialogs.tsx +0 -135
  120. package/src/durable.ts +0 -102
  121. package/src/entry.ts +0 -322
  122. package/src/environment-variables.ts +0 -35
  123. package/src/errors.ts +0 -11
  124. package/src/https-options.ts +0 -123
  125. package/src/index.tsx +0 -2846
  126. package/src/inspect.ts +0 -662
  127. package/src/intl-polyfill.d.ts +0 -139
  128. package/src/kv.ts +0 -408
  129. package/src/logger.ts +0 -66
  130. package/src/miniflare-cli/README.md +0 -30
  131. package/src/miniflare-cli/enum-keys.ts +0 -17
  132. package/src/miniflare-cli/index.ts +0 -41
  133. package/src/miniflare-cli/request-context.ts +0 -40
  134. package/src/module-collection.ts +0 -258
  135. package/src/open-in-browser.ts +0 -19
  136. package/src/package-manager.ts +0 -174
  137. package/src/pages.tsx +0 -2093
  138. package/src/parse.ts +0 -203
  139. package/src/paths.ts +0 -26
  140. package/src/proxy.ts +0 -478
  141. package/src/publish.ts +0 -721
  142. package/src/r2.ts +0 -50
  143. package/src/selfsigned.d.ts +0 -29
  144. package/src/sites.tsx +0 -326
  145. package/src/tail/filters.ts +0 -279
  146. package/src/tail/index.ts +0 -299
  147. package/src/tail/printing.ts +0 -67
  148. package/src/update-check.ts +0 -19
  149. package/src/user.tsx +0 -1214
  150. package/src/whoami.tsx +0 -71
  151. package/src/worker.ts +0 -181
  152. package/src/zones.ts +0 -73
  153. package/templates/static-asset-facade.js +0 -43
@@ -0,0 +1 @@
1
+ export * from "@cloudflare/kv-asset-handler";
package/package.json CHANGED
@@ -1,17 +1,7 @@
1
1
  {
2
2
  "name": "wrangler",
3
- "version": "0.0.0-e273e09",
4
- "author": "wrangler@cloudflare.com",
3
+ "version": "0.0.0-e2972cf2",
5
4
  "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/wrangler2/issues"
13
- },
14
- "homepage": "https://github.com/cloudflare/wrangler2#readme",
15
5
  "keywords": [
16
6
  "wrangler",
17
7
  "cloudflare",
@@ -28,128 +18,178 @@
28
18
  "webassembly",
29
19
  "rust",
30
20
  "emscripten",
31
- "rust",
32
21
  "typescript",
33
22
  "graphql",
34
23
  "router",
35
24
  "http",
36
25
  "cli"
37
26
  ],
27
+ "homepage": "https://github.com/cloudflare/workers-sdk#readme",
28
+ "bugs": {
29
+ "url": "https://github.com/cloudflare/workers-sdk/issues"
30
+ },
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/cloudflare/workers-sdk.git",
34
+ "directory": "packages/wrangler"
35
+ },
36
+ "license": "MIT OR Apache-2.0",
37
+ "author": "wrangler@cloudflare.com",
38
+ "main": "wrangler-dist/cli.js",
39
+ "types": "wrangler-dist/cli.d.ts",
40
+ "bin": {
41
+ "wrangler": "./bin/wrangler.js",
42
+ "wrangler2": "./bin/wrangler.js"
43
+ },
44
+ "files": [
45
+ "bin",
46
+ "miniflare-dist",
47
+ "wrangler-dist",
48
+ "templates",
49
+ "kv-asset-handler.js",
50
+ "config-schema.json"
51
+ ],
38
52
  "dependencies": {
39
- "@cloudflare/kv-asset-handler": "^0.2.0",
40
- "@esbuild-plugins/node-globals-polyfill": "^0.1.1",
41
- "@esbuild-plugins/node-modules-polyfill": "^0.1.4",
53
+ "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
54
+ "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
42
55
  "blake3-wasm": "^2.1.5",
43
- "esbuild": "0.14.34",
44
- "miniflare": "^2.5.0",
56
+ "chokidar": "^3.5.3",
57
+ "esbuild": "0.17.19",
45
58
  "nanoid": "^3.3.3",
46
59
  "path-to-regexp": "^6.2.0",
60
+ "resolve": "^1.22.8",
61
+ "resolve.exports": "^2.0.2",
47
62
  "selfsigned": "^2.0.1",
48
- "semiver": "^1.1.0",
49
- "xxhash-wasm": "^1.0.1"
50
- },
51
- "optionalDependencies": {
52
- "fsevents": "~2.3.2"
63
+ "source-map": "^0.6.1",
64
+ "unenv": "npm:unenv-nightly@1.10.0-1717606461.a117952",
65
+ "xxhash-wasm": "^1.0.1",
66
+ "miniflare": "3.20240610.1",
67
+ "@cloudflare/kv-asset-handler": "0.3.3"
53
68
  },
54
69
  "devDependencies": {
70
+ "@cloudflare/types": "^6.18.4",
71
+ "@cloudflare/workers-types": "^4.20240605.0",
72
+ "@cspotcode/source-map-support": "0.8.1",
55
73
  "@iarna/toml": "^3.0.0",
74
+ "@microsoft/api-extractor": "^7.47.0",
75
+ "@sentry/node": "^7.86.0",
76
+ "@sentry/types": "^7.86.0",
77
+ "@sentry/utils": "^7.86.0",
78
+ "@types/body-parser": "^1.19.2",
56
79
  "@types/command-exists": "^1.2.0",
57
- "@types/glob-to-regexp": "0.4.1",
58
- "@types/mime": "^2.0.3",
80
+ "@types/express": "^4.17.13",
81
+ "@types/glob-to-regexp": "^0.4.1",
82
+ "@types/is-ci": "^3.0.0",
83
+ "@types/javascript-time-ago": "^2.0.3",
84
+ "@types/mime": "^3.0.4",
85
+ "@types/minimatch": "^5.1.2",
59
86
  "@types/prompts": "^2.0.14",
60
- "@types/react": "^17.0.37",
87
+ "@types/react": "^18.2.21",
88
+ "@types/resolve": "^1.20.6",
61
89
  "@types/serve-static": "^1.13.10",
90
+ "@types/shell-quote": "^1.7.2",
62
91
  "@types/signal-exit": "^3.0.1",
63
92
  "@types/supports-color": "^8.1.1",
64
- "@types/ws": "^8.5.3",
65
- "@types/yargs": "^17.0.10",
66
- "@webcontainer/env": "^1.0.1",
67
- "chokidar": "^3.5.3",
93
+ "@types/ws": "^8.5.7",
94
+ "@types/yargs": "^17.0.22",
95
+ "@vitest/ui": "^1.6.0",
96
+ "@webcontainer/env": "^1.1.0",
97
+ "body-parser": "^1.20.0",
98
+ "chalk": "^5.2.0",
99
+ "cli-table3": "^0.6.3",
68
100
  "clipboardy": "^3.0.0",
69
101
  "cmd-shim": "^4.1.0",
70
102
  "command-exists": "^1.2.9",
71
- "devtools-protocol": "^0.0.955664",
103
+ "concurrently": "^8.2.2",
104
+ "devtools-protocol": "^0.0.1182435",
72
105
  "dotenv": "^16.0.0",
106
+ "es-module-lexer": "^1.3.0",
73
107
  "execa": "^6.1.0",
74
- "faye-websocket": "^0.11.4",
75
- "finalhandler": "^1.2.0",
108
+ "express": "^4.18.1",
76
109
  "find-up": "^6.3.0",
77
- "get-port": "^6.1.2",
78
- "glob-to-regexp": "0.4.1",
110
+ "get-port": "^7.0.0",
111
+ "glob-to-regexp": "^0.4.1",
79
112
  "http-terminator": "^3.2.0",
113
+ "https-proxy-agent": "7.0.2",
80
114
  "ignore": "^5.2.0",
81
115
  "ink": "^3.2.0",
82
116
  "ink-select-input": "^4.2.1",
83
117
  "ink-spinner": "^4.0.3",
84
118
  "ink-table": "^3.0.0",
85
- "ink-testing-library": "^2.1.0",
86
- "ink-text-input": "^4.0.3",
87
- "jest-fetch-mock": "^3.0.3",
88
- "jest-websocket-mock": "^2.3.0",
119
+ "is-ci": "^3.0.1",
120
+ "javascript-time-ago": "^2.5.4",
121
+ "md5-file": "5.0.0",
89
122
  "mime": "^3.0.0",
123
+ "minimatch": "^5.1.0",
124
+ "mock-socket": "^9.3.1",
125
+ "msw": "^2.3.0",
90
126
  "open": "^8.4.0",
91
127
  "p-queue": "^7.2.0",
128
+ "patch-console": "^1.0.0",
92
129
  "pretty-bytes": "^6.0.0",
93
130
  "prompts": "^2.4.2",
94
- "react": "^17.0.2",
131
+ "ps-list": "^8.1.1",
132
+ "react": "^18.2.0",
95
133
  "react-error-boundary": "^3.1.4",
134
+ "semiver": "^1.1.0",
96
135
  "serve-static": "^1.15.0",
136
+ "shell-quote": "^1.8.1",
137
+ "shellac": "^0.8.0",
97
138
  "signal-exit": "^3.0.7",
139
+ "strip-ansi": "^7.1.0",
98
140
  "supports-color": "^9.2.2",
99
141
  "timeago.js": "^4.0.2",
100
- "tmp-promise": "^3.0.3",
101
142
  "ts-dedent": "^2.2.0",
102
- "undici": "^5.3.0",
143
+ "ts-json-schema-generator": "^1.5.0",
144
+ "undici": "^5.28.4",
103
145
  "update-check": "^1.5.4",
104
- "ws": "^8.5.0",
105
- "yargs": "^17.4.1"
146
+ "vitest": "^1.6.0",
147
+ "vitest-websocket-mock": "^0.3.0",
148
+ "ws": "^8.14.2",
149
+ "xdg-app-paths": "^8.3.0",
150
+ "yargs": "^17.7.2",
151
+ "yoga-layout": "file:../../vendor/yoga-layout-2.0.0-beta.1.tgz",
152
+ "@cloudflare/cli": "1.1.1",
153
+ "@cloudflare/eslint-config-worker": "1.1.0",
154
+ "@cloudflare/workers-tsconfig": "0.0.0",
155
+ "@cloudflare/pages-shared": "^0.11.44"
106
156
  },
107
- "files": [
108
- "src",
109
- "bin",
110
- "pages",
111
- "miniflare-config-stubs",
112
- "miniflare-dist",
113
- "wrangler-dist",
114
- "templates",
115
- "vendor",
116
- "import_meta_url.js",
117
- "Cloudflare_CA.pem"
118
- ],
119
- "scripts": {
120
- "clean": "rm -rf wrangler-dist miniflare-dist",
121
- "check:type": "tsc",
122
- "bundle": "node -r esbuild-register scripts/bundle.ts",
123
- "build": "npm run clean && npm run bundle",
124
- "prepublishOnly": "SOURCEMAPS=false npm run build",
125
- "start": "npm run bundle && NODE_OPTIONS=--enable-source-maps ./bin/wrangler.js",
126
- "test": "jest --silent=false --verbose=true",
127
- "test-watch": "npm run test -- --runInBand --testTimeout=50000 --watch"
157
+ "optionalDependencies": {
158
+ "fsevents": "~2.3.2"
159
+ },
160
+ "peerDependencies": {
161
+ "@cloudflare/workers-types": "^4.20240605.0"
162
+ },
163
+ "peerDependenciesMeta": {
164
+ "@cloudflare/workers-types": {
165
+ "optional": true
166
+ }
128
167
  },
129
168
  "engines": {
130
- "node": ">=16.7.0"
169
+ "node": ">=16.17.0"
170
+ },
171
+ "workers-sdk": {
172
+ "prerelease": true
173
+ },
174
+ "volta": {
175
+ "extends": "../../package.json"
131
176
  },
132
- "jest": {
133
- "restoreMocks": true,
134
- "testTimeout": 30000,
135
- "testRegex": ".*.(test|spec)\\.[jt]sx?$",
136
- "transformIgnorePatterns": [
137
- "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)"
138
- ],
139
- "moduleNameMapper": {
140
- "clipboardy": "<rootDir>/src/__tests__/helpers/clipboardy-mock.js",
141
- "miniflare/cli": "<rootDir>/../../node_modules/miniflare/dist/src/cli.js"
142
- },
143
- "transform": {
144
- "^.+\\.c?(t|j)sx?$": [
145
- "esbuild-jest",
146
- {
147
- "sourcemap": true
148
- }
149
- ]
150
- },
151
- "setupFilesAfterEnv": [
152
- "<rootDir>/src/__tests__/jest.setup.ts"
153
- ]
177
+ "scripts": {
178
+ "assert-git-version": "node -r esbuild-register scripts/assert-git-version.ts",
179
+ "build": "pnpm run clean && pnpm run bundle && pnpm run emit-types && pnpm run generate-json-schema",
180
+ "bundle": "node -r esbuild-register scripts/bundle.ts",
181
+ "check:lint": "eslint .",
182
+ "check:type": "tsc",
183
+ "clean": "rimraf wrangler-dist miniflare-dist emitted-types",
184
+ "dev": "pnpm run clean && concurrently -c black,blue --kill-others-on-fail false \"pnpm run bundle --watch\" \"pnpm run check:type --watch --preserveWatchOutput\"",
185
+ "emit-types": "tsc -p tsconfig.emit.json && node -r esbuild-register scripts/emit-types.ts",
186
+ "generate-json-schema": "pnpm exec ts-json-schema-generator --no-type-check --path src/config/config.ts --type RawConfig --out config-schema.json",
187
+ "start": "pnpm run bundle && cross-env NODE_OPTIONS=--enable-source-maps ./bin/wrangler.js",
188
+ "test": "pnpm run assert-git-version && vitest",
189
+ "test:ci": "pnpm run test run",
190
+ "test:debug": "pnpm run test --silent=false --verbose=true",
191
+ "test:e2e": "vitest -c ./e2e/vitest.config.mts",
192
+ "test:watch": "pnpm run test --testTimeout=50000 --watch",
193
+ "type:tests": "tsc -p ./src/__tests__/tsconfig.json && tsc -p ./e2e/tsconfig.json"
154
194
  }
155
- }
195
+ }
@@ -0,0 +1,128 @@
1
+ import { isRoutingRuleMatch } from "../pages-dev-util";
2
+
3
+ describe("isRoutingRuleMatch", () => {
4
+ it("should match rules referencing root level correctly", () => {
5
+ const routingRule = "/";
6
+
7
+ expect(isRoutingRuleMatch("/", routingRule)).toBeTruthy();
8
+ expect(isRoutingRuleMatch("/foo", routingRule)).toBeFalsy();
9
+ expect(isRoutingRuleMatch("/foo/", routingRule)).toBeFalsy();
10
+ expect(isRoutingRuleMatch("/foo/bar", routingRule)).toBeFalsy();
11
+ });
12
+
13
+ it("should match include-all rules correctly", () => {
14
+ const routingRule = "/*";
15
+
16
+ expect(isRoutingRuleMatch("/", routingRule)).toBeTruthy();
17
+ expect(isRoutingRuleMatch("/foo", routingRule)).toBeTruthy();
18
+ expect(isRoutingRuleMatch("/foo/", routingRule)).toBeTruthy();
19
+ expect(isRoutingRuleMatch("/foo/bar", routingRule)).toBeTruthy();
20
+ expect(isRoutingRuleMatch("/foo/bar/", routingRule)).toBeTruthy();
21
+ expect(isRoutingRuleMatch("/foo/bar/baz", routingRule)).toBeTruthy();
22
+ expect(isRoutingRuleMatch("/foo/bar/baz/", routingRule)).toBeTruthy();
23
+ });
24
+
25
+ it("should match `/*` suffix-ed rules correctly", () => {
26
+ let routingRule = "/foo/*";
27
+
28
+ expect(isRoutingRuleMatch("/foo", routingRule)).toBeTruthy();
29
+ expect(isRoutingRuleMatch("/foo/", routingRule)).toBeTruthy();
30
+ expect(isRoutingRuleMatch("/foobar", routingRule)).toBeFalsy();
31
+ expect(isRoutingRuleMatch("/foo/bar", routingRule)).toBeTruthy();
32
+ expect(isRoutingRuleMatch("/foo/bar/baz", routingRule)).toBeTruthy();
33
+ expect(isRoutingRuleMatch("/bar/foo", routingRule)).toBeFalsy();
34
+ expect(isRoutingRuleMatch("/bar/foo/baz", routingRule)).toBeFalsy();
35
+
36
+ routingRule = "/foo/bar/*";
37
+
38
+ expect(isRoutingRuleMatch("/foo", routingRule)).toBeFalsy();
39
+ expect(isRoutingRuleMatch("/foo/", routingRule)).toBeFalsy();
40
+ expect(isRoutingRuleMatch("/foo/bar", routingRule)).toBeTruthy();
41
+ expect(isRoutingRuleMatch("/foo/bar/baz", routingRule)).toBeTruthy();
42
+ expect(isRoutingRuleMatch("/foo/barfoo", routingRule)).toBeFalsy();
43
+ expect(isRoutingRuleMatch("baz/foo/bar", routingRule)).toBeFalsy();
44
+ expect(isRoutingRuleMatch("baz/foo/bar/", routingRule)).toBeFalsy();
45
+ });
46
+
47
+ it("should match `/` suffix-ed rules correctly", () => {
48
+ let routingRule = "/foo/";
49
+ expect(isRoutingRuleMatch("/foo/", routingRule)).toBeTruthy();
50
+ expect(isRoutingRuleMatch("/foo", routingRule)).toBeTruthy();
51
+
52
+ routingRule = "/foo/bar/";
53
+ expect(isRoutingRuleMatch("/foo/bar/", routingRule)).toBeTruthy();
54
+ expect(isRoutingRuleMatch("/foo/bar", routingRule)).toBeTruthy();
55
+ });
56
+
57
+ it("should match `*` suffix-ed rules correctly", () => {
58
+ let routingRule = "/foo*";
59
+ expect(isRoutingRuleMatch("/foo", routingRule)).toBeTruthy();
60
+ expect(isRoutingRuleMatch("/foo/", routingRule)).toBeTruthy();
61
+ expect(isRoutingRuleMatch("/foobar", routingRule)).toBeTruthy();
62
+ expect(isRoutingRuleMatch("/barfoo", routingRule)).toBeFalsy();
63
+ expect(isRoutingRuleMatch("/foo/bar", routingRule)).toBeTruthy();
64
+ expect(isRoutingRuleMatch("/bar/foo", routingRule)).toBeFalsy();
65
+ expect(isRoutingRuleMatch("/bar/foobar", routingRule)).toBeFalsy();
66
+ expect(isRoutingRuleMatch("/foo/bar/baz", routingRule)).toBeTruthy();
67
+ expect(isRoutingRuleMatch("/bar/foo/baz", routingRule)).toBeFalsy();
68
+
69
+ routingRule = "/foo/bar*";
70
+ expect(isRoutingRuleMatch("/foo/bar", routingRule)).toBeTruthy();
71
+ expect(isRoutingRuleMatch("/foo/bar/", routingRule)).toBeTruthy();
72
+ expect(isRoutingRuleMatch("/foo/barfoo", routingRule)).toBeTruthy();
73
+ expect(isRoutingRuleMatch("/bar/foo/barfoo", routingRule)).toBeFalsy();
74
+ expect(isRoutingRuleMatch("/foo/bar/baz", routingRule)).toBeTruthy();
75
+ expect(isRoutingRuleMatch("/bar/foo/bar/baz", routingRule)).toBeFalsy();
76
+ });
77
+
78
+ it("should match rules without wildcards correctly", () => {
79
+ let routingRule = "/foo";
80
+
81
+ expect(isRoutingRuleMatch("/foo", routingRule)).toBeTruthy();
82
+ expect(isRoutingRuleMatch("/foo/", routingRule)).toBeTruthy();
83
+ expect(isRoutingRuleMatch("/foo/bar", routingRule)).toBeFalsy();
84
+ expect(isRoutingRuleMatch("/bar/foo", routingRule)).toBeFalsy();
85
+
86
+ routingRule = "/foo/bar";
87
+ expect(isRoutingRuleMatch("/foo/bar", routingRule)).toBeTruthy();
88
+ expect(isRoutingRuleMatch("/foo/bar/", routingRule)).toBeTruthy();
89
+ expect(isRoutingRuleMatch("/foo/bar/baz", routingRule)).toBeFalsy();
90
+ expect(isRoutingRuleMatch("/baz/foo/bar", routingRule)).toBeFalsy();
91
+ });
92
+
93
+ it("should throw an error if pathname or routing rule params are missing", () => {
94
+ // MISSING PATHNAME
95
+ expect(() =>
96
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
97
+ // @ts-ignore: sanity check
98
+ isRoutingRuleMatch(undefined, "/*")
99
+ ).toThrow("Pathname is undefined.");
100
+
101
+ expect(() =>
102
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
103
+ // @ts-ignore: sanity check
104
+ isRoutingRuleMatch(null, "/*")
105
+ ).toThrow("Pathname is undefined.");
106
+
107
+ expect(() => isRoutingRuleMatch("", "/*")).toThrow(
108
+ "Pathname is undefined."
109
+ );
110
+
111
+ // MISSING ROUTING RULE
112
+ expect(() =>
113
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
114
+ // @ts-ignore: sanity check
115
+ isRoutingRuleMatch("/foo", undefined)
116
+ ).toThrow("Routing rule is undefined.");
117
+
118
+ expect(() =>
119
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
120
+ // @ts-ignore: sanity check
121
+ isRoutingRuleMatch("/foo", null)
122
+ ).toThrow("Routing rule is undefined.");
123
+
124
+ expect(() => isRoutingRuleMatch("/foo", "")).toThrow(
125
+ "Routing rule is undefined."
126
+ );
127
+ });
128
+ });
@@ -0,0 +1,12 @@
1
+ // `@types/node` should be included
2
+ Buffer.from("test");
3
+
4
+ // `@types/jest` should be included
5
+ test("test");
6
+
7
+ // @ts-expect-error `@cloudflare/workers-types` should NOT be included
8
+ const _handler: ExportedHandler = {};
9
+ // @ts-expect-error `@cloudflare/workers-types` should NOT be included
10
+ new HTMLRewriter();
11
+
12
+ export {};
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "@cloudflare/workers-tsconfig/tsconfig.json",
3
+ "compilerOptions": {
4
+ "types": ["node", "jest"]
5
+ },
6
+ "include": ["**/*.ts"],
7
+ "exclude": []
8
+ }
@@ -0,0 +1,30 @@
1
+ const urls = new Set();
2
+
3
+ function checkURL(request, init) {
4
+ const url =
5
+ request instanceof URL
6
+ ? request
7
+ : new URL(
8
+ (typeof request === "string"
9
+ ? new Request(request, init)
10
+ : request
11
+ ).url
12
+ );
13
+ if (url.port && url.port !== "443" && url.protocol === "https:") {
14
+ if (!urls.has(url.toString())) {
15
+ urls.add(url.toString());
16
+ console.warn(
17
+ `WARNING: known issue with \`fetch()\` requests to custom HTTPS ports in published Workers:\n` +
18
+ ` - ${url.toString()} - the custom port will be ignored when the Worker is published using the \`wrangler deploy\` command.\n`
19
+ );
20
+ }
21
+ }
22
+ }
23
+
24
+ globalThis.fetch = new Proxy(globalThis.fetch, {
25
+ apply(target, thisArg, argArray) {
26
+ const [request, init] = argArray;
27
+ checkURL(request, init);
28
+ return Reflect.apply(target, thisArg, argArray);
29
+ },
30
+ });
@@ -0,0 +1,19 @@
1
+ declare module "__ENTRY_POINT__" {
2
+ import { Middleware } from "./middleware/common";
3
+ import { WorkerEntrypoint } from "cloudflare:workers";
4
+
5
+ export type WorkerEntrypointConstructor = typeof WorkerEntrypoint;
6
+
7
+ const worker: ExportedHandler | WorkerEntrypointConstructor;
8
+ export default worker;
9
+ export const __INTERNAL_WRANGLER_MIDDLEWARE__: Middleware[];
10
+ }
11
+
12
+ declare module "__KV_ASSET_HANDLER__" {
13
+ export * from "@cloudflare/kv-asset-handler";
14
+ }
15
+
16
+ declare module "__STATIC_CONTENT_MANIFEST" {
17
+ const manifest: string;
18
+ export default manifest;
19
+ }
@@ -166,6 +166,5 @@ dist
166
166
  .yarn/install-state.gz
167
167
  .pnp.\*
168
168
 
169
- # wrangler project
170
-
171
- .dev.vars
169
+ .wrangler
170
+ .DS_Store
@@ -0,0 +1,23 @@
1
+ const { unstable_dev } = require("wrangler");
2
+
3
+ describe("Worker", () => {
4
+ let worker;
5
+
6
+ beforeAll(async () => {
7
+ worker = await unstable_dev("src/index.js", {
8
+ experimental: { disableExperimentalWarning: true },
9
+ });
10
+ });
11
+
12
+ afterAll(async () => {
13
+ await worker.stop();
14
+ });
15
+
16
+ it("should return Hello World", async () => {
17
+ const resp = await worker.fetch();
18
+ if (resp) {
19
+ const text = await resp.text();
20
+ expect(text).toMatchInlineSnapshot(`"Hello World!"`);
21
+ }
22
+ });
23
+ });
@@ -0,0 +1,24 @@
1
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
2
+ import { unstable_dev } from "wrangler";
3
+
4
+ describe("Worker", () => {
5
+ let worker;
6
+
7
+ beforeAll(async () => {
8
+ worker = await unstable_dev("src/index.js", {
9
+ experimental: { disableExperimentalWarning: true },
10
+ });
11
+ });
12
+
13
+ afterAll(async () => {
14
+ await worker.stop();
15
+ });
16
+
17
+ it("should return Hello World", async () => {
18
+ const resp = await worker.fetch();
19
+ if (resp) {
20
+ const text = await resp.text();
21
+ expect(text).toMatchInlineSnapshot(`"Hello World!"`);
22
+ }
23
+ });
24
+ });
@@ -0,0 +1,25 @@
1
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
2
+ import { unstable_dev } from "wrangler";
3
+ import type { UnstableDevWorker } from "wrangler";
4
+
5
+ describe("Worker", () => {
6
+ let worker: UnstableDevWorker;
7
+
8
+ beforeAll(async () => {
9
+ worker = await unstable_dev("src/index.ts", {
10
+ experimental: { disableExperimentalWarning: true },
11
+ });
12
+ });
13
+
14
+ afterAll(async () => {
15
+ await worker.stop();
16
+ });
17
+
18
+ it("should return Hello World", async () => {
19
+ const resp = await worker.fetch();
20
+ if (resp) {
21
+ const text = await resp.text();
22
+ expect(text).toMatchInlineSnapshot(`"Hello World!"`);
23
+ }
24
+ });
25
+ });
@@ -0,0 +1,67 @@
1
+ export type Awaitable<T> = T | Promise<T>;
2
+ // TODO: allow dispatching more events?
3
+ export type Dispatcher = (
4
+ type: "scheduled",
5
+ init: { cron?: string }
6
+ ) => Awaitable<void>;
7
+
8
+ export type IncomingRequest = Request<
9
+ unknown,
10
+ IncomingRequestCfProperties<unknown>
11
+ >;
12
+
13
+ export interface MiddlewareContext {
14
+ dispatch: Dispatcher;
15
+ next(request: IncomingRequest, env: any): Awaitable<Response>;
16
+ }
17
+
18
+ export type Middleware = (
19
+ request: IncomingRequest,
20
+ env: any,
21
+ ctx: ExecutionContext,
22
+ middlewareCtx: MiddlewareContext
23
+ ) => Awaitable<Response>;
24
+
25
+ const __facade_middleware__: Middleware[] = [];
26
+
27
+ // The register functions allow for the insertion of one or many middleware,
28
+ // We register internal middleware first in the stack, but have no way of controlling
29
+ // the order that addMiddleware is run in service workers so need an internal function.
30
+ export function __facade_register__(...args: (Middleware | Middleware[])[]) {
31
+ __facade_middleware__.push(...args.flat());
32
+ }
33
+ export function __facade_registerInternal__(
34
+ ...args: (Middleware | Middleware[])[]
35
+ ) {
36
+ __facade_middleware__.unshift(...args.flat());
37
+ }
38
+
39
+ function __facade_invokeChain__(
40
+ request: IncomingRequest,
41
+ env: any,
42
+ ctx: ExecutionContext,
43
+ dispatch: Dispatcher,
44
+ middlewareChain: Middleware[]
45
+ ): Awaitable<Response> {
46
+ const [head, ...tail] = middlewareChain;
47
+ const middlewareCtx: MiddlewareContext = {
48
+ dispatch,
49
+ next(newRequest, newEnv) {
50
+ return __facade_invokeChain__(newRequest, newEnv, ctx, dispatch, tail);
51
+ },
52
+ };
53
+ return head(request, env, ctx, middlewareCtx);
54
+ }
55
+
56
+ export function __facade_invoke__(
57
+ request: IncomingRequest,
58
+ env: any,
59
+ ctx: ExecutionContext,
60
+ dispatch: Dispatcher,
61
+ finalMiddleware: Middleware
62
+ ): Awaitable<Response> {
63
+ return __facade_invokeChain__(request, env, ctx, dispatch, [
64
+ ...__facade_middleware__,
65
+ finalMiddleware,
66
+ ]);
67
+ }