$ show PHLAK/Twine
Twine is a PHP string manipulation library providing an expressive, fluent object-oriented interface. It wraps a string in a `Str` object and offers methods for transformation, encoding, encryption, hashing, comparison, case conversion, and more. The library leverages PHP 8.1 features like enums for configuration and relies on the Multibyte String extension for Unicode support and OpenSSL for encryption. The architecture is a monolith single class using traits to organize functionality, with factory methods and a global helper for easy instantiation. The primary entry point is the `PHLAK\Twine\Str` class, which can be created via constructor, static `make()`, or the `str()` helper. Data flows are method chaining; most methods return new `Str` instances to maintain immutability. External dependencies are limited to PHP extensions (mbstring, openssl). The test suite is comprehensive with high coverage. The library is well-documented with a VitePress documentation site.
The LLM identified 3 files worth highlighting for reuse:
Implements encrypt and decrypt methods using AES-CBC with HMAC authentication. Generates random IV, encrypts with OpenSSL, creates HMAC for integrity, and packages into a base64-encoded JSON payload. Demonstrates proper cryptographic engineering: uses random IV, separates ciphertext and HMAC, and uses hash_equals for verification. This pattern can be extracted as a standalone encryption utility for any PHP project.
Provides static helper methods for splitting strings into characters or words. The `characters()` method uses a Unicode-aware regex to split into an array of characters. The `words()` method uses a regex that handles camelCase and mixed case to extract words. These are isolated, pure functions that can be reused independently of the Twine framework.
A simple PHP enum defining ENCODE and DECODE cases for Base64 configuration. While small, it showcases the use of PHP 8.1 enums for type-safe configuration flags, a pattern that can be applied across many PHP projects to replace string constants.