this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

build(core): introduce script `dev` command

+392 -5
+19 -2
deno.json
··· 1 1 { 2 2 "tasks": { 3 - "dev": "deno run --unstable-broadcast-channel --allow-env --allow-net --allow-read --allow-write --watch main.ts dev", 4 - "build": "deno run --allow-env --allow-read --allow-write main.ts build" 3 + "build": "deno run --allow-env --allow-read --allow-write main.ts build", 4 + "dev": "deno run --allow-env --allow-run --allow-read --allow-write scripts/dev.ts", 5 + "dev:core": "deno run --unstable-broadcast-channel --allow-env --allow-net --allow-read --allow-write --watch main.ts dev ./slides.mdoc", 6 + "dev:runtime": "deno bundle --outdir dist --platform browser runtime/morkdeck.ts" 7 + }, 8 + "compilerOptions": { 9 + "lib": [ 10 + "dom", 11 + "dom.iterable", 12 + "dom.asynciterable", 13 + "deno.ns", 14 + "deno.unstable" 15 + ] 5 16 }, 6 17 "imports": { 7 18 "@cliffy/command": "jsr:@cliffy/command@1.0.0-rc.8", 19 + "@deno/esbuild-plugin": "jsr:@deno/esbuild-plugin@^1.1.5", 8 20 "@eta-dev/eta": "jsr:@eta-dev/eta@^3.5.0", 9 21 "@markdoc/markdoc": "https://esm.sh/@markdoc/markdoc@0.5.2", 10 22 "@std/assert": "jsr:@std/assert@1", 23 + "@std/async": "jsr:@std/async@^1.0.14", 24 + "@std/http": "jsr:@std/http@^1.0.20", 25 + "@std/path": "jsr:@std/path@^1.1.1", 26 + "esbuild": "npm:esbuild@^0.25.8", 11 27 "hast": "npm:@types/hast@^3.0.4", 12 28 "hast-util-is-element": "npm:hast-util-is-element@^3.0.0", 29 + "lit": "npm:lit@^3.3.1", 13 30 "shiki": "npm:shiki@^3.8.1" 14 31 } 15 32 }
+273 -3
deno.lock
··· 5 5 "jsr:@cliffy/flags@1.0.0-rc.8": "1.0.0-rc.8", 6 6 "jsr:@cliffy/internal@1.0.0-rc.8": "1.0.0-rc.8", 7 7 "jsr:@cliffy/table@1.0.0-rc.8": "1.0.0-rc.8", 8 + "jsr:@deno/esbuild-plugin@^1.1.5": "1.1.5", 9 + "jsr:@deno/loader@~0.3.3": "0.3.4", 8 10 "jsr:@eta-dev/eta@^3.5.0": "3.5.0", 9 11 "jsr:@std/assert@1": "1.0.13", 12 + "jsr:@std/async@^1.0.14": "1.0.14", 13 + "jsr:@std/cli@^1.0.21": "1.0.21", 14 + "jsr:@std/encoding@^1.0.10": "1.0.10", 15 + "jsr:@std/fmt@^1.0.8": "1.0.8", 10 16 "jsr:@std/fmt@~1.0.2": "1.0.8", 17 + "jsr:@std/fs@^1.0.19": "1.0.19", 18 + "jsr:@std/html@^1.0.4": "1.0.4", 19 + "jsr:@std/http@^1.0.20": "1.0.20", 11 20 "jsr:@std/internal@^1.0.6": "1.0.9", 21 + "jsr:@std/internal@^1.0.9": "1.0.9", 22 + "jsr:@std/media-types@^1.1.0": "1.1.0", 23 + "jsr:@std/net@^1.0.4": "1.0.4", 24 + "jsr:@std/path@^1.1.1": "1.1.1", 25 + "jsr:@std/streams@^1.0.10": "1.0.10", 12 26 "jsr:@std/text@~1.0.7": "1.0.15", 13 27 "npm:@markdoc/markdoc@*": "0.5.2", 14 28 "npm:@types/hast@^3.0.4": "3.0.4", 15 29 "npm:@types/node@*": "22.15.15", 30 + "npm:esbuild@~0.25.8": "0.25.8", 16 31 "npm:hast-util-is-element@3": "3.0.0", 32 + "npm:lit@^3.3.1": "3.3.1", 17 33 "npm:shiki@^3.8.1": "3.8.1" 18 34 }, 19 35 "jsr": { ··· 23 39 "jsr:@cliffy/flags", 24 40 "jsr:@cliffy/internal", 25 41 "jsr:@cliffy/table", 26 - "jsr:@std/fmt", 42 + "jsr:@std/fmt@~1.0.2", 27 43 "jsr:@std/text" 28 44 ] 29 45 }, ··· 39 55 "@cliffy/table@1.0.0-rc.8": { 40 56 "integrity": "8bbcdc2ba5e0061b4b13810a24e6f5c6ab19c09f0cce9eb691ccd76c7c6c9db5", 41 57 "dependencies": [ 42 - "jsr:@std/fmt" 58 + "jsr:@std/fmt@~1.0.2" 59 + ] 60 + }, 61 + "@deno/esbuild-plugin@1.1.5": { 62 + "integrity": "c9cde95990b97802a0da6c73c26ab4a48f30d286818845e365dddcd8297abd7d", 63 + "dependencies": [ 64 + "jsr:@deno/loader", 65 + "jsr:@std/path" 43 66 ] 44 67 }, 68 + "@deno/loader@0.3.4": { 69 + "integrity": "c56003bc7027606301c3fe62704723b207a9e508c9fb154cf5131abb9d4d2673" 70 + }, 45 71 "@eta-dev/eta@3.5.0": { 46 72 "integrity": "6b70827efc14c7cbf08498ac7a922ecab003641caf3852a6cb5b1b12ee58fb37" 47 73 }, 48 74 "@std/assert@1.0.13": { 49 75 "integrity": "ae0d31e41919b12c656c742b22522c32fb26ed0cba32975cb0de2a273cb68b29", 50 76 "dependencies": [ 51 - "jsr:@std/internal" 77 + "jsr:@std/internal@^1.0.6" 52 78 ] 53 79 }, 80 + "@std/async@1.0.14": { 81 + "integrity": "62e954a418652c704d37563a3e54a37d4cf0268a9dcaeac1660cc652880b5326" 82 + }, 83 + "@std/cli@1.0.21": { 84 + "integrity": "cd25b050bdf6282e321854e3822bee624f07aca7636a3a76d95f77a3a919ca2a" 85 + }, 86 + "@std/encoding@1.0.10": { 87 + "integrity": "8783c6384a2d13abd5e9e87a7ae0520a30e9f56aeeaa3bdf910a3eaaf5c811a1" 88 + }, 54 89 "@std/fmt@1.0.8": { 55 90 "integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7" 56 91 }, 92 + "@std/fs@1.0.19": { 93 + "integrity": "051968c2b1eae4d2ea9f79a08a3845740ef6af10356aff43d3e2ef11ed09fb06" 94 + }, 95 + "@std/html@1.0.4": { 96 + "integrity": "eff3497c08164e6ada49b7f81a28b5108087033823153d065e3f89467dd3d50e" 97 + }, 98 + "@std/http@1.0.20": { 99 + "integrity": "b5cc33fc001bccce65ed4c51815668c9891c69ccd908295997e983d8f56070a1", 100 + "dependencies": [ 101 + "jsr:@std/cli", 102 + "jsr:@std/encoding", 103 + "jsr:@std/fmt@^1.0.8", 104 + "jsr:@std/fs", 105 + "jsr:@std/html", 106 + "jsr:@std/media-types", 107 + "jsr:@std/net", 108 + "jsr:@std/path", 109 + "jsr:@std/streams" 110 + ] 111 + }, 57 112 "@std/internal@1.0.9": { 58 113 "integrity": "bdfb97f83e4db7a13e8faab26fb1958d1b80cc64366501af78a0aee151696eb8" 59 114 }, 115 + "@std/media-types@1.1.0": { 116 + "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" 117 + }, 118 + "@std/net@1.0.4": { 119 + "integrity": "2f403b455ebbccf83d8a027d29c5a9e3a2452fea39bb2da7f2c04af09c8bc852" 120 + }, 121 + "@std/path@1.1.1": { 122 + "integrity": "fe00026bd3a7e6a27f73709b83c607798be40e20c81dde655ce34052fd82ec76", 123 + "dependencies": [ 124 + "jsr:@std/internal@^1.0.9" 125 + ] 126 + }, 127 + "@std/streams@1.0.10": { 128 + "integrity": "75c0b1431873cd0d8b3d679015220204d36d3c7420d93b60acfc379eb0dc30af" 129 + }, 60 130 "@std/text@1.0.15": { 61 131 "integrity": "91f5cc1e12779a3d95f1be34e763f9c28a75a078b7360e6fcaef0d8d9b1e3e7f" 62 132 } 63 133 }, 64 134 "npm": { 135 + "@esbuild/aix-ppc64@0.25.8": { 136 + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", 137 + "os": ["aix"], 138 + "cpu": ["ppc64"] 139 + }, 140 + "@esbuild/android-arm64@0.25.8": { 141 + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", 142 + "os": ["android"], 143 + "cpu": ["arm64"] 144 + }, 145 + "@esbuild/android-arm@0.25.8": { 146 + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", 147 + "os": ["android"], 148 + "cpu": ["arm"] 149 + }, 150 + "@esbuild/android-x64@0.25.8": { 151 + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", 152 + "os": ["android"], 153 + "cpu": ["x64"] 154 + }, 155 + "@esbuild/darwin-arm64@0.25.8": { 156 + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", 157 + "os": ["darwin"], 158 + "cpu": ["arm64"] 159 + }, 160 + "@esbuild/darwin-x64@0.25.8": { 161 + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", 162 + "os": ["darwin"], 163 + "cpu": ["x64"] 164 + }, 165 + "@esbuild/freebsd-arm64@0.25.8": { 166 + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", 167 + "os": ["freebsd"], 168 + "cpu": ["arm64"] 169 + }, 170 + "@esbuild/freebsd-x64@0.25.8": { 171 + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", 172 + "os": ["freebsd"], 173 + "cpu": ["x64"] 174 + }, 175 + "@esbuild/linux-arm64@0.25.8": { 176 + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", 177 + "os": ["linux"], 178 + "cpu": ["arm64"] 179 + }, 180 + "@esbuild/linux-arm@0.25.8": { 181 + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", 182 + "os": ["linux"], 183 + "cpu": ["arm"] 184 + }, 185 + "@esbuild/linux-ia32@0.25.8": { 186 + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", 187 + "os": ["linux"], 188 + "cpu": ["ia32"] 189 + }, 190 + "@esbuild/linux-loong64@0.25.8": { 191 + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", 192 + "os": ["linux"], 193 + "cpu": ["loong64"] 194 + }, 195 + "@esbuild/linux-mips64el@0.25.8": { 196 + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", 197 + "os": ["linux"], 198 + "cpu": ["mips64el"] 199 + }, 200 + "@esbuild/linux-ppc64@0.25.8": { 201 + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", 202 + "os": ["linux"], 203 + "cpu": ["ppc64"] 204 + }, 205 + "@esbuild/linux-riscv64@0.25.8": { 206 + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", 207 + "os": ["linux"], 208 + "cpu": ["riscv64"] 209 + }, 210 + "@esbuild/linux-s390x@0.25.8": { 211 + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", 212 + "os": ["linux"], 213 + "cpu": ["s390x"] 214 + }, 215 + "@esbuild/linux-x64@0.25.8": { 216 + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", 217 + "os": ["linux"], 218 + "cpu": ["x64"] 219 + }, 220 + "@esbuild/netbsd-arm64@0.25.8": { 221 + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", 222 + "os": ["netbsd"], 223 + "cpu": ["arm64"] 224 + }, 225 + "@esbuild/netbsd-x64@0.25.8": { 226 + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", 227 + "os": ["netbsd"], 228 + "cpu": ["x64"] 229 + }, 230 + "@esbuild/openbsd-arm64@0.25.8": { 231 + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", 232 + "os": ["openbsd"], 233 + "cpu": ["arm64"] 234 + }, 235 + "@esbuild/openbsd-x64@0.25.8": { 236 + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", 237 + "os": ["openbsd"], 238 + "cpu": ["x64"] 239 + }, 240 + "@esbuild/openharmony-arm64@0.25.8": { 241 + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", 242 + "os": ["openharmony"], 243 + "cpu": ["arm64"] 244 + }, 245 + "@esbuild/sunos-x64@0.25.8": { 246 + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", 247 + "os": ["sunos"], 248 + "cpu": ["x64"] 249 + }, 250 + "@esbuild/win32-arm64@0.25.8": { 251 + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", 252 + "os": ["win32"], 253 + "cpu": ["arm64"] 254 + }, 255 + "@esbuild/win32-ia32@0.25.8": { 256 + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", 257 + "os": ["win32"], 258 + "cpu": ["ia32"] 259 + }, 260 + "@esbuild/win32-x64@0.25.8": { 261 + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", 262 + "os": ["win32"], 263 + "cpu": ["x64"] 264 + }, 265 + "@lit-labs/ssr-dom-shim@1.4.0": { 266 + "integrity": "sha512-ficsEARKnmmW5njugNYKipTm4SFnbik7CXtoencDZzmzo/dQ+2Q0bgkzJuoJP20Aj0F+izzJjOqsnkd6F/o1bw==" 267 + }, 268 + "@lit/reactive-element@2.1.1": { 269 + "integrity": "sha512-N+dm5PAYdQ8e6UlywyyrgI2t++wFGXfHx+dSJ1oBrg6FAxUj40jId++EaRm80MKX5JnlH1sBsyZ5h0bcZKemCg==", 270 + "dependencies": [ 271 + "@lit-labs/ssr-dom-shim" 272 + ] 273 + }, 65 274 "@markdoc/markdoc@0.5.2": { 66 275 "integrity": "sha512-clrqWpJ3+S8PXigRE+zBIs6LVZYXaJ7JTDFq1CcCWc4xpoB2kz+9qRUQQ4vXtLUjQ8ige1BGdMruV6gM/2gloA==", 67 276 "optionalDependencies": [ ··· 176 385 "dequal" 177 386 ] 178 387 }, 388 + "esbuild@0.25.8": { 389 + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", 390 + "optionalDependencies": [ 391 + "@esbuild/aix-ppc64", 392 + "@esbuild/android-arm", 393 + "@esbuild/android-arm64", 394 + "@esbuild/android-x64", 395 + "@esbuild/darwin-arm64", 396 + "@esbuild/darwin-x64", 397 + "@esbuild/freebsd-arm64", 398 + "@esbuild/freebsd-x64", 399 + "@esbuild/linux-arm", 400 + "@esbuild/linux-arm64", 401 + "@esbuild/linux-ia32", 402 + "@esbuild/linux-loong64", 403 + "@esbuild/linux-mips64el", 404 + "@esbuild/linux-ppc64", 405 + "@esbuild/linux-riscv64", 406 + "@esbuild/linux-s390x", 407 + "@esbuild/linux-x64", 408 + "@esbuild/netbsd-arm64", 409 + "@esbuild/netbsd-x64", 410 + "@esbuild/openbsd-arm64", 411 + "@esbuild/openbsd-x64", 412 + "@esbuild/openharmony-arm64", 413 + "@esbuild/sunos-x64", 414 + "@esbuild/win32-arm64", 415 + "@esbuild/win32-ia32", 416 + "@esbuild/win32-x64" 417 + ], 418 + "scripts": true, 419 + "bin": true 420 + }, 179 421 "hast-util-is-element@3.0.0": { 180 422 "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", 181 423 "dependencies": [ ··· 206 448 }, 207 449 "html-void-elements@3.0.0": { 208 450 "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==" 451 + }, 452 + "lit-element@4.2.1": { 453 + "integrity": "sha512-WGAWRGzirAgyphK2urmYOV72tlvnxw7YfyLDgQ+OZnM9vQQBQnumQ7jUJe6unEzwGU3ahFOjuz1iz1jjrpCPuw==", 454 + "dependencies": [ 455 + "@lit-labs/ssr-dom-shim", 456 + "@lit/reactive-element", 457 + "lit-html" 458 + ] 459 + }, 460 + "lit-html@3.3.1": { 461 + "integrity": "sha512-S9hbyDu/vs1qNrithiNyeyv64c9yqiW9l+DBgI18fL+MTvOtWoFR0FWiyq1TxaYef5wNlpEmzlXoBlZEO+WjoA==", 462 + "dependencies": [ 463 + "@types/trusted-types" 464 + ] 465 + }, 466 + "lit@3.3.1": { 467 + "integrity": "sha512-Ksr/8L3PTapbdXJCk+EJVB78jDodUMaP54gD24W186zGRARvwrsPfS60wae/SSCTCNZVPd1chXqio1qHQmu4NA==", 468 + "dependencies": [ 469 + "@lit/reactive-element", 470 + "lit-element", 471 + "lit-html" 472 + ] 209 473 }, 210 474 "mdast-util-to-hast@13.2.0": { 211 475 "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", ··· 365 629 "workspace": { 366 630 "dependencies": [ 367 631 "jsr:@cliffy/command@1.0.0-rc.8", 632 + "jsr:@deno/esbuild-plugin@^1.1.5", 368 633 "jsr:@eta-dev/eta@^3.5.0", 369 634 "jsr:@std/assert@1", 635 + "jsr:@std/async@^1.0.14", 636 + "jsr:@std/http@^1.0.20", 637 + "jsr:@std/path@^1.1.1", 370 638 "npm:@types/hast@^3.0.4", 639 + "npm:esbuild@~0.25.8", 371 640 "npm:hast-util-is-element@3", 641 + "npm:lit@^3.3.1", 372 642 "npm:shiki@^3.8.1" 373 643 ] 374 644 }
+100
scripts/dev.ts
··· 1 + import * as esbuild from "esbuild"; 2 + import { globToRegExp } from "@std/path"; 3 + import { denoPlugin } from "@deno/esbuild-plugin"; 4 + import { debounce } from "@std/async/debounce"; 5 + 6 + const devCommand = new Deno.Command(Deno.execPath(), { 7 + args: [ 8 + "run", 9 + "--unstable-broadcast-channel", 10 + "--allow-env", 11 + "--allow-read", 12 + "--allow-net", 13 + "main.ts", 14 + "dev", 15 + "./slides.mdoc", 16 + ], 17 + }); 18 + 19 + // Watch esbuild watching `runtime/` 20 + async function rebuildRuntime() { 21 + const context = await esbuild.context({ 22 + entryPoints: ["runtime/morkdeck.ts"], 23 + outfile: "dist/morkdeck.js", 24 + bundle: true, 25 + plugins: [denoPlugin()], 26 + }); 27 + 28 + await context.rebuild(); 29 + 30 + return context; 31 + } 32 + 33 + async function dev() { 34 + const watcher = Deno.watchFs("."); 35 + 36 + // Runtime goes first to Morkdeck can serve the output 37 + const ctx = await rebuildRuntime(); 38 + let child = devCommand.spawn(); 39 + 40 + const runtimeGlob = globToRegExp("**/runtime/**/*.ts"); 41 + const rebuild = debounce(async () => { 42 + performance.mark("rebuild-start"); 43 + await ctx.rebuild(); 44 + performance.mark("rebuild-finish"); 45 + const { duration } = performance.measure( 46 + "rebuild-duration", 47 + "rebuild-start", 48 + "rebuild-finish", 49 + ); 50 + 51 + console.log( 52 + `runtime: change detected. rebuilt in ${duration.toFixed(0)}ms`, 53 + ); 54 + }, 150); 55 + 56 + const coreGlob = globToRegExp("**/{core,server,cli}/**/*.ts"); 57 + const restart = debounce(() => { 58 + performance.mark("restart-start"); 59 + child.kill(); 60 + child = devCommand.spawn(); 61 + performance.mark("restart-finish"); 62 + const { duration } = performance.measure( 63 + "restart-duration", 64 + "restart-start", 65 + "restart-finish", 66 + ); 67 + 68 + console.log( 69 + ` core: change detected. restarted in ${duration.toFixed(0)}ms`, 70 + ); 71 + }, 150); 72 + 73 + async function handleEvents() { 74 + for await (const e of watcher) { 75 + if (e.kind === "any" || e.kind === "access" || e.kind === "other") { 76 + continue; 77 + } 78 + 79 + if (e.paths.some((s) => runtimeGlob.test(s))) { 80 + rebuild(); 81 + } 82 + 83 + if (e.paths.some((s) => coreGlob.test(s))) { 84 + restart(); 85 + } 86 + } 87 + } 88 + 89 + handleEvents(); 90 + 91 + Deno.addSignalListener("SIGINT", async () => { 92 + await Promise.all([ 93 + watcher.close(), 94 + child.kill(), 95 + ctx.dispose(), 96 + ]); 97 + }); 98 + } 99 + 100 + if (import.meta.main) await dev();