wrangler 0.0.0-e61fba8 → 0.0.0-e62b097bb
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.
- package/README.md +42 -36
- package/bin/wrangler.js +86 -67
- package/config-schema.json +3370 -0
- package/package.json +132 -103
- package/templates/__tests__/pages-dev-util.test.ts +128 -0
- package/templates/__tests__/tsconfig-sanity.ts +12 -0
- package/templates/__tests__/tsconfig.json +8 -0
- package/templates/checked-fetch.js +30 -0
- package/templates/facade.d.ts +19 -0
- package/templates/gitignore +2 -3
- package/templates/init-tests/test-jest-new-worker.js +23 -0
- package/templates/init-tests/test-vitest-new-worker.js +24 -0
- package/templates/init-tests/test-vitest-new-worker.ts +25 -0
- package/templates/middleware/common.ts +67 -0
- package/templates/middleware/loader-modules.ts +134 -0
- package/templates/middleware/loader-sw.ts +229 -0
- package/templates/middleware/middleware-ensure-req-body-drained.ts +18 -0
- package/templates/middleware/middleware-miniflare3-json-error.ts +32 -0
- package/templates/middleware/middleware-mock-analytics-engine.d.ts +3 -0
- package/templates/middleware/middleware-mock-analytics-engine.ts +30 -0
- package/templates/middleware/middleware-patch-console-prefix.d.ts +3 -0
- package/templates/middleware/middleware-patch-console-prefix.ts +21 -0
- package/templates/middleware/middleware-pretty-error.ts +40 -0
- package/templates/middleware/middleware-scheduled.ts +29 -0
- package/templates/middleware/middleware-serve-static-assets.d.ts +6 -0
- package/templates/middleware/middleware-serve-static-assets.ts +56 -0
- package/templates/modules-watch-stub.js +4 -0
- package/templates/new-worker-scheduled.js +3 -3
- package/templates/new-worker-scheduled.ts +16 -16
- package/templates/new-worker.js +3 -3
- package/templates/new-worker.ts +19 -16
- package/templates/no-op-worker.js +10 -0
- package/templates/pages-dev-pipeline.ts +32 -0
- package/templates/pages-dev-util.ts +55 -0
- package/templates/pages-shim.ts +9 -0
- package/templates/pages-template-plugin.ts +190 -0
- package/templates/pages-template-worker.ts +198 -0
- package/templates/startDevWorker/InspectorProxyWorker.ts +664 -0
- package/templates/startDevWorker/ProxyWorker.ts +336 -0
- package/templates/tsconfig-sanity.ts +11 -0
- package/templates/tsconfig.init.json +22 -0
- package/templates/tsconfig.json +6 -103
- package/wrangler-dist/InspectorProxyWorker.js +464 -0
- package/wrangler-dist/InspectorProxyWorker.js.map +6 -0
- package/wrangler-dist/ProxyWorker.js +241 -0
- package/wrangler-dist/ProxyWorker.js.map +6 -0
- package/wrangler-dist/cli.d.ts +26730 -0
- package/wrangler-dist/cli.js +165991 -119517
- package/Cloudflare_CA.pem +0 -18
- package/import_meta_url.js +0 -3
- package/miniflare-config-stubs/.env.empty +0 -0
- package/miniflare-config-stubs/package.empty.json +0 -1
- package/miniflare-config-stubs/wrangler.empty.toml +0 -0
- package/miniflare-dist/index.mjs +0 -4886
- package/pages/functions/buildPlugin.ts +0 -105
- package/pages/functions/buildWorker.ts +0 -151
- package/pages/functions/filepath-routing.test.ts +0 -234
- package/pages/functions/filepath-routing.ts +0 -189
- package/pages/functions/identifiers.ts +0 -78
- package/pages/functions/routes.ts +0 -156
- package/pages/functions/template-plugin.ts +0 -147
- package/pages/functions/template-worker.ts +0 -143
- package/src/__tests__/config-cache.test.ts +0 -36
- package/src/__tests__/configuration.test.ts +0 -3487
- package/src/__tests__/dev.test.tsx +0 -1010
- package/src/__tests__/guess-worker-format.test.ts +0 -85
- package/src/__tests__/helpers/clipboardy-mock.js +0 -4
- package/src/__tests__/helpers/cmd-shim.d.ts +0 -11
- package/src/__tests__/helpers/faye-websocket.d.ts +0 -6
- package/src/__tests__/helpers/mock-account-id.ts +0 -48
- package/src/__tests__/helpers/mock-bin.ts +0 -36
- package/src/__tests__/helpers/mock-cfetch.ts +0 -211
- package/src/__tests__/helpers/mock-console.ts +0 -87
- package/src/__tests__/helpers/mock-dialogs.ts +0 -130
- package/src/__tests__/helpers/mock-http-server.ts +0 -46
- package/src/__tests__/helpers/mock-istty.ts +0 -27
- package/src/__tests__/helpers/mock-kv.ts +0 -33
- package/src/__tests__/helpers/mock-oauth-flow.ts +0 -255
- package/src/__tests__/helpers/mock-stdin.ts +0 -103
- package/src/__tests__/helpers/mock-web-socket.ts +0 -29
- package/src/__tests__/helpers/run-in-tmp.ts +0 -39
- package/src/__tests__/helpers/run-wrangler.ts +0 -16
- package/src/__tests__/helpers/write-worker-source.ts +0 -31
- package/src/__tests__/helpers/write-wrangler-toml.ts +0 -17
- package/src/__tests__/https-options.test.ts +0 -130
- package/src/__tests__/index.test.ts +0 -257
- package/src/__tests__/init.test.ts +0 -1637
- package/src/__tests__/jest.setup.ts +0 -77
- package/src/__tests__/kv.test.ts +0 -1502
- package/src/__tests__/logger.test.ts +0 -115
- package/src/__tests__/package-manager.test.ts +0 -353
- package/src/__tests__/pages.test.ts +0 -754
- package/src/__tests__/parse.test.ts +0 -330
- package/src/__tests__/publish.test.ts +0 -5820
- package/src/__tests__/r2.test.ts +0 -233
- package/src/__tests__/route.test.ts +0 -45
- package/src/__tests__/secret.test.ts +0 -481
- package/src/__tests__/tail.test.ts +0 -690
- package/src/__tests__/user.test.ts +0 -131
- package/src/__tests__/whoami.test.tsx +0 -139
- package/src/abort.d.ts +0 -3
- package/src/bundle.ts +0 -204
- package/src/cfetch/index.ts +0 -121
- package/src/cfetch/internal.ts +0 -142
- package/src/cli.ts +0 -13
- package/src/config/README.md +0 -107
- package/src/config/config.ts +0 -234
- package/src/config/diagnostics.ts +0 -80
- package/src/config/environment.ts +0 -420
- package/src/config/index.ts +0 -225
- package/src/config/validation-helpers.ts +0 -584
- package/src/config/validation.ts +0 -1548
- package/src/config-cache.ts +0 -45
- package/src/create-worker-preview.ts +0 -185
- package/src/create-worker-upload-form.ts +0 -254
- package/src/dev/dev-vars.ts +0 -36
- package/src/dev/dev.tsx +0 -395
- package/src/dev/local.tsx +0 -321
- package/src/dev/remote.tsx +0 -240
- package/src/dev/use-esbuild.ts +0 -115
- package/src/dialogs.tsx +0 -135
- package/src/durable.ts +0 -102
- package/src/entry.ts +0 -322
- package/src/environment-variables.ts +0 -35
- package/src/errors.ts +0 -11
- package/src/https-options.ts +0 -123
- package/src/index.tsx +0 -2859
- package/src/inspect.ts +0 -662
- package/src/intl-polyfill.d.ts +0 -139
- package/src/kv.ts +0 -408
- package/src/logger.ts +0 -66
- package/src/miniflare-cli/README.md +0 -30
- package/src/miniflare-cli/enum-keys.ts +0 -17
- package/src/miniflare-cli/index.ts +0 -41
- package/src/miniflare-cli/request-context.ts +0 -40
- package/src/module-collection.ts +0 -258
- package/src/open-in-browser.ts +0 -19
- package/src/package-manager.ts +0 -174
- package/src/pages.tsx +0 -2093
- package/src/parse.ts +0 -222
- package/src/paths.ts +0 -26
- package/src/proxy.ts +0 -478
- package/src/publish.ts +0 -721
- package/src/r2.ts +0 -50
- package/src/selfsigned.d.ts +0 -29
- package/src/sites.tsx +0 -326
- package/src/tail/filters.ts +0 -279
- package/src/tail/index.ts +0 -299
- package/src/tail/printing.ts +0 -67
- package/src/update-check.ts +0 -19
- package/src/user.tsx +0 -1214
- package/src/whoami.tsx +0 -71
- package/src/worker.ts +0 -181
- package/src/zones.ts +0 -73
- package/templates/static-asset-facade.js +0 -43
package/package.json
CHANGED
|
@@ -1,17 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wrangler",
|
|
3
|
-
"version": "0.0.0-
|
|
4
|
-
"author": "wrangler@cloudflare.com",
|
|
3
|
+
"version": "0.0.0-e62b097bb",
|
|
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,129 +18,168 @@
|
|
|
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
|
],
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
"
|
|
41
|
-
"@esbuild-plugins/node-modules-polyfill": "^0.1.4",
|
|
42
|
-
"blake3-wasm": "^2.1.5",
|
|
43
|
-
"esbuild": "0.14.34",
|
|
44
|
-
"miniflare": "^2.5.0",
|
|
45
|
-
"nanoid": "^3.3.3",
|
|
46
|
-
"path-to-regexp": "^6.2.0",
|
|
47
|
-
"selfsigned": "^2.0.1",
|
|
48
|
-
"semiver": "^1.1.0",
|
|
49
|
-
"xxhash-wasm": "^1.0.1"
|
|
27
|
+
"homepage": "https://github.com/cloudflare/workers-sdk#readme",
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://github.com/cloudflare/workers-sdk/issues"
|
|
50
30
|
},
|
|
51
|
-
"
|
|
52
|
-
"
|
|
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
|
+
],
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@esbuild-plugins/node-globals-polyfill": "0.2.3",
|
|
54
|
+
"@esbuild-plugins/node-modules-polyfill": "0.2.2",
|
|
55
|
+
"blake3-wasm": "2.1.5",
|
|
56
|
+
"esbuild": "0.17.19",
|
|
57
|
+
"path-to-regexp": "6.3.0",
|
|
58
|
+
"unenv": "2.0.0-rc.1",
|
|
59
|
+
"workerd": "1.20250204.0",
|
|
60
|
+
"@cloudflare/kv-asset-handler": "0.3.4",
|
|
61
|
+
"miniflare": "0.0.0-e62b097bb"
|
|
53
62
|
},
|
|
54
63
|
"devDependencies": {
|
|
64
|
+
"@aws-sdk/client-s3": "^3.721.0",
|
|
65
|
+
"@cloudflare/types": "6.18.4",
|
|
66
|
+
"@cloudflare/workers-types": "^4.20250204.0",
|
|
67
|
+
"@cspotcode/source-map-support": "0.8.1",
|
|
55
68
|
"@iarna/toml": "^3.0.0",
|
|
69
|
+
"@microsoft/api-extractor": "^7.47.0",
|
|
70
|
+
"@sentry/node": "^7.86.0",
|
|
71
|
+
"@sentry/types": "^7.86.0",
|
|
72
|
+
"@sentry/utils": "^7.86.0",
|
|
56
73
|
"@types/command-exists": "^1.2.0",
|
|
57
|
-
"@types/glob-to-regexp": "0.4.1",
|
|
58
|
-
"@types/
|
|
74
|
+
"@types/glob-to-regexp": "^0.4.1",
|
|
75
|
+
"@types/is-ci": "^3.0.0",
|
|
76
|
+
"@types/javascript-time-ago": "^2.0.3",
|
|
77
|
+
"@types/mime": "^3.0.4",
|
|
78
|
+
"@types/minimatch": "^5.1.2",
|
|
79
|
+
"@types/node": "^18.19.71",
|
|
80
|
+
"@types/node-forge": "^1.3.11",
|
|
59
81
|
"@types/prompts": "^2.0.14",
|
|
60
|
-
"@types/
|
|
61
|
-
"@types/
|
|
82
|
+
"@types/resolve": "^1.20.6",
|
|
83
|
+
"@types/shell-quote": "^1.7.2",
|
|
62
84
|
"@types/signal-exit": "^3.0.1",
|
|
63
85
|
"@types/supports-color": "^8.1.1",
|
|
64
|
-
"@types/ws": "^8.5.
|
|
65
|
-
"@types/yargs": "^17.0.
|
|
66
|
-
"@
|
|
67
|
-
"
|
|
68
|
-
"
|
|
86
|
+
"@types/ws": "^8.5.7",
|
|
87
|
+
"@types/yargs": "^17.0.22",
|
|
88
|
+
"@vitest/ui": "~2.1.8",
|
|
89
|
+
"@webcontainer/env": "^1.1.0",
|
|
90
|
+
"chalk": "^5.2.0",
|
|
91
|
+
"chokidar": "^4.0.1",
|
|
92
|
+
"cli-table3": "^0.6.3",
|
|
69
93
|
"cmd-shim": "^4.1.0",
|
|
70
94
|
"command-exists": "^1.2.9",
|
|
71
|
-
"
|
|
72
|
-
"
|
|
95
|
+
"concurrently": "^8.2.2",
|
|
96
|
+
"date-fns": "^4.1.0",
|
|
97
|
+
"devtools-protocol": "^0.0.1182435",
|
|
98
|
+
"dotenv": "^16.3.1",
|
|
73
99
|
"execa": "^6.1.0",
|
|
74
|
-
"faye-websocket": "^0.11.4",
|
|
75
|
-
"finalhandler": "^1.2.0",
|
|
76
100
|
"find-up": "^6.3.0",
|
|
77
|
-
"get-port": "^
|
|
78
|
-
"glob-to-regexp": "0.4.1",
|
|
79
|
-
"
|
|
101
|
+
"get-port": "^7.0.0",
|
|
102
|
+
"glob-to-regexp": "^0.4.1",
|
|
103
|
+
"https-proxy-agent": "7.0.2",
|
|
80
104
|
"ignore": "^5.2.0",
|
|
81
|
-
"
|
|
82
|
-
"
|
|
83
|
-
"
|
|
84
|
-
"
|
|
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",
|
|
105
|
+
"is-ci": "^3.0.1",
|
|
106
|
+
"itty-time": "^1.0.6",
|
|
107
|
+
"javascript-time-ago": "^2.5.4",
|
|
108
|
+
"md5-file": "5.0.0",
|
|
89
109
|
"mime": "^3.0.0",
|
|
110
|
+
"minimatch": "^5.1.0",
|
|
111
|
+
"mock-socket": "^9.3.1",
|
|
112
|
+
"msw": "2.4.3",
|
|
113
|
+
"node-forge": "^1.3.1",
|
|
90
114
|
"open": "^8.4.0",
|
|
91
115
|
"p-queue": "^7.2.0",
|
|
116
|
+
"patch-console": "^1.0.0",
|
|
92
117
|
"pretty-bytes": "^6.0.0",
|
|
93
118
|
"prompts": "^2.4.2",
|
|
94
|
-
"
|
|
95
|
-
"
|
|
96
|
-
"
|
|
119
|
+
"resolve": "^1.22.8",
|
|
120
|
+
"rimraf": "^5.0.10",
|
|
121
|
+
"selfsigned": "^2.0.1",
|
|
122
|
+
"semiver": "^1.1.0",
|
|
123
|
+
"shell-quote": "^1.8.1",
|
|
97
124
|
"signal-exit": "^3.0.7",
|
|
125
|
+
"source-map": "^0.6.1",
|
|
126
|
+
"strip-ansi": "^7.1.0",
|
|
98
127
|
"supports-color": "^9.2.2",
|
|
99
128
|
"timeago.js": "^4.0.2",
|
|
100
|
-
"tmp-promise": "^3.0.3",
|
|
101
129
|
"ts-dedent": "^2.2.0",
|
|
102
|
-
"
|
|
130
|
+
"ts-json-schema-generator": "^1.5.0",
|
|
131
|
+
"typescript": "^5.7.2",
|
|
132
|
+
"undici": "^5.28.4",
|
|
103
133
|
"update-check": "^1.5.4",
|
|
104
|
-
"
|
|
105
|
-
"
|
|
134
|
+
"vitest": "~2.1.8",
|
|
135
|
+
"vitest-websocket-mock": "^0.4.0",
|
|
136
|
+
"ws": "^8.18.0",
|
|
137
|
+
"xdg-app-paths": "^8.3.0",
|
|
138
|
+
"xxhash-wasm": "^1.0.1",
|
|
139
|
+
"yargs": "^17.7.2",
|
|
140
|
+
"@cloudflare/cli": "1.1.1",
|
|
141
|
+
"@cloudflare/eslint-config-worker": "1.1.0",
|
|
142
|
+
"@cloudflare/pages-shared": "^0.13.5",
|
|
143
|
+
"@cloudflare/workers-shared": "0.0.0-e62b097bb",
|
|
144
|
+
"@cloudflare/workers-tsconfig": "0.0.0"
|
|
106
145
|
},
|
|
107
|
-
"
|
|
108
|
-
"
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
"
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
"
|
|
117
|
-
"
|
|
118
|
-
"Cloudflare_CA.pem"
|
|
119
|
-
],
|
|
120
|
-
"scripts": {
|
|
121
|
-
"clean": "rm -rf wrangler-dist miniflare-dist",
|
|
122
|
-
"check:type": "tsc",
|
|
123
|
-
"bundle": "node -r esbuild-register scripts/bundle.ts",
|
|
124
|
-
"build": "npm run clean && npm run bundle",
|
|
125
|
-
"prepublishOnly": "SOURCEMAPS=false npm run build",
|
|
126
|
-
"start": "npm run bundle && NODE_OPTIONS=--enable-source-maps ./bin/wrangler.js",
|
|
127
|
-
"test": "jest --silent=false --verbose=true",
|
|
128
|
-
"test-watch": "npm run test -- --runInBand --testTimeout=50000 --watch"
|
|
146
|
+
"peerDependencies": {
|
|
147
|
+
"@cloudflare/workers-types": "^4.20250204.0"
|
|
148
|
+
},
|
|
149
|
+
"peerDependenciesMeta": {
|
|
150
|
+
"@cloudflare/workers-types": {
|
|
151
|
+
"optional": true
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"optionalDependencies": {
|
|
155
|
+
"fsevents": "~2.3.2",
|
|
156
|
+
"sharp": "^0.33.5"
|
|
129
157
|
},
|
|
130
158
|
"engines": {
|
|
131
|
-
"node": ">=16.
|
|
159
|
+
"node": ">=16.17.0"
|
|
160
|
+
},
|
|
161
|
+
"volta": {
|
|
162
|
+
"extends": "../../package.json"
|
|
163
|
+
},
|
|
164
|
+
"workers-sdk": {
|
|
165
|
+
"prerelease": true
|
|
132
166
|
},
|
|
133
|
-
"
|
|
134
|
-
"
|
|
135
|
-
"
|
|
136
|
-
"
|
|
137
|
-
"
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
"
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
"
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
]
|
|
151
|
-
},
|
|
152
|
-
"setupFilesAfterEnv": [
|
|
153
|
-
"<rootDir>/src/__tests__/jest.setup.ts"
|
|
154
|
-
]
|
|
167
|
+
"scripts": {
|
|
168
|
+
"assert-git-version": "node -r esbuild-register scripts/assert-git-version.ts",
|
|
169
|
+
"build": "pnpm run clean && pnpm run bundle && pnpm run emit-types && pnpm run generate-json-schema",
|
|
170
|
+
"bundle": "node -r esbuild-register scripts/bundle.ts",
|
|
171
|
+
"check:lint": "eslint . --max-warnings=0",
|
|
172
|
+
"check:type": "tsc",
|
|
173
|
+
"clean": "rimraf wrangler-dist miniflare-dist emitted-types",
|
|
174
|
+
"dev": "pnpm run clean && concurrently -c black,blue --kill-others-on-fail false \"pnpm run bundle --watch\" \"pnpm run check:type --watch --preserveWatchOutput\"",
|
|
175
|
+
"emit-types": "tsc -p tsconfig.emit.json && node -r esbuild-register scripts/emit-types.ts",
|
|
176
|
+
"generate-json-schema": "pnpm exec ts-json-schema-generator --no-type-check --path src/config/config.ts --type RawConfig --out config-schema.json",
|
|
177
|
+
"start": "pnpm run bundle && cross-env NODE_OPTIONS=--enable-source-maps ./bin/wrangler.js",
|
|
178
|
+
"test": "dotenv -- pnpm run assert-git-version && dotenv -- vitest",
|
|
179
|
+
"test:ci": "pnpm run test run",
|
|
180
|
+
"test:debug": "pnpm run test --silent=false --verbose=true",
|
|
181
|
+
"test:e2e": "dotenv -- vitest -c ./e2e/vitest.config.mts",
|
|
182
|
+
"test:watch": "pnpm run test --testTimeout=50000 --watch",
|
|
183
|
+
"type:tests": "tsc -p ./src/__tests__/tsconfig.json && tsc -p ./e2e/tsconfig.json"
|
|
155
184
|
}
|
|
156
|
-
}
|
|
185
|
+
}
|
|
@@ -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,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
|
+
}
|
package/templates/gitignore
CHANGED
|
@@ -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 { Unstable_DevWorker } from "wrangler";
|
|
4
|
+
|
|
5
|
+
describe("Worker", () => {
|
|
6
|
+
let worker: Unstable_DevWorker;
|
|
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
|
+
}
|