Merge pull request #69 from paranarimasu/master

fix(videos): minimize requests to object storage for video streams
This commit is contained in:
paranarimasu
2020-11-13 15:51:25 -06:00
committed by GitHub
9 changed files with 216 additions and 174 deletions
@@ -115,7 +115,7 @@ class VideoReconcileCommand extends Command
// Represent video with attributes that correspond to WebM metadata
// For reconciliation purposes, other attributes such as ID and timestamps do not apply
public static function reconciliationString($video) {
return "basename:{$video->basename},filename:{$video->filename},path:{$video->path}";
return "basename:{$video->basename},filename:{$video->filename},path:{$video->path},size:{$video->size}";
}
// Reconciliation Results
+21 -1
View File
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
use App\Models\Video;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\StreamedResponse;
class VideosController extends Controller
{
@@ -19,6 +20,25 @@ class VideosController extends Controller
return redirect()->route('welcome');
}
return Storage::disk('spaces')->response($video->path, null, ['Accept-Ranges' => 'bytes']);
$response = new StreamedResponse;
$disposition = $response->headers->makeDisposition('inline', $video->basename);
$response->headers->replace([
'Accept-Ranges' => 'bytes',
'Content-Type' => 'video/webm',
'Content-Length' => $video->size,
'Content-Disposition' => $disposition,
]);
$fs = Storage::disk('spaces');
$response->setCallback(function () use ($fs, $video) {
$stream = $fs->readStream($video->path);
fpassthru($stream);
fclose($stream);
});
return $response;
}
}
+1 -1
View File
@@ -6,5 +6,5 @@ use Illuminate\Database\Eloquent\Model;
class Video extends Model
{
protected $fillable = ['basename', 'filename', 'path'];
protected $fillable = ['basename', 'filename', 'path', 'size'];
}
Generated
+47 -52
View File
@@ -60,16 +60,16 @@
},
{
"name": "aws/aws-sdk-php",
"version": "3.158.19",
"version": "3.161.1",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "b1c3c763e227e518768f0416cbd2b29c11f79561"
"reference": "4c1852e9efaef18e15f2a6c914d8dc41fda2a052"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/b1c3c763e227e518768f0416cbd2b29c11f79561",
"reference": "b1c3c763e227e518768f0416cbd2b29c11f79561",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/4c1852e9efaef18e15f2a6c914d8dc41fda2a052",
"reference": "4c1852e9efaef18e15f2a6c914d8dc41fda2a052",
"shasum": ""
},
"require": {
@@ -141,7 +141,7 @@
"s3",
"sdk"
],
"time": "2020-11-02T19:49:21+00:00"
"time": "2020-11-13T19:17:55+00:00"
},
{
"name": "brick/math",
@@ -1211,16 +1211,16 @@
},
{
"name": "laravel/framework",
"version": "v8.12.3",
"version": "v8.14.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "6707480c5f0db7aa07537f9ad93255b64b65b85e"
"reference": "b60139c9d3b475d5b5dc261c5dcafe8ca49b4a13"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/6707480c5f0db7aa07537f9ad93255b64b65b85e",
"reference": "6707480c5f0db7aa07537f9ad93255b64b65b85e",
"url": "https://api.github.com/repos/laravel/framework/zipball/b60139c9d3b475d5b5dc261c5dcafe8ca49b4a13",
"reference": "b60139c9d3b475d5b5dc261c5dcafe8ca49b4a13",
"shasum": ""
},
"require": {
@@ -1370,7 +1370,7 @@
"framework",
"laravel"
],
"time": "2020-10-29T22:01:29+00:00"
"time": "2020-11-10T14:47:10+00:00"
},
{
"name": "laravel/tinker",
@@ -2011,16 +2011,16 @@
},
{
"name": "opis/closure",
"version": "3.6.0",
"version": "3.6.1",
"source": {
"type": "git",
"url": "https://github.com/opis/closure.git",
"reference": "c547f8262a5fa9ff507bd06cc394067b83a75085"
"reference": "943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/opis/closure/zipball/c547f8262a5fa9ff507bd06cc394067b83a75085",
"reference": "c547f8262a5fa9ff507bd06cc394067b83a75085",
"url": "https://api.github.com/repos/opis/closure/zipball/943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5",
"reference": "943b5d70cc5ae7483f6aff6ff43d7e34592ca0f5",
"shasum": ""
},
"require": {
@@ -2068,7 +2068,7 @@
"serialization",
"serialize"
],
"time": "2020-10-11T21:42:15+00:00"
"time": "2020-11-07T02:01:34+00:00"
},
{
"name": "phpoption/phpoption",
@@ -4955,23 +4955,23 @@
},
{
"name": "voku/portable-ascii",
"version": "1.5.3",
"version": "1.5.6",
"source": {
"type": "git",
"url": "https://github.com/voku/portable-ascii.git",
"reference": "25bcbf01678930251fd572891447d9e318a6e2b8"
"reference": "80953678b19901e5165c56752d087fc11526017c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/voku/portable-ascii/zipball/25bcbf01678930251fd572891447d9e318a6e2b8",
"reference": "25bcbf01678930251fd572891447d9e318a6e2b8",
"url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c",
"reference": "80953678b19901e5165c56752d087fc11526017c",
"shasum": ""
},
"require": {
"php": ">=7.0.0"
},
"require-dev": {
"phpunit/phpunit": "~6.0 || ~7.0"
"phpunit/phpunit": "~6.0 || ~7.0 || ~9.0"
},
"suggest": {
"ext-intl": "Use Intl for transliterator_transliterate() support"
@@ -5021,42 +5021,37 @@
"type": "tidelift"
}
],
"time": "2020-07-22T23:32:04+00:00"
"time": "2020-11-12T00:07:28+00:00"
}
],
"packages-dev": [
{
"name": "doctrine/instantiator",
"version": "1.3.1",
"version": "1.4.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
"reference": "f350df0268e904597e3bd9c4685c53e0e333feea"
"reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea",
"reference": "f350df0268e904597e3bd9c4685c53e0e333feea",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
"reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^6.0",
"doctrine/coding-standard": "^8.0",
"ext-pdo": "*",
"ext-phar": "*",
"phpbench/phpbench": "^0.13",
"phpstan/phpstan-phpunit": "^0.11",
"phpstan/phpstan-shim": "^0.11",
"phpunit/phpunit": "^7.0"
"phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
"phpstan/phpstan": "^0.12",
"phpstan/phpstan-phpunit": "^0.12",
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2.x-dev"
}
},
"autoload": {
"psr-4": {
"Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
@@ -5070,7 +5065,7 @@
{
"name": "Marco Pivetta",
"email": "ocramius@gmail.com",
"homepage": "http://ocramius.github.com/"
"homepage": "https://ocramius.github.io/"
}
],
"description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
@@ -5093,7 +5088,7 @@
"type": "tidelift"
}
],
"time": "2020-05-29T17:27:14+00:00"
"time": "2020-11-10T18:47:58+00:00"
},
{
"name": "facade/flare-client-php",
@@ -5158,16 +5153,16 @@
},
{
"name": "facade/ignition",
"version": "2.5.0",
"version": "2.5.1",
"source": {
"type": "git",
"url": "https://github.com/facade/ignition.git",
"reference": "81698c5e32837c74abf9bb764ff0c1b3e001afb3"
"reference": "3b3403f18bbdc0aeadf1ffaddf11a1588b12ec7a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/facade/ignition/zipball/81698c5e32837c74abf9bb764ff0c1b3e001afb3",
"reference": "81698c5e32837c74abf9bb764ff0c1b3e001afb3",
"url": "https://api.github.com/repos/facade/ignition/zipball/3b3403f18bbdc0aeadf1ffaddf11a1588b12ec7a",
"reference": "3b3403f18bbdc0aeadf1ffaddf11a1588b12ec7a",
"shasum": ""
},
"require": {
@@ -5225,7 +5220,7 @@
"laravel",
"page"
],
"time": "2020-10-27T13:02:22+00:00"
"time": "2020-11-13T13:36:24+00:00"
},
{
"name": "facade/ignition-contracts",
@@ -5505,16 +5500,16 @@
},
{
"name": "myclabs/deep-copy",
"version": "1.10.1",
"version": "1.10.2",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
"reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5"
"reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
"reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5",
"url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
"reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
"shasum": ""
},
"require": {
@@ -5555,7 +5550,7 @@
"type": "tidelift"
}
],
"time": "2020-06-29T13:22:24+00:00"
"time": "2020-11-13T09:40:50+00:00"
},
{
"name": "nunomaduro/collision",
@@ -6253,16 +6248,16 @@
},
{
"name": "phpunit/phpunit",
"version": "9.4.2",
"version": "9.4.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "3866b2eeeed21b1b099c4bc0b7a1690ac6fd5baa"
"reference": "9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3866b2eeeed21b1b099c4bc0b7a1690ac6fd5baa",
"reference": "3866b2eeeed21b1b099c4bc0b7a1690ac6fd5baa",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab",
"reference": "9fa359ff5ddaa5eb2be2bedb08a6a5787a5807ab",
"shasum": ""
},
"require": {
@@ -6348,7 +6343,7 @@
"type": "github"
}
],
"time": "2020-10-19T09:23:29+00:00"
"time": "2020-11-10T12:53:30+00:00"
},
{
"name": "sebastian/cli-parser",
+1
View File
@@ -70,6 +70,7 @@ return [
'bucket' => env('AWS_BUCKET'),
'endpoint' => env('AWS_ENDPOINT'),
'stream_reads' => env('AWS_STREAM_READS'),
'disable_asserts' => true,
],
],
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddSizeToVideosTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('videos', function (Blueprint $table) {
$table->integer('size')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('videos', function (Blueprint $table) {
$table->dropColumn('size');
});
}
}
+6 -5
View File
@@ -2,11 +2,11 @@
use App\Models\Video;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
class VideosTableSeeder extends Seeder
class VideosTableSeeder extends Seeder
{
public function run() {
// Remove any existing rows in Videos table
// We want this table to match storage, avoiding the need for reconciliation
@@ -20,11 +20,12 @@ class VideosTableSeeder extends Seeder
// Bulk insertion violates default packet size constraints
foreach ($files as $file) {
if ($file['type'] === 'file' && $file['extension'] === 'webm') {
Video::create(array(
Video::create([
'basename' => $file['basename'],
'filename' => $file['filename'],
'path' => $file['path']
));
'path' => $file['path'],
'size' => $file['size'],
]);
}
}
}
+104 -111
View File
@@ -12,9 +12,9 @@
}
},
"@babel/compat-data": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz",
"integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==",
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.5.tgz",
"integrity": "sha512-DTsS7cxrsH3by8nqQSpFSyjSfSYl57D6Cf4q8dW3LK83tBKBDCkfcay1nYkXq1nIHXnpX8WMMb/O25HOy3h1zg==",
"dev": true
},
"@babel/core": {
@@ -42,12 +42,12 @@
}
},
"@babel/generator": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz",
"integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==",
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz",
"integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==",
"dev": true,
"requires": {
"@babel/types": "^7.12.1",
"@babel/types": "^7.12.5",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
}
@@ -72,14 +72,14 @@
}
},
"@babel/helper-compilation-targets": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz",
"integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==",
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz",
"integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==",
"dev": true,
"requires": {
"@babel/compat-data": "^7.12.1",
"@babel/compat-data": "^7.12.5",
"@babel/helper-validator-option": "^7.12.1",
"browserslist": "^4.12.0",
"browserslist": "^4.14.5",
"semver": "^5.5.0"
}
},
@@ -166,12 +166,12 @@
}
},
"@babel/helper-module-imports": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz",
"integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==",
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz",
"integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==",
"dev": true,
"requires": {
"@babel/types": "^7.12.1"
"@babel/types": "^7.12.5"
}
},
"@babel/helper-module-transforms": {
@@ -227,15 +227,15 @@
}
},
"@babel/helper-replace-supers": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz",
"integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==",
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz",
"integrity": "sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA==",
"dev": true,
"requires": {
"@babel/helper-member-expression-to-functions": "^7.12.1",
"@babel/helper-optimise-call-expression": "^7.10.4",
"@babel/traverse": "^7.12.1",
"@babel/types": "^7.12.1"
"@babel/traverse": "^7.12.5",
"@babel/types": "^7.12.5"
}
},
"@babel/helper-simple-access": {
@@ -290,14 +290,14 @@
}
},
"@babel/helpers": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz",
"integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==",
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz",
"integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==",
"dev": true,
"requires": {
"@babel/template": "^7.10.4",
"@babel/traverse": "^7.12.1",
"@babel/types": "^7.12.1"
"@babel/traverse": "^7.12.5",
"@babel/types": "^7.12.5"
}
},
"@babel/highlight": {
@@ -312,9 +312,9 @@
}
},
"@babel/parser": {
"version": "7.12.3",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz",
"integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==",
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.5.tgz",
"integrity": "sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ==",
"dev": true
},
"@babel/plugin-proposal-async-generator-functions": {
@@ -389,9 +389,9 @@
}
},
"@babel/plugin-proposal-numeric-separator": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz",
"integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==",
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.5.tgz",
"integrity": "sha512-UiAnkKuOrCyjZ3sYNHlRlfuZJbBHknMQ9VMwVeX97Ofwx7RpD6gS2HfqTCh8KNUQgcOm8IKt103oR4KIjh7Q8g==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4",
@@ -972,9 +972,9 @@
}
},
"@babel/runtime": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz",
"integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==",
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz",
"integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==",
"dev": true,
"requires": {
"regenerator-runtime": "^0.13.4"
@@ -992,26 +992,26 @@
}
},
"@babel/traverse": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz",
"integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==",
"version": "7.12.5",
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.5.tgz",
"integrity": "sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.10.4",
"@babel/generator": "^7.12.1",
"@babel/generator": "^7.12.5",
"@babel/helper-function-name": "^7.10.4",
"@babel/helper-split-export-declaration": "^7.11.0",
"@babel/parser": "^7.12.1",
"@babel/types": "^7.12.1",
"@babel/parser": "^7.12.5",
"@babel/types": "^7.12.5",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.19"
}
},
"@babel/types": {
"version": "7.12.1",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz",
"integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==",
"version": "7.12.6",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.6.tgz",
"integrity": "sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA==",
"dev": true,
"requires": {
"@babel/helper-validator-identifier": "^7.10.4",
@@ -1063,9 +1063,9 @@
"dev": true
},
"@types/node": {
"version": "14.14.6",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.6.tgz",
"integrity": "sha512-6QlRuqsQ/Ox/aJEQWBEJG7A9+u7oSYl3mem/K8IzxXG/kAGbV1YPD9Bg9Zw3vyxC/YP+zONKwy8hGkSt1jxFMw==",
"version": "14.14.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.7.tgz",
"integrity": "sha512-Zw1vhUSQZYw+7u5dAwNbIA9TuTotpzY/OF7sJM9FqPOF3SPjKnxrjoTktXDZgUjybf4cWVBP7O8wvKdSaGHweg==",
"dev": true
},
"@types/q": {
@@ -1663,14 +1663,14 @@
}
},
"babel-loader": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz",
"integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==",
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.1.tgz",
"integrity": "sha512-dMF8sb2KQ8kJl21GUjkW1HWmcsL39GOV5vnzjqrCzEPNY0S0UfMLnumidiwIajDSBmKhYf5iRW+HXaM4cvCKBw==",
"dev": true,
"requires": {
"find-cache-dir": "^2.1.0",
"loader-utils": "^1.4.0",
"mkdirp": "^0.5.3",
"make-dir": "^2.1.0",
"pify": "^4.0.1",
"schema-utils": "^2.6.5"
}
@@ -1757,9 +1757,9 @@
}
},
"base64-js": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
"integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==",
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"dev": true
},
"batch": {
@@ -1952,21 +1952,13 @@
}
},
"browserify-rsa": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz",
"integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
"integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
"dev": true,
"requires": {
"bn.js": "^4.1.0",
"bn.js": "^5.0.0",
"randombytes": "^2.0.1"
},
"dependencies": {
"bn.js": {
"version": "4.11.9",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
"integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
"dev": true
}
}
},
"browserify-sign": {
@@ -2015,15 +2007,16 @@
}
},
"browserslist": {
"version": "4.14.6",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.6.tgz",
"integrity": "sha512-zeFYcUo85ENhc/zxHbiIp0LGzzTrE2Pv2JhxvS7kpUb9Q9D38kUX6Bie7pGutJ/5iF5rOxE7CepAuWD56xJ33A==",
"version": "4.14.7",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.7.tgz",
"integrity": "sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ==",
"dev": true,
"requires": {
"caniuse-lite": "^1.0.30001154",
"electron-to-chromium": "^1.3.585",
"caniuse-lite": "^1.0.30001157",
"colorette": "^1.2.1",
"electron-to-chromium": "^1.3.591",
"escalade": "^3.1.1",
"node-releases": "^1.1.65"
"node-releases": "^1.1.66"
}
},
"buffer": {
@@ -2178,9 +2171,9 @@
}
},
"caniuse-lite": {
"version": "1.0.30001154",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001154.tgz",
"integrity": "sha512-y9DvdSti8NnYB9Be92ddMZQrcOe04kcQtcxtBx4NkB04+qZ+JUWotnXBJTmxlKudhxNTQ3RRknMwNU2YQl/Org==",
"version": "1.0.30001157",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001157.tgz",
"integrity": "sha512-gOerH9Wz2IRZ2ZPdMfBvyOi3cjaz4O4dgNwPGzx8EhqAs4+2IL/O+fJsbt+znSigujoZG8bVcIAUM/I/E5K3MA==",
"dev": true
},
"chalk": {
@@ -2577,12 +2570,12 @@
"dev": true
},
"core-js-compat": {
"version": "3.6.5",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz",
"integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==",
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.7.0.tgz",
"integrity": "sha512-V8yBI3+ZLDVomoWICO6kq/CD28Y4r1M7CWeO4AGpMdMfseu8bkSubBmUPySMGKRTS+su4XQ07zUkAsiu9FCWTg==",
"dev": true,
"requires": {
"browserslist": "^4.8.5",
"browserslist": "^4.14.6",
"semver": "7.0.0"
},
"dependencies": {
@@ -2928,9 +2921,9 @@
},
"dependencies": {
"css-tree": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0.tgz",
"integrity": "sha512-CdVYz/Yuqw0VdKhXPBIgi8DO3NicJVYZNWeX9XcIuSp9ZoFT5IcleVRW07O5rMjdcx1mb+MEJPknTTEW7DdsYw==",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.1.tgz",
"integrity": "sha512-WroX+2MvsYcRGP8QA0p+rxzOniT/zpAoQ/DTKDSJzh5T3IQKUkFHeIIfgIapm2uaP178GWY3Mime1qbk8GO/tA==",
"dev": true,
"requires": {
"mdn-data": "2.0.12",
@@ -3287,9 +3280,9 @@
"dev": true
},
"electron-to-chromium": {
"version": "1.3.585",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.585.tgz",
"integrity": "sha512-xoeqjMQhgHDZM7FiglJAb2aeOxHZWFruUc3MbAGTgE7GB8rr5fTn1Sdh5THGuQtndU3GuXlu91ZKqRivxoCZ/A==",
"version": "1.3.595",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.595.tgz",
"integrity": "sha512-JpaBIhdBkF9FLG7x06ONfe0f5bxPrxRcq0X+Sc8vsCt+OPWIzxOD+qM71NEHLGbDfN9Q6hbtHRv4/dnvcOxo6g==",
"dev": true
},
"elliptic": {
@@ -4946,9 +4939,9 @@
}
},
"is-core-module": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz",
"integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==",
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.1.0.tgz",
"integrity": "sha512-YcV7BgVMRFRua2FqQzKtTDMz8iCuLEyGKjr70q8Zm1yy2qKcurbFEd79PAdHV77oL3NrAaOVQIbMmiHQCHB7ZA==",
"dev": true,
"requires": {
"has": "^1.0.3"
@@ -5286,9 +5279,9 @@
"dev": true
},
"laravel-mix": {
"version": "5.0.7",
"resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-5.0.7.tgz",
"integrity": "sha512-TL5txnQkzcwM8DYckgzjISSPGyZN6znFYb4NgtTSi9aIvfzOIEC6p0eYM6wDa/BkEKv290Ru6HWmH6Q2XApogQ==",
"version": "5.0.9",
"resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-5.0.9.tgz",
"integrity": "sha512-1WCJiHimTRW3KlxcabRTco0q+bo4uKPaFTkc6cJ/bLEq4JT1aPkojoauUK7+PyiIlDJncw0Nt2MtDrv5C6j5IQ==",
"dev": true,
"requires": {
"@babel/core": "^7.2.0",
@@ -6031,9 +6024,9 @@
}
},
"node-releases": {
"version": "1.1.65",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.65.tgz",
"integrity": "sha512-YpzJOe2WFIW0V4ZkJQd/DGR/zdVwc/pI4Nl1CZrBO19FdRcSTmsuhdttw9rsTzzJLrNcSloLiBbEYx1C4f6gpA==",
"version": "1.1.66",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.66.tgz",
"integrity": "sha512-JHEQ1iWPGK+38VLB2H9ef2otU4l8s3yAMt9Xf934r6+ojCYDMHPMqvCc9TnzfeFSP1QEOeU6YZEd3+De0LTCgg==",
"dev": true
},
"normalize-path": {
@@ -7585,12 +7578,12 @@
"dev": true
},
"resolve": {
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz",
"integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==",
"version": "1.19.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz",
"integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==",
"dev": true,
"requires": {
"is-core-module": "^2.0.0",
"is-core-module": "^2.1.0",
"path-parse": "^1.0.6"
}
},
@@ -7808,18 +7801,18 @@
"dev": true
},
"sass": {
"version": "1.28.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.28.0.tgz",
"integrity": "sha512-9FWX/0wuE1KxwfiP02chZhHaPzu6adpx9+wGch7WMOuHy5npOo0UapRI3FNSHva2CczaYJu2yNUBN8cCSqHz/A==",
"version": "1.29.0",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.29.0.tgz",
"integrity": "sha512-ZpwAUFgnvAUCdkjwPREny+17BpUj8nh5Yr6zKPGtLNTLrmtoRYIjm7njP24COhjJldjwW1dcv52Lpf4tNZVVRA==",
"dev": true,
"requires": {
"chokidar": ">=2.0.0 <4.0.0"
}
},
"sass-loader": {
"version": "10.0.5",
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.0.5.tgz",
"integrity": "sha512-2LqoNPtKkZq/XbXNQ4C64GFEleSEHKv6NPSI+bMC/l+jpEXGJhiRYkAQToO24MR7NU4JRY2RpLpJ/gjo2Uf13w==",
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-10.1.0.tgz",
"integrity": "sha512-ZCKAlczLBbFd3aGAhowpYEy69Te3Z68cg8bnHHl6WnSCvnKpbM6pQrz957HWMa8LKVuhnD9uMplmMAHwGQtHeg==",
"dev": true,
"requires": {
"klona": "^2.0.4",
@@ -9285,15 +9278,15 @@
"dev": true
},
"watchpack": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz",
"integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==",
"version": "1.7.5",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
"integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
"dev": true,
"requires": {
"chokidar": "^3.4.1",
"graceful-fs": "^4.1.2",
"neo-async": "^2.5.0",
"watchpack-chokidar2": "^2.0.0"
"watchpack-chokidar2": "^2.0.1"
},
"dependencies": {
"anymatch": {
@@ -9408,9 +9401,9 @@
}
},
"watchpack-chokidar2": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz",
"integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
"integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
"dev": true,
"optional": true,
"requires": {
+3 -3
View File
@@ -12,11 +12,11 @@
"devDependencies": {
"axios": "^0.20",
"cross-env": "^7.0.2",
"laravel-mix": "^5.0.7",
"laravel-mix": "^5.0.9",
"lodash": "^4.17.20",
"resolve-url-loader": "^3.1.2",
"sass": "^1.28.0",
"sass-loader": "^10.0.5"
"sass": "^1.29.0",
"sass-loader": "^10.1.0"
},
"dependencies": {
"jquery": "^3.5.1",