メインコンテンツまでスキップ
バージョン: 0.3.1

パッケージレジストリ

公開エンドポイントは https://registry.dicks.pink です。サーバーアプリケーションは独立したdicks-lang/registryリポジトリで管理し、Dicksモジュールに分けています。汎用のCloudflareホストブリッジが、D1・R2・SHA-256・上限付きのリクエスト本文を提供します。

インストールと固定​

dicks add @dicks/math@0.2.1
dicks sync
dicks run

完全一致の MAJOR.MINOR.PATCH だけを受け付けます。バージョン範囲、プレリリース、暗黙の最新版、自動アップグレードはありません。依存の循環やパッケージ内容の競合は失敗します。dicks.lock はレジストリのオリジン、記述子のダイジェスト、全ファイルのダイジェストを固定します。検証済みのキャッシュがあればオフラインの sync に対応します。ファイルが変わった場合や欠けている場合は、再取得して検証しなければなりません。追加時に --registry https://example.test でレジストリを選べます。暗号化しないHTTPは、テスト用のループバックでだけ許可します。

dicks outdated は、レジストリから取得した直接の依存について、より新しいバージョンを報告します。dicks update @scope/name@1.2.3 は警告、バイト列、依存グラフ全体を検証してから、既存の直接依存1つを明示したバージョンへ更新します。マニフェストとlockの置換前に、すべての検査を行います。2ファイルのアトミックな置換の間にクラッシュした場合は、検出可能なlockの不一致が残ります。sync が黙って修復することはありません。明示的な復旧操作は dicks lock です。

dicks audit は間接依存も含め、固定したレジストリ依存すべてを、公開者の現在の警告と照合します。警告を表示し、ブロックされたリリースがあれば終了コード2で終了します。レジストリへ到達できる必要があります。オフラインのビルドと同期でも固定済みバイト列の検証は続けますが、最新の警告を把握しているとは扱いません。

公開​

パッケージは @team/library のような、名前空間を持つ小文字の名前を使います。package.json には全ファイル、公開モジュール、ホストABI、完全一致の依存を列挙します。dicks pack は公開せずに検証し、dicks publish は内容アドレスで管理するblobをアップロードしてから、不変のバージョン記述子を公開します。公開には、発行済みの名前空間トークンを DICKS_REGISTRY_TOKEN_FILE(非公開の通常ファイル)か DICKS_REGISTRY_TOKEN で渡します。認証情報はコミットしないでください。

インストールフックはありません。パッケージにはDicksソース、型、ホスト宣言、補助ファイルを含められます。リモートのJavaScriptを自動でインポートすることはありません。汎用のホスト実装は、ローカルのツールチェーンが既に対応している必要があります。Dicksの依存も実行可能なコードとして扱い、要求するエフェクトを確認してから実行してください。

上限と制約​

  • package.json を含め32ファイル。1ファイル2MiB、1パッケージ16MiBです。
  • バージョン記述子は16KiB。ASCIIの相対パスを使い、上位ディレクトリへの参照や大文字・小文字の違いだけの重複を認めません。
  • バージョンは不変です。同じ内容の再試行は成功し、違うバイト列での置換はHTTP 409になります。
  • 公開者トークンごとに、UTCの1日あたり256回のblobアップロードが上限です。トークンは1つの名前空間に属し、期限切れと失効に対応します。
  • ダウンロードは公開です。現在は一般向けのアカウント登録、検索インデックス、トークン用UI、パッケージ削除APIはありません。運用者が公開者を明示的に登録します。

HTTP API​

メソッドパス結果
GET/healthサービスの稼働状態
GET/v1/packages?after=NAME名前順の一覧。最大50件と次のカーソル
GET/v1/packages/@scope/name新しい順に最大100バージョン
GET / HEAD/v1/packages/@scope/name/1.2.3不変の記述子
GET / HEAD/v1/blobs/SHA256不変のバイト列
PUT/v1/blobs/SHA256認証とダイジェスト検査付きのアップロード
PUT/v1/packages/@scope/name/1.2.3認証付きの不変の公開操作

公開トークンは Authorization: Bearer ... で送信します。D1に保存するのはトークンのSHA-256ダイジェストだけです。パッケージ記述子、lock、エラーメッセージに認証情報を含めません。R2はSHA-256をキーにバイト列を保存し、D1はバージョンのメタデータ、公開者の名前空間、日次の受け入れ数を保存します。DBとバケットはDaaSから独立したレジストリ専用のものです。

運用コマンド​

次のコマンドはレジストリのリポジトリで実行します。公開者のアクセスを変更するため、認証済みのCloudflare運用者が必要です。トークンは新しい非公開ファイルに保存し、発行コマンドは既存ファイルの上書きを拒否します。有効期間は既定で90日、最大365日です。

node tools/publisher.mjs issue @team /private/path/team.token 90
node tools/publisher.mjs revoke @team /private/path/team.token

公開者の登録には明示的な許可を得てください。公開時は DICKS_REGISTRY_TOKEN_FILE にファイルのパスを渡し、ソース・チャット・ログにトークンを貼り付けないでください。Cloudflareの結果が不明な状態を成功とは扱いません。ファイルを保持し、操作の状態を調べてから再試行します。

dicks whoami は認証情報の値を表示せず、現在の名前空間と期限を示します。node tools/publisher.mjs list @team は運用者用のCloudflare読み取りで、期限・失効・認証情報の数を表示します。発行と失効は、DBから対象の名前空間が返ったことを確認してから成功と報告します。

公開者は dicks advisory @team/package@1.2.3 warning "Migration required" で、none、warning、blocked の警告を付けられます。その名前空間で有効な公開者だけが変更できます。警告メタデータは変更可能ですが、リリース記述子とblobは不変のままです。blocked は明示的な更新コマンドがそのリリースを選ぶことを防ぎます。インストール済みのコードを削除したり、再現可能なオフラインのビルドを壊したりはしません。解除も dicks advisory @team/package@1.2.3 none "" で明示的に行います。

警告APIは GET/HEAD/PUT /v1/advisories/@scope/name/VERSION、公開者自身の情報は GET /v1/publisher です。テストではローカルの 0002_advisories.sql の適用が必要で、本番展開時の移行には別途許可が必要です。

レジストリのチェックアウトで、DICKS_TOOLCHAIN に言語のチェックアウトを指定するか、両方のリポジトリを隣に置いてください。node tools/dicks.mjs lock、npm run build、npm test を実行します。デプロイと移行は、それぞれ明示的に許可した別の操作です。配備するリビジョンごとに対応ソースの提供を維持してください。リポジトリを移しても、サービスを再デプロイしたことにはなりません。