From 1c7de8df383a0a5a81d5c1592bf7ae9a34c00909 Mon Sep 17 00:00:00 2001 From: Taras Mankovski <74687+taras@users.noreply.github.com> Date: Fri, 2 Oct 2026 23:00:18 -0400 Subject: [PATCH 1/3] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Upgrade=20www=20to=20r?= =?UTF-8?q?evolution=200.9=20and=20Effection=20v4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Revolution 0.9 is the first release built against Effection v4, so the two move together. It is published to npm, which retires the last deno.land/x imports the site had: revolution itself, and a private `std@0.203.0` module aliased as `_posixNormalize`, now the public `@std/path/posix/normalize`. The site's own code needs no changes. It uses no `action()` and never passes a promise to `call()`, so nothing it does changed meaning in v4. The @effectionx packages move from jsr to npm because only the npm builds accept `effection@^4`; their jsr builds are pinned to ^3. `@effectionx/watch` is dropped. Its jsr build is pinned to ^3 and picks up the site's effection through the import map, so it now fails on startup, and its npm build publishes no `bin` to run instead. Deno's own `--watch` restarts the site on a source change, which is all the task was asking for. --- www/context/url.ts | 2 +- www/deno.json | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/www/context/url.ts b/www/context/url.ts index 5f83bf1dc..dc2499113 100644 --- a/www/context/url.ts +++ b/www/context/url.ts @@ -1,5 +1,5 @@ import { type Operation } from "effection"; -import { posixNormalize } from "_posixNormalize"; +import { normalize as posixNormalize } from "@std/path/posix/normalize"; import { createApi } from "@effectionx/context-api"; import { CurrentRequest } from "./request.ts"; diff --git a/www/deno.json b/www/deno.json index a3556e421..e056e3032 100644 --- a/www/deno.json +++ b/www/deno.json @@ -1,6 +1,6 @@ { "tasks": { - "dev": "deno run -A @effectionx/watch deno run -A main.tsx", + "dev": "deno run -A --watch main.tsx", "staticalize": "deno run -A npm:staticalize@0.3.1 --site http://localhost:8000 --output=built --base=http://localhost:8000", "test": "deno test --allow-run --allow-write --allow-read --allow-env", "smoke": "deno test --allow-net --allow-env tests/markdown-routes.ts" @@ -40,7 +40,6 @@ "jsxImportSource": "revolution" }, "imports": { - "@effectionx/watch": "jsr:@effectionx/watch@^0.3.1", "@frontside/configliere": "jsr:@frontside/configliere@^0.6.0", "@jsdevtools/rehype-toc": "npm:@jsdevtools/rehype-toc@3.0.2", "@libs/xml": "jsr:@libs/xml@^7.0.3", @@ -49,10 +48,10 @@ "@std/encoding": "jsr:@std/encoding@^1.0.10", "@std/http": "jsr:@std/http@^1.0.22", "@types/hast": "npm:@types/hast@3.0.4", - "effection": "npm:effection@^3.6.1", + "effection": "npm:effection@^4", "@effectionx/context-api": "npm:@effectionx/context-api@^0.6.0", - "@effectionx/deno-deploy": "jsr:@effectionx/deno-deploy@^0.3.1", - "@effectionx/process": "jsr:@effectionx/process@^0.6.2", + "@effectionx/deno-deploy": "npm:@effectionx/deno-deploy@^0.3.1", + "@effectionx/process": "npm:@effectionx/process@^0.8.3", "hast": "npm:hast@^1.0.0", "hast-util-from-html": "npm:hast-util-from-html@2.0.3", "hast-util-shift-heading": "npm:hast-util-shift-heading@4.0.0", @@ -76,8 +75,8 @@ "remark-parse": "npm:remark-parse@11.0.0", "remark-rehype": "npm:remark-rehype@11.1.1", "unified": "npm:unified@11.0.4", - "revolution": "https://deno.land/x/revolution@0.6.1/mod.ts", - "revolution/jsx-runtime": "https://deno.land/x/revolution@0.6.1/jsx-runtime.ts", + "revolution": "npm:@frontside/revolution@^0.9.1", + "revolution/jsx-runtime": "npm:@frontside/revolution@^0.9.1/jsx-runtime", "@tailwindcss/typography": "npm:@tailwindcss/typography@^0.5.16", "tailwindcss": "npm:tailwindcss@^4.1.0", "semver": "npm:semver@7.6.3", @@ -86,12 +85,12 @@ "git-url-parse": "npm:git-url-parse@16.1.0", "@std/fs": "jsr:@std/fs@1", "@std/path": "jsr:@std/path@1", + "@std/path/posix/normalize": "jsr:@std/path@1/posix/normalize", "@std/yaml": "jsr:@std/yaml@1", "@std/testing": "jsr:@std/testing@1", "md5": "npm:md5@^2.3.0", "expect": "jsr:@std/expect@^1", "arktype": "npm:arktype@^2", - "_posixNormalize": "https://deno.land/std@0.203.0/path/_normalize.ts", "hast-util-select": "npm:hast-util-select@6.0.1", "unist-util-visit": "npm:unist-util-visit@5.0.0", "vfile": "npm:vfile@6.0.3", From 5167fa00854beec67b77a96ff59ef14fc71ccd77 Mon Sep 17 00:00:00 2001 From: Taras Mankovski <74687+taras@users.noreply.github.com> Date: Fri, 2 Oct 2026 23:11:13 -0400 Subject: [PATCH 2/3] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Keep=20@effectionx/wat?= =?UTF-8?q?ch,=20on=20its=20npm=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The jsr build is pinned to effection ^3 and resolves the site's effection through the import map, so it fails on startup against v4. The npm build accepts ^3 || ^4, but publishes no `bin`, so `deno run -A @effectionx/watch` cannot find anything to run. Its CLI is the package's main export, so importing it runs it. A two line module does that, and the task invokes the module. --- www/deno.json | 3 ++- www/tasks/watch.ts | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 www/tasks/watch.ts diff --git a/www/deno.json b/www/deno.json index e056e3032..9f68c6ef3 100644 --- a/www/deno.json +++ b/www/deno.json @@ -1,6 +1,6 @@ { "tasks": { - "dev": "deno run -A --watch main.tsx", + "dev": "deno run -A tasks/watch.ts deno run -A main.tsx", "staticalize": "deno run -A npm:staticalize@0.3.1 --site http://localhost:8000 --output=built --base=http://localhost:8000", "test": "deno test --allow-run --allow-write --allow-read --allow-env", "smoke": "deno test --allow-net --allow-env tests/markdown-routes.ts" @@ -40,6 +40,7 @@ "jsxImportSource": "revolution" }, "imports": { + "@effectionx/watch": "npm:@effectionx/watch@^0.4.7", "@frontside/configliere": "jsr:@frontside/configliere@^0.6.0", "@jsdevtools/rehype-toc": "npm:@jsdevtools/rehype-toc@3.0.2", "@libs/xml": "jsr:@libs/xml@^7.0.3", diff --git a/www/tasks/watch.ts b/www/tasks/watch.ts new file mode 100644 index 000000000..f1fb8bb94 --- /dev/null +++ b/www/tasks/watch.ts @@ -0,0 +1,2 @@ +// @effectionx/watch publishes no `bin`, so its CLI entry is run by importing it. +import "@effectionx/watch"; From 98d091ac5aa9d0e265cecc250dfb8dca38dc33c2 Mon Sep 17 00:00:00 2001 From: Taras Mankovski <74687+taras@users.noreply.github.com> Date: Sat, 3 Oct 2026 08:08:40 -0400 Subject: [PATCH 3/3] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Run=20the=20watch=20CL?= =?UTF-8?q?I=20directly=20again?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @effectionx/watch 0.4.8 declares a `bin`, so the task can invoke the package instead of a module that imports it for its side effects. --- www/deno.json | 4 ++-- www/tasks/watch.ts | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) delete mode 100644 www/tasks/watch.ts diff --git a/www/deno.json b/www/deno.json index 9f68c6ef3..760cfd468 100644 --- a/www/deno.json +++ b/www/deno.json @@ -1,6 +1,6 @@ { "tasks": { - "dev": "deno run -A tasks/watch.ts deno run -A main.tsx", + "dev": "deno run -A @effectionx/watch deno run -A main.tsx", "staticalize": "deno run -A npm:staticalize@0.3.1 --site http://localhost:8000 --output=built --base=http://localhost:8000", "test": "deno test --allow-run --allow-write --allow-read --allow-env", "smoke": "deno test --allow-net --allow-env tests/markdown-routes.ts" @@ -40,7 +40,7 @@ "jsxImportSource": "revolution" }, "imports": { - "@effectionx/watch": "npm:@effectionx/watch@^0.4.7", + "@effectionx/watch": "npm:@effectionx/watch@^0.4.8", "@frontside/configliere": "jsr:@frontside/configliere@^0.6.0", "@jsdevtools/rehype-toc": "npm:@jsdevtools/rehype-toc@3.0.2", "@libs/xml": "jsr:@libs/xml@^7.0.3", diff --git a/www/tasks/watch.ts b/www/tasks/watch.ts deleted file mode 100644 index f1fb8bb94..000000000 --- a/www/tasks/watch.ts +++ /dev/null @@ -1,2 +0,0 @@ -// @effectionx/watch publishes no `bin`, so its CLI entry is run by importing it. -import "@effectionx/watch";