A collection of command line scripts for Magento 2 code generation, and a PHP module system for organizing command line scripts.

Related tags

Miscellaneous pestle
Overview

Build Status Documentation Status

What is Pestle?

Pestle is

  • A PHP Framework for creating and organizing command line programs
  • An experiment in implementing python style module imports in PHP
  • A collection of command line programs, with a primary focus on Magento 2 code generation

Pestle grew out of my desire to do something about the growing number of simple PHP scripts in my ~/bin that didn't have a real home, and my personal frustration with the direction of PHP's namespace system.

PHP doesn't need another command line framework. Symfony's console does a fine job of being the de-facto framework for building modern PHP command line applications. Sometimes though, when you start off building something no one needed, you end up with something nobody realized they wanted.

How to Use

The easiest way to get started is to grab the latest build using curl

curl -LO http://pestle.pulsestorm.net/pestle.phar

You can see a list of commands with the following

php pestle.phar list-commands

and get help for a specific command with

php pestle.phar help generate_module

If you want to build your own phar, we've got a phing build.xml file setup so all you should need to do to build a stand alone pestle.phar executable is

  • git checkout [email protected]:astorm/pestle.git
  • composer.phar install
  • ./build.sh (which, in turn, calls the phing job that builds the phar

If you're interested in working on the framework itself, you can use the runner.php in the project root. I personally use it by dropping the following in my ~/bin.

#File: ~/bin/pestle_dev
#!/usr/bin/env php
<?php
require_once('/Users/alanstorm/Documents/github/astorm/pestle/runner.php');

Troubleshooting Upgrades

If you've upgraded pestle and you're seeing the following exception

PHP Fatal error: Cannot redeclare Pulsestorm\Magento2\Cli\Help\pestle_cli()

Try removing the following temp folder.

/tmp/pestle_cache

We know this isn't ideal, and we're working on a more permanat fix.

Example Command

Try

$ pestle.phar generate_module

from a Magento 2 sub-directory to get an idea of what we're doing here.

How to Use Pestle Code in your Application

Pestle and the pestle_import function are a bit of an experiment, and you probably don't want to run code from module.php files directly in your PHP based application. Fortunately, we have a solution for you -- with every release of pestle we build a composer compatible autoloader in library/autoloader.php. This loads the entire pestle library structure as a single PHP file with proper block-namespaces (currently library/all.php). This means you can include pestle in your Composer based projects with

"require": {
    "pulsestorm/pestle": "1.0.*"
}

And then import pestle code via native PHP namespaces to your heart's content.

//include is probably not neccesary, usually handled by your framework
include 'vendor/autoload.php';
\Pulsestorm\Pestle\Library\output("Hello World");

Our specific strategy around this may change in the future, but our plan is for these sorts of changes to be user-transparent. If we ever split the generated library into multiple files, or figure out a sane way to incorporate pestle_import into native PHP code and you're using this project as a composer library — those changes should be transparent to you.

Do you have strong options about this sort of compilation/"transpiling"/module-importing? We'd love to have you involved in the project. Yell at us in a GitHub issues and/or pull request.

Want to learn more? We'll be using the wiki for documentation until we outgrow it.

Experimental Tab Completion

Pestle includes an experimental tab completion script. If used with your system's bash_completion sub-system, this script will allow use the [tab] key to auto-complete command names.

$ pestle.phar magento2:generate:ui: (press the tab key)
add-column-text    add-schema-column  form
add-form-field     add-to-layout      grid

Just copy or symlink the pestle-autocomplete.sh file to your bash_completion.d folder and you'll be good to go.

If you're running MacOS or MacOS X, you'll need to install the modern version of bash_completion via Homebrew (or your package manager of choice). Yes, this is super annoying. We found these instructions useful in late mid-2018. The simplified instructions are

  1. Install Homebrew
  2. Run $ brew install bash-completion to install the bash-completion package
  3. Enable the completion scripts by running $ . /usr/local/etc/bash_completion -- optionally adding this command (or a similar one) to your .bash_profile
Comments
  • Command not found

    Command not found

    I have tried pestle but I am not able to work with it. When tried to run command "pestle.phar list", it gives me the error "pestle.phar : command not found"

    opened by makwanaajay 21
  • PHP Fatal error:  Cannot redeclare Pulsestorm\Magento2\Cli\Help\pestle_cli()

    PHP Fatal error: Cannot redeclare Pulsestorm\Magento2\Cli\Help\pestle_cli()

    Make it so the following error doesn't happen after upgrading.

    PHP Fatal error: Cannot redeclare Pulsestorm\Magento2\Cli\Help\pestle_cli()

    (removing /tmp/pestle_cache will fix this)

    opened by astorm 15
  • Generating files causing error. Magento 2.3.3

    Generating files causing error. Magento 2.3.3

    php pestle.phar generate_module Pulsestorm JavascriptCssExample 0.1.0

    Comes up with the following error: PHP Fatal error: Uncaught Error: Class 'Pulsestorm\Pestle\Config\Exception' not found in phar://C:/xampp/htdocs/ecommerce_test/pestle.phar/modules/pulsestorm/pestle/config/module.php:52 Stack trace: #0 phar://C:/xampp/htdocs/ecommerce_test/pestle.phar/modules/pulsestorm/pestle/config/module.php(66): Pulsestorm\Pestle\Config\getOrSetConfigBase() #1 phar://C:/xampp/htdocs/ecommerce_test/pestle.phar/modules/pulsestorm/pestle/config/module.php(34): Pulsestorm\Pestle\Config\getPathConfig('package-folders') #2 [internal function]: Pulsestorm\Pestle\Config\loadConfigFile('package-folders') #3 phar://C:/xampp/htdocs/ecommerce_test/pestle.phar/modules/pulsestorm/pestle/config/module.php(18): call_user_func('Pulsestorm\Pest...', 'package-folders') #4 [internal function]: Pulsestorm\Pestle\Config\loadConfig('package-folders') #5 C:\tmp\pestle_cache\2d27f575ea4837c003f8467c72c32131\reflection-strategy\813ea2af6b985b27c8cb26ffbcf461c5.php(7): ReflectionFunction->invokeArgs(Array) #6 phar://C:/xampp/htdocs/ecommerce_test/pestle.phar/modul in phar://C:/xampp/htdocs/ecommerce_test/pestle.phar/modules/pulsestorm/pestle/config/module.php on line 52

    Fatal error: Uncaught Error: Class 'Pulsestorm\Pestle\Config\Exception' not found in phar://C:/xampp/htdocs/ecommerce_test/pestle.phar/modules/pulsestorm/pestle/config/module.php:52 Stack trace: #0 phar://C:/xampp/htdocs/ecommerce_test/pestle.phar/modules/pulsestorm/pestle/config/module.php(66): Pulsestorm\Pestle\Config\getOrSetConfigBase() #1 phar://C:/xampp/htdocs/ecommerce_test/pestle.phar/modules/pulsestorm/pestle/config/module.php(34): Pulsestorm\Pestle\Config\getPathConfig('package-folders') #2 [internal function]: Pulsestorm\Pestle\Config\loadConfigFile('package-folders') #3 phar://C:/xampp/htdocs/ecommerce_test/pestle.phar/modules/pulsestorm/pestle/config/module.php(18): call_user_func('Pulsestorm\Pest...', 'package-folders') #4 [internal function]: Pulsestorm\Pestle\Config\loadConfig('package-folders') #5 C:\tmp\pestle_cache\2d27f575ea4837c003f8467c72c32131\reflection-strategy\813ea2af6b985b27c8cb26ffbcf461c5.php(7): ReflectionFunction->invokeArgs(Array) #6 phar://C:/xampp/htdocs/ecommerce_test/pestle.phar/modul in phar://C:/xampp/htdocs/ecommerce_test/pestle.phar/modules/pulsestorm/pestle/config/module.php on line 52

    Any idea what's causing this?

    opened by mumar786 11
  • Feature request: Generate classes with magento DI boilerplate

    Feature request: Generate classes with magento DI boilerplate

    One common thing we do in almost all magento 2 php file is:

    1. Declare an argument in a constructor
    2. Declare a property within a class
    3. Assign injected dependency to the class property

    ;I.e the dependency injection dance

    I think the challenge here is figuring out an ideal method with which we can let pestle know that we'd like certain dependencies to be injected in certain generated classes. The reason why I think this is a challenge is because I think the ui (here the commandline) can quickly get confusing for commands that generate multiple php files. This might not be true though, this is just an opinion.

    A feature like this opens doors for constructor parameter validation in the future.

    opened by QwertyZW 8
  • #230 Change up crud generation so Repositories use resource models to…

    #230 Change up crud generation so Repositories use resource models to…

    Hello,

    I'm beginning the work to resolve #230, do not hesitate to tell me if that's the approch you wanted to do.

    Some remarks/questions:

    • I'm not sure about the way I retrieve the Repository name
    • Do I have to edit both library/all.php and modules/pulsestorm/magento2/cli/generate/XXX everytime? I don't know what is used all.php for.
    • How can I test my changes on my local environment?

    Thanks!

    opened by VincentMarmiesse 7
  • Can't find [VendorName] in Pulsestorm\Pestle\Runner\includeLibraryForCommand

    Can't find [VendorName] in Pulsestorm\Pestle\Runner\includeLibraryForCommand

    Making new test modules under VendorName(Pulsestorm) worked well so far.

    I tried to make a new module with a different vendor name(folder) for a test in CLI. Got an error message from pestle as below: Can't find [VendorName] in Pulsestorm\Pestle\Runner\includeLibraryForCommand

    signed up for a new github account, but still no luck finding any answer or documentation. Not sure I'm not authorized to read the documentation or it just doesn't exist at all.

    Can someone help me finding answer for this please?

    opened by triple486 7
  • Enhance ID column name

    Enhance ID column name

    Hello,

    The ID column name is currently <table_name>_id so it's not very beautiful, I think it's better to have <model_name>_id what do you think?

    opened by VincentMarmiesse 6
  • Events autocompletion

    Events autocompletion

    proposed changes

    1)Adds an arguments tracker loop 2)Adds an autocompletion list for observers magento2:generate:observer -completes only the 2nd argument (the event to observe) 3)Adds logic to trigger completion 4)Adds script used to generate the auto-complete list -note that I had to manually change this item https://github.com/QwertyZW/pestle/commit/55b70cc12005e109efe76b306342a22f02a8c392

    The regex in the capture group can be slightly changed to ignore this case all together

    known caveats

    1. assumes events are generated by occurence of .*eventManager->dispatch in the app/code/Magento directory
    2. list is not dynamic (creates limitations and versioning issues mentioned below)
    3. Only catches events that match the regex (details in script).

    other options

    There might be better ways to generate the list (such as parsing all the php files with ext-ast and figuring out what actually calls ->dispatch from the events manager)

    The list can also be generated dynamically, pcre2grep -r on the app/code/Magento directory doesn't seem to lag my machine (although theoretically it should), and without a change in the script this will require the pcre2grep command to be available (or perhaps change the command to rely only on grep as mentioned here)

    As of this writing the list is only up to date with the 2.1-develop branch. This can be alleviated by versioning the list(independently of pestle) although dynamic generation will be better because it can be made to capture not only the events generated by the Magento vendor but by all others as well.

    All that said

    This worked well enough for me

    khishman@khishman-desktop:~/dev/pestle$ ./pestle.phar -x --long-opt=xx magento2:generate:observer PulseStorm_HelloWorld custom
    customer_account_edited          customer_customer_authenticated  customer_login                   customer_register_success        customer_session_init            
    customer_address_format          customer_data_object_login       customer_logout                  customer_save_after_data_object  custom_quote_process             
    khishman@khishman-desktop:~/dev/pestle$ ./pestle.phar -x --long-opt=xx magento2:generate:observer PulseStorm_HelloWorld customer_
    customer_account_edited          customer_customer_authenticated  customer_login                   customer_register_success        customer_session_init            
    customer_address_format          customer_data_object_login       customer_logout                  customer_save_after_data_object  
    khishman@khishman-desktop:~/dev/pestle$ ./pestle.phar -x --long-opt=xx magento2:generate:observer PulseStorm_HelloWorld customer_register_success 
    
    
    opened by QwertyZW 6
  • #123: Updated runner.php to check php version before executing commands.

    #123: Updated runner.php to check php version before executing commands.

    This will break if the version notation on composer.json > require > php ever changes to support version logic other than greater than, but that seems unlikely.

    opened by jwineman 6
  • Could not find base Magento directory

    Could not find base Magento directory

    when ever i run any magento generate comands php ~/pestle.phar magento2:generate:command it tells me it cannot find a magento base dir

    json@WhiteSnake:/mnt/c/Users/jason/PhpstormProjects/js-mg$ php ~/pestle.phar magento2:generate:command
    In which module? (Pulsestorm_Helloworld)]
    Command Name? (Testbed)]
    Could not find base Magento directory
    

    Does a vanila magento need to be present in the same project root whenever i generate something

    opened by IasonArgyrakis 5
  • Could not run pestle commands

    Could not run pestle commands

    When I try

    php pestle help
    PHP Fatal error: Cannot redeclare Pulsestorm\Pestle\Library\loadJsonFromFile() (previously declared in phar:///var/www/html/cg/library/all.php:13812) in phar:///var/www/html/cg/modules/pulsestorm/pestle/library/module.php on line 11

    Environment PHP : 7.2 Magento : 2.3.3 Commerce Edition

    opened by Elamurugan-Nallathambi 5
  • Bump guzzlehttp/guzzle from 6.3.3 to 6.5.8

    Bump guzzlehttp/guzzle from 6.3.3 to 6.5.8

    Bumps guzzlehttp/guzzle from 6.3.3 to 6.5.8.

    Release notes

    Sourced from guzzlehttp/guzzle's releases.

    Release 6.5.8

    See change log for changes.

    Release 6.5.7

    See change log for changes.

    Release 6.5.6

    See change log for changes.

    6.5.5

    No release notes provided.

    6.5.4

    No release notes provided.

    6.5.3

    No release notes provided.

    6.5.2

    • idn_to_ascii() fix for old PHP versions #2489

    6.5.1

    • Better defaults for PHP installations with old ICU lib #2454
    • IDN support for redirects #2424

    6.5.0

    No release notes provided.

    6.4.1

    No release notes provided.

    Changelog

    Sourced from guzzlehttp/guzzle's changelog.

    6.5.8 - 2022-06-20

    • Fix change in port should be considered a change in origin
    • Fix CURLOPT_HTTPAUTH option not cleared on change of origin

    6.5.7 - 2022-06-09

    • Fix failure to strip Authorization header on HTTP downgrade
    • Fix failure to strip the Cookie header on change in host or HTTP downgrade

    6.5.6 - 2022-05-25

    • Fix cross-domain cookie leakage

    6.5.5 - 2020-06-16

    • Unpin version constraint for symfony/polyfill-intl-idn #2678

    6.5.4 - 2020-05-25

    • Fix various intl icu issues #2626

    6.5.3 - 2020-04-18

    • Use Symfony intl-idn polyfill #2550
    • Remove use of internal functions #2548

    6.5.2 - 2019-12-23

    • idn_to_ascii() fix for old PHP versions #2489

    6.5.1 - 2019-12-21

    • Better defaults for PHP installations with old ICU lib #2454
    • IDN support for redirects #2424

    6.5.0 - 2019-12-07

    • Improvement: Added support for reset internal queue in MockHandler. #2143
    • Improvement: Added support to pass arbitrary options to curl_multi_init. #2287
    • Fix: Gracefully handle passing null to the header option. #2132
    • Fix: RetryMiddleware did not do exponential delay between retries due unit mismatch. #2132 Previously, RetryMiddleware would sleep for 1 millisecond, then 2 milliseconds, then 4 milliseconds. After this change, RetryMiddleware will sleep for 1 second, then 2 seconds, then 4 seconds. Middleware::retry() accepts a second callback parameter to override the default timeouts if needed.
    • Fix: Prevent undefined offset when using array for ssl_key options. #2348
    • Deprecated ClientInterface::VERSION

    6.4.1 - 2019-10-23

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump guzzlehttp/psr7 from 1.6.1 to 1.8.5

    Bump guzzlehttp/psr7 from 1.6.1 to 1.8.5

    Bumps guzzlehttp/psr7 from 1.6.1 to 1.8.5.

    Release notes

    Sourced from guzzlehttp/psr7's releases.

    1.8.5

    See change log for changes.

    1.8.4

    See change log for changes.

    1.8.3

    See change log for changes.

    1.8.2

    See change log for changes.

    1.8.1

    See change log for changes.

    1.8.0

    See change log for changes.

    1.7.0

    See change log for changes.

    Changelog

    Sourced from guzzlehttp/psr7's changelog.

    1.8.5 - 2022-03-20

    Fixed

    • Correct header value validation

    1.8.4 - 2022-03-20

    Fixed

    • Validate header values properly

    1.8.3 - 2021-10-05

    Fixed

    • Return null in caching stream size if remote size is null

    1.8.2 - 2021-04-26

    Fixed

    • Handle possibly unset url in stream_get_meta_data

    1.8.1 - 2021-03-21

    Fixed

    • Issue parsing IPv6 URLs
    • Issue modifying ServerRequest lost all its attributes

    1.8.0 - 2021-03-21

    Added

    • Locale independent URL parsing
    • Most classes got a @final annotation to prepare for 2.0

    Fixed

    • Issue when creating stream from php://input and curl-ext is not installed
    • Broken Utils::tryFopen() on PHP 8

    1.7.0 - 2020-09-30

    Added

    • Replaced functions by static methods

    Fixed

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Renable phpcs

    Renable phpcs

    We had to disable phpcs because Magento starting requiring extra things that we're not in a position to add right now. We should fix the PHP CS warnings. and then reenable.

    opened by astorm 1
  • Initial Run is Failing

    Initial Run is Failing

    PHP Fatal error: Uncaught UnexpectedValueException: RecursiveDirectoryIterator::__construct(/Users/astorm/pestle_modules/modules/): failed to open dir: No such file or directory in phar:///Users/astorm/Documents/github_datanerds/NodeJS-agent/nodejs_agent/pestle.phar/modules/pulsestorm/cli/build_command_list/module.php:21

    opened by astormnewrelic 1
Owner
Alan Storm
"What's hypertext?", he said unsuspectingly.
Alan Storm
A collection of command-line utilities to aid in debugging browser engines.

Browser debug utilities This project contains several scripts that make the process of debugging browser engines much easier (some special cases excep

Clay Freeman 5 May 29, 2023
Magento-bulk - Bulk Import/Export helper scripts and CLI utilities for Magento Commerce

Magento Bulk Bulk operations for Magento. Configuration Copy config.php.sample to config.php and edit it. Product Attribute Management List All Attrib

Bippo Indonesia 23 Dec 20, 2022
Cookbook-magento - Collection of recipes to build app stack for the Magento deployments with Chef

Magento Cookbook Collection of recipes to build app stack for the Magento deployments with Chef Installation With Berkshelf echo "cookbook 'magento',

Yevhen Viktorov 37 Sep 26, 2020
Magento 2 Module Experius Page Not Found 404. This module saves all 404 url to a database table

Magento 2 Module Experius Page Not Found 404 This module saves all 404 urls to a database table. Adds an admin grid with 404s It includes a count so y

Experius 28 Dec 9, 2022
Automatically load the next page of products in Magento. Easy to install and configure, this module works 100% out of the box with vanilla Magento 1.9.x and earlier.

Automatically load the next page of products in Magento. Easy to install and configure, this module works 100% out of the box with vanilla Magento 1.9.x and earlier.

Strategery 123 Nov 20, 2021
Highly customizable alternative to var_export for PHP code generation

PHP Variable Exporter PHPEncoder is a PHP library for exporting variables and generating PHP code representations for said variables similar to the bu

Riikka Kalliomäki 71 Dec 30, 2022
Next-generation front-end for Magento 2

The next-generation front-end for Magento 2. Fast. Reliable. Extensible. Getting started – create a new application and deploy it as Magento 2 theme o

ScandiPWA 509 Jan 2, 2023
SilverStripe Garbage Collection Module

SilverStripe Module for defining and processing Garbage Collection on SilverStripe Applications.

Brett Tasker 8 Aug 12, 2022
Blacksmith is a code generation tool which automates the creation of common files that you'd typically create for each entity in your application.

Blacksmith is a code generation tool which automates the creation of common files that you'd typically create for each entity in your application.

Indatus 197 Dec 30, 2022
Magento 2 module to automatically flush the cache whenever you save something in the System Configuration

Yireo AutoFlushCache Magento 2 module to automatically flush the cache whenever you save something in the System Configuration. Do NOT use this in pro

Yireo 21 May 14, 2022
A tool that allows to quickly export data from Magento 1 and Magento 2 store and import it back into Magento 2

Simple Import / Export tool A tool that allows to quickly export data from Magento 1 and Magento 2 store and import it back into Magento 2. Table data

EcomDev B.V. 51 Dec 5, 2022
Magento Deployment Scripts

Magento Deployment Scripts Author: Fabrizio Branca This is a collection of scripts used to build/package, deploy and install Magento projects. Import

AOE 71 Sep 29, 2022
Scanner, signatures and the largest collection of Magento malware

Improved malware scanner now available Good news: our opensource malware scanner "mwscan" has been succeeded by a much better one called eComscan. It

Willem de Groot 651 Dec 6, 2022
Preload your sweet sweet code to opcache with a composer command, making your code faster to run.

Composer Preload Preload your sweet sweet code to opcache with a composer command, making your code run faster. Composer Preload is a composer plugin

Ayesh Karunaratne 197 Dec 6, 2022
Collection of value objects that represent the types of the PHP type system

sebastian/type Collection of value objects that represent the types of the PHP type system. Installation You can add this library as a local, per-proj

Sebastian Bergmann 1.1k Dec 29, 2022
[ONLY Magento 2.0.x Compatible] Code samples for Magento developers

Synopsis This project is a collection of samples to demonstrate technologies introduced in Magento 2. You will find the most simple extension along wi

Magento 58 Dec 26, 2022
m4b-tool is a command line utility to merge, split and chapterize audiobook files such as mp3, ogg, flac, m4a or m4b

m4b-tool m4b-tool is a is a wrapper for ffmpeg and mp4v2 to merge, split or and manipulate audiobook files with chapters. Although m4b-tool is designe

Andreas 798 Jan 8, 2023