├── .gitignore ├── .travis.yml ├── LICENSE.txt ├── README.md ├── ci_script ├── composer.json ├── composer.lock ├── phpunit.xml ├── provides.json ├── src ├── Efficiently │ └── Larasset │ │ ├── Asset.php │ │ ├── Commands │ │ ├── AssetsCommand.php │ │ ├── BaseCommand.php │ │ ├── CleanAssetsCommand.php │ │ ├── PrecompileAssetsCommand.php │ │ ├── ServeAssetsCommand.php │ │ ├── ServerCommand.php │ │ └── SetupAssetsCommand.php │ │ ├── Facades │ │ ├── Asset.php │ │ └── Manifest.php │ │ ├── LarassetServiceProvider.php │ │ ├── Manifest.php │ │ └── helpers.php └── config │ └── config.php ├── structure ├── provider │ └── assets │ │ ├── css │ │ └── .gitkeep │ │ ├── images │ │ └── .gitkeep │ │ └── js │ │ └── .gitkeep ├── public │ └── assets │ │ └── .gitkeep └── resources │ └── assets │ ├── css │ └── app.css │ ├── images │ └── .gitkeep │ └── js │ └── app.js └── tests └── .gitkeep /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor 2 | .DS_Store 3 | 4 | # Ignore all logfiles and tempfiles. 5 | /log/*.log 6 | /tmp 7 | 8 | /node_modules 9 | /nbproject 10 | /*.sublime-* 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - 5.6 5 | - 7.0 6 | 7 | matrix: 8 | allow_failures: 9 | - php: 7.0 10 | 11 | install: travis_retry composer install --prefer-source --no-interaction 12 | 13 | before_script: 14 | - export DISPLAY=:99.0 15 | - sh -e /etc/init.d/xvfb start 16 | - wget http://selenium-release.storage.googleapis.com/2.53/selenium-server-standalone-2.53.1.jar 17 | - java -jar selenium-server-standalone-2.53.1.jar -port 4444 & 18 | - chmod +x ./ci_script 19 | 20 | script: ./ci_script 21 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Tortue Torche 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Larasset 2 | ======== 3 | 4 | [![Build Status](https://travis-ci.org/efficiently/larasset.svg?branch=1.3)](https://travis-ci.org/efficiently/larasset) 5 | 6 | The Asset Pipeline for **Laravel 5.1, 5.2 & 5.3** ! 7 | 8 | The asset pipeline provides a framework to concatenate and minify or compress 9 | JavaScript and CSS assets. It also adds the ability to write these assets in 10 | other languages and pre-processors such as CoffeeScript, LESS, Sass and EJS. 11 | 12 | For [Laravel 4.1 or 4.2](http://laravel.com/docs/4.2) supports see [Larasset 0.9 branch](https://github.com/efficiently/larasset/tree/0.9) 13 | 14 | For [Laravel 5.0](http://laravel.com/docs/5.0) supports see [Larasset 1.0 branch](https://github.com/efficiently/larasset/tree/1.0) 15 | 16 | For a more complete description of this package, you can read the Wiki docs: 17 | * The [Asset Pipeline](https://github.com/efficiently/larasset/wiki/Asset-pipeline) Guide 18 | * [Working with Ajax/JavaScript in Laravel](https://github.com/efficiently/larasset/wiki/Working-with-JavaScript-and-Larasset) Guide 19 | 20 | Examples of Larasset usage. 21 | 22 | - `php artisan larasset:precompile`: Precompile assets of your application, useful for your production environment 23 | - `php artisan larasset:serve`: Launch Larasset's server for serving assets, useful for your development environment 24 | - `php artisan server`: Serve your Laravel application on the PHP development server and also the Larasset's server for serving assets 25 | 26 | Demo application 27 | ---------------- 28 | 29 | You can see this package in action with this [**online demo**](http://larasset.herokuapp.com/messages). 30 | And you can grab the source code of this demo [here](https://github.com/efficiently/laravel_larasset_app/tree/bootstrap-l5.1). 31 | 32 | Prerequisites 33 | ------------- 34 | 35 | You must [install Node.js](http://nodejs.org) on your computer (development environment only). 36 | 37 | This package is **only** compatible with **PHP >= 5.5** and **Laravel >= 5.1** framework. 38 | 39 | Installation 40 | ------------ 41 | 42 | ### Install and config Larasset package 43 | 44 | 1. In the `composer.json`, replace the line `"minimum-stability": "stable"` by: 45 | 46 | ```javascript 47 | "minimum-stability": "dev" 48 | ``` 49 | 50 | 2. Install Larasset package with composer: 51 | 52 | ```sh 53 | composer require efficiently/larasset:1.2.* 54 | ``` 55 | 56 | 3. Turn on your application debug mode, create or edit the `config/app.php` file: 57 | 58 | ```php 59 | true, 63 | // Others config options.... 64 | ]; 65 | ``` 66 | 67 | Note: It is strongly recommended that you turn off error detail in your production environment. 68 | 69 | 4. Add these services providers to `config/app.php`: 70 | 71 | ```php 72 | 'Collective\Html\HtmlServiceProvider', 73 | 'Efficiently\Larasset\LarassetServiceProvider', 74 | 'Efficiently\JqueryLaravel\JqueryLaravelServiceProvider', 75 | ``` 76 | 77 | 5. Add these alias (facades) to your Laravel `config/app.php` file: 78 | 79 | ```php 80 | 'Form' => 'Collective\Html\FormFacade', 81 | 'HTML' => 'Collective\Html\HtmlFacade', 82 | 'Asset' => 'Efficiently\Larasset\Facades\Asset', 83 | ``` 84 | 85 | 6. You can now add the this security Middleware to your `app/Http/Kernel.php` file: 86 | 87 | ```php 88 | 'Efficiently\JqueryLaravel\VerifyJavascriptResponse', 89 | ``` 90 | 91 | 7. You will need install some [Node.js](http://nodejs.org/) modules in order to run these Larasset commands: 92 | 93 | ```sh 94 | npm install -g larasset-js 95 | ``` 96 | 97 | 8. Finally run `php artisan larasset:setup`. 98 | 99 | The rest of the installation depends on whether the asset pipeline is being used. 100 | 101 | Assets middleware server 102 | ------------------------ 103 | 104 | Run: 105 | 106 | php artisan larasset:serve 107 | 108 | NOTICE: You should use it **only** in a development/local environment 109 | 110 | 111 | Precompiling assets (Manifest usage) 112 | ------------------------------------ 113 | 114 | Run: 115 | 116 | php artisan larasset:precompile 117 | 118 | NOTICE: You are encouraged to use it in a production environment, 119 | for more informations, **read the next section**. 120 | 121 | 122 | Development VS Production mode 123 | ------------------------------ 124 | 125 | By default Larasset is running in _development_ mode. That means that it will 126 | recompile (server) any changed asset on demand. Also it's not compressing 127 | JavaScript and/or Stylesheets in development mode. To run Larraset's server and 128 | precompiler in production-ready mode, use `--assets-env production` command line 129 | option, like so: 130 | 131 | php artisan larasset:precompile --assets-env production 132 | 133 | 134 | Changelog 135 | --------- 136 | ### [1.3.x](https://github.com/efficiently/larasset/tree/1.3) 137 | * Laravel 5.3 support! 138 | 139 | ### [1.2.0](https://github.com/efficiently/larasset/tree/1.2.0) 140 | * Laravel 5.2 support! 141 | 142 | ### [1.1.0](https://github.com/efficiently/larasset/tree/1.1.0) 143 | * Laravel 5.1 support! 144 | * CoffeeScript compile now the JavaScript without the top-level function safety wrapper (non-bare mode) via [`larasset-js` 1.2.0](https://github.com/efficiently/larasset-js/tree/1.2.0) 145 | * [ECMAScript 2015](http://ecma-international.org/ecma-262/6.0) (ES6) support with [Babel](http://babeljs.io/) via [`larasset-js` 1.1.1](https://github.com/efficiently/larasset-js/tree/1.1.1) 146 | * Add the `humanize()` function helper to fix the `image_tag()` helper (fix [#15](https://github.com/efficiently/larasset/issues/15)). 147 | * Add a `larasset.port` config option. 148 | For handling correctly the `--larasset-port` option of the `php artisan server` command. 149 | Useful for your development environment when you run the assets server. 150 | The default port value is `3000`. 151 | You can change it in the `config/larasset.php` file of your Laravel application. 152 | * Replace the deprecated [`illuminate/html`](https://github.com/illuminate/html) package by the [`laravelcollective/html`](https://github.com/LaravelCollective/html) package. 153 | * **Upgrade Notes** (if you used previously this package with Laravel 4.x or 5.0): 154 | * You should replace in the `config/app.php` file of your Laravel application: 155 | 1. `'Illuminate\Html\HtmlServiceProvider',` by `'Collective\Html\HtmlServiceProvider',` 156 | 2. `'Form' => 'Illuminate\Html\FormFacade',` by `'Form' => 'Collective\Html\FormFacade',` 157 | 3. `'HTML' => 'Illuminate\Html\HtmlFacade',` by `'HTML' => 'Collective\Html\HtmlFacade',` 158 | 159 | ### [1.0.2](https://github.com/efficiently/larasset/tree/1.0.2) 160 | * Fix PHP 5.4 support. 161 | 162 | ### [1.0.1](https://github.com/efficiently/larasset/tree/1.0.1) 163 | * Backporting the `humanize()` function helper to fix the `image_tag()` helper (fix #15). 164 | 165 | ### [1.0.0](https://github.com/efficiently/larasset/tree/1.0.0) 166 | * Laravel 5.0 support! 167 | 168 | ### [0.9.8](https://github.com/efficiently/larasset/tree/0.9.8) 169 | * Backporting the `humanize()` function helper to fix the `image_tag()` helper (fix #15). 170 | 171 | ### [0.9.7](https://github.com/efficiently/larasset/tree/0.9.7) 172 | * Add an option to disable Source Mapping. 173 | 174 | ### [0.9.6](https://github.com/efficiently/larasset/tree/0.9.6) 175 | * **Breaking changes:** 176 | The `--environment` command line option is renamed to `--assets-env`. Because there was some conflicts with the Laravel command line option `--env`. And `larasset-environment` command line option is renamed to `--larasset-env`. 177 | See issue [#6](https://github.com/efficiently/larasset/issues/6) for more information. 178 | 179 | Credits 180 | ------- 181 | 182 | * The original [Asset Pipeline](https://github.com/rails/sprockets-rails) (Sprockets) from the Ruby on Rails framework. 183 | * A Node.js port of the Asset Pipeline: [Mincer](https://github.com/nodeca/mincer) 184 | * A PHP port of the [Asset Pipeline](https://github.com/CodeSleeve/asset-pipeline) 185 | 186 | 187 | Acknowledgements 188 | ---------------- 189 | 190 | Released under the MIT License. 191 | 192 | #### This is beta-quality software 193 | It works well according to our tests. The internal API may change and other features will be added. 194 | We are working to make Larasset production quality software. 195 | -------------------------------------------------------------------------------- /ci_script: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | cd .. 4 | git clone https://github.com/efficiently/jquery-laravel.git --branch 2.2 5 | git clone https://github.com/efficiently/laravel_larasset_app.git --branch 1.3 6 | 7 | cd laravel_larasset_app 8 | composer self-update 9 | composer install --prefer-source --no-interaction 10 | rm vendor/efficiently/jquery-laravel -Rf 11 | rm vendor/efficiently/larasset -Rf 12 | cp -pR ../jquery-laravel vendor/efficiently 13 | cp -pR ../larasset vendor/efficiently 14 | npm install -g larasset-js 15 | chmod +x ./ci_script 16 | ./ci_script # Run acceptance tests of the Larasset demo 17 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "efficiently/larasset", 3 | "description": "Larasset is a library for Laravel 5 which manage assets in an easy way.", 4 | "keywords": [ 5 | "assets", 6 | "sprockets", 7 | "mincer", 8 | "node", 9 | "asset-pipeline", 10 | "pipeline", 11 | "css", 12 | "javascript", 13 | "less", 14 | "sass", 15 | "scss", 16 | "coffeescript", 17 | "minify", 18 | "precompile", 19 | "sourcemaps", 20 | "source-map", 21 | "manifest", 22 | "versioning", 23 | "laravel", 24 | "laravel 5", 25 | "laravel 5.1", 26 | "laravel 5.2", 27 | "laravel 5.3", 28 | "laravel 5.4" 29 | ], 30 | "license": "MIT", 31 | "authors": [ 32 | { 33 | "name": "Tortue Torche", 34 | "email": "tortuetorche@spam.me" 35 | } 36 | ], 37 | "require": { 38 | "php": ">=5.4.0", 39 | "laravelcollective/html": "~5.0.0||~5.1.0||~5.2.0||~5.3.0||~5.4.0", 40 | "efficiently/jquery-laravel": "~2.2.0" 41 | }, 42 | "require-dev": { 43 | "illuminate/support": "~5.0", 44 | "illuminate/console": "~5.0" 45 | }, 46 | "autoload": { 47 | "classmap": [ 48 | ], 49 | "files": [ 50 | "src/Efficiently/Larasset/helpers.php" 51 | ], 52 | "psr-0": { 53 | "Efficiently\\Larasset\\": "src/" 54 | } 55 | }, 56 | "config": { 57 | "preferred-install": "dist" 58 | }, 59 | "prefer-stable": true, 60 | "minimum-stability": "dev" 61 | } 62 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "edc85db675a9b69752886d6ed128f0c7", 8 | "content-hash": "83e33fb0c363ec6746dfa4831898fa97", 9 | "packages": [ 10 | { 11 | "name": "doctrine/inflector", 12 | "version": "v1.1.0", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/doctrine/inflector.git", 16 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", 21 | "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "php": ">=5.3.2" 26 | }, 27 | "require-dev": { 28 | "phpunit/phpunit": "4.*" 29 | }, 30 | "type": "library", 31 | "extra": { 32 | "branch-alias": { 33 | "dev-master": "1.1.x-dev" 34 | } 35 | }, 36 | "autoload": { 37 | "psr-0": { 38 | "Doctrine\\Common\\Inflector\\": "lib/" 39 | } 40 | }, 41 | "notification-url": "https://packagist.org/downloads/", 42 | "license": [ 43 | "MIT" 44 | ], 45 | "authors": [ 46 | { 47 | "name": "Roman Borschel", 48 | "email": "roman@code-factory.org" 49 | }, 50 | { 51 | "name": "Benjamin Eberlei", 52 | "email": "kontakt@beberlei.de" 53 | }, 54 | { 55 | "name": "Guilherme Blanco", 56 | "email": "guilhermeblanco@gmail.com" 57 | }, 58 | { 59 | "name": "Jonathan Wage", 60 | "email": "jonwage@gmail.com" 61 | }, 62 | { 63 | "name": "Johannes Schmitt", 64 | "email": "schmittjoh@gmail.com" 65 | } 66 | ], 67 | "description": "Common String Manipulations with regard to casing and singular/plural rules.", 68 | "homepage": "http://www.doctrine-project.org", 69 | "keywords": [ 70 | "inflection", 71 | "pluralize", 72 | "singularize", 73 | "string" 74 | ], 75 | "time": "2015-11-06 14:35:42" 76 | }, 77 | { 78 | "name": "efficiently/jquery-laravel", 79 | "version": "2.2.x-dev", 80 | "source": { 81 | "type": "git", 82 | "url": "https://github.com/efficiently/jquery-laravel.git", 83 | "reference": "dd8bd6b6e577d8539671ce85047a6b94afee8d20" 84 | }, 85 | "dist": { 86 | "type": "zip", 87 | "url": "https://api.github.com/repos/efficiently/jquery-laravel/zipball/dd8bd6b6e577d8539671ce85047a6b94afee8d20", 88 | "reference": "dd8bd6b6e577d8539671ce85047a6b94afee8d20", 89 | "shasum": "" 90 | }, 91 | "require": { 92 | "illuminate/support": "~5.1.0||~5.2.0||~5.3.0", 93 | "laravelcollective/html": "~5.1.0||~5.2.0||~5.3.0", 94 | "php": ">=5.5.0" 95 | }, 96 | "require-dev": { 97 | "anahkiasen/former": "~4.0.0", 98 | "mockery/mockery": "0.9.*", 99 | "orchestra/testbench": "~3.1.0||~3.2.0||~3.3.0", 100 | "phpunit/phpunit": "~4.5" 101 | }, 102 | "type": "library", 103 | "autoload": { 104 | "files": [ 105 | "src/Efficiently/JqueryLaravel/helpers.php" 106 | ], 107 | "psr-0": { 108 | "Efficiently\\JqueryLaravel\\": "src/" 109 | } 110 | }, 111 | "notification-url": "https://packagist.org/downloads/", 112 | "license": [ 113 | "MIT" 114 | ], 115 | "authors": [ 116 | { 117 | "name": "Tortue Torche", 118 | "email": "tortuetorche@spam.me" 119 | } 120 | ], 121 | "description": "This package provides jQuery and the jQuery-ujs driver for your Laravel >= 5.1 application.", 122 | "keywords": [ 123 | "Laravel 5.1", 124 | "Laravel 5.2", 125 | "ajax", 126 | "asset pipeline", 127 | "assets", 128 | "javascript", 129 | "jquery", 130 | "larasset", 131 | "laravel", 132 | "laravel 5.3", 133 | "pipeline", 134 | "ujs", 135 | "unobtrusive" 136 | ], 137 | "time": "2016-09-02 12:29:45" 138 | }, 139 | { 140 | "name": "illuminate/container", 141 | "version": "v5.3.4", 142 | "source": { 143 | "type": "git", 144 | "url": "https://github.com/illuminate/container.git", 145 | "reference": "360f4900dbaa7e76ecfbb58e0ad4b244a90edfe3" 146 | }, 147 | "dist": { 148 | "type": "zip", 149 | "url": "https://api.github.com/repos/illuminate/container/zipball/360f4900dbaa7e76ecfbb58e0ad4b244a90edfe3", 150 | "reference": "360f4900dbaa7e76ecfbb58e0ad4b244a90edfe3", 151 | "shasum": "" 152 | }, 153 | "require": { 154 | "illuminate/contracts": "5.3.*", 155 | "php": ">=5.6.4" 156 | }, 157 | "type": "library", 158 | "extra": { 159 | "branch-alias": { 160 | "dev-master": "5.3-dev" 161 | } 162 | }, 163 | "autoload": { 164 | "psr-4": { 165 | "Illuminate\\Container\\": "" 166 | } 167 | }, 168 | "notification-url": "https://packagist.org/downloads/", 169 | "license": [ 170 | "MIT" 171 | ], 172 | "authors": [ 173 | { 174 | "name": "Taylor Otwell", 175 | "email": "taylor@laravel.com" 176 | } 177 | ], 178 | "description": "The Illuminate Container package.", 179 | "homepage": "https://laravel.com", 180 | "time": "2016-08-05 14:48:10" 181 | }, 182 | { 183 | "name": "illuminate/contracts", 184 | "version": "v5.3.4", 185 | "source": { 186 | "type": "git", 187 | "url": "https://github.com/illuminate/contracts.git", 188 | "reference": "f766fc0452d82d545b866a8ad5860b20ccd50763" 189 | }, 190 | "dist": { 191 | "type": "zip", 192 | "url": "https://api.github.com/repos/illuminate/contracts/zipball/f766fc0452d82d545b866a8ad5860b20ccd50763", 193 | "reference": "f766fc0452d82d545b866a8ad5860b20ccd50763", 194 | "shasum": "" 195 | }, 196 | "require": { 197 | "php": ">=5.6.4" 198 | }, 199 | "type": "library", 200 | "extra": { 201 | "branch-alias": { 202 | "dev-master": "5.3-dev" 203 | } 204 | }, 205 | "autoload": { 206 | "psr-4": { 207 | "Illuminate\\Contracts\\": "" 208 | } 209 | }, 210 | "notification-url": "https://packagist.org/downloads/", 211 | "license": [ 212 | "MIT" 213 | ], 214 | "authors": [ 215 | { 216 | "name": "Taylor Otwell", 217 | "email": "taylor@laravel.com" 218 | } 219 | ], 220 | "description": "The Illuminate Contracts package.", 221 | "homepage": "https://laravel.com", 222 | "time": "2016-08-21 12:37:00" 223 | }, 224 | { 225 | "name": "illuminate/events", 226 | "version": "v5.3.4", 227 | "source": { 228 | "type": "git", 229 | "url": "https://github.com/illuminate/events.git", 230 | "reference": "cb29124d4eaba8a60bad40e95e3d8b199d040d77" 231 | }, 232 | "dist": { 233 | "type": "zip", 234 | "url": "https://api.github.com/repos/illuminate/events/zipball/cb29124d4eaba8a60bad40e95e3d8b199d040d77", 235 | "reference": "cb29124d4eaba8a60bad40e95e3d8b199d040d77", 236 | "shasum": "" 237 | }, 238 | "require": { 239 | "illuminate/container": "5.3.*", 240 | "illuminate/contracts": "5.3.*", 241 | "illuminate/support": "5.3.*", 242 | "php": ">=5.6.4" 243 | }, 244 | "type": "library", 245 | "extra": { 246 | "branch-alias": { 247 | "dev-master": "5.3-dev" 248 | } 249 | }, 250 | "autoload": { 251 | "psr-4": { 252 | "Illuminate\\Events\\": "" 253 | } 254 | }, 255 | "notification-url": "https://packagist.org/downloads/", 256 | "license": [ 257 | "MIT" 258 | ], 259 | "authors": [ 260 | { 261 | "name": "Taylor Otwell", 262 | "email": "taylor@laravel.com" 263 | } 264 | ], 265 | "description": "The Illuminate Events package.", 266 | "homepage": "https://laravel.com", 267 | "time": "2016-08-12 14:24:30" 268 | }, 269 | { 270 | "name": "illuminate/filesystem", 271 | "version": "v5.3.4", 272 | "source": { 273 | "type": "git", 274 | "url": "https://github.com/illuminate/filesystem.git", 275 | "reference": "72da79358499a38b437ff4b0e42f909660555298" 276 | }, 277 | "dist": { 278 | "type": "zip", 279 | "url": "https://api.github.com/repos/illuminate/filesystem/zipball/72da79358499a38b437ff4b0e42f909660555298", 280 | "reference": "72da79358499a38b437ff4b0e42f909660555298", 281 | "shasum": "" 282 | }, 283 | "require": { 284 | "illuminate/contracts": "5.3.*", 285 | "illuminate/support": "5.3.*", 286 | "php": ">=5.6.4", 287 | "symfony/finder": "3.1.*" 288 | }, 289 | "suggest": { 290 | "league/flysystem": "Required to use the Flysystem local and FTP drivers (~1.0).", 291 | "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (~1.0).", 292 | "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (~1.0)." 293 | }, 294 | "type": "library", 295 | "extra": { 296 | "branch-alias": { 297 | "dev-master": "5.3-dev" 298 | } 299 | }, 300 | "autoload": { 301 | "psr-4": { 302 | "Illuminate\\Filesystem\\": "" 303 | } 304 | }, 305 | "notification-url": "https://packagist.org/downloads/", 306 | "license": [ 307 | "MIT" 308 | ], 309 | "authors": [ 310 | { 311 | "name": "Taylor Otwell", 312 | "email": "taylor@laravel.com" 313 | } 314 | ], 315 | "description": "The Illuminate Filesystem package.", 316 | "homepage": "https://laravel.com", 317 | "time": "2016-08-22 03:02:14" 318 | }, 319 | { 320 | "name": "illuminate/http", 321 | "version": "v5.3.4", 322 | "source": { 323 | "type": "git", 324 | "url": "https://github.com/illuminate/http.git", 325 | "reference": "333263fe8aa6db11187a256ea55c2e9e97f28c4b" 326 | }, 327 | "dist": { 328 | "type": "zip", 329 | "url": "https://api.github.com/repos/illuminate/http/zipball/333263fe8aa6db11187a256ea55c2e9e97f28c4b", 330 | "reference": "333263fe8aa6db11187a256ea55c2e9e97f28c4b", 331 | "shasum": "" 332 | }, 333 | "require": { 334 | "illuminate/session": "5.3.*", 335 | "illuminate/support": "5.3.*", 336 | "php": ">=5.6.4", 337 | "symfony/http-foundation": "3.1.*", 338 | "symfony/http-kernel": "3.1.*" 339 | }, 340 | "type": "library", 341 | "extra": { 342 | "branch-alias": { 343 | "dev-master": "5.3-dev" 344 | } 345 | }, 346 | "autoload": { 347 | "psr-4": { 348 | "Illuminate\\Http\\": "" 349 | } 350 | }, 351 | "notification-url": "https://packagist.org/downloads/", 352 | "license": [ 353 | "MIT" 354 | ], 355 | "authors": [ 356 | { 357 | "name": "Taylor Otwell", 358 | "email": "taylor@laravel.com" 359 | } 360 | ], 361 | "description": "The Illuminate Http package.", 362 | "homepage": "https://laravel.com", 363 | "time": "2016-08-22 10:25:11" 364 | }, 365 | { 366 | "name": "illuminate/pipeline", 367 | "version": "v5.3.4", 368 | "source": { 369 | "type": "git", 370 | "url": "https://github.com/illuminate/pipeline.git", 371 | "reference": "cd469572fad11243e7f4c5c02fca410657f0a457" 372 | }, 373 | "dist": { 374 | "type": "zip", 375 | "url": "https://api.github.com/repos/illuminate/pipeline/zipball/cd469572fad11243e7f4c5c02fca410657f0a457", 376 | "reference": "cd469572fad11243e7f4c5c02fca410657f0a457", 377 | "shasum": "" 378 | }, 379 | "require": { 380 | "illuminate/contracts": "5.3.*", 381 | "illuminate/support": "5.3.*", 382 | "php": ">=5.6.4" 383 | }, 384 | "type": "library", 385 | "extra": { 386 | "branch-alias": { 387 | "dev-master": "5.3-dev" 388 | } 389 | }, 390 | "autoload": { 391 | "psr-4": { 392 | "Illuminate\\Pipeline\\": "" 393 | } 394 | }, 395 | "notification-url": "https://packagist.org/downloads/", 396 | "license": [ 397 | "MIT" 398 | ], 399 | "authors": [ 400 | { 401 | "name": "Taylor Otwell", 402 | "email": "taylor@laravel.com" 403 | } 404 | ], 405 | "description": "The Illuminate Pipeline package.", 406 | "homepage": "https://laravel.com", 407 | "time": "2016-08-07 17:26:10" 408 | }, 409 | { 410 | "name": "illuminate/routing", 411 | "version": "v5.3.4", 412 | "source": { 413 | "type": "git", 414 | "url": "https://github.com/illuminate/routing.git", 415 | "reference": "3dafc280a93178c8290828218b450ec4906235b4" 416 | }, 417 | "dist": { 418 | "type": "zip", 419 | "url": "https://api.github.com/repos/illuminate/routing/zipball/3dafc280a93178c8290828218b450ec4906235b4", 420 | "reference": "3dafc280a93178c8290828218b450ec4906235b4", 421 | "shasum": "" 422 | }, 423 | "require": { 424 | "illuminate/container": "5.3.*", 425 | "illuminate/contracts": "5.3.*", 426 | "illuminate/http": "5.3.*", 427 | "illuminate/pipeline": "5.3.*", 428 | "illuminate/session": "5.3.*", 429 | "illuminate/support": "5.3.*", 430 | "php": ">=5.6.4", 431 | "symfony/debug": "3.1.*", 432 | "symfony/http-foundation": "3.1.*", 433 | "symfony/http-kernel": "3.1.*", 434 | "symfony/routing": "3.1.*" 435 | }, 436 | "suggest": { 437 | "illuminate/console": "Required to use the make commands (5.3.*).", 438 | "symfony/psr-http-message-bridge": "Required to psr7 bridging features (0.2.*)." 439 | }, 440 | "type": "library", 441 | "extra": { 442 | "branch-alias": { 443 | "dev-master": "5.3-dev" 444 | } 445 | }, 446 | "autoload": { 447 | "psr-4": { 448 | "Illuminate\\Routing\\": "" 449 | } 450 | }, 451 | "notification-url": "https://packagist.org/downloads/", 452 | "license": [ 453 | "MIT" 454 | ], 455 | "authors": [ 456 | { 457 | "name": "Taylor Otwell", 458 | "email": "taylor@laravel.com" 459 | } 460 | ], 461 | "description": "The Illuminate Routing package.", 462 | "homepage": "https://laravel.com", 463 | "time": "2016-08-26 21:12:19" 464 | }, 465 | { 466 | "name": "illuminate/session", 467 | "version": "v5.3.4", 468 | "source": { 469 | "type": "git", 470 | "url": "https://github.com/illuminate/session.git", 471 | "reference": "0f818548aa248f64d89f8129229a4de84184f59e" 472 | }, 473 | "dist": { 474 | "type": "zip", 475 | "url": "https://api.github.com/repos/illuminate/session/zipball/0f818548aa248f64d89f8129229a4de84184f59e", 476 | "reference": "0f818548aa248f64d89f8129229a4de84184f59e", 477 | "shasum": "" 478 | }, 479 | "require": { 480 | "illuminate/contracts": "5.3.*", 481 | "illuminate/support": "5.3.*", 482 | "nesbot/carbon": "~1.20", 483 | "php": ">=5.6.4", 484 | "symfony/finder": "3.1.*", 485 | "symfony/http-foundation": "3.1.*" 486 | }, 487 | "suggest": { 488 | "illuminate/console": "Required to use the session:table command (5.3.*)." 489 | }, 490 | "type": "library", 491 | "extra": { 492 | "branch-alias": { 493 | "dev-master": "5.3-dev" 494 | } 495 | }, 496 | "autoload": { 497 | "psr-4": { 498 | "Illuminate\\Session\\": "" 499 | } 500 | }, 501 | "notification-url": "https://packagist.org/downloads/", 502 | "license": [ 503 | "MIT" 504 | ], 505 | "authors": [ 506 | { 507 | "name": "Taylor Otwell", 508 | "email": "taylor@laravel.com" 509 | } 510 | ], 511 | "description": "The Illuminate Session package.", 512 | "homepage": "https://laravel.com", 513 | "time": "2016-08-11 22:24:39" 514 | }, 515 | { 516 | "name": "illuminate/support", 517 | "version": "v5.3.4", 518 | "source": { 519 | "type": "git", 520 | "url": "https://github.com/illuminate/support.git", 521 | "reference": "1b4f32dfa799dd8d0e0d11e0aaaf677e2829d6e8" 522 | }, 523 | "dist": { 524 | "type": "zip", 525 | "url": "https://api.github.com/repos/illuminate/support/zipball/1b4f32dfa799dd8d0e0d11e0aaaf677e2829d6e8", 526 | "reference": "1b4f32dfa799dd8d0e0d11e0aaaf677e2829d6e8", 527 | "shasum": "" 528 | }, 529 | "require": { 530 | "doctrine/inflector": "~1.0", 531 | "ext-mbstring": "*", 532 | "illuminate/contracts": "5.3.*", 533 | "paragonie/random_compat": "~1.4|~2.0", 534 | "php": ">=5.6.4" 535 | }, 536 | "replace": { 537 | "tightenco/collect": "self.version" 538 | }, 539 | "suggest": { 540 | "illuminate/filesystem": "Required to use the composer class (5.2.*).", 541 | "symfony/process": "Required to use the composer class (3.1.*).", 542 | "symfony/var-dumper": "Required to use the dd function (3.1.*)." 543 | }, 544 | "type": "library", 545 | "extra": { 546 | "branch-alias": { 547 | "dev-master": "5.3-dev" 548 | } 549 | }, 550 | "autoload": { 551 | "psr-4": { 552 | "Illuminate\\Support\\": "" 553 | }, 554 | "files": [ 555 | "helpers.php" 556 | ] 557 | }, 558 | "notification-url": "https://packagist.org/downloads/", 559 | "license": [ 560 | "MIT" 561 | ], 562 | "authors": [ 563 | { 564 | "name": "Taylor Otwell", 565 | "email": "taylor@laravel.com" 566 | } 567 | ], 568 | "description": "The Illuminate Support package.", 569 | "homepage": "https://laravel.com", 570 | "time": "2016-08-26 17:26:49" 571 | }, 572 | { 573 | "name": "illuminate/view", 574 | "version": "v5.3.4", 575 | "source": { 576 | "type": "git", 577 | "url": "https://github.com/illuminate/view.git", 578 | "reference": "cbafb75c07e93aff38eea6e917cc7e8ee1deeaa1" 579 | }, 580 | "dist": { 581 | "type": "zip", 582 | "url": "https://api.github.com/repos/illuminate/view/zipball/cbafb75c07e93aff38eea6e917cc7e8ee1deeaa1", 583 | "reference": "cbafb75c07e93aff38eea6e917cc7e8ee1deeaa1", 584 | "shasum": "" 585 | }, 586 | "require": { 587 | "illuminate/container": "5.3.*", 588 | "illuminate/contracts": "5.3.*", 589 | "illuminate/events": "5.3.*", 590 | "illuminate/filesystem": "5.3.*", 591 | "illuminate/support": "5.3.*", 592 | "php": ">=5.6.4", 593 | "symfony/debug": "3.1.*" 594 | }, 595 | "type": "library", 596 | "extra": { 597 | "branch-alias": { 598 | "dev-master": "5.3-dev" 599 | } 600 | }, 601 | "autoload": { 602 | "psr-4": { 603 | "Illuminate\\View\\": "" 604 | } 605 | }, 606 | "notification-url": "https://packagist.org/downloads/", 607 | "license": [ 608 | "MIT" 609 | ], 610 | "authors": [ 611 | { 612 | "name": "Taylor Otwell", 613 | "email": "taylor@laravel.com" 614 | } 615 | ], 616 | "description": "The Illuminate View package.", 617 | "homepage": "https://laravel.com", 618 | "time": "2016-08-24 08:31:50" 619 | }, 620 | { 621 | "name": "laravelcollective/html", 622 | "version": "v5.3.0", 623 | "source": { 624 | "type": "git", 625 | "url": "https://github.com/LaravelCollective/html.git", 626 | "reference": "961ce141c16c6b085128f209496c26efd3e681ca" 627 | }, 628 | "dist": { 629 | "type": "zip", 630 | "url": "https://api.github.com/repos/LaravelCollective/html/zipball/961ce141c16c6b085128f209496c26efd3e681ca", 631 | "reference": "961ce141c16c6b085128f209496c26efd3e681ca", 632 | "shasum": "" 633 | }, 634 | "require": { 635 | "illuminate/http": "5.3.*", 636 | "illuminate/routing": "5.3.*", 637 | "illuminate/session": "5.3.*", 638 | "illuminate/support": "5.3.*", 639 | "illuminate/view": "5.3.*", 640 | "php": ">=5.6.4" 641 | }, 642 | "require-dev": { 643 | "illuminate/database": "5.3.*", 644 | "mockery/mockery": "~0.9.4", 645 | "phpunit/phpunit": "~5.4" 646 | }, 647 | "type": "library", 648 | "autoload": { 649 | "psr-4": { 650 | "Collective\\Html\\": "src/" 651 | }, 652 | "files": [ 653 | "src/helpers.php" 654 | ] 655 | }, 656 | "notification-url": "https://packagist.org/downloads/", 657 | "license": [ 658 | "MIT" 659 | ], 660 | "authors": [ 661 | { 662 | "name": "Taylor Otwell", 663 | "email": "taylorotwell@gmail.com" 664 | }, 665 | { 666 | "name": "Adam Engebretson", 667 | "email": "adam@laravelcollective.com" 668 | } 669 | ], 670 | "description": "HTML and Form Builders for the Laravel Framework", 671 | "homepage": "http://laravelcollective.com", 672 | "time": "2016-08-27 23:52:43" 673 | }, 674 | { 675 | "name": "nesbot/carbon", 676 | "version": "1.21.0", 677 | "source": { 678 | "type": "git", 679 | "url": "https://github.com/briannesbitt/Carbon.git", 680 | "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7" 681 | }, 682 | "dist": { 683 | "type": "zip", 684 | "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7b08ec6f75791e130012f206e3f7b0e76e18e3d7", 685 | "reference": "7b08ec6f75791e130012f206e3f7b0e76e18e3d7", 686 | "shasum": "" 687 | }, 688 | "require": { 689 | "php": ">=5.3.0", 690 | "symfony/translation": "~2.6|~3.0" 691 | }, 692 | "require-dev": { 693 | "phpunit/phpunit": "~4.0|~5.0" 694 | }, 695 | "type": "library", 696 | "autoload": { 697 | "psr-4": { 698 | "Carbon\\": "src/Carbon/" 699 | } 700 | }, 701 | "notification-url": "https://packagist.org/downloads/", 702 | "license": [ 703 | "MIT" 704 | ], 705 | "authors": [ 706 | { 707 | "name": "Brian Nesbitt", 708 | "email": "brian@nesbot.com", 709 | "homepage": "http://nesbot.com" 710 | } 711 | ], 712 | "description": "A simple API extension for DateTime.", 713 | "homepage": "http://carbon.nesbot.com", 714 | "keywords": [ 715 | "date", 716 | "datetime", 717 | "time" 718 | ], 719 | "time": "2015-11-04 20:07:17" 720 | }, 721 | { 722 | "name": "paragonie/random_compat", 723 | "version": "v2.0.2", 724 | "source": { 725 | "type": "git", 726 | "url": "https://github.com/paragonie/random_compat.git", 727 | "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf" 728 | }, 729 | "dist": { 730 | "type": "zip", 731 | "url": "https://api.github.com/repos/paragonie/random_compat/zipball/088c04e2f261c33bed6ca5245491cfca69195ccf", 732 | "reference": "088c04e2f261c33bed6ca5245491cfca69195ccf", 733 | "shasum": "" 734 | }, 735 | "require": { 736 | "php": ">=5.2.0" 737 | }, 738 | "require-dev": { 739 | "phpunit/phpunit": "4.*|5.*" 740 | }, 741 | "suggest": { 742 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." 743 | }, 744 | "type": "library", 745 | "autoload": { 746 | "files": [ 747 | "lib/random.php" 748 | ] 749 | }, 750 | "notification-url": "https://packagist.org/downloads/", 751 | "license": [ 752 | "MIT" 753 | ], 754 | "authors": [ 755 | { 756 | "name": "Paragon Initiative Enterprises", 757 | "email": "security@paragonie.com", 758 | "homepage": "https://paragonie.com" 759 | } 760 | ], 761 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", 762 | "keywords": [ 763 | "csprng", 764 | "pseudorandom", 765 | "random" 766 | ], 767 | "time": "2016-04-03 06:00:07" 768 | }, 769 | { 770 | "name": "psr/log", 771 | "version": "1.0.0", 772 | "source": { 773 | "type": "git", 774 | "url": "https://github.com/php-fig/log.git", 775 | "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" 776 | }, 777 | "dist": { 778 | "type": "zip", 779 | "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", 780 | "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", 781 | "shasum": "" 782 | }, 783 | "type": "library", 784 | "autoload": { 785 | "psr-0": { 786 | "Psr\\Log\\": "" 787 | } 788 | }, 789 | "notification-url": "https://packagist.org/downloads/", 790 | "license": [ 791 | "MIT" 792 | ], 793 | "authors": [ 794 | { 795 | "name": "PHP-FIG", 796 | "homepage": "http://www.php-fig.org/" 797 | } 798 | ], 799 | "description": "Common interface for logging libraries", 800 | "keywords": [ 801 | "log", 802 | "psr", 803 | "psr-3" 804 | ], 805 | "time": "2012-12-21 11:40:51" 806 | }, 807 | { 808 | "name": "symfony/debug", 809 | "version": "v3.1.4", 810 | "source": { 811 | "type": "git", 812 | "url": "https://github.com/symfony/debug.git", 813 | "reference": "34f6ac18c2974ca5fce68adf419ee7d15def6f11" 814 | }, 815 | "dist": { 816 | "type": "zip", 817 | "url": "https://api.github.com/repos/symfony/debug/zipball/34f6ac18c2974ca5fce68adf419ee7d15def6f11", 818 | "reference": "34f6ac18c2974ca5fce68adf419ee7d15def6f11", 819 | "shasum": "" 820 | }, 821 | "require": { 822 | "php": ">=5.5.9", 823 | "psr/log": "~1.0" 824 | }, 825 | "conflict": { 826 | "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" 827 | }, 828 | "require-dev": { 829 | "symfony/class-loader": "~2.8|~3.0", 830 | "symfony/http-kernel": "~2.8|~3.0" 831 | }, 832 | "type": "library", 833 | "extra": { 834 | "branch-alias": { 835 | "dev-master": "3.1-dev" 836 | } 837 | }, 838 | "autoload": { 839 | "psr-4": { 840 | "Symfony\\Component\\Debug\\": "" 841 | }, 842 | "exclude-from-classmap": [ 843 | "/Tests/" 844 | ] 845 | }, 846 | "notification-url": "https://packagist.org/downloads/", 847 | "license": [ 848 | "MIT" 849 | ], 850 | "authors": [ 851 | { 852 | "name": "Fabien Potencier", 853 | "email": "fabien@symfony.com" 854 | }, 855 | { 856 | "name": "Symfony Community", 857 | "homepage": "https://symfony.com/contributors" 858 | } 859 | ], 860 | "description": "Symfony Debug Component", 861 | "homepage": "https://symfony.com", 862 | "time": "2016-08-23 13:39:15" 863 | }, 864 | { 865 | "name": "symfony/event-dispatcher", 866 | "version": "v3.1.4", 867 | "source": { 868 | "type": "git", 869 | "url": "https://github.com/symfony/event-dispatcher.git", 870 | "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5" 871 | }, 872 | "dist": { 873 | "type": "zip", 874 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c0c00c80b3a69132c4e55c3e7db32b4a387615e5", 875 | "reference": "c0c00c80b3a69132c4e55c3e7db32b4a387615e5", 876 | "shasum": "" 877 | }, 878 | "require": { 879 | "php": ">=5.5.9" 880 | }, 881 | "require-dev": { 882 | "psr/log": "~1.0", 883 | "symfony/config": "~2.8|~3.0", 884 | "symfony/dependency-injection": "~2.8|~3.0", 885 | "symfony/expression-language": "~2.8|~3.0", 886 | "symfony/stopwatch": "~2.8|~3.0" 887 | }, 888 | "suggest": { 889 | "symfony/dependency-injection": "", 890 | "symfony/http-kernel": "" 891 | }, 892 | "type": "library", 893 | "extra": { 894 | "branch-alias": { 895 | "dev-master": "3.1-dev" 896 | } 897 | }, 898 | "autoload": { 899 | "psr-4": { 900 | "Symfony\\Component\\EventDispatcher\\": "" 901 | }, 902 | "exclude-from-classmap": [ 903 | "/Tests/" 904 | ] 905 | }, 906 | "notification-url": "https://packagist.org/downloads/", 907 | "license": [ 908 | "MIT" 909 | ], 910 | "authors": [ 911 | { 912 | "name": "Fabien Potencier", 913 | "email": "fabien@symfony.com" 914 | }, 915 | { 916 | "name": "Symfony Community", 917 | "homepage": "https://symfony.com/contributors" 918 | } 919 | ], 920 | "description": "Symfony EventDispatcher Component", 921 | "homepage": "https://symfony.com", 922 | "time": "2016-07-19 10:45:57" 923 | }, 924 | { 925 | "name": "symfony/finder", 926 | "version": "v3.1.4", 927 | "source": { 928 | "type": "git", 929 | "url": "https://github.com/symfony/finder.git", 930 | "reference": "e568ef1784f447a0e54dcb6f6de30b9747b0f577" 931 | }, 932 | "dist": { 933 | "type": "zip", 934 | "url": "https://api.github.com/repos/symfony/finder/zipball/e568ef1784f447a0e54dcb6f6de30b9747b0f577", 935 | "reference": "e568ef1784f447a0e54dcb6f6de30b9747b0f577", 936 | "shasum": "" 937 | }, 938 | "require": { 939 | "php": ">=5.5.9" 940 | }, 941 | "type": "library", 942 | "extra": { 943 | "branch-alias": { 944 | "dev-master": "3.1-dev" 945 | } 946 | }, 947 | "autoload": { 948 | "psr-4": { 949 | "Symfony\\Component\\Finder\\": "" 950 | }, 951 | "exclude-from-classmap": [ 952 | "/Tests/" 953 | ] 954 | }, 955 | "notification-url": "https://packagist.org/downloads/", 956 | "license": [ 957 | "MIT" 958 | ], 959 | "authors": [ 960 | { 961 | "name": "Fabien Potencier", 962 | "email": "fabien@symfony.com" 963 | }, 964 | { 965 | "name": "Symfony Community", 966 | "homepage": "https://symfony.com/contributors" 967 | } 968 | ], 969 | "description": "Symfony Finder Component", 970 | "homepage": "https://symfony.com", 971 | "time": "2016-08-26 12:04:02" 972 | }, 973 | { 974 | "name": "symfony/http-foundation", 975 | "version": "v3.1.4", 976 | "source": { 977 | "type": "git", 978 | "url": "https://github.com/symfony/http-foundation.git", 979 | "reference": "63592e00fd90632b57ee50220a1ddb29b6bf3bb4" 980 | }, 981 | "dist": { 982 | "type": "zip", 983 | "url": "https://api.github.com/repos/symfony/http-foundation/zipball/63592e00fd90632b57ee50220a1ddb29b6bf3bb4", 984 | "reference": "63592e00fd90632b57ee50220a1ddb29b6bf3bb4", 985 | "shasum": "" 986 | }, 987 | "require": { 988 | "php": ">=5.5.9", 989 | "symfony/polyfill-mbstring": "~1.1" 990 | }, 991 | "require-dev": { 992 | "symfony/expression-language": "~2.8|~3.0" 993 | }, 994 | "type": "library", 995 | "extra": { 996 | "branch-alias": { 997 | "dev-master": "3.1-dev" 998 | } 999 | }, 1000 | "autoload": { 1001 | "psr-4": { 1002 | "Symfony\\Component\\HttpFoundation\\": "" 1003 | }, 1004 | "exclude-from-classmap": [ 1005 | "/Tests/" 1006 | ] 1007 | }, 1008 | "notification-url": "https://packagist.org/downloads/", 1009 | "license": [ 1010 | "MIT" 1011 | ], 1012 | "authors": [ 1013 | { 1014 | "name": "Fabien Potencier", 1015 | "email": "fabien@symfony.com" 1016 | }, 1017 | { 1018 | "name": "Symfony Community", 1019 | "homepage": "https://symfony.com/contributors" 1020 | } 1021 | ], 1022 | "description": "Symfony HttpFoundation Component", 1023 | "homepage": "https://symfony.com", 1024 | "time": "2016-08-22 12:11:19" 1025 | }, 1026 | { 1027 | "name": "symfony/http-kernel", 1028 | "version": "v3.1.4", 1029 | "source": { 1030 | "type": "git", 1031 | "url": "https://github.com/symfony/http-kernel.git", 1032 | "reference": "aeda215d6b01f119508c090d2a09ebb5b0bc61f3" 1033 | }, 1034 | "dist": { 1035 | "type": "zip", 1036 | "url": "https://api.github.com/repos/symfony/http-kernel/zipball/aeda215d6b01f119508c090d2a09ebb5b0bc61f3", 1037 | "reference": "aeda215d6b01f119508c090d2a09ebb5b0bc61f3", 1038 | "shasum": "" 1039 | }, 1040 | "require": { 1041 | "php": ">=5.5.9", 1042 | "psr/log": "~1.0", 1043 | "symfony/debug": "~2.8|~3.0", 1044 | "symfony/event-dispatcher": "~2.8|~3.0", 1045 | "symfony/http-foundation": "~2.8.8|~3.0.8|~3.1.2|~3.2" 1046 | }, 1047 | "conflict": { 1048 | "symfony/config": "<2.8" 1049 | }, 1050 | "require-dev": { 1051 | "symfony/browser-kit": "~2.8|~3.0", 1052 | "symfony/class-loader": "~2.8|~3.0", 1053 | "symfony/config": "~2.8|~3.0", 1054 | "symfony/console": "~2.8|~3.0", 1055 | "symfony/css-selector": "~2.8|~3.0", 1056 | "symfony/dependency-injection": "~2.8|~3.0", 1057 | "symfony/dom-crawler": "~2.8|~3.0", 1058 | "symfony/expression-language": "~2.8|~3.0", 1059 | "symfony/finder": "~2.8|~3.0", 1060 | "symfony/process": "~2.8|~3.0", 1061 | "symfony/routing": "~2.8|~3.0", 1062 | "symfony/stopwatch": "~2.8|~3.0", 1063 | "symfony/templating": "~2.8|~3.0", 1064 | "symfony/translation": "~2.8|~3.0", 1065 | "symfony/var-dumper": "~2.8|~3.0" 1066 | }, 1067 | "suggest": { 1068 | "symfony/browser-kit": "", 1069 | "symfony/class-loader": "", 1070 | "symfony/config": "", 1071 | "symfony/console": "", 1072 | "symfony/dependency-injection": "", 1073 | "symfony/finder": "", 1074 | "symfony/var-dumper": "" 1075 | }, 1076 | "type": "library", 1077 | "extra": { 1078 | "branch-alias": { 1079 | "dev-master": "3.1-dev" 1080 | } 1081 | }, 1082 | "autoload": { 1083 | "psr-4": { 1084 | "Symfony\\Component\\HttpKernel\\": "" 1085 | }, 1086 | "exclude-from-classmap": [ 1087 | "/Tests/" 1088 | ] 1089 | }, 1090 | "notification-url": "https://packagist.org/downloads/", 1091 | "license": [ 1092 | "MIT" 1093 | ], 1094 | "authors": [ 1095 | { 1096 | "name": "Fabien Potencier", 1097 | "email": "fabien@symfony.com" 1098 | }, 1099 | { 1100 | "name": "Symfony Community", 1101 | "homepage": "https://symfony.com/contributors" 1102 | } 1103 | ], 1104 | "description": "Symfony HttpKernel Component", 1105 | "homepage": "https://symfony.com", 1106 | "time": "2016-09-03 15:28:24" 1107 | }, 1108 | { 1109 | "name": "symfony/polyfill-mbstring", 1110 | "version": "v1.2.0", 1111 | "source": { 1112 | "type": "git", 1113 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1114 | "reference": "dff51f72b0706335131b00a7f49606168c582594" 1115 | }, 1116 | "dist": { 1117 | "type": "zip", 1118 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", 1119 | "reference": "dff51f72b0706335131b00a7f49606168c582594", 1120 | "shasum": "" 1121 | }, 1122 | "require": { 1123 | "php": ">=5.3.3" 1124 | }, 1125 | "suggest": { 1126 | "ext-mbstring": "For best performance" 1127 | }, 1128 | "type": "library", 1129 | "extra": { 1130 | "branch-alias": { 1131 | "dev-master": "1.2-dev" 1132 | } 1133 | }, 1134 | "autoload": { 1135 | "psr-4": { 1136 | "Symfony\\Polyfill\\Mbstring\\": "" 1137 | }, 1138 | "files": [ 1139 | "bootstrap.php" 1140 | ] 1141 | }, 1142 | "notification-url": "https://packagist.org/downloads/", 1143 | "license": [ 1144 | "MIT" 1145 | ], 1146 | "authors": [ 1147 | { 1148 | "name": "Nicolas Grekas", 1149 | "email": "p@tchwork.com" 1150 | }, 1151 | { 1152 | "name": "Symfony Community", 1153 | "homepage": "https://symfony.com/contributors" 1154 | } 1155 | ], 1156 | "description": "Symfony polyfill for the Mbstring extension", 1157 | "homepage": "https://symfony.com", 1158 | "keywords": [ 1159 | "compatibility", 1160 | "mbstring", 1161 | "polyfill", 1162 | "portable", 1163 | "shim" 1164 | ], 1165 | "time": "2016-05-18 14:26:46" 1166 | }, 1167 | { 1168 | "name": "symfony/routing", 1169 | "version": "v3.1.4", 1170 | "source": { 1171 | "type": "git", 1172 | "url": "https://github.com/symfony/routing.git", 1173 | "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6" 1174 | }, 1175 | "dist": { 1176 | "type": "zip", 1177 | "url": "https://api.github.com/repos/symfony/routing/zipball/8edf62498a1a4c57ba317664a4b698339c10cdf6", 1178 | "reference": "8edf62498a1a4c57ba317664a4b698339c10cdf6", 1179 | "shasum": "" 1180 | }, 1181 | "require": { 1182 | "php": ">=5.5.9" 1183 | }, 1184 | "conflict": { 1185 | "symfony/config": "<2.8" 1186 | }, 1187 | "require-dev": { 1188 | "doctrine/annotations": "~1.0", 1189 | "doctrine/common": "~2.2", 1190 | "psr/log": "~1.0", 1191 | "symfony/config": "~2.8|~3.0", 1192 | "symfony/expression-language": "~2.8|~3.0", 1193 | "symfony/http-foundation": "~2.8|~3.0", 1194 | "symfony/yaml": "~2.8|~3.0" 1195 | }, 1196 | "suggest": { 1197 | "doctrine/annotations": "For using the annotation loader", 1198 | "symfony/config": "For using the all-in-one router or any loader", 1199 | "symfony/dependency-injection": "For loading routes from a service", 1200 | "symfony/expression-language": "For using expression matching", 1201 | "symfony/http-foundation": "For using a Symfony Request object", 1202 | "symfony/yaml": "For using the YAML loader" 1203 | }, 1204 | "type": "library", 1205 | "extra": { 1206 | "branch-alias": { 1207 | "dev-master": "3.1-dev" 1208 | } 1209 | }, 1210 | "autoload": { 1211 | "psr-4": { 1212 | "Symfony\\Component\\Routing\\": "" 1213 | }, 1214 | "exclude-from-classmap": [ 1215 | "/Tests/" 1216 | ] 1217 | }, 1218 | "notification-url": "https://packagist.org/downloads/", 1219 | "license": [ 1220 | "MIT" 1221 | ], 1222 | "authors": [ 1223 | { 1224 | "name": "Fabien Potencier", 1225 | "email": "fabien@symfony.com" 1226 | }, 1227 | { 1228 | "name": "Symfony Community", 1229 | "homepage": "https://symfony.com/contributors" 1230 | } 1231 | ], 1232 | "description": "Symfony Routing Component", 1233 | "homepage": "https://symfony.com", 1234 | "keywords": [ 1235 | "router", 1236 | "routing", 1237 | "uri", 1238 | "url" 1239 | ], 1240 | "time": "2016-08-16 14:58:24" 1241 | }, 1242 | { 1243 | "name": "symfony/translation", 1244 | "version": "v3.1.4", 1245 | "source": { 1246 | "type": "git", 1247 | "url": "https://github.com/symfony/translation.git", 1248 | "reference": "a35edc277513c9bc0f063ca174c36b346f974528" 1249 | }, 1250 | "dist": { 1251 | "type": "zip", 1252 | "url": "https://api.github.com/repos/symfony/translation/zipball/a35edc277513c9bc0f063ca174c36b346f974528", 1253 | "reference": "a35edc277513c9bc0f063ca174c36b346f974528", 1254 | "shasum": "" 1255 | }, 1256 | "require": { 1257 | "php": ">=5.5.9", 1258 | "symfony/polyfill-mbstring": "~1.0" 1259 | }, 1260 | "conflict": { 1261 | "symfony/config": "<2.8" 1262 | }, 1263 | "require-dev": { 1264 | "psr/log": "~1.0", 1265 | "symfony/config": "~2.8|~3.0", 1266 | "symfony/intl": "~2.8|~3.0", 1267 | "symfony/yaml": "~2.8|~3.0" 1268 | }, 1269 | "suggest": { 1270 | "psr/log": "To use logging capability in translator", 1271 | "symfony/config": "", 1272 | "symfony/yaml": "" 1273 | }, 1274 | "type": "library", 1275 | "extra": { 1276 | "branch-alias": { 1277 | "dev-master": "3.1-dev" 1278 | } 1279 | }, 1280 | "autoload": { 1281 | "psr-4": { 1282 | "Symfony\\Component\\Translation\\": "" 1283 | }, 1284 | "exclude-from-classmap": [ 1285 | "/Tests/" 1286 | ] 1287 | }, 1288 | "notification-url": "https://packagist.org/downloads/", 1289 | "license": [ 1290 | "MIT" 1291 | ], 1292 | "authors": [ 1293 | { 1294 | "name": "Fabien Potencier", 1295 | "email": "fabien@symfony.com" 1296 | }, 1297 | { 1298 | "name": "Symfony Community", 1299 | "homepage": "https://symfony.com/contributors" 1300 | } 1301 | ], 1302 | "description": "Symfony Translation Component", 1303 | "homepage": "https://symfony.com", 1304 | "time": "2016-08-05 08:37:39" 1305 | } 1306 | ], 1307 | "packages-dev": [ 1308 | { 1309 | "name": "illuminate/console", 1310 | "version": "v5.3.4", 1311 | "source": { 1312 | "type": "git", 1313 | "url": "https://github.com/illuminate/console.git", 1314 | "reference": "a2a0804a5bf26172f67ba3d491ad8a19028bbab5" 1315 | }, 1316 | "dist": { 1317 | "type": "zip", 1318 | "url": "https://api.github.com/repos/illuminate/console/zipball/a2a0804a5bf26172f67ba3d491ad8a19028bbab5", 1319 | "reference": "a2a0804a5bf26172f67ba3d491ad8a19028bbab5", 1320 | "shasum": "" 1321 | }, 1322 | "require": { 1323 | "illuminate/contracts": "5.3.*", 1324 | "illuminate/support": "5.3.*", 1325 | "nesbot/carbon": "~1.20", 1326 | "php": ">=5.6.4", 1327 | "symfony/console": "3.1.*" 1328 | }, 1329 | "suggest": { 1330 | "guzzlehttp/guzzle": "Required to use the ping methods on schedules (~5.3|~6.0).", 1331 | "mtdowling/cron-expression": "Required to use scheduling component (~1.0).", 1332 | "symfony/process": "Required to use scheduling component (3.1.*)." 1333 | }, 1334 | "type": "library", 1335 | "extra": { 1336 | "branch-alias": { 1337 | "dev-master": "5.3-dev" 1338 | } 1339 | }, 1340 | "autoload": { 1341 | "psr-4": { 1342 | "Illuminate\\Console\\": "" 1343 | } 1344 | }, 1345 | "notification-url": "https://packagist.org/downloads/", 1346 | "license": [ 1347 | "MIT" 1348 | ], 1349 | "authors": [ 1350 | { 1351 | "name": "Taylor Otwell", 1352 | "email": "taylor@laravel.com" 1353 | } 1354 | ], 1355 | "description": "The Illuminate Console package.", 1356 | "homepage": "https://laravel.com", 1357 | "time": "2016-08-07 19:56:57" 1358 | }, 1359 | { 1360 | "name": "symfony/console", 1361 | "version": "v3.1.4", 1362 | "source": { 1363 | "type": "git", 1364 | "url": "https://github.com/symfony/console.git", 1365 | "reference": "8ea494c34f0f772c3954b5fbe00bffc5a435e563" 1366 | }, 1367 | "dist": { 1368 | "type": "zip", 1369 | "url": "https://api.github.com/repos/symfony/console/zipball/8ea494c34f0f772c3954b5fbe00bffc5a435e563", 1370 | "reference": "8ea494c34f0f772c3954b5fbe00bffc5a435e563", 1371 | "shasum": "" 1372 | }, 1373 | "require": { 1374 | "php": ">=5.5.9", 1375 | "symfony/polyfill-mbstring": "~1.0" 1376 | }, 1377 | "require-dev": { 1378 | "psr/log": "~1.0", 1379 | "symfony/event-dispatcher": "~2.8|~3.0", 1380 | "symfony/process": "~2.8|~3.0" 1381 | }, 1382 | "suggest": { 1383 | "psr/log": "For using the console logger", 1384 | "symfony/event-dispatcher": "", 1385 | "symfony/process": "" 1386 | }, 1387 | "type": "library", 1388 | "extra": { 1389 | "branch-alias": { 1390 | "dev-master": "3.1-dev" 1391 | } 1392 | }, 1393 | "autoload": { 1394 | "psr-4": { 1395 | "Symfony\\Component\\Console\\": "" 1396 | }, 1397 | "exclude-from-classmap": [ 1398 | "/Tests/" 1399 | ] 1400 | }, 1401 | "notification-url": "https://packagist.org/downloads/", 1402 | "license": [ 1403 | "MIT" 1404 | ], 1405 | "authors": [ 1406 | { 1407 | "name": "Fabien Potencier", 1408 | "email": "fabien@symfony.com" 1409 | }, 1410 | { 1411 | "name": "Symfony Community", 1412 | "homepage": "https://symfony.com/contributors" 1413 | } 1414 | ], 1415 | "description": "Symfony Console Component", 1416 | "homepage": "https://symfony.com", 1417 | "time": "2016-08-19 06:48:39" 1418 | } 1419 | ], 1420 | "aliases": [], 1421 | "minimum-stability": "dev", 1422 | "stability-flags": [], 1423 | "prefer-stable": true, 1424 | "prefer-lowest": false, 1425 | "platform": { 1426 | "php": ">=5.4.0" 1427 | }, 1428 | "platform-dev": [] 1429 | } 1430 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | 15 | ./tests/ 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /provides.json: -------------------------------------------------------------------------------- 1 | { 2 | "providers": [ 3 | "Efficiently\\Larasset\\LarassetServiceProvider", 4 | "Efficiently\\JqueryLaravel\\JqueryLaravelServiceProvider" 5 | ], 6 | "aliases": [ 7 | { 8 | "alias": "Asset", 9 | "facade": "Efficiently\\Larasset\\Facades\\Asset" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /src/Efficiently/Larasset/Asset.php: -------------------------------------------------------------------------------- 1 | args = is_array($args) ? $args : func_get_args(); 25 | 26 | $this->assetsPrefix = function () { 27 | return config('larasset.prefix', '/assets'); 28 | }; 29 | 30 | $this->assetsHost = function () { 31 | return config('larasset.host'); 32 | }; 33 | 34 | $this->assetPort = function () { 35 | return getenv('LARASSET_PORT') ?: config('larasset.port', 3000); 36 | }; 37 | } 38 | 39 | public function manifest($args = null) 40 | { 41 | $args = func_get_args() ? func_get_args() : $this->args; 42 | $manifestHash = md5(json_encode($args)); 43 | if (array_get($this->manifests, $manifestHash)) { 44 | return $this->manifests[$manifestHash]; 45 | } 46 | 47 | return $this->manifests[$manifestHash] = App::make('manifest', $args); 48 | } 49 | 50 | // Borrow assets and files methods of Sprockets Manifest class and its Rails integration. 51 | // In a Rails console we can access this methods via helper.assets_manifest.assets and helper.assets_manifest.files 52 | // TODO: Borrow these methods: https://github.com/CodeSleeve/asset-pipeline/blob/v1.3/src/Codesleeve/AssetPipeline/SprocketsTags.php#L132 53 | 54 | /** 55 | * Returns an HTML script tag for the sources and attributes specified as arguments. 56 | * 57 | * @param array|string $sources default "application" 58 | * @param array $attributes HTML attributes 59 | * @return string 60 | */ 61 | public function javascriptIncludeTag($sources = "application", $attributes = []) 62 | { 63 | // E.g. javascript_include_tag('app'); => app-9fcd9b50e5cb047af35d3c5a4b55f73f.js 64 | $args = func_get_args(); 65 | if (is_array(last($args))) { 66 | $attributes = array_pop($args); 67 | } else { 68 | $attributes = []; 69 | } 70 | $sources = is_array($sources) ? $sources : $args; 71 | if (empty($sources)) { 72 | $sources = ["application"]; 73 | } 74 | 75 | $assetsOptions = ['host' => array_pull($attributes, 'host', $this->assetsHost)]; 76 | 77 | $defaults = ['type' => 'text/javascript']; 78 | $attributes = $attributes + $defaults; 79 | 80 | $javascript_tags = []; 81 | foreach ((array) $sources as $source) { 82 | $sourceName = "$source.js"; 83 | $javascript_tags[] = app('html')->script($this->assetPath($sourceName, $assetsOptions), $attributes); 84 | } 85 | 86 | return implode($javascript_tags); 87 | } 88 | 89 | /** 90 | * Returns a HTML stylesheet link tag for the sources and attributes specified as arguments. 91 | * 92 | * @param array|string $sources default "application" 93 | * @param array $attributes HTML attributes 94 | * @return string 95 | */ 96 | public function stylesheetLinkTag($sources = "application", $attributes = []) 97 | { 98 | // E.g. stylesheet_link_tag('app', ['media'=>'all']); => app-fa2ce4b45369a106436f229ca9e52bee.css 99 | $args = func_get_args(); 100 | if (is_array(last($args))) { 101 | $attributes = array_pop($args); 102 | } else { 103 | $attributes = []; 104 | } 105 | $sources = is_array($sources) ? $sources : $args; 106 | if (empty($sources)) { 107 | $sources = ["application"]; 108 | } 109 | 110 | $assetsOptions = ['host' => array_pull($attributes, 'host', $this->assetsHost)]; 111 | 112 | $defaults = ['media' => 'all', 'type' => 'text/css']; 113 | $attributes = $attributes + $defaults; 114 | 115 | $stylesheet_tags = []; 116 | foreach ((array) $sources as $source) { 117 | $sourceName = "$source.css"; 118 | $stylesheet_tags[] = app('html')->style($this->assetPath($sourceName, $assetsOptions), $attributes); 119 | } 120 | 121 | return implode($stylesheet_tags); 122 | } 123 | 124 | /** 125 | * Returns a HTML favicon link tag for the source and attributes specified as arguments. 126 | * 127 | * @param string $source Relative URL 128 | * @param array $attributes HTML attributes 129 | * @return string 130 | */ 131 | public function faviconLinkTag($source = null, $attributes = []) 132 | { 133 | // E.g. favicon_link_tag('favicon.ico', ['rel' => 'shortcut icon']); => 134 | // 135 | $source = $source ?: "favicon.ico"; 136 | 137 | $assetsOptions = ['host' => array_pull($attributes, 'host', $this->assetsHost)]; 138 | 139 | $defaults = ['rel' => 'shortcut icon', 'type' => 'image/vnd.microsoft.icon']; 140 | $attributes = $attributes + $defaults; 141 | 142 | return "attributes($attributes).">".PHP_EOL; 143 | } 144 | 145 | /** 146 | * Returns an HTML image element for the source and attributes specified as arguments from the assets pipeline. 147 | * 148 | * @param string $source Relative URL 149 | * @param string $alt 150 | * @param array $attributes HTML attributes 151 | * @return string 152 | */ 153 | public function imageTag($source, $alt = null, $attributes = []) 154 | { 155 | $assetsOptions = ['host' => array_pull($attributes, 'host', $this->assetsHost)]; 156 | 157 | // E.g. image_tag('logo.png', "My Logo"); => My Logo 158 | $alt = $alt ?: humanize(basename($source, ".".File::extension($source))); 159 | 160 | return app('html')->image($this->assetPath($source, $assetsOptions), $alt, $attributes); 161 | } 162 | 163 | /** 164 | * Computes the path to asset in public directory. 165 | * 166 | * @param string $source 167 | * @param array $options 168 | * @return string 169 | */ 170 | public function assetPath($source, array $options = []) 171 | { 172 | $source = (string) $source; 173 | if (! $source) { 174 | return ""; // Short circuit 175 | } 176 | 177 | if (preg_match(static::URI_REGEXP, $source)) { 178 | return $source;// Short circuit 179 | } 180 | 181 | $assetPrefix = array_get($options, 'prefix', $this->assetsPrefix); 182 | if (is_callable($assetPrefix) && is_object($assetPrefix)) { 183 | $assetPrefix = $assetPrefix(); 184 | } 185 | 186 | $assetHost = array_get($options, 'host'); 187 | if (is_callable($assetHost) && is_object($assetHost)) { 188 | $assetHost = $assetHost(); 189 | } 190 | 191 | $assetPort = $this->assetPort; 192 | if (is_callable($assetPort) && is_object($assetPort)) { 193 | $assetPort = $assetPort(); 194 | } 195 | 196 | $protocol = Request::secure() ? "https://" : "http://"; 197 | if (App::environment() !== (getenv('ASSETS_ENV') ?: 'production')) { 198 | $assetHost = $assetHost ?: $protocol.$this->getHostname().":".$assetPort; 199 | $assetLocation = $assetHost.$assetPrefix; 200 | } else { 201 | $assetLocation = $assetHost.$assetPrefix; 202 | $manifest = static::manifest(); 203 | } 204 | // TODO: Sanitize/purify $source var 205 | $sourceName = $source; 206 | if (isset($manifest) && $manifest->getAssets()) { 207 | $sourceName = array_get($manifest->getAssets(), $sourceName, $sourceName); 208 | } 209 | 210 | $assetPath = "$assetLocation/$sourceName"; 211 | if (File::exists(public_path().$assetPath) || preg_match(static::URI_REGEXP, $assetPath)) { 212 | return $assetPath; 213 | } else { 214 | // TODO: The root path of the Laravel application is hardcoded here, it might be a problem 215 | return '/'.preg_replace('/^\//', '', $source); 216 | } 217 | } 218 | 219 | /** 220 | * Computes the full URL to a asset in the public directory. 221 | * This will use Asset::assetPath() internally, so most of their behaviors will be the same. 222 | * 223 | * @param string $source 224 | * @param array $options 225 | * @return string 226 | */ 227 | public function assetUrl($source, array $options = []) 228 | { 229 | $assetPath = $this->assetPath($source, $options); 230 | 231 | return URL::asset($assetPath, Request::secure()); 232 | } 233 | 234 | protected function getHostname() 235 | { 236 | if (Request::server('SERVER_NAME') == "0.0.0.0") { 237 | return gethostname(); 238 | } else { 239 | return Request::server('SERVER_NAME'); 240 | } 241 | } 242 | } 243 | -------------------------------------------------------------------------------- /src/Efficiently/Larasset/Commands/AssetsCommand.php: -------------------------------------------------------------------------------- 1 | packagePath(); 15 | 16 | if ($this->useWindows()) { 17 | $source = $packagePath."/public/assets"; 18 | } else { 19 | $source = $packagePath."/public/assets/"; 20 | } 21 | $destination = $this->normalizePath(public_path('assets')); 22 | if (! File::exists($source)) { 23 | File::makeDirectory($source); 24 | } 25 | if (! File::exists($destination)) { 26 | File::makeDirectory($destination); 27 | } 28 | $copyAssetsCommand = $this->copyCommand().' '.$this->copyOptions().' "'.$source.'" "'.$destination.'" > nul'; 29 | 30 | shell_exec($copyAssetsCommand); 31 | } 32 | 33 | /** 34 | * Returns the copy comment specific to your OS 35 | * @return string 36 | */ 37 | protected function copyCommand() 38 | { 39 | $sys = strtoupper(PHP_OS); 40 | 41 | if (substr($sys, 0, 3) == "WIN") { 42 | $copyCommand = "xcopy"; 43 | } elseif ($sys == "LINUX") { 44 | $copyCommand = "cp"; 45 | } else { 46 | $copyCommand = "cp"; // MacOS 47 | } 48 | 49 | return $copyCommand; 50 | } 51 | 52 | protected function copyOptions() 53 | { 54 | $sys = strtoupper(PHP_OS); 55 | 56 | if (substr($sys, 0, 3) == "WIN") { 57 | // Copy all files recursively, verifies each new file and overwrites existing files without prompting you. 58 | $copyOptions = "/E /V /Y"; 59 | } elseif ($sys == "LINUX") { 60 | // Preserve date creation attribute, copy all files recursively and treat destination as a normal file 61 | $copyOptions = "-pRT"; 62 | } else { 63 | $copyOptions = "-pR"; // MacOS 64 | } 65 | 66 | return $copyOptions; 67 | } 68 | 69 | /** 70 | * Delete Manifest file(s) in the application's assets path 71 | * 72 | * @return void 73 | */ 74 | protected function deleteManifest() 75 | { 76 | $manifests = find_paths(public_path('assets/').'manifest-*.json'); 77 | foreach ($manifests as $manifest) { 78 | File::delete($manifest); 79 | } 80 | } 81 | 82 | /** 83 | * Delete recursively a tree of folders 84 | * Source: http://www.php.net/manual/fr/function.rmdir.php#110489 85 | * 86 | * @param string $dir Base directory 87 | * @return bool 88 | */ 89 | protected function deleteTree($dir) 90 | { 91 | $files = array_diff(scandir($dir), ['.', '..']); 92 | foreach ($files as $file) { 93 | (is_dir("$dir/$file")) ? $this->deleteTree("$dir/$file") : unlink("$dir/$file"); 94 | } 95 | 96 | return rmdir($dir); 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /src/Efficiently/Larasset/Commands/BaseCommand.php: -------------------------------------------------------------------------------- 1 | hasNode()) { 19 | $this->error('Please install Node.'); 20 | exit(); 21 | } 22 | 23 | if (! $this->hasNpm()) { 24 | $this->error("Please install Npm."); 25 | exit(); 26 | } 27 | if (! $this->hasLarassetJs()) { 28 | $this->error("Please install the Node.js module 'larasset-js'. Run in a terminal: 'npm install -g larasset-js'"); 29 | exit(); 30 | } 31 | 32 | putenv('LARAVEL_ROOT='.$this->normalizePath(base_path())); 33 | 34 | } 35 | 36 | /** 37 | * Windows platform support: Convert backslash to slash 38 | * 39 | * @param string $path 40 | * @return string 41 | */ 42 | protected function normalizePath($path) 43 | { 44 | return str_replace('\\', '/', $path); 45 | } 46 | 47 | /** 48 | * Check if the PHP server is under Windows Operating System 49 | * 50 | * @return bool 51 | */ 52 | protected function useWindows() 53 | { 54 | $sys = strtoupper(PHP_OS); 55 | 56 | return (substr($sys, 0, 3) == "WIN"); 57 | } 58 | 59 | /** 60 | * Returns package absolute path 61 | * 62 | * @return string 63 | */ 64 | protected function packagePath() 65 | { 66 | return $this->normalizePath(realpath(__DIR__."/../../../..")); 67 | } 68 | 69 | /** 70 | * Does user have Node.js installed? 71 | * 72 | * @return boolean 73 | */ 74 | protected function hasNode() 75 | { 76 | if ($this->useWindows()) { 77 | $node = shell_exec('where node'); 78 | } else { 79 | $node = shell_exec('which node'); 80 | } 81 | 82 | return str_contains($node, 'node'); 83 | } 84 | 85 | /** 86 | * Does user have Npm installed? 87 | * 88 | * @return boolean 89 | */ 90 | protected function hasNpm() 91 | { 92 | if ($this->useWindows()) { 93 | $npm = shell_exec('where npm'); 94 | } else { 95 | $npm = shell_exec('which npm'); 96 | } 97 | 98 | return str_contains($npm, 'npm'); 99 | } 100 | 101 | /** 102 | * Does user have larasset-js module installed? 103 | * 104 | * @return boolean 105 | */ 106 | protected function hasLarassetJs() 107 | { 108 | if ($this->useWindows()) { 109 | $larasset = shell_exec('where larasset'); 110 | } else { 111 | $larasset = shell_exec('which larasset'); 112 | } 113 | 114 | return str_contains($larasset, 'larasset'); 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /src/Efficiently/Larasset/Commands/CleanAssetsCommand.php: -------------------------------------------------------------------------------- 1 | normalizePath($this->option('gemfile-path')); 48 | $packagePath = $this->packagePath(); 49 | if ($this->useWindows()) { 50 | putenv('BUNDLE_GEMFILE='.$gemFilePath); 51 | $bundleGemfile = 'setx BUNDLE_GEMFILE "'.$gemFilePath.'" > nul'; 52 | } else { 53 | $bundleGemfile = 'BUNDLE_GEMFILE "'.$gemFilePath.'"'; 54 | } 55 | $this->envs = array_add($this->envs, 'BUNDLE_GEMFILE', $gemFilePath); 56 | 57 | $assetsCleanCommand = $bundleGemfile." && ".$this->getRakeCommand()." assets:clean RAILS_ENV=".$environment; 58 | 59 | // Clean assets 60 | system("cd ".$packagePath." && ".$assetsCleanCommand); 61 | 62 | $destination = $this->normalizePath(public_path('assets')); 63 | 64 | // Delete old assets 65 | if (File::isDirectory($destination)) { 66 | $this->deleteTree($destination); 67 | } 68 | $this->copyAssets(); 69 | } 70 | 71 | /** 72 | * Get the console command arguments. 73 | * 74 | * @return array 75 | */ 76 | protected function getArguments() 77 | { 78 | return [ 79 | // ['example', InputArgument::REQUIRED, 'An example argument.'], 80 | ]; 81 | } 82 | 83 | /** 84 | * Get the console command options. 85 | * 86 | * @return array 87 | */ 88 | protected function getOptions() 89 | { 90 | return [ 91 | // ['example', null, InputOption::VALUE_OPTIONAL, 'An example option.', 'default value'], 92 | ]; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /src/Efficiently/Larasset/Commands/PrecompileAssetsCommand.php: -------------------------------------------------------------------------------- 1 | option('environment')) { 43 | # TODO: Remove the DEPRECATED stuff in the next minor version (0.10.0 or 1.0.0) 44 | $this->comment("WARN: The '--environment' option is DEPRECATED, use '--assets-env' option instead please."); 45 | $assetsEnv = $this->option('environment'); 46 | } else { 47 | $assetsEnv = $this->option('assets-env'); 48 | } 49 | 50 | $packagePath = $this->packagePath(); 51 | 52 | $searchPaths = array_map( 53 | function ($path) { 54 | return $this->normalizePath($path); 55 | }, 56 | config('larasset.paths', []) 57 | ); 58 | putenv('LARASSET_PATH='.implode('|', $searchPaths)); 59 | $precompileFiles = array_map( 60 | function ($path) { 61 | return $this->normalizePath($path); 62 | }, 63 | config('larasset.precompile', []) 64 | ); 65 | putenv('LARASSET_PRECOMPILE='.implode('|', $precompileFiles)); 66 | putenv('LARASSET_ENV='.$assetsEnv); 67 | putenv('LARASSET_COMMAND=precompile'); 68 | putenv('LARASSET_PREFIX='.config('larasset.prefix')); 69 | $enableSourceMaps = config('larasset.sourceMaps') === null ? true : config('larasset.sourceMaps'); 70 | putenv('LARASSET_SOURCE_MAPS='.($enableSourceMaps ? 'true' : 'false')); 71 | $assetsPrecompileCommand = "larasset"; 72 | 73 | // Precompile assets 74 | system("cd ".$packagePath." && ".$assetsPrecompileCommand); 75 | 76 | // $this->deleteManifest(); 77 | // $this->copyAssets(); 78 | } 79 | 80 | /** 81 | * Get the console command arguments. 82 | * 83 | * @return array 84 | */ 85 | protected function getArguments() 86 | { 87 | return [ 88 | // ['example', InputArgument::REQUIRED, 'An example argument.'], 89 | ]; 90 | } 91 | 92 | /** 93 | * Get the console command options. 94 | * 95 | * @return array 96 | */ 97 | protected function getOptions() 98 | { 99 | return [ 100 | ['assets-env', null, InputOption::VALUE_OPTIONAL, 'Specifies the assets environment to run this precompilation under.', 'development'], 101 | ['environment', null, InputOption::VALUE_OPTIONAL, "DEPRECATED: Use '--assets-env' option instead."], 102 | 103 | ]; 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /src/Efficiently/Larasset/Commands/ServeAssetsCommand.php: -------------------------------------------------------------------------------- 1 | option('host'); 43 | $serverPort = $this->option('port'); 44 | if ($this->option('environment')) { 45 | # TODO: Remove the DEPRECATED stuff in the next minor version (0.10.0 or 1.0.0) 46 | $this->comment("WARN: The '--environment' option is DEPRECATED, use '--assets-env' option instead please."); 47 | $serverEnv = $this->option('environment'); 48 | } else { 49 | $serverEnv = $this->option('assets-env'); 50 | } 51 | 52 | $serverOptions = "--port=".$serverPort." --host=".$serverHost; 53 | $packagePath = $this->packagePath(); 54 | 55 | $searchPaths = array_map( 56 | function ($path) { 57 | return $this->normalizePath($path); 58 | }, 59 | config('larasset.paths', []) 60 | ); 61 | putenv('LARASSET_PATH='.implode('|', $searchPaths)); 62 | putenv('LARASSET_PREFIX='.config('larasset.prefix')); 63 | putenv('LARASSET_ENV='.$serverEnv); 64 | putenv('LARASSET_COMMAND=server'); 65 | $assetsServerCommand = "larasset ".$serverOptions; 66 | 67 | // Serve assets 68 | system("cd ".$packagePath." && ".$assetsServerCommand); 69 | } 70 | 71 | /** 72 | * Get the console command arguments. 73 | * 74 | * @return array 75 | */ 76 | protected function getArguments() 77 | { 78 | return [ 79 | // ['example', InputArgument::REQUIRED, 'An example argument.'], 80 | ]; 81 | } 82 | 83 | /** 84 | * Get the console command options. 85 | * 86 | * @return array 87 | */ 88 | protected function getOptions() 89 | { 90 | return [ 91 | ['host', null, InputOption::VALUE_OPTIONAL, 'The host address to serve the asset files on.', "localhost"], 92 | ['port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the asset files on.', config('larasset.port', 3000)], 93 | ['assets-env', null, InputOption::VALUE_OPTIONAL, 'Specifies the assets environment to run this server under (test/development/production).', 'development'], 94 | ['environment', null, InputOption::VALUE_OPTIONAL, "DEPRECATED: Use '--assets-env' option instead."], 95 | ]; 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /src/Efficiently/Larasset/Commands/ServerCommand.php: -------------------------------------------------------------------------------- 1 | option('host'); 44 | $serverPort = $this->option('port'); 45 | $serverEnv = $this->option('env'); 46 | $assetsServerHost = $this->option('larasset-host'); 47 | $assetsServerPort = $this->option('larasset-port'); 48 | putenv('LARASSET_PORT='.$assetsServerPort); 49 | if ($this->option('larasset-environment')) { 50 | // TODO: Remove the DEPRECATED stuff in the next minor version (0.10.0 or 1.0.0) 51 | $this->comment("WARN: The '--larasset-environment' option is DEPRECATED, use '--larasset-env' option instead please."); 52 | $assetsServerEnv = $this->option('larasset-environment'); 53 | } else { 54 | $assetsServerEnv = $this->option('larasset-env'); 55 | } 56 | 57 | // Run assets server in a background process 58 | $command = "php artisan larasset:serve --port=".$assetsServerPort." --host=".$assetsServerHost." --assets-env=".$assetsServerEnv; 59 | $this->info("Start the assets server..."); 60 | 61 | $serverLogsPath = $this->normalizePath(storage_path('logs/larasset_server.log')); 62 | $this->line('Assets server logs are stored in "'.$serverLogsPath.'"'); 63 | $this->execInBackground($command, $serverLogsPath); 64 | 65 | // Run PHP application server 66 | $this->call('serve', ['--host' => $serverHost, '--port' => $serverPort, '--env' => $serverEnv]); 67 | } 68 | 69 | /** 70 | * Get the console command arguments. 71 | * 72 | * @return array 73 | */ 74 | protected function getArguments() 75 | { 76 | return [ 77 | // ['example', InputArgument::REQUIRED, 'An example argument.'], 78 | ]; 79 | } 80 | 81 | /** 82 | * Get the console command options. 83 | * 84 | * @return array 85 | */ 86 | protected function getOptions() 87 | { 88 | return [ 89 | ['host', null, InputOption::VALUE_OPTIONAL, 'The host address to serve the application on.', "localhost"], 90 | ['port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the application on.', 8000], 91 | ['larasset-host', null, InputOption::VALUE_OPTIONAL, 'The host address to serve the asset files on.', "localhost"], 92 | ['larasset-port', null, InputOption::VALUE_OPTIONAL, 'The port to serve the asset files on.', config('larasset.port', 3000)], 93 | ['larasset-env', null, InputOption::VALUE_OPTIONAL, 'Specifies the assets environment to run this server under (test/development/production).', 'development'], 94 | ['larasset-environment', null, InputOption::VALUE_OPTIONAL, "DEPRECATED: Use '--larasset-env' option instead."], 95 | 96 | ]; 97 | } 98 | 99 | protected function execInBackground($command, $output = null) 100 | { 101 | $output = $output ?: ($this->useWindows() ? 'nul': '/dev/null'); // no output by default 102 | if ($this->useWindows()) { 103 | // Source: http://arstechnica.com/civis/viewtopic.php?p=9058895&sid=ca678fb8e1cf654f5efae647716a343b#p9058895 104 | if (! class_exists("\COM")) { 105 | $this->error("Please install COM extension for PHP, see: http://www.php.net/manual/en/com.installation.php"); 106 | } 107 | $WshShell = new \COM("WScript.Shell"); 108 | $WshShell->Run("cmd /c title $command && ".$command." > ".$output." 2>&1 &", 2, false); 109 | } else { 110 | // For Linux and Mac OS platforms 111 | // TODO: Try pcntl_exec() function instead 112 | shell_exec(sprintf('%s > '.$output.' 2>&1 &', $command)); 113 | } 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /src/Efficiently/Larasset/Commands/SetupAssetsCommand.php: -------------------------------------------------------------------------------- 1 | line(''); 36 | $this->line('Creating initial directory structure and copying some general purpose assets over.'); 37 | $this->line(''); 38 | 39 | $this->xcopy(realpath($structure), realpath($base)); 40 | 41 | $this->line(''); 42 | $this->line('Finished.'); 43 | } 44 | 45 | private function xcopy($source, $dest) 46 | { 47 | $base = base_path(); 48 | foreach ($iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST) as $item) { 49 | if ($item->isDir()) { 50 | if (! is_dir($dest . '/' . $iterator->getSubPathName())) { 51 | mkdir($dest . '/' . $iterator->getSubPathName()); 52 | } 53 | } else { 54 | copy($item, $dest . '/' . $iterator->getSubPathName()); 55 | $this->line(' Copying -> ' . str_replace($base, '', $dest . '/' . $iterator->getSubPathName())); 56 | } 57 | } 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /src/Efficiently/Larasset/Facades/Asset.php: -------------------------------------------------------------------------------- 1 | publishes([ 24 | __DIR__ . '/../../config/config.php' => config_path('larasset.php') 25 | ], 'config'); 26 | 27 | $this->mergeConfigFrom( 28 | __DIR__ . '/../../config/config.php', 29 | 'larasset' 30 | ); 31 | 32 | // Init assets 33 | $this->app->make('asset', [public_path()."/assets"]); 34 | } 35 | 36 | /** 37 | * Register the service provider. 38 | * 39 | * @return void 40 | */ 41 | public function register() 42 | { 43 | $this->app->singleton('asset', function ($app, $parameters = []) { 44 | if (count($parameters) < 2) { 45 | $parameters = array_merge($parameters, [null]); 46 | } 47 | list($dir, $path) = $parameters; 48 | 49 | return new Asset($dir, $path); 50 | }); 51 | 52 | $this->app->bind('manifest', function ($app, $parameters = []) { 53 | if (count($parameters) < 2) { 54 | $parameters = array_merge($parameters, [null]); 55 | } 56 | list($dir, $path) = $parameters; 57 | 58 | return new Manifest($dir, $path); 59 | }); 60 | 61 | // TODO: Allow to register or not Larasset commands in production env with a config option 62 | if ($this->app->environment() !== 'production' && $this->app['config']->get('app.debug')) { 63 | // For security reasons Larasset commands aren't available in production environment 64 | $this->registerCommands(); 65 | } 66 | 67 | // TODO: Allow to publish default package.json in the config path of the package 68 | } 69 | 70 | protected function registerCommands() 71 | { 72 | $this->app->bind('larasset:precompile', function ($app) { 73 | return new Commands\PrecompileAssetsCommand(); 74 | }); 75 | 76 | $this->app->bind('larasset:clean', function ($app) { 77 | return new Commands\CleanAssetsCommand(); 78 | }); 79 | 80 | $this->app->bind('larasset:setup', function ($app) { 81 | return new Commands\SetupAssetsCommand(); 82 | }); 83 | 84 | $this->app->bind('larasset:serve', function ($app) { 85 | return new Commands\ServeAssetsCommand(); 86 | }); 87 | 88 | $this->app->bind('server', function ($app) { 89 | return new Commands\ServerCommand(); 90 | }); 91 | 92 | $this->commands([ 93 | 'larasset:precompile', 'larasset:clean', 'larasset:setup', 94 | 'larasset:serve', 'server' 95 | ]); 96 | } 97 | 98 | /** 99 | * Get the services provided by the provider. 100 | * 101 | * @return array 102 | */ 103 | public function provides() 104 | { 105 | return []; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /src/Efficiently/Larasset/Manifest.php: -------------------------------------------------------------------------------- 1 | dir, $this->path) = $args; 36 | $this->dir = $this->normalizePath($this->dir); 37 | $this->path = $this->normalizePath($this->path); 38 | 39 | $basePath = $this->normalizePath(base_path()); // Windows support: Convert backslash to slash 40 | 41 | // Expand paths 42 | if ($this->dir) { 43 | $this->dir = $this->normalizePath(realpath($this->dir)); 44 | } 45 | 46 | if ($this->path) { 47 | $this->path = $this->normalizePath(realpath($this->path)); 48 | } 49 | 50 | // If path is given as the second arg 51 | if ($this->dir && File::extension($this->dir) != "") { 52 | list($this->dir, $this->path) = [null, $this->dir]; 53 | } 54 | 55 | // Default dir to the directory of the path 56 | if ($this->path) { 57 | $this->dir = $this->dir ?: dirname($this->path); 58 | } 59 | 60 | // If directory is given w/o path, pick a random manifest.json location 61 | if ($this->dir && !$this->path) { 62 | // Find the first manifest.json in the directory 63 | $paths = find_paths($this->dir."/manifest*.json"); 64 | 65 | if (! empty($paths)) { 66 | $this->path = head($paths); 67 | } else { 68 | $this->path = $this->dir."/manifest-".md5(uniqid(mt_rand(), true)).".json"; 69 | } 70 | } 71 | 72 | if (! $this->dir && ! $this->path) { 73 | throw new Exception("manifest requires output path", 1); 74 | } 75 | 76 | $data = []; 77 | 78 | try { 79 | if (File::exists($this->path)) { 80 | // \Log::info("Load manifest !");//debug 81 | $data = json_decode(File::get($this->path), true); 82 | } 83 | } catch (Exception $e) { 84 | \Log::error($this->path." is invalid: ".get_classname($e)." ".$e->getMessage()); 85 | } 86 | $this->data = $data; 87 | } 88 | 89 | // Returns internal assets mapping. Keys are logical paths which 90 | // map to the latest fingerprinted filename. 91 | // 92 | // Logical path (String): Fingerprint path (String) 93 | // 94 | // [ "app.js" => "app-2e8e9a7c6b0aafa0c9bdeec90ea30213.js", 95 | // "jquery.js" => "jquery-ae0908555a245f8266f77df5a8edca2e.js" ] 96 | // 97 | public function getAssets() 98 | { 99 | return array_get($this->data, 'assets', []); 100 | } 101 | 102 | // Returns internal file directory listing. Keys are filenames 103 | // which map to an attributes array. 104 | // 105 | // Fingerprint path (String): 106 | // logical_path: Logical path (String) 107 | // mtime: ISO8601 mtime (String) 108 | // digest: Base64 hex digest (String) 109 | // 110 | // [ "app-2e8e9a7c6b0aafa0c9bdeec90ea30213.js" => 111 | // [ 'logical_path' => "app.js", 112 | // 'mtime' => "2011-12-13T21:47:08-06:00", 113 | // 'digest' => "2e8e9a7c6b0aafa0c9bdeec90ea30213" ] ] 114 | // 115 | public function getFiles() 116 | { 117 | return array_get($this->data, 'files', []); 118 | } 119 | 120 | /** 121 | * Windows platform support: Convert backslash to slash 122 | * 123 | * @param string $path 124 | * @return string 125 | */ 126 | protected function normalizePath($path) 127 | { 128 | return str_replace('\\', '/', $path); 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /src/Efficiently/Larasset/helpers.php: -------------------------------------------------------------------------------- 1 | 'My beautiful hat' 117 | * 118 | * @param string $value 119 | * @return string 120 | */ 121 | function humanize($value) 122 | { 123 | return ucfirst(preg_replace('/_/', ' ', snake_case(camel_case($value)))); 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /src/config/config.php: -------------------------------------------------------------------------------- 1 | '/assets', 15 | 16 | /** 17 | * By default, Larasset links to these assets on the current host 18 | * in the public folder, but you can direct Larasset to link to assets 19 | * from a dedicated asset server by setting `larasset.host` 20 | * in the package configuration, typically in 21 | * `config/larasset.php`. 22 | * For example, you'd define `http://assets.example.com` to be your asset host 23 | * this way: 24 | * 25 | * Config::set('larasset.host', 'http://assets.example.com'); 26 | * 27 | * Helpers take that into account: 28 | * 29 | * image_tag("logo.png"); 30 | * // -> Logo 31 | * stylesheet_link_tag("app"); 32 | * // -> 33 | * 34 | * sets the host for the assets. Useful when CDNs are used for hosting 35 | * assets, or when you want to work around the concurrency constraints builtin in browsers 36 | * using different domain aliases. 37 | */ 38 | 'host' => null, 39 | 40 | /** 41 | * The port to serve the asset files on. 42 | * Useful for your development environment when you run the Assets server 43 | */ 44 | 'port' => 3000, 45 | 46 | /** 47 | * Search Paths 48 | * 49 | * When a file is referenced from a manifest or a helper, 50 | * Larasset searches the three default asset locations for it. 51 | * 52 | * Besides the standard assets/* paths, additional (fully qualified) 53 | * paths can be added to the pipeline 54 | */ 55 | 'paths' => array_merge( 56 | // Including assets files in `resources/assets` folders of your Laravel packages. 57 | find_paths(base_path().'/vendor/*/*/resources/assets/*/'), 58 | [ 59 | base_path().'/resources/assets/images', 60 | base_path().'/resources/assets/js', 61 | base_path().'/resources/assets/css', 62 | base_path().'/lib/assets/images', 63 | base_path().'/lib/assets/js', 64 | base_path().'/lib/assets/css', 65 | base_path().'/provider/assets/images', 66 | base_path().'/provider/assets/js', 67 | base_path().'/provider/assets/css', 68 | // base_path().'/provider/videoplayer/flash', 69 | ] 70 | ), 71 | 72 | /** 73 | * Precompile files 74 | * 75 | * The default matcher for compiling files includes app.js, app.css 76 | * and all non-JS/CSS files (this will include all image assets automatically) 77 | * from resources/assets folders including your Laravel packages. 78 | * 79 | * If you have other manifests or individual stylesheets and JavaScript files 80 | * to include, you can add them to this precompile array. 81 | */ 82 | 'precompile' => [ 83 | 'app.css', 84 | 'app.js', 85 | // 'admin.js', 86 | // 'admin.css', 87 | ], 88 | 89 | /** 90 | * Enable or disable Source Mapping. 91 | * Useful in development environment to debug precompiled files. 92 | * Source-maps files shouldn't be published on a public web server. 93 | * So you can disable them for your production environment. 94 | */ 95 | 'sourceMaps' => true, 96 | 97 | ]; 98 | -------------------------------------------------------------------------------- /structure/provider/assets/css/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efficiently/larasset/1c95efb059f0c9b9868b8898e330822aec1f8f7e/structure/provider/assets/css/.gitkeep -------------------------------------------------------------------------------- /structure/provider/assets/images/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efficiently/larasset/1c95efb059f0c9b9868b8898e330822aec1f8f7e/structure/provider/assets/images/.gitkeep -------------------------------------------------------------------------------- /structure/provider/assets/js/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efficiently/larasset/1c95efb059f0c9b9868b8898e330822aec1f8f7e/structure/provider/assets/js/.gitkeep -------------------------------------------------------------------------------- /structure/public/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efficiently/larasset/1c95efb059f0c9b9868b8898e330822aec1f8f7e/structure/public/assets/.gitkeep -------------------------------------------------------------------------------- /structure/resources/assets/css/app.css: -------------------------------------------------------------------------------- 1 | /** 2 | * This is a manifest file that'll be compiled into app.css, which will include all the files 3 | * listed below. 4 | * 5 | * Any CSS, LESS or Sass files within this directory, lib/assets/css, provider/assets/css, 6 | * or provider/assets/css of packages, if any, can be referenced here using a relative path. 7 | * 8 | * It's not advisable to add code directly here, but if you do, it'll appear in whatever order it 9 | * gets included (e.g. say you have require_tree . then the code will appear after all the directories 10 | * but before any files alphabetically greater than 'app.css' 11 | * 12 | *= require_self 13 | *= require_tree . 14 | */ 15 | -------------------------------------------------------------------------------- /structure/resources/assets/images/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efficiently/larasset/1c95efb059f0c9b9868b8898e330822aec1f8f7e/structure/resources/assets/images/.gitkeep -------------------------------------------------------------------------------- /structure/resources/assets/js/app.js: -------------------------------------------------------------------------------- 1 | // This is a manifest file that'll be compiled into app.js, which will include all the files 2 | // listed below. 3 | // 4 | // Any JavaScript/Coffee file within this directory, lib/assets/js, provider/assets/js, 5 | // or provider/assets/js of packages, if any, can be referenced here using a relative path. 6 | // 7 | // It's not advisable to add code directly here, but if you do, it'll appear in whatever order it 8 | // gets included (e.g. say you have require_tree . then the code will appear after all the directories 9 | // but before any files alphabetically greater than 'app.js' 10 | // 11 | // Read Mincer README (https://github.com/nodeca/mincer#mincer-directives) for details 12 | // about supported directives. 13 | // 14 | //= require jquery 15 | //= require jquery_ujs 16 | //= require_tree . 17 | -------------------------------------------------------------------------------- /tests/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efficiently/larasset/1c95efb059f0c9b9868b8898e330822aec1f8f7e/tests/.gitkeep --------------------------------------------------------------------------------