fresh v1.2

fresh v1.2がリリースされました。 この記事では主な変更点などについて解説します。 このリリースに合わせて、PreactのメンテナーであるMarvin Hagemeister氏がDeno社に入社されたことが発表されています。これからMarvin Hagemeister氏を中心に、フルタイムでFreshの開発が進められていくことが計画されているようです。 アップデートについて freshはアップデート用のスクリプト(update.ts)を提供しています。 以下のコマンドを実行すると、v1.2へアップデートすることができます。 $ deno run -A -r https://fresh.deno.dev/update . また、このバージョン以降からinit.ts (freshのプロジェクト初期化用のスクリプト)で作成したプロジェクトでは、deno task updateでもfreshをアップデートすることができます。 Islandコンポーネントに関する改善 props.childrenのサポート Islandコンポーネントでprops.childrenがサポートされました。 import type { PageProps } from "$fresh/server.ts"; import Collapse from "../islands/Collapse.tsx"; function Content() { return <div>foobar</div>; } export default function Index(props: PageProps) { return ( <Collapse> <Content /> </Collapse> ); } またIslandコンポーネントをネストすることもできます。 export default function Index(props: PageProps) { return ( <Collapse> <Collapse> <Content /> </Collapse> </Collapse> ); } 制限として、children以外のpropsにコンポーネントを渡すことはまだサポートされていません。...

June 18, 2023

2023/05/29〜2023/06/04の最新情報

Deno v1.34.1 Deno v1.34.1がリリースされました。 deno compile DENO_DIRが読み取り専用であった際に、deno compileで作ったバイナリがうまく動かない問題が修正されました。 npmパッケージ内に含まれるファイルを読む際に、deno compileに--allow-readを指定しているにも関わらず、バイナリの実行時に再度--allow-readが求められる問題が修正されました。 Node-API napi_get_cb_infoでdata引数が適切に取り扱われるように改善されました。 Deno.createHttpClient オプションとしてhttp2: falseとhttp1: trueの両方が指定された場合に、ALPNでh2が指定されないように修正されました。 denoland/deno_kv_oauth Deno公式で、Deno KVをベースにOAuthのアクセストークンやセッションなどの管理を行ってくれるモジュールが公開されています。 https://github.com/denoland/deno_kv_oauth ロードマップについては、以下で公開されています。 https://github.com/denoland/deno_kv_oauth/issues/1 window変数の削除について Deno 2.0でwindow変数の削除が検討されているようです。 remove window variable #13367 背景としては、既存のライブラリにはwindow変数の有無に応じて現在の環境(ブラウザ or Node.js)を判断しているものが多く存在し、Denoでそういったライブラリを利用する際に、意図せずしてブラウザであると判定されてしまうことを防ぎたい、という狙いがあるようです。 次のマイナーリリースであるDeno 1.35では、window変数が参照された際に警告を表示する変更を入れることが検討されているようです。 feat(runtime): log deprecated message on first usage of window global #19319 esbuild_deno_loader v0.8.0 esbuild_deno_loader v0.8.0がリリースされました。 npm:URLやnode_modulesのサポートが行われています。 "native"ローダーでは、通常のDenoにおけるnpm:などと同様に、依存するnpmパッケージはDenoのグローバルキャッシュ(DENO_DIR)から読み込みやダウンロードなどが行われるようです。 ただし、Deno Deployなどでも動作する"portable"ローダーでは、--node-modules-dirなどによって事前にnode_modulesディレクトリが作成されていないと動作しないなどの制限があるようです。 freshでのnpm:サポート またマージはされていませんが、esbuild_deno_loader v0.8.0を活用してfreshにnpm:のサポートを入れる対応が進められているようです。 feat: limited npm: specifier support #1245

June 4, 2023

2023/05/22〜2023/05/28の最新情報

Deno v1.34 Deno v1.34がリリースされました。 以下に内容をまとめたため、よろしければそちらを参照いただければと思います。 Deno v1.34 deno_std v0.189.0 deno_std v0.189.0がリリースされました。 std/async/retry.ts retry()の内部でジッターが適用されるようになりました。 std/collections/group_by.ts groupBy()でIterable<T>型の値がサポートされました。 import { groupBy } from "https://deno.land/std@0.189.0/collections/group_by.ts"; groupBy( new Set([1, 2, 3, 4, 5]), (x) => x % 2 === 0 ? "even" : "odd", ); // Output: { odd: [ 1, 3, 5 ], even: [ 2, 4 ] } また、selector関数が引数として現在処理中の要素のindexを受け取るように変更されています。 v0.189.0 v0.188.0 Deno DeployでNode.js組み込みモジュールがサポート Deno DeployでNode.js組み込みモジュールがサポートされたようです。...

May 28, 2023

2023/05/08〜2023/05/14の最新情報

