Releases: cloudflare/workers-sdk
[email protected]
Patch Changes
-
#333
6320a32
Thanks @threepointone! - fix: pass worker name to syncAssets indev
This fix passes the correct worker name to
syncAssets
duringwrangler dev
. This function uses the name to create the backing kv store for a Workers Sites definition, so it's important we get the name right.I also fixed the lint warning introduced in #321, to pass
props.enableLocalPersistence
as a dependency in theuseEffect
call that starts the "local" mode dev server. -
#335
a417cb0
Thanks @threepointone! - fix: prevent infinite loop when fetching a list of resultsWhen fetching a list of results from cloudflare APIs (e.g. when fetching a list of keys in a kv namespace), the api returns a
cursor
that a consumer should use to get the next 'page' of results. It appears this cursor can also be a blank string (while we'd only account for it to beundefined
). By only accounting for it to beundefined
, we were infinitely looping through the same page of results and never terminating. This PR fixes it by letting it be a blank string (andnull
, for good measure) -
#332
a2155c1
Thanks @threepointone! - fix: wait for port to be available before creating a dev serverWhen we run
wrangler dev
, we start a server on a port (defaulting to 8787). We do this separately for both local and edge modes. However, when switching between the two with thel
hotkey, we don't 'wait' for the previous server to stop before starting the next one. This can crash the process, and we don't want that (of course). So we introduce a helper functionwaitForPortToBeAvailable()
that waits for a port to be available before returning. This is used in both the local and edge modes, and prevents the bug right now, where switching between edge - local - edge crashes the process.(This isn't a complete fix, and we can still cause errors by very rapidly switching between the two modes. A proper long term fix for the future would probably be to hoist the proxy server hook above the
<Remote/>
and<Local/>
components, and use a single instance throughout. But that requires a deeper refactor, and isn't critical at the moment.) -
#336
ce61000
Thanks @threepointone! - feat: inline text-like files into the worker bundleWe were adding text-like modules (i.e.
.txt
,.html
and.pem
files) as separate modules in the Worker definition, but this only really 'works' with the ES module Worker format. This commit changes that to inline the text-like files into the Worker bundle directly.We still have to do something similar with
.wasm
modules, but that requires a different fix, and we'll do so in a subsequent commit. -
#336
ce61000
Thanks @threepointone! - feat: Sites support for local modewrangler dev
This adds support for Workers Sites in local mode when running wrangler
dev
. Further, it fixes a bug where we were sending the__STATIC_CONTENT_MANIFEST
definition as a separate module even with service worker format, and a bug where we weren't uploading the namespace binding when other kv namespaces weren't present.
[email protected]
Patch Changes
-
#307
53c6318
Thanks @threepointone! - feat:wrangler secret * --local
This PR implements
wrangler secret
for--local
mode. The implementation is simply a no-op, since we don't want to actually write secret values to disk (I think?). I also got the messaging for remote mode right by copying from wrangler 1. Further, I added tests for all thewrangler secret
commands. -
#324
b816333
Thanks @GregBrimble! - Fixeswrangler pages dev
failing to start for just a folder of static assets (no functions) -
#317
d6ef61a
Thanks @threepointone! - fix: restart thedev
proxy server whenever it closesWhen we run
wrangler dev
, the session that we setup with the preview endpoint doesn't last forever, it dies after ignoring it for 5-15 minutes or so. The fix for this is to simply reconnect the server. So we use a state hook as a sigil, and add it to the dependency array of the effect that sets up the server, and simply change it every time the server closes.Fixes #197
(In wrangler1, we used to restart the whole process, including uploading the worker again, making a new preview token, and so on. It looks like that they may not have been necessary.)
-
#312
77aa324
Thanks @threepointone! - fix: remove--prefer-offline
when runningnpm install
We were using
--prefer-offline
when runningnpm install
duringwrangler init
. The behaviour is odd, it doesn't seem to fetch from the remote when the cache isn't hit, which is not what I'm expecting. So we remove--prefer-offline
. -
#311
a5537f1
Thanks @threepointone! - fix: custom builds should allow multiple commandsWe were running custom builds as a regular command with
execa
. This would fail whenever we tried to run compound commands likecargo install -q worker-build && worker-build --release
(via #236). The fix is to useshell: true
, so that the command is run in a shell and can thus use bash-y syntax like&&
, and so on. I also switched to usingexecaCommand
which splits a command string into parts correctly by itself. -
#321
5b64a59
Thanks @geelen! - fix: disable local persistence by default & add--experimental-enable-local-persistence
flagBREAKING CHANGE:
When running
dev
locally any data stored in KV, Durable Objects or the cache are no longer persisted between sessions by default.To turn this back on add the
--experimental-enable-local-persistence
at the command line.
[email protected]
Patch Changes
-
#293
71b0fab
Thanks @petebacondarwin! - fix: warn if thesite.entry-point
configuration is found during publishingAlso updates the message and adds a test for the error when there is no entry-point specified.
Fixes #282
-
#304
7477b52
Thanks @threepointone! - feat: enhancewrangler init
This PR adds some enhancements/fixes to the
wrangler init
command.- doesn't overwrite
wrangler.toml
if it already exists - installs
wrangler
when creatingpackage.json
- offers to install
wrangler
intopackage.json
even ifpackage.json
already exists - offers to install
@cloudflare/workers-types
even iftsconfig.json
already exists - pipes stdio back to the terminal so there's feedback when it's installing npm packages
This does have the side effect of making out tests slower. I added
--prefer-offline
to thenpm install
calls to make this a shade quicker, but I can't figure out a good way of mocking these. I'll think about it some more later. We should work on making the installs themselves quicker (re: #66)This PR also fixes a bug with our tests -
runWrangler
would catch thrown errors, and if we didn't manually verify the error, tests would pass. Instead, it now throws correctly, and I modified all the tests to assert on thrown errors. It seems like a lot, but it was just mechanical rewriting. - doesn't overwrite
-
#294
7746fba
Thanks @threepointone! - feature: add more types that get logged viaconsole
methodsThis PR adds more special logic for some data types that get logged via
console
methods. Types likePromise
,Date
,WeakMaps
, and some more, now get logged correctly (or at least, better than they used to).This PR also fixes a sinister bug - the
type
of theConsoleAPICalled
events don't match 1:1 with actual console methods (eg:console.warn
message type iswarning
). This PR adds a mapping between those types and method names. Some methods don't seem to have a message type, I'm not sure why, but we'll get to them later. -
#310
52c99ee
Thanks @threepointone! - feat: error if a site definition doesn't have abucket
fieldThis adds an assertion error for making sure a
[site]
definition always has abucket
field.As a cleanup, I made some small fixes to theConfig
type definition, and modified the tests inpublish.test.ts
to use the config format when creating awrangler.toml
file.
[email protected]
Patch Changes
-
#292
e5d3690
Thanks @threepointone! - fix: use entrypoint specified in esbuuild's metafile as source for building the workerWhen we pass a non-js file as entry to esbuild, it generates a
.js
file. (which, is the whole job of esbuild, haha). So, given<source>/index.ts
, it'll generate<destination>/index.js
. However, when we try to 'find' the matching file to pass on as an input to creating the actual worker, we try to use the original file name inside the destination directory. At this point, the extension has changed, so it doesn't find the file, and hence we get the error that looks likeENOENT: no such file or directory, open '/var/folders/3f/fwp6mt7n13bfnkd5vl3jmh1w0000gp/T/tmp-61545-4Y5kwyNI8DGU/src/worker.ts'
The actual path to the destination file is actually the key of the block in
metafile.outputs
that matches the given output.entryPoint, so this PR simply rewrites the logic to use that instead.
-
#287
b63efe6
Thanks @threepointone! - fix: propagate api errors to the terminal correctlyAny errors embedded in the response from the Cloudflare API were being lost, because
fetchInternal()
would throw on a non-200 response. This PR fixes that behaviour:- It doesn't throw on non-200 responses
- It first gets the response text with
.text()
and converts it to an object withJSON.parse
, so in case the api returns a non json response, we don't lose response we were sent.
Unfortunately, because of the nature of this abstraction, we do lose the response
status
code andstatusText
, but maybe that's acceptable since we have richer error information in the payload. I considered logging the code and text to the terminal, but that may make it noisy.
[email protected]
Patch Changes
-
#242
014a731
Thanks @petebacondarwin! - Refactor pages code to pass strict-null checks -
#267
e22f9d7
Thanks @petebacondarwin! - refactor: tidy up the typings of the build result in devIn #262 some of the strict null fixes were removed to resolve a regression.
This refactor re-applies these fixes in a way that avoids that problem. -
#284
20377e8
Thanks @petebacondarwin! - Add whoami command -
#270
2453577
Thanks @petebacondarwin! - feat: add support for include and exclude when publishing site assets -
#270
0289882
Thanks @petebacondarwin! - fix: ensurekv:key list
matches the output from Wrangler 1The previous output was passing an array of objects to console.log, which ended up showing something like
[Object object] [Object object] ...
Now the result is JSON stringified before being sent to the console.
The tests have been fixed to check this too. -
#258
f9c1423
Thanks @petebacondarwin! - fix: correctly handle entry-point path when publishingThe
publish
command was failing when the entry-point was specified in the wrangler.toml file and the entry-point imported another file.This was because we were using the
metafile.inputs
to guess the entry-point file path. But the order in which the source-files were added to this object was not well defined, and so we could end up failing to find a match.This fix avoids this by using the fact that the
metadata.outputs
object will only contain one element that has theentrypoint
property - and then using that as the entry-point path. For runtime safety, we now assert that there cannot be zero or multiple such elements. -
#275
e9ab55a
Thanks @petebacondarwin! - feat: add a link to create a github issue when there is an error.When a (non-yargs) error surfaces to the top level,
we know also show a link to Github to encourage the developer to report an issue. -
#286
b661dd0
Thanks @dependabot! - chore: Updatenode-fetch
to 3.1.1, runnpm audit fix
in rootThis commit addresses a secutity issue in
node-fetch
and updates it to 3.1.1. I also rannpm audit fix
in the root directory to address a similar issue with@changesets/get-github-info
. -
#249
9769bc3
Thanks @petebacondarwin! - Do not crash when processing environment configuration.Previously there were corner cases where the configuration might just crash.
These are now handled more cleanly with more appropriate warnings. -
#272
5fcef05
Thanks @petebacondarwin! - refactor: enable TypeScript strict-null checksThe codebase is now strict-null compliant and the CI checks will fail if a PR tries to introduce code that is not.
-
#277
6cc9dde
Thanks @petebacondarwin! - fix: align publishing sites asset keys with Wrangler 1- Use the same hashing strategy for asset keys (xxhash64)
- Include the full path (from cwd) in the asset key
- Match include and exclude patterns against full path (from cwd)
- Validate that the asset key is not over 512 bytes long
-
#270
522d1a6
Thanks @petebacondarwin! - fix: check actual asset file size, not base64 encoded sizePreviously we were checking whether the base64 encoded size of an asset was too large (>25MiB).
But base64 takes up more space than a normal file, so this was too aggressive. -
#263
402c77d
Thanks @jkriss! - fix: appropriately fail silently when the open browser command doesn't work -
#280
f19dde1
Thanks @petebacondarwin! - fix: skip unwanted files and directories when publishing site assetsIn keeping with Wrangler 1, we now skip node_modules and hidden files and directories.
An exception is made for
.well-known
. See https://datatracker.ietf.org/doc/html/rfc8615.The tests also prove that the asset uploader will walk directories in general.
-
#258
ba6fc9c
Thanks @petebacondarwin! - chore: add test-watch script to the wrangler workspaceWatch the files in the wrangler workspace, and run the tests when anything changes:
> npm run test-watch -w wrangler
This will also run all the tests in a single process (rather than in parallel shards) and will increase the test-timeout to 50 seconds, which is helpful when debugging.
[email protected]
Patch Changes
- #243
dc7ce83
Thanks @petebacondarwin! - refactor: update test code to pass strict-null checks
- #244
2e7a75f
Thanks @petebacondarwin! - refactor: update dev and publish commands to pass strict-null checks
-
#238
65f9904
Thanks @threepointone! - refactor: simplify and documentconfig.ts
This PR cleans up the type definition for the configuration object, as well as commenting the hell out of it. There are no duplicate definitions, and I annotated what I could.
@optional
means providing a value isn't mandatory@deprecated
means the field itself isn't necessary anymore in wrangler.toml@breaking
means the deprecation/optionality is a breaking change from wrangler 1@todo
means there's more work to be done (with details attached)@inherited
means the field is copied to all environments
- #247
edc4b53
Thanks @petebacondarwin! - refactor: update miscellaneous source files to pass strict-null checks
- #248
5806932
Thanks @petebacondarwin! - refactor: update proxy code to pass strict-null checks
- #241
5d423e9
Thanks @petebacondarwin! - chore: add common words to the cSpell config to prevent unwanted warnings
-
#257
00e51cd
Thanks @threepointone! - fix: description forkv:bulk delete <filename>
The description for the
kv:bulk delete
command was wrong, it was probably copied earlier from thekv:bulk put
command. This PR fixes the mistake.
-
#262
7494cf7
Thanks @threepointone! - fix: fixdev
andpublish
We introduced some bugs in recent PRs
- In #196, we broke being able to pass an entrypoint directly to the cli. In this PR, I just reverted that fix. I'll reopen #78 and we'll tackle it again later. (cc @jgentes)
- In #215, we broke being able to publish a script by just passing
--latest
or--compatibility-data
in the cli. This PR fixes that by reading the correct argument when choosing whether to publish. - In #247, we broke how we made requests by passing headers to requests. This PR reverts the changes made in
cfetch/internal.ts
. (cc @petebacondarwin) - In #244, we broke
dev
and it would immediately crash. This PR fixes the reference indev.tsx
that was breaking. (cc @petebacondarwin)
- #250
3c74a4a
Thanks @petebacondarwin! - refactor: update inspector code to ensure that strict-null types pass
[email protected]
[email protected]
Patch Changes
-
#231
18f8f65
Thanks @threepointone! - refactor: proxy/preview serverThis PR refactors how we setup the proxy server between the developer and the edge preview service during
wrangler dev
. Of note, we start the server immediately. We also buffer requests/streams and hold on to them, when starting/refreshing the token. This means a developer should never seeERR_CONNECTION_REFUSED
error page, or have an older worker respond after making a change to the code. And when the token does get refreshed, we flush said streams/requests with the newer values, making the iteration process a lot smoother and predictable. -
#239
0431093
Thanks @Warfields! - Added prompt for users to select an account. -
#225
b901bf7
Thanks @GregBrimble! - Fix the--watch
command forwrangler pages functions build
. -
#208
fe4b099
Thanks @petebacondarwin! - Remove explicitany
types from the codebaseThis change removes all use of
any
from the code and updates theno-explicit-any
eslint rule to be an error. -
#223
a979d55
Thanks @GregBrimble! - Add ability to compile a directory other thanfunctions
forwrangler pages functions build
. -
#216
e1c615f
Thanks @GregBrimble! - Ignore non-JS files when compiling Pages Functions -
#217
777f4d5
Thanks @GregBrimble! - Reverse execution order of Pages Functions middlewares -
#196
fc112d7
Thanks @jgentes! - allow specifying only "index" without extension or nothing at all for "wrangler dev" and "wrangler publish" -
#211
3bbfd4f
Thanks @GregBrimble! - Silently fail to auto-open the browser inwrangler pages dev
command when that errors out. -
#189
2f7e1b2
Thanks @petebacondarwin! - Refactor raw value extraction from Cloudflare APIsMost API responses are JSON of the form:
{ result, success, errors, messages, result_info }
where the
result
contains the actual response value.But some API responses only contain the result value.
This change refactors the client-side fetch API to allow callers to specify what kind of response they expect.
-
#202
e26781f
Thanks @threepointone! - Disable @typescript-lint/no-explicit-any eslint rule in pages code -
#214
79d0f2d
Thanks @threepointone! - rename--public
as--experimental-public
-
#215
41d4c3e
Thanks @threepointone! - Add--compatibility-date
,--compatibility-flags
,--latest
cli arguments todev
andpublish
.- A cli arg for adding a compatibility data, e.g
--compatibility_date 2022-01-05
- A shorthand
--latest
that setscompatibility_date
to today's date. Usage of this flag logs a warning. latest
is NOT a config field inwrangler.toml
.- In
dev
, when a compatibility date is not available in eitherwrangler.toml
or as a cli arg, then we default to--latest
. - In
publish
we error if a compatibility date is not available in eitherwrangler.toml
or as a cli arg. Usage of--latest
logs a warning. - We also accept compatibility flags via the cli, e.g:
--compatibility-flags formdata_parser_supports_files
- A cli arg for adding a compatibility data, e.g
-
#210
d381fed
Thanks @GregBrimble! - Exposewrangler pages functions build
command, which takes thefunctions
folder and compiles it into a single Worker.This was already done in
wrangler pages dev
, so this change just exposes this build command for use in our build image, or for people who want to do it themselves. -
#213
5e1222a
Thanks @GregBrimble! - Adds support for building a Worker from a folder of functions which isn't tied to the Pages platform.This lets developers use the same file-based routing system an simplified syntax when developing their own Workers!
-
#199
d9ecb70
Thanks @threepointone! - Refactor inspection/debugging code -- I've installed devtools-protocol, a convenient package that has the static types for the devtools protocol (duh) autogenerated from chrome's devtools codebase.
- We now log messages and exceptions into the terminal directly, so you don't have to open devtools to see those messages.
- Messages are now buffered until a devtools instance connects, so you won't lose any messages while devtools isn't connected.
- We don't lose the connection on making changes to the worker, removing the need for the kludgy hack on the devtools side (where we refresh the whole page when there's a change)
-
#189
2f7e1b2
Thanks @petebacondarwin! - Fix pagination handling of list requests to the Cloudflare APIWhen doing a list request to the API, the server may respond with only a single page of results.
In this case, it will also provide acursor
value in theresult_info
part of the response, which can be used to request the next page.
This change implements this on the client-side so that we get all the results by requesting further pages when there is a cursor. -
#220
6fc2276
Thanks @GregBrimble! - Add--live-reload
option towrangler pages dev
which automatically reloads HTML pages when a change is detected -
#223
a979d55
Thanks @GregBrimble! - Add--output-config-path
option towrangler pages functions build
which writes a config file describing thefunctions
folder.
[email protected]
Patch Changes
-
1fdcfe3: Subfolder Relative Pathing Fix issue #147
The filename from args didn't handle relative paths passed in from users with scripts in subfolders.
To handle the subfolder pathing a path.relative using cwd() to user input filepath to the filepath variable passed into Dev -
0330ecf: Adds the Content-Type header when serving assets with
wrangler pages dev
. It guesses the mime-type based on the asset's file extension. -
eaf40e8: Improve the error message for bad
kv:namespace delete
commands -
562d3ad: chore: enable eslint's no-shadow rule
-
9cef492: Adds the logic of @cloudflare/pages-functions-compiler directly into wrangler. This generates a Worker from a folder of functions.
Also adds support for sourcemaps and automatically watching dependents to trigger a re-build.
-
3426c13: fix: prevent
useWorker
's inifinite restarts duringdev
-
e9a1820: Upgrade
miniflare
to2.0.0-rc.5
-
7156e39: Pass bindings correctly to miniflare/child_process.spawn in
dev
, to prevent miniflare from erroring out on startup -
ce2d7d1: Add experimental support for worker-to-worker service bindings. This introduces a new field in configuration
experimental_services
, and serialises it when creating and uploading a worker definition. This is highly experimental, and doesn't work withwrangler dev
yet. -
072566f: Fixed KV getNamespaceId preview flag bug
-
5856807: Improve validation message for
kv:namespace create
Previously, if the user passed multiple positional arguments (which is invalid)
the error message would suggest that these should be grouped in quotes.
But this is also wrong, since a namespace binding name must not contain spaces. -
34ad323: Refactor the way we convert configurations for bindings all the way through to the API where we upload a worker definition. This commit preserves the configuration structure (mostly) until the point we serialise it for the API. This prevents the way we use duck typing to detect a binding type when uploading, makes the types a bit simpler, and makes it easier to add other types of bindings in the future (notably, the upcoming service bindings.)
[email protected]
Patch Changes
- 421f2e4: Update base version to 0.0.5, copy the README to packages/wrangler