parameterは、検証ルールとスキーマ イントロスペクションによる追加機能を提供するparameter -argument に関するライブラリです。
parameter Packagist を通じて入手でき、リポジトリ ソースは chevere/ parameterにあります。
composer require chevere/ parameter parameter使用すると、追加のルールを使用して任意のタイプの動的parameterを生成できます。
たとえば、最小値 10 の整数です。
use function Chevere parameter int ;
$ int = int (min: 10 );
$ int ( $ var ); // exception if $var < 10関数またはメソッドのparameterでは、属性を使用してparameterと戻り値の検証ルールを定義できます。
use Chevere parameter Attributes FloatAttr ;
use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes ReturnAttr ;
use function Chevere parameter returnAttr ;
use function Chevere parameter validated ;
#[ReturnAttr(
new FloatAttr (min: 0 , max: 2400 )
)]
function wageWeekWA (
#[IntAttr(min: 1628 )]
int $ cents ,
#[FloatAttr(min: 0 , max: 40 )]
float $ hours
) {
return $ cents * $ hours / 100 ;
}
validated ( ' wageWeekWA ' , $ cents , $ hours );検証は、 validated (上記の例)、インライン、および/または呼び出し元ラッパーへの委任を使用してトリガーできます。 parameter 、 parameterと戻り値の両方のルールにアクセスするためのヘルパーを提供し、配線プロセスを容易にします。
各parameterによって定義されたルールは、検証基準を公開できる人間が判読できるスキーマを提供します。
parameter関数や属性を使用してparameterを作成するために使用できる API を提供します。 parameterオブジェクトはロジック内で直接使用できますが、属性には読み取り手順が必要です。
インライン検証を使用して、次のように進みます。
if ( $ var > 10 || $ var < 1 ) {
throw new InvalidArgumentException ();
}これに対して:
use function Chevere parameter int ;
int (min: 1 , max: 10 )( $ var );属性を使用して、 parameterと戻り値のルールを定義します。
これを行うには、 validated()関数で属性委任検証を使用します。
function myFunction ( int $ var ): string
{
if ( $ var > 10 || $ var < 1 ) {
throw new InvalidArgumentException ();
}
$ return = ' done ok ' ;
return preg_match ( ' /ok$/ ' , $ return )
? $ return
: throw new InvalidArgumentException ();
}
$ result = myFunction ( $ var );これに対して:
use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes ReturnAttr ;
use Chevere parameter Attributes StringAttr ;
use function Chevere parameter validated ;
#[ReturnAttr(
new StringAttr ( ' /ok$/ ' )
)]
function myFunction (
#[IntAttr(min: 1 , max: 10 )]
int $ var
): string
{
return ' done ok ' ;
}
$ result = validated ( ' myFunction ' , $ var );引数と戻り値を手動で検証するには、 reflectionTo parameter sとreflectionToReturn関数を使用します。
use ReflectionFunction ;
use function Chevere parameter reflectionTo parameter s ;
use function Chevere parameter reflectionToReturn ;
$ reflection = new ReflectionFunction ( ' myFunction ' );
$ parameter s = reflectionTo parameter s ( $ reflection );
$ return = reflectionToReturn ( $ reflection );
$ parameter s (... $ args ); // valid $args
$ result = myFunction (... $ args ); // myFunction call
$ return ( $ result ); // valid $result関数本体内の手動検証には属性のインライン検証を使用します。
use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes ReturnAttr ;
use Chevere parameter Attributes StringAttr ;
use function Chevere parameter valid ;
use function Chevere parameter returnAttr ;
#[ReturnAttr(
new StringAttr ( ' /ok$/ ' )
)]
function myFunction (
#[IntAttr(min: 1 , max: 10 )]
int $ var
): string
{
valid (); // valid $var
$ return = ' ok ' ;
return returnAttr ()( $ return ); // valid $return
}PHP の属性は、クラス定数で使用できる式のみをサポートします。属性を使用して動的parameterを直接定義することはできません。
この制限を回避するには、 CallableAttr属性を使用します。これにより、 parameter解決を、 parameter Interfaceインスタンスを返す呼び出し可能オブジェクトに転送できるようになります。
use Chevere parameter Interfaces parameter Interface ;
use Chevere parameter Attributes CallableAttr ;
function myCallable (): parameter Interface
{
return arrayp (
email: string (),
)-> withOptional (
name: string (),
);
}
#[CallableAttr( ' myCallable ' )]parameter parameter Interface実装するオブジェクトです。すべてのparameter descriptionとdefault値に加えて、タイプに応じた追加の検証ルールを定義できます。
parameter関数や属性を使用して定義でき、両方に同じ引数を受け取ります。
parameter $param('value')呼び出すと、渡された引数に対する検証がトリガーされます。
ファンクションstring使用してString parameterを作成します。文字列照合用のregexを渡します。
use function Chevere parameter string ;
// Any string
$ string = string ();
// String matching bin-<digits>
$ string = string ( ' /^bin-[d]+$/ ' );
$ string ( ' bin-123 ' ); StringAttr属性を使用して文字列parameterを定義します。
use Chevere parameter Attributes StringAttr ;
#[StringAttr( ' /^bin-[d]+$/ ' )]次のparameterは文字列に基づいています。
関数enum使用して、文字列のリストに一致するString parameterを作成します。
use function Chevere parameter enum ;
$ enum = enum ( ' on ' , ' off ' );
$ enum ( ' on ' );
$ enum ( ' off ' ); EnumAttr属性を使用して enum 文字列parameterを定義します。
use Chevere parameter Attributes EnumAttr ;
#[EnumAttr( ' on ' , ' off ' )]関数intString使用して、文字列整数に一致するString parameterを作成します。
use function Chevere parameter intString ;
$ int = intString ();
$ int ( ' 100 ' );関数boolString使用して、 0および1文字列に一致するString parameterを作成します。
use function Chevere parameter boolString ;
$ bool = boolString ();
$ bool ( ' 0 ' );
$ bool ( ' 1 ' );関数dateを使用して、 YYYY-MM-DD文字列に一致するString parameterを作成します。
use function Chevere parameter date ;
$ date = date ();
$ date ( ' 2021-01-01 ' );関数time使用して、 hh:mm:ss文字列に一致するString parameterを作成します。
use function Chevere parameter time ;
$ time = time ();
$ time ( ' 12:00:00 ' );関数datetimeを使用して、 YYYY-MM-DD hh:mm:ss文字列に一致するString parameterを作成します。
use function Chevere parameter datetime ;
$ datetime = datetime ();
$ datetime ( ' 2024-01-09 10:53:00 ' );関数int使用してInt parameterを作成します。整数範囲のminとmax値を渡し、受け入れられる整数のリストをaccept 、拒否される整数のリストをreject 。
use function Chevere parameter int ;
// Any int
$ int = int ();
$ int ( 1 );
// Integer between 0 and 100
$ int = int (min: 0 , max: 100 );
$ int ( 50 );
// Integer matching 1, 2 or 3
$ int = int (accept: [ 1 , 2 , 3 ]);
$ int ( 2 );
// Integer not-matching 1, 2 or 3
$ int = int (reject: [ 1 , 2 , 3 ]);
$ int ( 4 ); IntAttr属性を使用して整数parameterを定義します。
use Chevere parameter Attributes IntAttr ;
#[IntAttr(min: 0 , max: 100 )]次のparameterは Int に基づいています。
関数boolInt使用して、 0と1整数に一致するInt parameterを作成します。
use function Chevere parameter boolInt ;
$ bool = boolInt ();
$ bool ( 0 );
$ bool ( 1 );関数float使用してFloat parameterを作成します。 float 範囲のminとmax値を渡し、受け入れられた float のリストをaccept 、拒否された float のリストをreject 。
use function Chevere parameter float ;
// Any float
$ float = float ();
$ float ( 1.5 );
// Float between 0 and 100
$ float = float (min: 0 , max: 100 );
$ float ( 50.5 );
// Float matching 1.5, 2.5 or 3.5
$ float = float (accept: [ 1.5 , 2.5 , 3.5 ]);
$ float ( 2.5 );
// Float not-matching 1.5, 2.5 or 3.5
$ float = float (reject: [ 1.5 , 2.5 , 3.5 ]);
$ float ( 4.5 ); FloatAttr属性を使用して float parameterを定義します。
use Chevere parameter Attributes FloatAttr ;
#[FloatAttr(min: 0 , max: 100 )]関数bool使用してBool parameterを作成します。
use function Chevere parameter bool ;
$ bool = bool ();
$ bool ( true );
$ bool ( false ); BoolAttr属性を使用して bool parameterを定義します。
use Chevere parameter Attributes BoolAttr ;
#[BoolAttr]null関数を使用してNull parameterを作成します。
use function Chevere parameter null ;
$ null = null ();
$ null ( null ); NullAttr属性を使用して null parameterを定義します。
use Chevere parameter Attributes NullAttr ;
#[NullAttr]関数object使用してObject parameterを作成します。オブジェクトのクラス名として className を渡します。
use function Chevere parameter object ;
$ object = object (stdClass::class);
$ object ( new stdClass ()); ObjectAttr属性を使用してオブジェクトparameterを定義します。
use Chevere parameter Attributes ObjectAttr ;
#[ObjectAttr(stdClass::class)]関数mixed使用して、 Mixed parameterを作成します。
use function Chevere parameter mixed ;
$ mixed = mixed ();
$ mixed ( 1 );
$ mixed ( ' 1 ' );
$ mixed ( true );
$ mixed ( null );Union parameterを作成するには、 union関数を使用します。照合するparameterのリストを渡します。ターゲット値は少なくとも 1 つと一致する必要があります。
use function Chevere parameter union ;
// Any string or null
$ union = union ( string (), null());
$ union ( ' abc ' );
$ union ( null );
// Any digit string or any integer
$ union = union (
intString (),
integer ()
);
$ union ( ' 100 ' );
$ union ( 100 );配列arrayのparameterは、各メンバーのparameter定義を保持する複合parameterとして処理されます。
関数arrayp使用して、必要な配列キーとして名前付き引数のArray parameterを作成します。
use function Chevere parameter arrayp ;
// Empty array
$ array = arrayp ();
$ array ([]);
// Required 'a' => <string>
$ array = arrayp (a: string ());
$ array ([ ' a ' => ' Hello world ' ]);parameter任意の深さのネストされた配列をサポートします。
use function Chevere parameter arrayp ;
use function Chevere parameter float ;
use function Chevere parameter int ;
$ array = arrayp (
id: int (min: 0 ),
items: arrayp (
id: int (min: 0 ),
price: float (min: 0 ),
),
);
$ array ([
' id ' => 1 ,
' items ' => [
' id ' => 25 ,
' price ' => 16.5 ,
]
]); ArrayAttr属性を使用して配列parameterを定義します。
use Chevere parameter Attributes ArrayAttr ;
use Chevere parameter Attributes FloatAttr ;
use Chevere parameter Attributes IntAttr ;
#[ArrayAttr(
id: new IntAttr (),
items: new ArrayAttr (
id: new IntAttr (),
price: new FloatAttr (),
),
)]withRequiredメソッドを使用して、必須parameterを定義します。
$ array = $ array
-> withRequired (
username: string (),
email: string ()
);withOptionalメソッドを使用して、オプションのparameterを定義します。
$ array = $ array
-> withOptional (address: string ());注:オプションのparameterは、一致するキーが指定された場合にのみ検証されます。
withModifyメソッドを使用して、変更parameterを定義します。
$ array = $ array
-> withModify (
username: string ( ' /w+/ ' ),
);withMakeOptionalメソッドを使用して、必須parameterをオプションにします。
$ array = $ array
-> withMakeOptional ( ' username ' );withMakeRequiredメソッドを使用して、オプションのparameterを必須にします。
$ array = $ array
-> withMakeRequired ( ' email ' );parameterを削除せwithoutメソッドを使用します。
$ array = $ array
-> without ( ' a ' );withOptionalMinimumメソッドを使用して、オプションのparameterの最小数を定義します。すべてのparameterがオプションであるが 1 の場合に便利です。
$ array = $ array
-> withOptionalMinimum ( 1 );次のparameterは配列に基づいています。
関数arrayString使用して、文字列値のArrayString parameter Interfaceを作成します。文字列parameterのみをサポートします。
use function Chevere parameter arrayString ;
use function Chevere parameter string ;
$ array = arrayString (
test: string (),
);
$ array ([ ' test ' => ' foo ' ]);関数file使用して、ファイルアップロード用のArray parameterを作成します。
use function Chevere parameter file ;
$ array = file ();
$ file = [
' name ' => ' foo.txt ' ,
' type ' => ' text/plain ' ,
' tmp_name ' => ' /tmp/phpYzdqkD ' ,
' error ' => 0 ,
' size ' => 123 ,
];
$ array ( $ file );デフォルトでは、 $_FILES形状の検証が提供されますが、独自の検証ルールを定義できます。たとえば、名前と内容を検証するには、次のようにします。
use function Chevere parameter file ;
$ array = file (
name: string ( ' /^.txt$/ ' ),
contents: string ( ' /wage-/ ' ),
);
$ array (
' name ' => ' wage-2024.txt ' ,
' type ' => ' text/plain ' ,
' tmp_name ' => ' /tmp/phpYzdqkD ' ,
' error ' => 0 ,
' size ' => 27 ,
' contents ' => ' yada yada wage-2024 bla bla ' ,
);反復可能な型Traversable|array 、キーと値の一般的な定義を保持する複合parameterとして考慮されます。 parameter使用すると、同じ形状を共有するアイテムの集合を記述することができます。
関数iterable使用してIterable parameterを作成します。汎用キーと値としてVおよびK parameterを渡します。
use function Chevere parameter int ;
use function Chevere parameter iterable ;
$ iterable = iterable ( int (min: 0 ));
$ iterable ([ 0 , 1 , 2 , 3 ]);名前付きキーでも機能します。
use function Chevere parameter int ;
use function Chevere parameter iterable ;
use function Chevere parameter string ;
$ iterable = iterable (
V: arrayp (
id: int (min: 0 ),
name: string ( ' ^[w]{1,255} ' ),
)
K: string (),
);
$ iterable ([
' based ' => [
' id ' => 1 ,
' name ' => ' OscarGangas '
],
' fome ' => [
' id ' => 2 ,
' name ' => ' BomboFica '
],
]);関数parameter s使用して、 parameter sインスタンスを作成します。
use function Chevere parameter s parameter s ;
use function Chevere parameter s string ;
$ parameter s = parameter s (foo: string ());関数のarguments使用してArgumentsインスタンスを作成します。
use function Chevere parameter s arguments ;
use function Chevere parameter s string ;
$ arguments = arguments ( $ parameter s , [ ' foo ' => ' bar ' ]);関数assertNamedArgumentを使用して、名前付き引数をアサートします。
use function Chevere parameter s assertNamedArgument ;
use function Chevere parameter s int ;
use function Chevere parameter s parameter s ;
$ parameter = int (min: 10 );
assertNamedArgument (
name: ' foo ' ,
parameter : $ parameter ,
argument: 20
);関数をto parameter使用して、文字列型からparameter Interfaceインスタンスを作成します。以下の例では、結果の$ parameter Int parameterになります。
use function Chevere parameter s to parameter ;
$ parameter = to parameter ( ' int ' );関数arrayFrom使用して、別の配列parameterから配列parameterを作成します。以下の例では、結果として得られる$arrayには、 $sourceで定義されているnameとidキーのみが含まれます。
use function Chevere parameter s arrayFrom ;
use function Chevere parameter s arrayp ;
use function Chevere parameter s int ;
use function Chevere parameter s string ;
$ source = arrayp (
id: int (),
name: string (),
email: string (),
age: int (),
);
$ array = arrayFrom ( $ source , ' name ' , ' id ' );関数takeKeys使用して、 parameterからキーを含む配列を取得します。以下の例では、 $keysはidとsize含まれます。
use function Chevere parameter s arrayp ;
use function Chevere parameter s int ;
use function Chevere parameter s takeKeys ;
$ array = arrayp (
id: int (),
size: int (),
);
$ keys = takeKeys ( $ array );関数takeFrom使用して、 parameterから目的のキーを持つイテレータを取得します。以下の例では、 $iterator sizeとnameキーを生成します。
use function Chevere parameter s arrayp ;
use function Chevere parameter s int ;
use function Chevere parameter s string ;
use function Chevere parameter s takeFrom ;
$ array = arrayp (
id: int (min: 0 ),
size: int (min: 100 ),
name: string (),
);
$ iterator = takeFrom ( $ array , ' size ' , ' name ' );関数parameter sFrom使用して、 parameterから必要なキーを持つparameter sを作成します。以下の例では、 $ parameter sにはsizeとnameキーが含まれます。
use function Chevere parameter s arrayp ;
use function Chevere parameter s int ;
use function Chevere parameter s string ;
use function Chevere parameter s parameter sFrom ;
$ array = arrayp (
id: int (min: 0 ),
size: int (min: 100 ),
name: string (),
);
$ parameter s = parameter sFrom ( $ array , ' size ' , ' name ' );関数get parameter s使用して、 parameter AccessInterfaceまたはparameter sInterface実装するオブジェクトからparameter sインスタンスを取得します。
use function Chevere parameter s get parameter s ;
$ parameter s = get parameter s ( $ object );関数getType使用して、このライブラリで認識されている型を取得します。
use function Chevere parameter s getType ;
$ type = getType ( 1 ); // int関数parameter Attr使用して、関数またはクラス メソッドのparameterからparameter AttributeInterfaceを実装するオブジェクトを取得します。
use function Chevere parameter s parameter Attr ;
use Chevere parameter Attributes StringAttr ;
function myFunction (
#[StringAttr( ' /^bin-[d]+$/ ' )]
string $ foo
): void {
// ...
}
$ stringAttr = parameter Attr ( ' foo ' , ' myFunction ' );
$ stringAttr ( ' bin-123 ' );関数reflectionTo parameter sを使用して、 ReflectionFunctionまたはReflectionMethodインスタンスからparameter sインスタンスを取得します。
use function Chevere parameter reflectionTo parameter s ;
$ parameter s = reflectionTo parameter s ( $ reflection );関数reflectionToReturnを使用して、 ReflectionFunctionまたはReflectionMethodインスタンスからparameter Interfaceインスタンスを取得します。
use function Chevere parameter reflectionToReturn ;
$ parameter = reflectionToReturn ( $ reflection );関数reflected parameter Attribute使用して、 Reflection parameterインスタンスからparameter AttributeInterfaceを実装するオブジェクトを取得します。
use function Chevere parameter reflected parameter Attribute ;
$ parameter Attribute = reflected parameter Attribute ( $ reflection parameter );関数またはメソッドの引数を検証するには、関数validatedを使用します。
use function Chevere parameter validated ;
$ result = validated ( ' myFunction ' , $ arg1 , $ arg2 ,); use function Chevere parameter string ;
$ value = ' ahhh ' ;
string ( ' /^a.+/ ' )( $ value );100の int を検証します。 use function Chevere parameter int ;
$ value = 100 ;
int (min: 100 )( $ value ); use function Chevere parameter int ;
$ value = 1 ;
int (accept: [ 1 , 2 , 3 ])( $ value ); use function Chevere parameter float ;
$ value = 3.1 ;
float (reject: [ 1.1 , 2.1 ])( $ value ); use function Chevere parameter arrayp ;
use function Chevere parameter int ;
use function Chevere parameter string ;
$ value = [
' id ' => 1 ,
' name ' => ' Pepe '
];
arrayp (
id: int (min: 1 ),
name: string ( ' /^[A-Z]{1}w+$/ ' )
)( $ value );intリストを検証します。 use function Chevere parameter int ;
use function Chevere parameter iterable ;
$ value = [ 1 , 2 , 3 ];
iterable ( int ())( $ value ); use function Chevere parameter int ;
use function Chevere parameter iterable ;
$ value = [
' unila ' => 1 ,
' dorila ' => 2 ,
' tirifila ' => 3 ,
];
iterable (
K: string ( ' /ila$/ ' ),
V: int (min: 1 )
)( $ value ); use function Chevere parameter int ;
use function Chevere parameter null ;
$ value = 1 ;
union ( int (), null())( $ value );validated()を使用します。 use function Chevere parameter validated ;
$ result = validated ( ' myFunction ' , $ var );reflectionTo parameter s()を使用して、引数を検証するためのルールを取得します。 use ReflectionMethod ;
use Chevere parameter Attributes IntAttr ;
use function Chevere parameter arguments ;
use function Chevere parameter reflectionTo parameter s ;
$ class = new class () {
public function wea (
#[IntAttr(accept: [ 1 , 10 , 100 ])]
int $ base
): void {
}
};
$ object = new $ class ();
$ reflection = new ReflectionMethod ( $ object , ' wea ' );
$ parameter s = reflectionTo parameter s ( $ reflection );
$ args = [ ' base ' => 10 ];
$ parameter s (... $ args ); // valid $args
$ result = $ object -> wea (... $ args );reflectionToReturn()を使用して、関数/メソッドの戻り値を検証するためのルールを取得します。 use ReflectionFunction ;
use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes ReturnAttr ;
use function Chevere parameter reflectionToReturn ;
$ function =
#[ReturnAttr(
new IntAttr (min: 1000 )
)]
function ( int $ base ): int {
return 10 * $ base ;
};
$ reflection = new ReflectionFunction ( $ function );
$ return = reflectionToReturn ( $ reflection );
$ base = 10 ;
$ result = $ function ( $ base );
$ result = $ return ( $ result ); // Validates result関数/メソッド本体でvalid()使用して、引数の検証をトリガーします。
Hugo 、 Paco 、 Luisの文字列列挙を検証します。1000を検証します。 use Chevere parameter Attributes EnumAttr ;
use function Chevere parameter validate ;
function myEnum (
#[EnumAttr( ' Hugo ' , ' Paco ' , ' Luis ' )]
string $ name ,
#[FloatAttr(min: 1000 )]
float $ money
): void
{
valid ();
// Or single...
valid ( ' name ' );
valid ( ' money ' );
}
$ arg1 = ' Paco ' ;
$ arg2 = 1000.50 ;
myEnum ( $ arg1 , $ arg2 );0と100以外の任意の値の int を検証します。 use Chevere parameter Attributes IntAttr ;
use function Chevere parameter validate ;
function myInt (
#[IntAttr(reject: [ 0 , 100 ])]
int $ id
): void
{
valid ();
}
$ value = 50 ;
myInt ( $ value ); use Chevere parameter Attributes ArrayAttr ;
use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes StringAttr ;
use Chevere parameter Attributes IterableAttr ;
use function Chevere parameter validate ;
function myArray (
#[ArrayAttr(
id: new IntAttr (min: 1 ),
role: new ArrayAttr (
mask: new IntAttr (accept: [ 64 , 128 , 256 ]),
name: new StringAttr ( ' /[a-z]+/ ' ),
tenants: new IterableAttr (
new IntAttr (min: 1 )
)
),
)]
array $ spooky
): void
{
valid ();
}
$ value = [
' id ' => 10 ,
' role ' => [
' mask ' => 128 ,
' name ' => ' admin ' ,
' tenants ' => [ 1 , 2 , 3 , 4 , 5 ]
],
];
myArray ( $ value ); use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes IterableAttr ;
use function Chevere parameter validate ;
function myIterable (
#[IterableAttr(
new IntAttr (),
)]
array $ list = [ 0 , 1 , 2 ]
): void
{
valid ();
}関数/メソッド本体で関数returnAttr()を使用します。
min: 0, max: 5を検証します。 use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes ReturnAttr ;
use function Chevere parameter returnAttr ;
#[ReturnAttr(
new IntAttr (min: 0 , max: 5 )
)]
public function myReturnInt (): int
{
$ result = 1 ;
return returnAttr ()( $ result );
} use Chevere parameter Attributes ArrayAttr ;
use Chevere parameter Attributes IntAttr ;
use Chevere parameter Attributes StringAttr ;
use Chevere parameter Attributes ReturnAttr ;
use function Chevere parameter returnAttr ;
#[ReturnAttr(
new ArrayAttr (
id: new IntAttr (min: 0 ),
name: new StringAttr ()
)
)]
public function myReturnArray (): array
{
$ result = [
' id ' => 1 ,
' name ' => ' Peoples Hernandez '
];
return returnAttr ()( $ result );
}慣例により、 ReturnAttrメソッドpublic static function return(): parameter Interface (存在する場合) を省略すると、戻り値の検証ルールを決定するために使用されます。
ドキュメントは chevere.org で入手できます。
著作権 ロドルフォ ベリオス A.
Chevere は、Apache License バージョン 2.0 に基づいてライセンスされています。ライセンスの全文については、「LICENSE」を参照してください。
適用される法律で義務付けられている場合または書面による同意がない限り、ライセンスに基づいて配布されるソフトウェアは、明示または黙示を問わず、いかなる種類の保証や条件もなく、「現状のまま」で配布されます。ライセンスに基づく許可と制限を規定する特定の言語については、ライセンスを参照してください。