소스 타입 문자열 배열 */ public static function values(): array { return array_column(self::cases(), 'value'); } /** * 주어진 문자열이 유효한 소스 타입 값인지 확인합니다. * * @param string $value 검사할 소스 타입 문자열 * @return bool 유효 여부 */ public static function isValid(string $value): bool { return in_array($value, self::values(), true); } /** * 다국어 라벨을 반환합니다. * * @return string 라벨 (lang/{locale}/language_packs.php 의 source_type 키) */ public function label(): string { return __('language_packs.source_type.'.$this->value); } /** * 본 소스 타입이 사용자 직접 설치 출처인지 (ZIP/GitHub/URL/Upload) 판정합니다. * * @return bool 사용자 외부 설치 출처면 true */ public function isExternal(): bool { return match ($this) { self::Github, self::Url, self::Upload, self::Zip => true, default => false, }; } /** * 본 소스 타입이 보호 대상 (수정/제거 차단) 인지 판정합니다. * * `BundledWithExtension` 과 `BuiltIn` 은 확장 본체에 종속되므로 보호. * `Bundled` 은 사용자가 install/uninstall 자유. * * @return bool 보호 대상이면 true */ public function isProtectedByDefault(): bool { return match ($this) { self::BundledWithExtension, self::BuiltIn => true, default => false, }; } }