Deno v1.33.3 Deno v1.33.3がリリースされました。 deno compileでnpmパッケージがサポート deno compileでnpm:やnode:URLに依存したアプリケーションの実行可能ファイルの生成がサポートされました。 利用する際は、現時点では--unstableの指定が必要です。 import chalk from "npm:chalk@5.2.0"; console.log(chalk.green.bold("Hello")); $ deno compile --unstable --output=example main.js $ ./example また、deno compileによるコンパイル対象として、直接npmパッケージを指定することもできるようです。 $ deno compile --unstable --output=cowsay npm:cowsay@1.5.0 $ ./cowsay hello Deno.serve() レスポンスの自動的な圧縮が実装されました。 現時点ではgzipのみがサポートされています。(Content-Encoding: gzip) それ以外には、--watchオプションと併用した際の安定性の改善が実施されています。 Deno.Command Deno.ChildProcess#killが、システムの全実行可能ファイルに対する--allow-run権限を要求する問題が修正されました。 v1.33.2までは、例えば--allow-run=redis-cliのように特定のバイナリのみを許可している場合、Deno.ChildProcess#killで権限エラーが発生する問題があったため、このリリースで修正されています。 deno lsp documentPreloadLimitオプションが追加されました。 これにより、deno lspがプリロードするドキュメント数をカスタマイズできます。 vscode_denoでは、v3.18.0でdocumentPreloadLimitオプションのサポートが入っているようです。 その他 Deno.seekSyncとDeno.seekの型定義が統一されていなかった問題が修正されました。(#19060) node:module: Module.runMain()が実装されました。(ts-nodeで使用されているようです) リダイレクトするリモートモジュールへの依存があった場合、deno vendorの実行時にパニックする問題が修正されました。 Deno.UnsafeCallbackが使用されていると、deno testがハングすることのある問題が修正されました。 deno_std v0.187.0 deno_std v0.187.0がリリースされました。 std/regexpが追加 新しいモジュールとしてstd/regexpが追加されました。 現状では、正規表現のメタ文字をエスケープするための機能が提供されています。 import { escape } from "https://deno....

May 14, 2023

2023/04/10〜2023/04/16の最新情報

