Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/rapsys/packbundle

Symfony bundle rapsys/packbundle used to compress ressources
https://github.com/rapsys/packbundle

assetic assetic-bundle assetic-filters captcha facebook image image-processing imagemagick jpeg openstreetmap osm php png slugger symfony symfony-bundle webp webpack webpacker

Last synced: 5 days ago
JSON representation

Symfony bundle rapsys/packbundle used to compress ressources

Awesome Lists containing this project

README

        

Contribute
==========

You may buy me a Beer, a Tea or help with Server fees with a paypal donation to
the address .

Don't forget to show your love for this project, feel free to report bugs to
the author, issues which are security relevant should be disclosed privately
first.

Patches are welcomed and grant credit when requested.

Installation
============

Applications that use Symfony Flex
----------------------------------

Add bundle custom repository to your project's `composer.json` file:

```json
{
...,
"repositories": [
{
"type": "package",
"package": {
"name": "rapsys/packbundle",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://git.rapsys.eu/packbundle",
"reference": "master"
},
"autoload": {
"psr-4": {
"Rapsys\\PackBundle\\": ""
}
},
"require": {
"symfony/asset": "^4.0|^5.0|^6.0|^7.0",
"symfony/flex": "^1.0|^2.0",
"symfony/framework-bundle": "^4.0|^5.0|^6.0|^7.0",
"symfony/process": "^4.0|^5.0|^6.0|^7.0",
"symfony/twig-bundle": "^4.0|^5.0|^6.0|^7.0"
}
}
}
],
...
}
```

Then open a command console, enter your project directory and execute:

```console
$ composer require rapsys/packbundle dev-master
```

Applications that don't use Symfony Flex
----------------------------------------

### Step 1: Download the Bundle

Open a command console, enter your project directory and execute the
following command to download the latest stable version of this bundle:

```console
$ composer require rapsys/packbundle dev-master
```

This command requires you to have Composer installed globally, as explained
in the [installation chapter](https://getcomposer.org/doc/00-intro.md)
of the Composer documentation.

### Step 2: Enable the Bundle

Then, enable the bundle by adding it to the list of registered bundles
in the `app/AppKernel.php` file of your project:

```php



{% block title %}Welcome!{% endblock %}
{% stylesheet '//fonts.googleapis.com/css?family=Irish+Grover|La+Belle+Aurore' '@NamedBundle/Resources/public/css/{reset,screen}.css' '@Short/css/example.css' %}

{% endstylesheet %}


{% block body %}{% endblock %}
{% javascript '@Short/js/*.js' %}

{% endjavascript %}

```

### Step 5: Make sure you have local binary installed

You need to have cpack and jpack scripts from https://git.rapsys.eu/packer/ repository
set as executable and installed in /usr/local/bin.

To install cpack and jpack required packages open a root console and execute the
following command:

```console
# urpmi perl-base perl-CSS-Packer perl-JavaScript-Packer
```

or stone age distributions:

```console
# apt-get install libcss-packer-perl libjavascript-packer-perl
```

or other distributions through cpan:

```console
# cpan App::cpanminus
# cpanm CSS::Packer
# cpanm JavaScript::Packer
```

### Step 6: Create your own filter

You can create you own mypackfilter class which call a mypack binary:

```php
fileName = $fileName;

//Set line
$this->line = $line;

//Set bin
$this->bin = $bin;

//Check argument presence
if (!empty($this->...)) {
//Append argument
if ($this->... == '...') {
$this->bin .= ' ...';
} else {
//Throw an error on ...
throw new Error(sprintf('Got ... for %s: %s', $this->bin, $this->...), $this->line, $this->fileName);
}
}
}

//Pass merge of all inputs in content
public function process(string $content): string {
//Create descriptors
$descriptorSpec = array(
0 => array('pipe', 'r'),
1 => array('pipe', 'w'),
2 => array('pipe', 'w')
);

//Open process
if (is_resource($proc = proc_open($this->bin, $descriptorSpec, $pipes))) {
//Set stderr as non blocking
stream_set_blocking($pipes[2], false);

//Send content to stdin
fwrite($pipes[0], $content);

//Close stdin
fclose($pipes[0]);

//Read content from stdout
if ($stdout = stream_get_contents($pipes[1])) {
$content = $stdout;
}

//Close stdout
fclose($pipes[1]);

//Read content from stderr
if (($stderr = stream_get_contents($pipes[2]))) {
throw new Error(sprintf('Got unexpected strerr for %s: %s', $this->bin, $stderr), $this->line, $this->fileName);
}

//Close stderr
fclose($pipes[2]);

//Close process
if (($ret = proc_close($proc))) {
throw new Error(sprintf('Got unexpected non zero return code %s: %d', $this->bin, $ret), $this->line, $this->fileName);
}
}

//Return content
return $content;
}
}
```

The class must implements FilterInterface and get it's arguments through constructor.