このモジュールは、ファイルシステム上の blocklet.yml ファイルと対話するための低レベル関数のセットを提供します。これには、メタデータファイルの検索、読み取り、書き込みのためのユーティリティ、およびファイルパスとDIDのバリデーションを効率化するためのカスタム Joi 拡張機能が含まれています。
blocklet.yml ファイルハンドラ
これらの関数は、Blockletのメタデータファイルをプログラムで読み取りまたは変更する必要があるあらゆるツールの基本的な構成要素です。
select(dir, options?)
select 関数は、指定されたディレクトリ内で正しい blocklet.yml または blocklet.yaml ファイルをインテリジェントに検索します。
パラメータ
- dir
string(required) — Blockletメタデータファイルが配置されているディレクトリの絶対パス。 - options
object— select関数の設定オプション。- throwOnError
boolean(default:true) — trueの場合、メタデータファイルが見つからない場合にエラーがスローされます。falseの場合、空の文字列を返します。
- throwOnError
戻り値
- metaFilePath
string— 見つかったメタデータファイルの完全な絶対パス。見つからずthrowOnErrorが false の場合は空の文字列。
例
メタデータファイルの検索
import { select } from '@blocklet/meta';
const blockletDir = '/path/to/your/blocklet';
try {
const metaFile = select(blockletDir);
console.log(`Found metadata file at: ${metaFile}`);
} catch (error) {
console.error(error.message); // 例: 'blocklet.yml not found...'
}read(file)
ファイルパスを取得したら、read 関数はYAMLコンテンツをJavaScriptオブジェクトに解析します。
パラメータ
- file
string(required) — 読み取る blocklet.yml ファイルへのパス。
戻り値
- meta
object— 解析されたYAMLファイルの内容をJavaScriptオブジェクトとして。
例
メタデータファイルの読み取り
import { select, read } from '@blocklet/meta';
const metaFile = select('/path/to/your/blocklet');
const meta = read(metaFile);
console.log(`Blocklet name: ${meta.name}`);update(file, meta, options?)
update 関数は、メタデータオブジェクトをYAMLファイルにシリアライズし直します。デフォルトでは、書き込む前にランタイムにのみ関連するプロパティ(例:path、stats、signatures)を削除してメタデータをクリーンアップします。
パラメータ
- file
string(required) — 更新する blocklet.yml ファイルへのパス。 - meta
TBlockletMeta(required) — ファイルに書き込むメタデータオブジェクト。 - options
object— update関数の設定オプション。- fix
boolean(default:true) — trueの場合、書き込む前にメタデータオブジェクトをクリーンアップします(例:path、stats、signaturesを削除)。falseの場合、オブジェクトをそのまま書き込みます。
- fix
戻り値
この関数は値を返しません(void)。
例
メタデータファイルの更新
import { select, read, update } from '@blocklet/meta';
const metaFile = select('/path/to/your/blocklet');
let meta = read(metaFile);
// 説明を変更
meta.description = 'An updated description for my blocklet.';
// 変更をクリーンアップしてファイルに書き戻す
update(metaFile, meta);
console.log('blocklet.yml has been updated.');list
select が内部で使用する、Blockletメタデータファイルの潜在的な名前を含む単純な定数配列です。
例
import { list } from '@blocklet/meta';
console.log(list); // Outputs: ['blocklet.yml', 'blocklet.yaml']カスタムJoi拡張機能
これらの拡張機能は、Joiバリデーションライブラリと統合して、ファイルパスやDIDなどの一般的なBlocklet関連データのためのカスタムバリデーションタイプを提供します。
fileExtension
Joiスキーマにカスタムの file() 型を提供し、強力なファイルシステム対応のバリデーションを可能にします。
使用方法
まず、Joiインスタンスを fileExtension で拡張します。その後、スキーマで file() 型とそのルールを使用できます。
fileExtensionを使用したJoiスキーマ
import Joi from 'joi';
import path from 'path';
import { fileExtension } from '@blocklet/meta';
// カスタムタイプで拡張されたJoiインスタンスを作成
const customJoi = Joi.extend(fileExtension);
const schema = customJoi.object({
// プロジェクトディレクトリ内に 'logo.png' が存在することを検証
logoPath: customJoi.file().exists({ baseDir: __dirname }),
});
const { error } = schema.validate({ logoPath: 'logo.png' });
if (error) {
console.log(error.message); // 例: 'file "logo.png" does not exist'
}didExtension
Joiにカスタムの DID() 型を提供し、ArcBlockの分散型識別子を検証します。
使用方法
didExtension でJoiを拡張して、DID() バリデーションタイプを追加します。
didExtensionを使用したJoiスキーマ
import Joi from 'joi';
import { didExtension } from '@blocklet/meta';
const customJoi = Joi.extend(didExtension);
const schema = customJoi.object({
author: customJoi.DID().required(),
});
// 無効なDIDの例
const { error } = schema.validate({ author: 'z123...invalid_did' });
if (error) {
console.log(error.message); // 'did "z123...invalid_did" is not valid'
}
// 有効なDIDの例
const { value } = schema.validate({ author: 'z8iZpbpJ4Yy2LzG1cqK9rC9pZ8r1Yq2Z3t4a' });
console.log(value); // { author: 'z8iZpbpJ4Yy2LzG1cqK9rC9pZ8r1Yq2Z3t4a' }これらのファイルユーティリティは、Blockletエコシステム内の多くの高レベル操作の基盤を形成します。より高度なメタデータ処理については、解析とバリデーション のドキュメントに進んでください。