Deno v1.32.4 Deno v1.32.4がリリースされました。 Deno v1.32.2以降、Freshが動かなくなっていた問題が解消されています。(#18572) Node.js互換性 node:cryptoで以下のAPIが実装されています: X509Certificate generateKey hkdf 特定のnpmパッケージのバージョンを更新しようとすると、以下のエラーが起きる問題が解消されています。 Could not find npm package '<package>’ matching <version>. Try retrieving the latest npm package information by running with --reload deno cache --reload npm:<package>を実行すると、依存している全npmパッケージが再インストールされる問題が解消されています。 KV Deno.Kvの各メソッドで、キーに配列以外の値を渡せないように挙動が変更されました。 例えば、今まではkv.get("key")のような呼び方ができましたが、今後はkv.get(["key"])のように呼ぶ必要あります。 Cache API プログラムの実行をまたいで同一のリクエストに対して複数回Cache.putを呼んだ際に、値がうまく上書きされなくなる問題が修正されています (#18649) deno_std v0.183.0 deno_std v0.183.0がリリースされました。 std/encoding/varint/の削除 非推奨化されていたstd/encoding/varint/が削除されました。 deno_std v0.179.0でstd/encoding/varint.tsにTypeScriptベースのAPIが追加されているため、今後はこれらの使用が推奨されます。 std/csv 破壊的変更 CsvStreamがCsvParseStreamへリネームされています。(CsvStreamはまだ削除はされていないものの、非推奨化されています) この変更はJsonParseStream/JsonStringifyStreamを提供するstd/jsonとの一貫性の向上を目的としています。 parse()などのAPIの型定義が改善されています。 具体的には、以下のように型推論が効くように変更されています。 import { parse } from "https://deno.land/std@0.183.0/csv/parse.ts"; const records: Array<Record<"id" | "name", string>> = parse("1,a\n2,b", { columns: ["id", "name"], }); std/http/etag....

April 16, 2023

2023/04/03〜2023/04/09の最新情報

Flashの削除について まだリリースはされていませんが、Deno v1.25で実装されたFlashというHTTPサーバを削除する対応が実施されているようです。 refactor: remove “ext/flash” #18578 これに伴い、Flashを起動するためのAPIであったDeno.serve()についても、一時的にDeno.serveHttp()ベースの実装へ書き換えられています。 refactor: “Deno.serve()” API uses “Deno.serveHttp()” internally #18568 Deno.serve()については、現在、上記とは別に改めてhyperベースの実装への書き換えが試みられているようです。 Extremely experimental HTTP rewrite #18619 Oakでもすでに対応が行われており、次のリリースあたりでFlashのサポートが削除される可能性が高そうです。 feat: remove experimental support for Deno flash server docs: remove experimental flash content from README fresh v1.1.5 fresh v1.1.5がリリースされました。 twindv1プラグインで、SSRとCSR時に生成されたスタイルが一部重複してしまうことがある問題について改善されています。 Deno SaaSKit Deno公式からFreshやSupabase, Stripeなどを活用したSaaSプロジェクトのテンプレートが公開されました。 Announcing Deno SaaSKit: an open-source SaaS template built with Fresh ソースコードやロードマップなどが以下のリポジトリで公開されています。 https://github.com/denoland/saaskit SaaSKit v1....

April 9, 2023

2023/03/06〜2023/03/12の最新情報

Deno v1.31.2 Deno v1.31.2がリリースされました。 Node.js互換性の改善 循環依存のあるpeerDependenciesの解決が改善 例えば、以下のようなシナリオにおいて、初回実行時はうまくいくものの、ロックファイルが適用されるとうまく動かないケースがあったようで、この問題が修正されています。 a -> b -> c -> d -> c -> b (peer) その他の改善 npm:URLを使っていると、依存関係が変わっていなくても、毎回Lockfileがtouchされてしまう問題が修正されています。 複数のDenoプロセスが同時にnode_modulesを更新できないように制御が入りました。 package.jsonの依存関係の解析に失敗しても、npmパッケージが実際にimportされるタイミングまではエラーが起きないように修正されています。 これにより、package.jsonは存在するものの、スクリプト内でnpmパッケージを利用していないようなケースでエラーが発生しなくなります。 node:cryptoのcreateHashが高速化されています。 util.types.isSharedArrayBufferが動作しない問題が修正されています。 .d.tsファイルの型チェックに関する修正 以下のようなケースで、deno checkなどでうまく型チェックが行われていなかった問題が修正されています。 エントリポイントに指定した.d.tsファイル エントリポイントに含まれるX-TypeScript-Types/<reference types="..." />経由で読み込まれる.d.tsファイル .d.tsファイル内のファイルタイプが指定されていないコードブロック (deno test --docの実行時のみ) Deno.UnsafePointer.ofの改善 Deno.UnsafePointer.ofでバッファのメモリを取得する際に、もしユーザーがバッファの参照をどこかに保持していなかった場合、孤立したポインタができてしまう可能性がありました。 この問題を解消するため、Deno.UnsafePointer.ofの内部でWeakMapを使ってポインタとバッファのマッピングが管理されるようになりました。 その他 WindowsでDeno.stdin.setRaw(false)によって適切にrawモードが無効化されるように修正されています localStorageへのアイテムのINSERT時に、事前に入力内容のサイズがチェックされるように挙動が修正されています https://github.com/denoland/deno/releases/tag/v1.31.2 deno_std v0.179.0 deno_std v0.179.0がリリースされました。 std/encoding/varint.tsの追加, std/encoding/varint/mod.tsの非推奨化 TypeScriptをベースに実装されたstd/encoding/varint.tsが追加されました。 (実装はhttps://deno.land/x/varintがベースのようです) これに合わせて、WASMベースのstd/encoding/varint/mod.tsが非推奨化されています。 std/fsの改善 std/fs/expand_glob: expandGlob()にfollowSymlinksオプションが追加されました (trueを指定すると、シンボリックリンクが解決されます) std/fs/ensure_dir: ensureDir()を同じディレクトリに対して並列で呼んだときに、Deno.errors.AlreadyExistsがthrowされる問題が修正されています。 std/fs/ensure_symlink: ensureSymlink()でtargetに対する相対的なリンクを作ろうとすると、意図せぬパスを指すリンクが作成されてしまう問題が修正されています (#2312) std/http/cookie - =の取り扱いが改善 Cookieの値に=が含まれていると、getSetCookiesが意図せぬ値を返す問題が修正されています。...

March 12, 2023

2023/02/20〜2023/02/26の最新情報

Deno v1.31 Deno v1.31がリリースされています。 以下に内容をまとめたため、よろしければそちらを参照いただければと思います。 Deno v1.31 Deno v1.31.1 Deno v1.31.1がリリースされています。 package.jsonサポートに関する改善 以下のいずれかの手段によって、package.jsonの自動探索を無効化できるようになりました。 DENO_NO_PACKAGE_JSON環境変数に1を設定する --no-configまたは--no-npmを指定する また、package.jsonが見つかった際のnpmパッケージのダウンロードに関する挙動が改善されています。package.jsonで依存関係として指定されたいずれかのパッケージが利用されるタイミングまでnpmパッケージのダウンロードが遅延されます。 これにより、npmパッケージに依存しないスクリプトを実行する場合は、package.jsonがあってもnpmパッケージがダウンロードされなくなります。 その他には、package.jsonの以下のスキームから始まるspecifierが無視されるように修正されています。 workspace: file: git: http: https: Deno.serve()でリモートアドレスの取得がサポート Deno.serve()に渡したhandlerの第2引数にオプションが渡されるようになりました。remoteAddrプロパティ(Deno.NetAddr)からリモートアドレスが取得できます。 Deno.serve({ handler: (req, { remoteAddr }) => { return Response.json(remoteAddr); }, }); その他のバグ修正 リモートモジュールからdata:URLをimportできなくなっていた問題が修正されています。 静的に解析ができないdynamic importが複数同時に実行された際に、まれにDenoがパニックする問題が修正されています。 Import Mapsでローカルモジュールへのマッピングが定義されていた場合、リモートモジュールからそのローカルモジュールをimportできない問題が修正されています。 https://github.com/denoland/deno/releases/tag/v1.31.1 deno_std v0.178.0 deno_std v0.178.0がリリースされました。 std/nodeの削除 Deno v1.31でDeno本体にstd/nodeが組み込まれました。 その影響により、std/nodeが削除されています。 もし、今後もstd/nodeを利用したい場合は、バージョンを明示した上でimportをするとよさそうです。 import { EventEmitter } from "https://deno....

February 26, 2023

2022/11/07〜2022/11/13の最新情報

Deno v1.27.2 Deno v1.27.2がリリースされています。 peerDependenciesのサポート DenoでnpmパッケージのpeerDependenciesがサポートされました。 あるパッケージでpeerDependenciesが定義されていた場合、以下のような動作をするようです。 依存グラフの中から祖先をたどっていき、もしpeerDependenciesで指定された要件を満たすパッケージが見つからなかった場合、通常のdependenciesと同様に依存が解決されます。(npm v7と同様の挙動) optionalPeerDependenciesについては、依存グラフの祖先に指定された要件を満たすパッケージが見つかった場合のみ解決されます。 それ以外の場合は、pnpmと同様の挙動でoptionalPeerDependenciesが解決されます。 https://github.com/denoland/deno/pull/16561 その他の変更点 いくつかのバグ修正が実施されています。 data:URLに対してロックファイルのremoteエントリが作られてしまう問題が修正されています。 Deno.serveHttpで起動したHTTPサーバで圧縮が有効化された状態でストリーミングを行う際に、各チャンクが適切にフラッシュされるように修正されています。 ローカルのnode_modules内のコードでrequireによる相対パス形式での読み込みが行われた際に適切に動作するように修正されています。 https://github.com/denoland/deno/releases/tag/v1.27.2 deno_std v0.163.0 deno_std v0.163.0がリリースされています。 std/semverモジュールでinc()とdiff()が非推奨化されました。 今後は、新しく追加されているincrement()とdifference()の使用が推奨されます。 (動作はそれぞれincとdiffと同様です) https://github.com/denoland/deno_std/releases/tag/0.163.0 denoland/fresh-wordpress-themes WordPressをHeadless CMSとして使いつつ、フロントエンドをFreshで開発するためのテンプレートがDeno公式で公開されました。 https://github.com/denoland/fresh-wordpress-themes 以下の記事で使用方法などが解説されています。 Introducing Fresh WordPress Themes esm.sh v98 esm.sh v98がリリースされました。 新機能としてTree shakingのサポートが追加されています。 exportsパラメータを指定することで適用されます。 https://github.com/ije/esm.sh/releases/tag/v98

November 13, 2022

2022/10/10〜2022/10/16の最新情報

deno taskの安定化について deno taskコマンドを安定化することが検討されているようです。 以下のPRではdeno taskを実行した際の警告メッセージが削除されています。 feat(task): remove warning about being unstable (#16281) この変更はv1.27での導入が検討されているようです。 deno lspでtextDocument/inlayHintが実装 以下のPRでdeno lspにtextDocument/inlayHintが実装されています。 feat: support inlay hints (#16287) textDocument/inlayHintの挙動については、TypeScript公式の以下のページがわかりやすそうです。 Inlay Hints こちらについてもv1.27でのリリースが検討されているようです Bartek Iwańczuk’s “Vite Got Deno-fied” at ViteConf 2022 Bartek Iwańczuk氏によるViteConf 2022での発表内容が公開されています。 Bartek Iwańczuk’s “Vite Got Deno-fied” at ViteConf 2022 DenoでViteの開発環境をセットアップし、Deno Deployへデプロイするまでの手順が解説されています。 https://twitter.com/deno_land/status/1580356550966722560 denoland/fresh_charts Deno公式でFresh向けのチャートライブラリが公開されています。 denoland/fresh_charts チャートを描画するための<Chart>コンポーネントやハンドラ向けのユーティリティなどが提供されているようです。 Chart.jsやred-agate-svg-canvasなどを活用して作成されているようです。 https://github.com/denoland/fresh_charts

October 16, 2022