27 |
28 | = Html::tag('div', Yii::t('app', '✔ This package is OK to use!'), [
29 | 'class' => 'package-ok',
30 | ]) ?>
31 |
32 |
33 |
34 |
Last updated: = Yii::$app->formatter->asDateTime($package->getUpdateTime()) ?> (= Yii::$app->formatter->asRelativeTime($package->getUpdateTime()) ?>)
35 |
36 |
Legend:
37 | $color) : ?>
38 | = Html::tag('span', $stability, ['class' => 'label label-' . $color]) . ' ' ?>
39 |
40 |
41 |
42 | session->hasFlash('rate-limited')) : ?>
43 |
44 |
= Yii::t('app', 'Wow, you are very fast!') ?>
45 |
= Yii::t('app', 'The package was updated recently. Could you wait another 10 minutes before fetching it again, please?') ?>
46 |
47 | session->removeFlash('rate-limited') ?>
48 |
49 |
50 |
51 |
52 |
53 | | = Yii::t('app', 'Version') ?> |
54 | = Yii::t('app', 'Commit SHA') ?> |
55 |
56 |
57 |
58 | $release) : ?>
59 |
60 | |
61 | 'label label-' . $stability_colors[$stability]]);
64 | ?>
65 | |
66 |
67 | = $release['source']['reference'] ?: $release['dist']['reference'] ?: 'n/a' ?>
68 | |
69 |
70 |
81 | |
82 |
83 |
84 |
85 |
86 |
87 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # hiqdev/asset-packagist
2 |
3 | ## [1.0.1] - 2018-05-29
4 |
5 | - Fixed executed jobs limit to follow `yiisoft/yii2-queue` API changes [@SilverFire] ([@SilverFire])
6 |
7 | ## [1.0.0] - 2018-05-25
8 |
9 | - Fixed XSS vulnerabilities ([@SilverFire])
10 | - Added patch version support for `bower-asset/angular` ([@hiqsol])
11 | - Added redirect to package page when its full name given ([@hiqsol])
12 | - Refactored internals: RegistryFactory, Mutex <- Locker, logging ([@hiqsol], [@edgardmessias])
13 | - Updated documentation ([@hiqsol], [@SilverFire], [@edgardmessias])
14 | - Fixed use of `hidev` ([@hiqsol])
15 | - Implemented package management using queues with [zhuravljov/yii2-queue] ([@SilverFire], [@edgardmessias], [@hiqsol], [@zhuravljov])
16 | - Improved look, moved search form to NavBar, added color by stability in package details page ([@hiqsol], [@edgardmessias], [@SilverFire], [@tafid])
17 | - Added order for packages releases ([@edgardmessias], [@SilverFire])
18 | - Added `version_normalized` ([@SilverFire], [@edgardmessias])
19 | - Added providing `require` to support dependencies of bower/npm packages ([@hiqsol])
20 | - Added DB layer to store packages and their properties ([@SilverFire])
21 | - Added dependencies auto resolving for new packages ([@SilverFire])
22 | - Added automatic package avoiding for corrupted packages, enhanced error handling ([@SilverFire])
23 | - Fixed minor issues ([@SilverFire], [@hiqsol], [yatsenco@gmail.com], [@edgardmessias], [et.coder@gmail.com], [jo@surikat.pro])
24 |
25 | ## [0.1.0] - 2016-05-31
26 |
27 | - Fixed minor issues for first release ([@hiqsol], [sam@rmcreative.ru])
28 | - Implemented package details page ([@SilverFire])
29 | - Added and improved texts and package description ([@hiqsol], [@SilverFire])
30 | - Added Top-1000 Bower packages ([@SilverFire], [@hiqsol])
31 | - Changed: rearranged config files to new scheme ([@hiqsol])
32 | - Changed: redone to `hiqdev/asset-packagist` ([@hiqsol])
33 | - Added list operations ([@hiqsol])
34 | - Added search ([@hiqsol])
35 | - Chandged: redone with `Storage` and `Locker` ([@hiqsol])
36 | - Added basics ([@hiqsol])
37 |
38 | ## [Development started] - 2016-04-02
39 |
40 | [zhuravljov/yii2-queue]: https://github.com/zhuravljov/yii2-queue
41 | [fxpio/composer-asset-plugin]: https://github.com/fxpio/composer-asset-plugin
42 | [@hiqsol]: https://github.com/hiqsol
43 | [sol@hiqdev.com]: https://github.com/hiqsol
44 | [@SilverFire]: https://github.com/SilverFire
45 | [d.naumenko.a@gmail.com]: https://github.com/SilverFire
46 | [@tafid]: https://github.com/tafid
47 | [andreyklochok@gmail.com]: https://github.com/tafid
48 | [@BladeRoot]: https://github.com/BladeRoot
49 | [bladeroot@gmail.com]: https://github.com/BladeRoot
50 | [@edgardmessias]: https://github.com/edgardmessias
51 | [edgardmessias@gmail.com]: https://github.com/edgardmessias
52 | [@zhuravljov]: https://github.com/zhuravljov
53 | [zhuravljov@gmail.com]: https://github.com/zhuravljov
54 | [Under development]: https://github.com/hiqdev/asset-packagist/compare/1.0.0...HEAD
55 | [0.1.0]: https://github.com/hiqdev/asset-packagist/releases/tag/0.1.0
56 | [1.0.0]: https://github.com/hiqdev/asset-packagist/compare/0.1.0...1.0.0
57 | [1.0.1]: https://github.com/hiqdev/asset-packagist/compare/1.0.0...1.0.1
58 |
--------------------------------------------------------------------------------
/src/librariesio/LibrariesioRepository.php:
--------------------------------------------------------------------------------
1 | 0,
35 | * 'allow_redirects' => false,
36 | * 'proxy' => '192.168.16.1:10'
37 | * ].
38 | *
39 | * @var array
40 | */
41 | public $clientOptions = [];
42 |
43 | /**
44 | * The Guzzle client.
45 | * @var Client
46 | */
47 | protected $client;
48 |
49 | public function init()
50 | {
51 | parent::init();
52 |
53 | $this->clientOptions['base_uri'] = $this->baseUri;
54 |
55 | $this->client = new Client($this->clientOptions);
56 | }
57 |
58 | /**
59 | * Send request to server with api_key and return a Response.
60 | * @param string $method
61 | * @param string $uri
62 | * @param array $options
63 | * @throws \GuzzleHttp\Exception\BadResponseException
64 | * @return \GuzzleHttp\Psr7\Response
65 | */
66 | public function request($method, $uri = '', array $options = [])
67 | {
68 | if (!isset($options['query'])) {
69 | $options['query'] = [];
70 | }
71 | if ($this->apiKey && !isset($options['query']['api_key'])) {
72 | $options['query']['api_key'] = $this->apiKey;
73 | }
74 |
75 | try {
76 | return $this->client->request($method, $uri, $options);
77 | } catch (\GuzzleHttp\Exception\BadResponseException $ex) {
78 | if ($ex->hasResponse()) {
79 | return $ex->getResponse();
80 | }
81 | throw $ex;
82 | }
83 | }
84 |
85 | /**
86 | * Search package in https://libraries.io.
87 | * @see https://libraries.io/api/#project-search
88 | * @param array $query
89 | * @return \GuzzleHttp\Psr7\Response
90 | */
91 | public function search($query = [])
92 | {
93 | return $this->request('GET', 'search', ['query' => $query]);
94 | }
95 |
96 | /**
97 | * Return the package info from https://libraries.io.
98 | * @see https://libraries.io/api/#project
99 | * @param string $platform
100 | * @param string $name
101 | * @return \GuzzleHttp\Psr7\Response
102 | */
103 | public function getProject($platform, $name)
104 | {
105 | return $this->request('GET', $platform . '/' . $name);
106 | }
107 | }
108 |
--------------------------------------------------------------------------------
/src/views/package/_search_item.php:
--------------------------------------------------------------------------------
1 | baseUrl . '/logo';
10 | $package = new AssetPackage(strtolower($model->platform), $model->name);
11 |
12 | $url = Url::to(['package/detail', 'fullname' => $package->getNormalName()]);
13 | $url = str_replace('%2F', '/', $url);
14 | ?>
15 |
16 |
17 |
22 | description): ?>
23 |
= Html::encode($model->description) ?>
24 |
25 | latest_release_number): ?>
26 |
27 | Latest Release: = Html::encode($model->latest_release_number) ?>
28 | latest_release_published_at): ?>
29 | at = Yii::$app->formatter->asDateTime($model->latest_release_published_at) ?>
30 | (= Yii::$app->formatter->asRelativeTime($model->latest_release_published_at)?>)
31 |
32 |
33 |
34 | keywords)): ?>
35 |
36 | Keywords:
37 |
38 | keywords) ?>
41 | = implode(' ', $keywords) ?>
42 |
43 |
44 |
45 |
46 |
47 | homepage): ?>
48 |
49 |
50 | Homepage
51 |
52 |
53 |
54 | repository_url): ?>
55 |
56 |
57 | Repository
58 |
59 |
60 |
61 | normalized_licenses)): ?>
62 |
63 | License:
64 | = implode(',', $model->normalized_licenses) ?>
65 |
66 |
67 | isAvailable()): ?>
68 |
Ready to use
69 |
70 |
Fetch
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/src/console/AssetPackageController.php:
--------------------------------------------------------------------------------
1 | packageRepository = $packageRepository;
36 | }
37 |
38 | /**
39 | * @param string $type the package type. Can be either `bower` or `npm`
40 | * @param string $name the package name
41 | * @return boolean Whether the update was successful
42 | */
43 | public function actionUpdate($type, $name)
44 | {
45 | try {
46 | $package = new AssetPackage($type, $name);
47 | Yii::createObject(PackageUpdateCommand::class, [$package])->execute(Yii::$app->queue);
48 | echo 'updated ' . $package->getHash() . ' ' . $package->getFullName() . "\n";
49 |
50 | return true;
51 | } catch (\Exception $e) {
52 | echo Console::renderColoredString("%Rfailed%N $type/$name:%n {$e->getMessage()}\n");
53 |
54 | return false;
55 | }
56 | }
57 |
58 | public function actionUpdateList($file = STDIN)
59 | {
60 | $handler = is_resource($file) ? $file : fopen($file, 'r');
61 |
62 | $errorPackages = [];
63 |
64 | while ($line = fgets($handler)) {
65 | list($full) = preg_split('/\s+/', trim($line));
66 | list($type, $name) = AssetPackage::splitFullName($full);
67 | if (!$this->actionUpdate($type, $name)) {
68 | $errorPackages[] = $full;
69 | }
70 | }
71 |
72 | if (!is_resource($file)) {
73 | fclose($handler);
74 | }
75 |
76 | if (!empty($errorPackages)) {
77 | echo Console::renderColoredString("%RThe following packages were not updated due to unrecoverable errors:%n\n");
78 | echo implode("\n", $errorPackages);
79 | }
80 | echo "\n";
81 | }
82 |
83 | public function actionAddUpdateCommand($type, $name)
84 | {
85 | $package = new AssetPackage($type, $name);
86 | Yii::$app->queue->push(Yii::createObject(PackageUpdateCommand::class, [$package]));
87 | echo Console::renderColoredString("%GAdded%N $type/$name%n\n");
88 | }
89 |
90 | public function actionUpdateAll()
91 | {
92 | $this->actionUpdateList(Yii::getAlias('@hiqdev/assetpackagist/config/packages.list'));
93 | }
94 |
95 | public function actionAvoid($type, $name)
96 | {
97 | $package = new AssetPackage($type, $name);
98 | $this->packageRepository->markAvoided($package);
99 |
100 | echo Console::renderColoredString("Package %N$type/$name%n is %Ravoided%n now\n");
101 | }
102 |
103 | public function actionList()
104 | {
105 | $packages = Yii::$app->get('packageStorage')->listPackages();
106 | ksort($packages);
107 | foreach ($packages as $name => $data) {
108 | echo "$name\n";
109 | }
110 | }
111 | }
112 |
--------------------------------------------------------------------------------
/src/repositories/PackageRepository.php:
--------------------------------------------------------------------------------
1 | db = $db;
31 | }
32 |
33 | /**
34 | * @param AssetPackage $package
35 | * @return int
36 | */
37 | public function save(AssetPackage $package)
38 | {
39 | if ($this->exists($package)) {
40 | return $this->update($package);
41 | } else {
42 | return $this->insert($package);
43 | }
44 | }
45 |
46 | /**
47 | * @param AssetPackage $package
48 | * @return int
49 | */
50 | public function insert(AssetPackage $package)
51 | {
52 | return $this->db->createCommand()->insert('package', [
53 | 'type' => $package->getType(),
54 | 'name' => $package->getName(),
55 | 'last_update' => $package->getUpdateTime(),
56 | ])->execute();
57 | }
58 |
59 | /**
60 | * @param AssetPackage $package
61 | * @return int
62 | */
63 | public function update(AssetPackage $package)
64 | {
65 | return $this->db->createCommand()->update('package', [
66 | 'last_update' => $package->getUpdateTime(),
67 | ], $this->getWhereCondition($package))->execute();
68 | }
69 |
70 | public function markAvoided(AssetPackage $package)
71 | {
72 | $this->db->createCommand()->update('package', [
73 | 'is_avoided' => true,
74 | ], $this->getWhereCondition($package))->execute();
75 | }
76 |
77 | public function isAvoided(AssetPackage $package)
78 | {
79 | return (new Query())
80 | ->select('is_avoided')
81 | ->from('package')
82 | ->where($this->getWhereCondition($package))
83 | ->scalar($this->db);
84 | }
85 |
86 | protected function getWhereCondition(AssetPackage $package)
87 | {
88 | return [
89 | 'type' => $package->getType(),
90 | 'name' => $package->getName(),
91 | ];
92 | }
93 |
94 | /**
95 | * @param AssetPackage $package
96 | * @return bool
97 | */
98 | public function exists(AssetPackage $package)
99 | {
100 | return (new Query())
101 | ->from('package')
102 | ->where($this->getWhereCondition($package))
103 | ->exists($this->db);
104 | }
105 |
106 | /**
107 | * @return \hiqdev\assetpackagist\models\AssetPackage[]
108 | */
109 | public function getExpiredForUpdate()
110 | {
111 | $rows = (new Query())
112 | ->from('package')
113 | ->where(['<', 'last_update', time() - 60 * 60 * 24 * 7]) // Older than 7 days
114 | ->andWhere(['not', ['last_update' => null]])
115 | ->andWhere(['is_avoided' => 0])
116 | ->all();
117 |
118 | return $this->hydrate($rows);
119 | }
120 |
121 | /**
122 | * @param array $rows
123 | * @return AssetPackage[]
124 | */
125 | public function hydrate($rows)
126 | {
127 | $result = [];
128 | foreach ($rows as $row) {
129 | $result[] = new AssetPackage($row['type'], $row['name']);
130 | }
131 |
132 | return $result;
133 | }
134 | }
135 |
--------------------------------------------------------------------------------
/src/console/MaintenanceController.php:
--------------------------------------------------------------------------------
1 | packageStorage = $packageStorage;
47 | $this->packageRepository = $packageRepository;
48 | }
49 |
50 | /**
51 | * Synchronizes file system packages to the database.
52 | */
53 | public function actionSyncToDb()
54 | {
55 | $packages = $this->packageStorage->listPackages();
56 |
57 | foreach ($packages as $name => $data) {
58 | $message = "Package %N$name%n ";
59 | $package = AssetPackage::fromFullName($name);
60 | $package->load();
61 |
62 | $message .= $this->packageRepository->exists($package)
63 | ? 'already exists. %BUpdated.%n'
64 | : 'does not exist. %GCreated.%n';
65 |
66 | $this->packageRepository->save($package);
67 |
68 | $this->stdout(Console::renderColoredString($message . "\n"));
69 | }
70 | }
71 |
72 | /**
73 | * Updates expired packages.
74 | */
75 | public function actionUpdateExpired()
76 | {
77 | $packages = $this->packageRepository->getExpiredForUpdate();
78 |
79 | foreach ($packages as $package) {
80 | $package->load();
81 | Yii::$app->queue->push(Yii::createObject(PackageUpdateCommand::class, [$package]));
82 |
83 | $message = 'Package %N' . $package->getFullName() . '%n';
84 | $message .= ' was updated ' . Yii::$app->formatter->asRelativeTime($package->getUpdateTime());
85 | $message .= ". %GAdded to queue for update%n\n";
86 | $this->stdout(Console::renderColoredString($message));
87 | }
88 | }
89 |
90 | public function actionCheckHashes()
91 | {
92 | $packages = $this->packageStorage->listPackages();
93 |
94 | $i = 0;
95 | foreach ($packages as $name => $data) {
96 | if ($i++ % 10 === 0) { $this->stdout('.'); }
97 | if ($i % 1000 === 0) { $this->stdout(" [ $i ]\n"); }
98 |
99 | $package = AssetPackage::fromFullName($name);
100 | if ($this->packageRepository->isAvoided($package)
101 | || $this->packageStorage->checkIsSane($package)
102 | ) {
103 | continue;
104 | }
105 |
106 | Yii::$app->queue->push(Yii::createObject(PackageUpdateCommand::class, [$package]));
107 |
108 | $message = "\nPackage %N" . $package->getFullName() . '%n is corrupted. ';
109 | $message .= "%GAdded to queue for update%n\n";
110 | $this->stdout(Console::renderColoredString($message));
111 | }
112 |
113 | return 0;
114 | }
115 | }
116 |
--------------------------------------------------------------------------------
/src/console/QueueController.php:
--------------------------------------------------------------------------------
1 | queue = $queue;
49 | }
50 |
51 | public function init()
52 | {
53 | $this->attachEventHandlers();
54 | }
55 |
56 | /**
57 | * Runs the queue.
58 | */
59 | public function actionRun()
60 | {
61 | $this->queue->run(true);
62 | }
63 |
64 | /**
65 | * Test action to ensure that ErrorHandler flushes stack immediately.
66 | */
67 | public function actionTestErrorHandler()
68 | {
69 | Yii::info(Console::renderColoredString('Lorem ipsum for time %y' . time() . '%n ' . "\n"), \hiqdev\assetpackagist\commands\CollectDependenciesCommand::class);
70 | sleep(1);
71 | }
72 |
73 | private function ensureLimits()
74 | {
75 | if ($this->executedJobsCount > static::MAX_EXECUTED_JOBS && function_exists('posix_kill')) {
76 | return 15; // SIGTERM
77 | }
78 |
79 | return null;
80 | }
81 |
82 | /**
83 | * Attaches handlers on Queue events.
84 | */
85 | private function attachEventHandlers()
86 | {
87 | $out = function ($string) {
88 | $this->stdout(Console::renderColoredString($string));
89 | };
90 |
91 | Event::on(Queue::class, Queue::EVENT_BEFORE_EXEC, function ($event) use ($out) {
92 | /** @var JobEvent $event */
93 | $out("%GNew job%n '" . get_class($event->job) . "'\n");
94 | $this->executedJobsCount++;
95 | $this->ensureLimits();
96 | });
97 |
98 | Event::on(Queue::class, Queue::EVENT_AFTER_EXEC, function ($event) use ($out) {
99 | /** @var JobEvent $event */
100 | $out("%GJob%n '" . get_class($event->job) . "' %Gis completed%n\n");
101 | });
102 |
103 | Event::on(Queue::class, Queue::EVENT_AFTER_ERROR, function ($event) use ($out) {
104 | /** @var ErrorEvent $event */
105 | $out("%RJob '" . get_class($event->job) . "' finished with error:%n '" . $event->error . "'\n");
106 | });
107 |
108 | Event::on(Queue::class, CliQueue::EVENT_WORKER_LOOP, function (\yii\queue\cli\WorkerEvent $event) use ($out) {
109 | $exitCode = $this->ensureLimits();
110 | if ($exitCode !== null) {
111 | $out('Reached limit of ' . static::MAX_EXECUTED_JOBS . " executed jobs. Stopping process.\n");
112 | $event->exitCode = $exitCode;
113 | }
114 | });
115 |
116 | Event::on(AbstractPackageCommand::class, AbstractPackageCommand::EVENT_BEFORE_RUN, function ($event) use ($out) {
117 | /** @var AbstractPackageCommand $command */
118 | $command = $event->sender;
119 | $out('%g[' . get_class($command) . ']%n Working on package %N' . $command->getPackage()->getFullName() . "%n\n");
120 | });
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/src/controllers/PackageController.php:
--------------------------------------------------------------------------------
1 | [
29 | 'class' => VerbFilter::class,
30 | 'actions' => [
31 | 'update' => ['post'],
32 | ],
33 | ],
34 | ];
35 | }
36 |
37 | public function actionUpdate()
38 | {
39 | session_write_close();
40 | $query = Yii::$app->request->post('query');
41 | $package = $this->getAssetPackage($query);
42 |
43 | try {
44 | if (!$package->canBeUpdated()) {
45 | throw new UpdateRateLimitException();
46 | }
47 |
48 | Yii::createObject(PackageUpdateCommand::class, [$package])->execute(Yii::$app->queue);
49 | } catch (UpdateRateLimitException $exception) {
50 | Yii::$app->session->addFlash('rate-limited', true);
51 | } catch (PackageNotExistsException $e) {
52 | return $this->renderPartial('not-found', ['package' => $package]);
53 | } catch (CorruptedPackageException $e) {
54 | return $this->renderPartial('fetch-error', ['package' => $package, 'exception' => $e]);
55 | } catch (Exception $e) {
56 | Yii::error([
57 | 'UNKNOWN error during ' . $package->getFullName() . ' update',
58 | get_class($e),
59 | $e->getMessage(),
60 | ], __METHOD__);
61 |
62 | return $this->renderPartial('fetch-error', ['package' => $package]);
63 | }
64 | $package->load();
65 |
66 | return $this->renderPartial('versions', ['package' => $package]);
67 | }
68 |
69 | public function actionSearch($query, $platform = null)
70 | {
71 | if (preg_match('/^(npm|bower)-asset\/[a-zA-Z0-9.-]+$/', $query)) {
72 | return $this->redirect("/package/$query");
73 | }
74 |
75 | $activeQuery = \hiqdev\hiart\librariesio\models\Project::find()->where([
76 | 'q' => $query,
77 | 'platforms' => in_array($platform, ['npm', 'bower'], true) ? $platform : 'bower,npm',
78 | ]);
79 |
80 | return $this->render('search', [
81 | 'query' => $query,
82 | 'platform' => $platform,
83 | 'dataProvider' => new \yii\data\ActiveDataProvider([
84 | 'query' => $activeQuery,
85 | ]),
86 | ]);
87 | }
88 |
89 | public function actionDetail($fullname)
90 | {
91 | try {
92 | $package = $this->getAssetPackage($fullname);
93 | $params = [
94 | 'package' => $package,
95 | 'forceUpdate' => false,
96 | ];
97 |
98 | if ($package->canAutoUpdate()) {
99 | $params['forceUpdate'] = true;
100 | }
101 | } catch (Exception $e) {
102 | return $this->render('wrong-name', ['query' => $fullname]);
103 | }
104 |
105 | return $this->render('details', $params);
106 | }
107 |
108 | /**
109 | * @param string $query
110 | * @return AssetPackage
111 | */
112 | private static function getAssetPackage($query)
113 | {
114 | $package = AssetPackage::fromFullName(trim($query));
115 | $package->load();
116 |
117 | return $package;
118 | }
119 | }
120 |
--------------------------------------------------------------------------------
/src/assets/logo/bower.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
How it works
11 |
12 |
Asset Packagist provides information about Bower and NPM packages in a similar way to Packagist does it for
13 | Composer packages.
14 | So when you run composer for your project with enabled Asset Packagist repository composer knows all the
15 | available releases of bower-asset and npm-asset packages and knows how to download their files.
16 |
17 |
18 |
First we add Bower and NPM packages to our repository. Script collects package information and prepares JSON file
19 | in Packagist format.
20 | For example you can look what we have for Bower moment package:
21 |
22 |
23 |
https://asset-packagist.org/p/bower-asset/moment/latest.json
24 |
25 |
26 |
The file contains description of all of the versions of the package in the following format:
27 |
28 |
29 | "2.13.0.0": {
30 | "uid": 1000600,
31 | "name": "bower-asset/moment",
32 | "version": "2.13.0.0",
33 | "type": "bower-asset",
34 | "dist": {
35 | "type": "zip",
36 | "url": "https://api.github.com/repos/moment/moment/zipball/d6651c21c6131fbb5db891b60971357739015688",
37 | "reference": "d6651c21c6131fbb5db891b60971357739015688"
38 | },
39 | "source": {
40 | "type": "git",
41 | "url": "https://github.com/moment/moment.git",
42 | "reference": "d6651c21c6131fbb5db891b60971357739015688"
43 | }
44 | },
45 |
46 |
47 |
So when you run composer it downloads info about packages provided by Asset Packagist repository, then composer
48 | resolves dependencies and finds proper versions of required packages, then it downloads packages files to vendor
49 | directory of your project (actually composer doesn't care if these are PHP or JS or whatever files).
50 |
51 |
All the JSON files are stored and served as static files on Asset Packagist side and composer effectively cashes
52 | those files on your side so everything works as quick as possible.
53 |
54 |
Installing to a custom path
55 |
56 |
Asset Packagist is NOT a plugin so it can't affect where the package will be installed.
57 | By default bower-asset/bootstrap package will be installed to
58 | vendor/bower-asset/bootstrap folder.
59 |
60 |
But you can achieve installing to custom path with oomphinc/composer-installers-extender
62 | plugin like this:
63 |
64 | "require": {
65 | "oomphinc/composer-installers-extender": "^1.1",
66 | "bower-asset/bootstrap": "^3.3",
67 | "npm-asset/jquery": "^2.2"
68 | },
69 | "extra": {
70 | "installer-types": ["bower-asset", "npm-asset"],
71 | "installer-paths": {
72 | "public/assets/{$vendor}/{$name}/": ["type:bower-asset", "type:npm-asset"]
73 | }
74 | },
75 | "repositories": [
76 | {
77 | "type": "composer",
78 | "url": "https://asset-packagist.org"
79 | }
80 | ]
81 |
82 |
83 |
Yii2
84 |
85 |
Yii2 expects Bower and NPM packages to be installed to vendor/bower and vendor/npm
86 | folders respectively.
87 |
88 |
So, to use asset-packagist for Yii2 projects it's necessary to reassign Bower and NPM aliases in your application
89 | config like this:
90 |
91 |
92 | $config = [
93 | ...
94 | 'aliases' => [
95 | '@bower' => '@vendor/bower-asset',
96 | '@npm' => '@vendor/npm-asset',
97 | ],
98 | ...
99 | ];
100 |
101 |
102 |
Migrating from composer-asset-plugin
103 |
104 |
Moving from composer-asset-plugin is not
105 | straightforward when you host several applications on single server. It's known that asset packagist
106 | and asset plugin don't work well together when plugin is installed in global scope. So, to not affect
107 | other applications by deleting the plugin, you may disable the plugin locally via composer.json
108 | config option (you need plugin version ≥ 1.3.0 for this):
109 |
110 |
111 | "config": {
112 | "fxp-asset": {
113 | "enabled": false
114 | }
115 | }
116 |
117 |
118 |
Acknowledgements
119 |
120 |
This project uses Francois Pluchino's composer-asset-plugin
121 | to convert Bower and NPM packages to Composer format.
122 |
The search is powered by https://libraries.io/.
123 |
124 |
--------------------------------------------------------------------------------
/src/librariesio/ProjectDataProvider.php:
--------------------------------------------------------------------------------
1 | cache) {
53 | $this->cache = Instance::ensure($this->cache, Cache::className());
54 | }
55 | $this->repository = Instance::ensure($this->repository, LibrariesioRepository::className());
56 | }
57 |
58 | protected function prepareModels()
59 | {
60 | if (!$this->platform) {
61 | $this->platform = 'bower,npm';
62 | }
63 | if (is_array($this->platform)) {
64 | $this->platform = implode(',', $this->platform);
65 | }
66 |
67 | $query = [
68 | 'q' => $this->query,
69 | 'platforms' => $this->platform,
70 | ];
71 |
72 | if (($sort = $this->getSort()) !== false) {
73 | foreach ($sort->getOrders() as $sort => $order) {
74 | $query['sort'] = $sort;
75 | $query['order'] = ($order === SORT_ASC) ? 'asc' : 'desc';
76 | break;
77 | }
78 | }
79 |
80 | if (($pagination = $this->getPagination()) !== false) {
81 | /**
82 | * Not use '$pagination->getPage()' because need define 'totalCount' first
83 | * totalCount is defined after request.
84 | */
85 | $page = (int) Yii::$app->getRequest()->getQueryParam($pagination->pageParam, 1);
86 | if ($page > 1) {
87 | $query['page'] = $page;
88 | }
89 |
90 | $query['per_page'] = $pagination->getPageSize();
91 | }
92 |
93 | $cacheKey = [static::className(), 'query' => $query];
94 |
95 | $items = [];
96 | $totalCount = 0;
97 |
98 | if ($this->cache && $this->cache->exists($cacheKey)) {
99 | list($totalCount, $items) = $this->cache->get($cacheKey);
100 | } else {
101 | /* @var $response Response */
102 | $response = $this->repository->search($query);
103 |
104 | if ($response->getStatusCode() !== 200) {
105 | return [];
106 | }
107 |
108 | $totalCount = (int) $response->getHeaderLine('total');
109 | $items = Json::decode($response->getBody());
110 |
111 | if ($this->cache) {
112 | $this->cache->set($cacheKey, [$totalCount, $items], $this->cacheDuration);
113 | }
114 | }
115 |
116 | $this->lastTotalCount = $totalCount;
117 |
118 | if (($pagination = $this->getPagination()) !== false) {
119 | $pagination->totalCount = $this->lastTotalCount;
120 | }
121 |
122 | $models = [];
123 |
124 | foreach ($items as $item) {
125 | $models[] = new Project(['attributes' => $item]);
126 | }
127 |
128 | return $models;
129 | }
130 |
131 | /**
132 | * @param Project[] $models
133 | * @return array
134 | */
135 | protected function prepareKeys($models)
136 | {
137 | $keys = [];
138 |
139 | foreach ($models as $model) {
140 | $keys[] = [
141 | 'name' => $model->name,
142 | 'platform' => $model->name,
143 | ];
144 | }
145 |
146 | return $keys;
147 | }
148 |
149 | protected function prepareTotalCount()
150 | {
151 | $this->prepare();
152 | return $this->lastTotalCount;
153 | }
154 |
155 | public function setSort($value)
156 | {
157 | /**
158 | * Override the default attributes to sort.
159 | */
160 | if (is_array($value)) {
161 | $value = array_merge([
162 | 'attributes' => [
163 | 'Rank' => 'rank',
164 | 'Stars' => 'stars',
165 | 'Dependents Count' => 'dependents_count',
166 | 'Dependent Repos Count' => 'dependent_repos_count',
167 | 'Latest Release Published At' => 'latest_release_published_at',
168 | 'Created At' => 'created_at',
169 | 'Contributions Count' => 'contributions_count',
170 | ], ], $value);
171 | }
172 |
173 | parent::setSort($value);
174 | }
175 | }
176 |
--------------------------------------------------------------------------------
/src/models/AssetPackage.php:
--------------------------------------------------------------------------------
1 | checkType($type)) {
59 | throw new Exception('wrong type');
60 | }
61 | if (!$this->checkName($name)) {
62 | throw new Exception('wrong name');
63 | }
64 | $this->_type = $type;
65 | $this->_name = $name;
66 | }
67 |
68 | /**
69 | * @return RegistryFactory
70 | */
71 | public function getRegistry()
72 | {
73 | return Yii::$app->get('registryFactory');
74 | }
75 |
76 | public function checkType($type)
77 | {
78 | return $type === 'bower' || $type === 'npm';
79 | }
80 |
81 | public function checkName($name)
82 | {
83 | return strlen($name) > 0;
84 | }
85 |
86 | public function getFullName()
87 | {
88 | return static::buildFullName($this->_type, $this->_name);
89 | }
90 |
91 | public static function buildNormalName($type, $name)
92 | {
93 | return static::buildFullName($type, static::normalizeName($name));
94 | }
95 |
96 | public static function buildFullName($type, $name)
97 | {
98 | return $type . '-asset/' . $name;
99 | }
100 |
101 | public static function splitFullName($full)
102 | {
103 | list($temp, $name) = explode('/', $full);
104 | list($type) = explode('-', $temp);
105 |
106 | return [$type, $name];
107 | }
108 |
109 | /**
110 | * @param string $full package name
111 | * @return static
112 | */
113 | public static function fromFullName($full)
114 | {
115 | list($type, $name) = static::splitFullName($full);
116 | return new static($type, $name);
117 | }
118 |
119 | public function getType()
120 | {
121 | return $this->_type;
122 | }
123 |
124 | public function getNormalName()
125 | {
126 | return static::buildNormalName($this->_type, $this->_name);
127 | }
128 |
129 | public function getName()
130 | {
131 | return $this->_name;
132 | }
133 |
134 | public function getHash()
135 | {
136 | return $this->_hash;
137 | }
138 |
139 | /**
140 | * findOne.
141 | *
142 | * @param string $type
143 | * @param string $name
144 | * @return static|null
145 | */
146 | public static function findOne($type, $name)
147 | {
148 | $package = new static($type, $name);
149 | $package->load();
150 |
151 | return $package;
152 | }
153 |
154 | public function load()
155 | {
156 | $data = $this->getStorage()->readPackage($this);
157 | if ($data !== null) {
158 | $this->_hash = $data['hash'];
159 | $this->_releases = $data['releases'];
160 | $this->_updateTime = $data['updateTime'];
161 | }
162 | }
163 |
164 | public function update()
165 | {
166 | $pool = $this->getRegistry()->getPool();
167 | $this->_releases = $this->prepareReleases($pool);
168 | $this->getStorage()->writePackage($this);
169 | $this->load();
170 | }
171 |
172 | /**
173 | * @param \Composer\DependencyResolver\Pool $pool
174 | * @return array
175 | */
176 | public function prepareReleases($pool)
177 | {
178 | $releases = [];
179 |
180 | foreach ($pool->whatProvides($this->getFullName()) as $package) {
181 | if ($package instanceof \Composer\Package\AliasPackage) {
182 | continue;
183 | }
184 |
185 | $version = $this->prepareVersion($package->getPrettyVersion());
186 | $require = $this->prepareRequire($package->getRequires());
187 | $release = [
188 | 'uid' => $this->prepareUid($version),
189 | 'name' => $this->getNormalName(),
190 | 'version' => $version,
191 | 'version_normalized' => $this->prepareVersion($package->getVersion()),
192 | 'type' => $this->getType() . '-asset',
193 | ];
194 | if ($require) {
195 | $release['require'] = $require;
196 | }
197 | if ($package->getDistUrl()) {
198 | $release['dist'] = [
199 | 'type' => $package->getDistType(),
200 | 'url' => $package->getDistUrl(),
201 | 'reference' => $package->getDistReference(),
202 | ];
203 | }
204 | if ($package->getLicense()) {
205 | $release['license'] = $package->getLicense();
206 | }
207 | if ($package->getSourceUrl()) {
208 | $release['source'] = [
209 | 'type' => $package->getSourceType(),
210 | 'url' => $package->getSourceUrl(),
211 | 'reference' => $package->getSourceReference(),
212 | ];
213 | }
214 | if ((isset($release['dist']) && $release['dist']) || (isset($release['source']) && $release['source'])) {
215 | $releases[$version] = $release;
216 | }
217 | }
218 |
219 | //Sort before save
220 | \hiqdev\assetpackagist\components\PackageUtil::sort($releases);
221 |
222 | return $releases;
223 | }
224 |
225 | protected function prepareVersion($version)
226 | {
227 | if ($this->getNormalName() === 'bower-asset/angular') {
228 | return $this->convertPatchToRC($version);
229 | }
230 |
231 | return $version;
232 | }
233 |
234 | protected function convertPatchToRC($version)
235 | {
236 | return preg_replace('/-patch(.+)/', '-RC${1}', $version);
237 | }
238 |
239 | /**
240 | * Prepares array of requires: name => constraint.
241 | * @param Link[] array of package requires
242 | * @return array
243 | */
244 | public function prepareRequire(array $links)
245 | {
246 | $requires = [];
247 | foreach ($links as $name => $link) {
248 | /** @var Link $link */
249 | $requires[$name] = $link->getPrettyConstraint();
250 | }
251 |
252 | return $requires;
253 | }
254 |
255 | public function prepareUid($version)
256 | {
257 | $known = $this->getSaved()->getRelease($version);
258 |
259 | return isset($known['uid']) ? $known['uid'] : $this->getStorage()->getNextId();
260 | }
261 |
262 | /**
263 | * @return array
264 | */
265 | public function getReleases()
266 | {
267 | return $this->_releases;
268 | }
269 |
270 | /**
271 | * @param $version
272 | * @return array
273 | */
274 | public function getRelease($version)
275 | {
276 | return isset($this->_releases[$version]) ? $this->_releases[$version] : [];
277 | }
278 |
279 | public function getSaved()
280 | {
281 | if ($this->_saved === null) {
282 | $this->_saved = static::findOne($this->getType(), $this->getName());
283 | }
284 |
285 | return $this->_saved;
286 | }
287 |
288 | /**
289 | * @return Storage
290 | */
291 | public function getStorage()
292 | {
293 | return Yii::$app->get('packageStorage');
294 | }
295 |
296 | /**
297 | * Returns the latest update time (UNIX Epoch).
298 | * @return int|null
299 | */
300 | public function getUpdateTime()
301 | {
302 | return $this->_updateTime;
303 | }
304 |
305 | /**
306 | * Package can be updated not more often than once in 10 min.
307 | * @return bool
308 | */
309 | public function canBeUpdated()
310 | {
311 | return time() - $this->getUpdateTime() > 60 * 10; // 10 min
312 | }
313 |
314 | /**
315 | * Whether tha package should be auth-updated (if it is older than 1 day).
316 | * @return bool
317 | */
318 | public function canAutoUpdate()
319 | {
320 | return time() - $this->getUpdateTime() > 60 * 60 * 24; // 1 day
321 | }
322 |
323 | public function isAvailable()
324 | {
325 | $repository = Yii::createObject(PackageRepository::class, []);
326 |
327 | return $repository->exists($this);
328 | }
329 |
330 | /**
331 | * @return array
332 | */
333 | public function __sleep()
334 | {
335 | return ['_type', '_name', '_hash'];
336 | }
337 | }
338 |
--------------------------------------------------------------------------------
/src/components/Storage.php:
--------------------------------------------------------------------------------
1 | _path = Yii::getAlias('@storage', false);
30 | }
31 |
32 | protected function acquireLock()
33 | {
34 | /* @var $mutex \yii\mutex\Mutex */
35 | $mutex = Yii::$app->mutex;
36 |
37 | if (!$mutex->acquire('lock', 5)) {
38 | throw new \Exception('failed get lock');
39 | }
40 | }
41 |
42 | protected function releaseLock()
43 | {
44 | /* @var $mutex \yii\mutex\Mutex */
45 | $mutex = Yii::$app->mutex;
46 |
47 | $mutex->release('lock');
48 | }
49 |
50 | /**
51 | * {@inheritdoc}
52 | */
53 | public function getNextId()
54 | {
55 | $this->acquireLock();
56 | {
57 | $nextID = $this->readLastId() + 1;
58 | $this->writeLastId($nextID);
59 | }
60 | $this->releaseLock();
61 |
62 | return $nextID;
63 | }
64 |
65 | protected function readLastId()
66 | {
67 | $path = $this->getLastIdPath();
68 |
69 | return (file_exists($path) ? (int) file_get_contents($path) : 0) ?: 1000000;
70 | }
71 |
72 | protected function writeLastId($value)
73 | {
74 | if (file_put_contents($this->getLastIdPath(), $value) === false) {
75 | throw new AssetFileStorageException('Filed to write lastId to the storage');
76 | }
77 | }
78 |
79 | protected function getLastIdPath()
80 | {
81 | return $this->buildPath('lastid');
82 | }
83 |
84 | /**
85 | * {@inheritdoc}
86 | */
87 | public function writePackage(AssetPackage $package)
88 | {
89 | $name = $package->getNormalName();
90 | $data = [
91 | 'packages' => [
92 | $name => $package->getReleases(),
93 | ],
94 | ];
95 | $json = Json::encode($data);
96 | $hash = hash('sha256', $json);
97 | $path = $this->buildHashedPath($name, $hash);
98 | $latestPath = $this->buildHashedPath($name);
99 | if (!file_exists($path)) {
100 | $this->acquireLock();
101 | try {
102 | if ($this->mkdir(dirname($path)) === false) {
103 | throw new AssetFileStorageException('Failed to create a directory for asset-package', $package);
104 | }
105 | if (file_put_contents($path, $json) === false) {
106 | throw new AssetFileStorageException('Failed to write package', $package);
107 | }
108 | if (file_put_contents($latestPath, $json) === false) {
109 | throw new AssetFileStorageException('Failed to write file "latest.json" for asset-packge', $package);
110 | }
111 | $this->writeProviderLatest($name, $hash);
112 | } finally {
113 | $this->releaseLock();
114 | }
115 | } else {
116 | touch($latestPath);
117 | }
118 |
119 | return $hash;
120 | }
121 |
122 | /**
123 | * {@inheritdoc}
124 | */
125 | public function readPackage(AssetPackage $package)
126 | {
127 | $name = $package->getNormalName();
128 | $path = $this->buildHashedPath($name);
129 | clearstatcache(false, $path);
130 | if (!file_exists($path)) {
131 | return null;
132 | }
133 | $json = file_get_contents($path);
134 | $updateTime = filemtime($path);
135 | $hash = hash('sha256', $json);
136 | try {
137 | $data = Json::decode($json);
138 | } catch (\Exception $e) {
139 | return null;
140 | }
141 | $releases = isset($data['packages'][$name]) ? $data['packages'][$name] : [];
142 |
143 | return compact('hash', 'releases', 'updateTime');
144 | }
145 |
146 | protected function buildPath()
147 | {
148 | $args = func_get_args();
149 | array_unshift($args, $this->_path);
150 |
151 | return implode(DIRECTORY_SEPARATOR, $args);
152 | }
153 |
154 | protected function buildHashedPath($name, $hash = 'latest')
155 | {
156 | return $this->buildPath('p', $name, $hash . '.json');
157 | }
158 |
159 | protected function writeProviderLatest($name, $hash)
160 | {
161 | $latestPath = $this->buildHashedPath('provider-latest');
162 | if (file_exists($latestPath)) {
163 | $data = Json::decode(file_get_contents($latestPath) ?: '[]');
164 | }
165 | if (!isset($data) || !is_array($data)) {
166 | $data = [];
167 | }
168 | if (!isset($data['providers'])) {
169 | $data['providers'] = [];
170 | }
171 | $data['providers'][$name] = ['sha256' => $hash];
172 | $json = Json::encode($data);
173 | $hash = hash('sha256', $json);
174 | $path = $this->buildHashedPath('provider-latest', $hash);
175 |
176 | if (!file_exists($path)) {
177 | $this->acquireLock();
178 |
179 | try {
180 | if ($this->mkdir(dirname($path)) === false) {
181 | throw new AssetFileStorageException('Failed to create a directory for provider-latest storage');
182 | }
183 | if (file_put_contents($path, $json) === false) {
184 | throw new AssetFileStorageException('Failed to write package to provider-latest storage for package "' . $name . '"');
185 | }
186 | if (file_put_contents($latestPath, $json) === false) {
187 | throw new AssetFileStorageException('Failed to write file "latest.json" to provider-latest storage for package "' . $name . '"');
188 | }
189 | $this->writePackagesJson($hash);
190 | } finally {
191 | $this->releaseLock();
192 | }
193 | } else {
194 | touch($latestPath);
195 | }
196 |
197 | return $hash;
198 | }
199 |
200 | protected function writePackagesJson($hash)
201 | {
202 | $data = [
203 | 'providers-url' => '/p/%package%/%hash%.json',
204 | 'provider-includes' => [
205 | 'p/provider-latest/%hash%.json' => [
206 | 'sha256' => $hash,
207 | ],
208 | ],
209 | 'available-package-patterns' => ['bower-asset/*', 'npm-asset/*'],
210 | ];
211 | $this->acquireLock();
212 | $filename = $this->buildPath('packages.json');
213 | try {
214 | if (file_put_contents($filename, Json::encode($data)) === false) {
215 | throw new AssetFileStorageException('Failed to write main packages.json');
216 | }
217 | touch($filename);
218 | } finally {
219 | $this->releaseLock();
220 | }
221 | }
222 |
223 | /**
224 | * Creates directory $dir and sets chmod 777.
225 | * @param string $dir
226 | * @return bool whether the directory was created successfully
227 | */
228 | protected function mkdir($dir)
229 | {
230 | if (!file_exists($dir)) {
231 | return @mkdir($dir, 0777, true);
232 | }
233 |
234 | return true;
235 | }
236 |
237 | public function readJson($path)
238 | {
239 | return Json::decode(file_get_contents($this->buildPath($path)));
240 | }
241 |
242 | protected function readPackagesJson()
243 | {
244 | $data = $this->readJson('packages.json');
245 |
246 | return $data['provider-includes'];
247 | }
248 |
249 | protected function readProvider($path)
250 | {
251 | $data = $this->readJson($path);
252 |
253 | return $data['providers'];
254 | }
255 |
256 | /**
257 | * {@inheritdoc}
258 | */
259 | public function listPackages()
260 | {
261 | $packages = [];
262 | $providers = $this->readPackagesJson();
263 | foreach ($providers as $path => $data) {
264 | $path = strtr($path, ['%hash%' => $data['sha256']]);
265 | $packages = array_merge($packages, $this->readProvider($path));
266 | }
267 |
268 | return $packages;
269 | }
270 |
271 | public function checkIsSane(AssetPackage $package)
272 | {
273 | $isOk = true;
274 | $name = $package->getNormalName();
275 | try {
276 | $directoryIterator = new \DirectoryIterator($this->buildPath('p', $name));
277 | $iterator = new \RegexIterator($directoryIterator, '/^.+\.json$/i', \RecursiveRegexIterator::GET_MATCH);
278 | } catch (\UnexpectedValueException $e) {
279 | return false;
280 | }
281 |
282 | foreach ($iterator as $match) {
283 | $filename = $match[0];
284 | $sha = basename($filename, '.json');
285 | if ($sha === 'latest') {
286 | continue;
287 | }
288 |
289 | $path = $this->buildPath('p', $name, $filename);
290 | $fileHash = hash_file('sha256', $path);
291 | if ($sha !== $fileHash) {
292 | unlink($path);
293 | $isOk = false;
294 | }
295 | }
296 |
297 | return $isOk;
298 | }
299 | }
300 |
--------------------------------------------------------------------------------
/src/config/bower.list:
--------------------------------------------------------------------------------
1 | bower-asset/boot
2 | bower-asset/bootstrap
3 | bower-asset/angular-latest
4 | bower-asset/angulerjs
5 | bower-asset/aa
6 | bower-asset/angular-1.1.6
7 | bower-asset/animate-css
8 | bower-asset/animate.css
9 | bower-asset/animation.css
10 | bower-asset/backbone
11 | bower-asset/blueimp-file-upload
12 | bower-asset/blueimp-file-upload-node
13 | bower-asset/angular-material-design-light
14 | bower-asset/async
15 | bower-asset/bootstrap-material-design
16 | bower-asset/angular-es6
17 | bower-asset/angular-seed
18 | bower-asset/bluebird
19 | bower-asset/boostrap-sass
20 | bower-asset/bootstrap-sass
21 | bower-asset/bootstrap-sass-official
22 | bower-asset/bootstrap-sass-twbs
23 | bower-asset/adminlte
24 | bower-asset/admin-lte
25 | bower-asset/bootstrap-3-datepicker
26 | bower-asset/bootstrap-datepicker
27 | bower-asset/bootstrap-datepicker-eternicode
28 | bower-asset/bootswatch
29 | bower-asset/bourbon
30 | bower-asset/amazeui
31 | bower-asset/brain
32 | bower-asset/backbone.marionette
33 | bower-asset/angular-ng-sortablejs
34 | bower-asset/card
35 | bower-asset/bulma
36 | bower-asset/aurelia-framework
37 | bower-asset/bam-aurelia-framework
38 | bower-asset/angular-strap
39 | bower-asset/adaptive.background
40 | bower-asset/adaptive-backgrounds
41 | bower-asset/c3
42 | bower-asset/c3js-chart
43 | bower-asset/bootstrap-daterangepicker
44 | bower-asset/bacon
45 | bower-asset/Buttons
46 | bower-asset/bootstrap-modal
47 | bower-asset/awesomplete
48 | bower-asset/bootstrap-select
49 | bower-asset/angular-loading-bar
50 | bower-asset/bounce-js
51 | bower-asset/bounce.js
52 | bower-asset/bootstrap3-datetimepicker
53 | bower-asset/bs-datetimepicker
54 | bower-asset/bootstrap-switch
55 | bower-asset/angular-grid
56 | bower-asset/At.js
57 | bower-asset/Bootflat
58 | bower-asset/bootflatv2
59 | bower-asset/bespoke.js
60 | bower-asset/browser-logos
61 | bower-asset/campoaia
62 | bower-asset/bootstrap-table
63 | bower-asset/bootstra.386
64 | bower-asset/axios
65 | bower-asset/backstretch
66 | bower-asset/bootbox
67 | bower-asset/bootbox.js
68 | bower-asset/bs-bootbox
69 | bower-asset/bootstrap-tour
70 | bower-asset/analytics
71 | bower-asset/bxSlider
72 | bower-asset/bxslider-4
73 | bower-asset/bx-slider.js
74 | bower-asset/babylonjs
75 | bower-asset/annyang
76 | bower-asset/brick
77 | bower-asset/aura
78 | bower-asset/assemble
79 | bower-asset/alt
80 | bower-asset/accountingjs
81 | bower-asset/accounting.js
82 | bower-asset/anijs
83 | bower-asset/blocks
84 | bower-asset/angular-bindonce
85 | bower-asset/basket.js
86 | bower-asset/appjs
87 | bower-asset/app.js
88 | bower-asset/animsition
89 | bower-asset/background-check
90 | bower-asset/backgroundCheck
91 | bower-asset/angular-file-upload
92 | bower-asset/autosize
93 | bower-asset/angular-ui-select
94 | bower-asset/backbone-relational
95 | bower-asset/backbone.relational
96 | bower-asset/angular-filter
97 | bower-asset/angular-local-storage
98 | bower-asset/caman
99 | bower-asset/angular-http-auth
100 | bower-asset/almond
101 | bower-asset/bootstrap-jasny
102 | bower-asset/angular-google-maps
103 | bower-asset/aws-sdk
104 | bower-asset/aws-sdk-js
105 | bower-asset/animo
106 | bower-asset/animo.js
107 | bower-asset/bigvideo.js
108 | bower-asset/BigVideo.js
109 | bower-asset/backbone-forms
110 | bower-asset/cash
111 | bower-asset/angular-moment
112 | bower-asset/bootstrap-datetimepicker-master
113 | bower-asset/bootstrap-multiselect
114 | bower-asset/baobab
115 | bower-asset/bootstrap-calendar
116 | bower-asset/bootstrap-full-view-calendar
117 | bower-asset/angular-formly
118 | bower-asset/backgrid
119 | bower-asset/backbone.localstorage
120 | bower-asset/backbone.localStorage
121 | bower-asset/Backbone.localStorage
122 | bower-asset/bootstrap-admin-template
123 | bower-asset/art-dialog
124 | bower-asset/artDialog
125 | bower-asset/angular-nestedsortable
126 | bower-asset/Angular-NestedSortable
127 | bower-asset/angular-ui-tree
128 | bower-asset/basil.js
129 | bower-asset/bootstrap-social
130 | bower-asset/bricklayer
131 | bower-asset/bitcore
132 | bower-asset/angular-meteor
133 | bower-asset/angularfire
134 | bower-asset/bootstraptagsinput
135 | bower-asset/bootstrap-tagsinput
136 | bower-asset/breakpoint-sass
137 | bower-asset/brototype
138 | bower-asset/angular-chartjs
139 | bower-asset/angular-chart.js
140 | bower-asset/angular-charts-js
141 | bower-asset/backbone.stickit
142 | bower-asset/ag-grid
143 | bower-asset/agGrid
144 | bower-asset/ag-grid-angular1-test
145 | bower-asset/agGrid_kiwik
146 | bower-asset/angularitics
147 | bower-asset/angulartics
148 | bower-asset/angular-xeditable
149 | bower-asset/bucky
150 | bower-asset/bootstrap-fileinput
151 | bower-asset/angular-ui-utils
152 | bower-asset/angular-cfp-hotkeys
153 | bower-asset/angular-dragdrop
154 | bower-asset/angular-placeholder-polyfill-chieffancypants
155 | bower-asset/add-to-homescreen
156 | bower-asset/bootstrap-sweetalert
157 | bower-asset/bootstrap-markdown
158 | bower-asset/angular-smart-table
159 | bower-asset/backbone.paginator
160 | bower-asset/bootstrap-timepicker
161 | bower-asset/blast-text
162 | bower-asset/apache-server-configs
163 | bower-asset/bowser
164 | bower-asset/Bowser
165 | bower-asset/browser
166 | bower-asset/angular-schema-form
167 | bower-asset/amplify
168 | bower-asset/calendar-heatmap
169 | bower-asset/angular-carousel
170 | bower-asset/angular-rn-carousel
171 | bower-asset/cal-heatmap
172 | bower-asset/backstopjs
173 | bower-asset/anima
174 | bower-asset/animatic
175 | bower-asset/blockui
176 | bower-asset/backbone-validation
177 | bower-asset/angular-leaflet
178 | bower-asset/angular-leaflet-directive
179 | bower-asset/angular-socket-io
180 | bower-asset/antimoderate
181 | bower-asset/bootstro
182 | bower-asset/blanket
183 | bower-asset/absurd
184 | bower-asset/aekaplan-grid
185 | bower-asset/bootstrap3-dialog
186 | bower-asset/bootstrap-dialog
187 | bower-asset/BootstrapDialog
188 | bower-asset/alloyui
189 | bower-asset/alloy-ui
190 | bower-asset/blazy
191 | bower-asset/angular-restmod
192 | bower-asset/candy
193 | bower-asset/angular-busy
194 | bower-asset/angularjs-nvd3-directives
195 | bower-asset/angular-scroll
196 | bower-asset/angular-ui-calendar
197 | bower-asset/bootstrap-treeview
198 | bower-asset/angular-cache
199 | bower-asset/awesome-bootstrap-checkbox
200 | bower-asset/bootstrap-validator
201 | bower-asset/angular-deckgrid
202 | bower-asset/bootstrap-hover-dropdown
203 | bower-asset/buzz
204 | bower-asset/alasql
205 | bower-asset/assemble-handlebars-helpers
206 | bower-asset/bootstrap-formhelpers
207 | bower-asset/bootstrap-form-helpers
208 | bower-asset/angular-drag-and-drop-lists
209 | bower-asset/angular-masonry
210 | bower-asset/angular-charts
211 | bower-asset/angular-gantt
212 | bower-asset/angular-data
213 | bower-asset/argjs
214 | bower-asset/arg.js
215 | bower-asset/angularjs-toaster
216 | bower-asset/AngularJS-Toaster
217 | bower-asset/angular-notify-toaster
218 | bower-asset/angular-seo
219 | bower-asset/bower-cortex
220 | bower-asset/ace-build
221 | bower-asset/ace-builds
222 | bower-asset/bootstrap-wizard
223 | bower-asset/angular-material-data-table
224 | bower-asset/angular-ui-sortable
225 | bower-asset/bootcards
226 | bower-asset/band.js
227 | bower-asset/appear
228 | bower-asset/amazeui-react
229 | bower-asset/augment
230 | bower-asset/angular-classy
231 | bower-asset/angular-nvd3
232 | bower-asset/bootstrap.growl
233 | bower-asset/brython
234 | bower-asset/anystretch
235 | bower-asset/beeplay
236 | bower-asset/angular-bluebird
237 | bower-asset/angular-promise
238 | bower-asset/angular-websocket
239 | bower-asset/angular-wizard
240 | bower-asset/benl-angular-wizard
241 | bower-asset/angular-toastr
242 | bower-asset/bootstrap3-typeahead
243 | bower-asset/angular-mobile-nav
244 | bower-asset/angular-checklist-model
245 | bower-asset/backbone.dualstorage
246 | bower-asset/Backbone.dualStorage
247 | bower-asset/beebole-pure
248 | bower-asset/angularjs-multiselect
249 | bower-asset/angular-multi-select
250 | bower-asset/angular-multi-select-master
251 | bower-asset/burger
252 | bower-asset/backbone-react-component
253 | bower-asset/base
254 | bower-asset/bigfoot
255 | bower-asset/angular-jwt
256 | bower-asset/bignumber.js
257 | bower-asset/bigtext
258 | bower-asset/angular-google-chart
259 | bower-asset/balance-text
260 | bower-asset/backbone-offline
261 | bower-asset/backbone.offline
262 | bower-asset/bootstrap-ajax
263 | bower-asset/BookBlock
264 | bower-asset/canvg-gabelerner
265 | bower-asset/amgular-gridster
266 | bower-asset/angular-gridster
267 | bower-asset/angular-permission
268 | bower-asset/angular-snapjs
269 | bower-asset/bootstrapcolorpicker
270 | bower-asset/bootstrap-colorpicker
271 | bower-asset/angular-dashboard-framework
272 | bower-asset/cardkit
273 | bower-asset/background-blur
274 | bower-asset/aight
275 | bower-asset/angular-datatables
276 | bower-asset/bb-angular-datatables
277 | bower-asset/angles
278 | bower-asset/anglesJs
279 | bower-asset/angular-filemanager
280 | bower-asset/bootstrapaccessibilityplugin
281 | bower-asset/angular-timer
282 | bower-asset/bigscreen
283 | bower-asset/angular-breadcrumb
284 | bower-asset/bootstrap-combobox
285 | bower-asset/a
286 | bower-asset/angular-morph
287 | bower-asset/accessibility-developer-tools
288 | bower-asset/big.js
289 | bower-asset/bootstrap-tokenfield
290 | bower-asset/caret.js
291 | bower-asset/Caret.js
292 | bower-asset/alpaca
293 | bower-asset/angucomplete-alt
294 | bower-asset/backbone.epoxy
295 | bower-asset/baguettebox.js
296 | bower-asset/angularytics
297 | bower-asset/backbone.iobind
298 | bower-asset/cardinal
299 | bower-asset/angular-rx
300 | bower-asset/a0-angular-storage
301 | bower-asset/angular-chosen-localytics
302 | bower-asset/bootstrap-contexmenu
303 | bower-asset/bootstrap-contextmenu
304 | bower-asset/angular-bootstrap-nav-tree
305 | bower-asset/angular-bootstrap-nav-tree-nif
306 | bower-asset/bootstrap-chosen
307 | bower-asset/bucketsjs
308 | bower-asset/auth0-angular
309 | bower-asset/bootstrap-maxlength
310 | bower-asset/angular-gettext
311 | bower-asset/angular-dialog-service
312 | bower-asset/Autolinker.js
313 | bower-asset/angular-promise-tracker
314 | bower-asset/angular-spinner
315 | bower-asset/angular-validation
316 | bower-asset/angular-localforage
317 | bower-asset/angular-localForage
318 | bower-asset/acvpp
319 | bower-asset/ang-ro
320 | bower-asset/angular-datepicker
321 | bower-asset/angular-vs-repeat
322 | bower-asset/angular-autosize
323 | bower-asset/angular-elastic
324 | bower-asset/angularjs-slider
325 | bower-asset/bootstrap-ie7
326 | bower-asset/bootstrap-tags
327 | bower-asset/app-router
328 | bower-asset/bootstrap-filestyle
329 | bower-asset/bootstrap-stylus
330 | bower-asset/bootstrap-toggle
331 | bower-asset/bootstrap-rtl
332 | bower-asset/angular-ui-dashboard
333 | bower-asset/angular-ui-select2
334 | bower-asset/better-dom
335 | bower-asset/angular-tour
336 | bower-asset/bootstrap-star-rating
337 | bower-asset/bootstrap-progressbar
338 | bower-asset/backbone-associations
339 | bower-asset/bootstrap3-wysiwyg
340 | bower-asset/angular-markdown-directive
341 | bower-asset/baron
342 | bower-asset/api-designer
343 | bower-asset/angular-facebook
344 | bower-asset/anything.js
345 | bower-asset/backbone-tastypie
346 | bower-asset/animate.less
347 | bower-asset/backbone.syphon
348 | bower-asset/brand-colors
349 | bower-asset/blockrain
350 | bower-asset/angular-payments
351 | bower-asset/angular-kendo
352 | bower-asset/angular-kendo-directives
353 | bower-asset/angular-kendo-ui
354 | bower-asset/angular-paginate-anything
355 | bower-asset/andy
356 | bower-asset/angular-growl
357 | bower-asset/BaremetricsCalendar
358 | bower-asset/catiline
359 | bower-asset/angular-route-segment
360 | bower-asset/angular-sweetalert
361 | bower-asset/angular-sweetalert-promised
362 | bower-asset/autoNumeric
363 | bower-asset/angular-material-icons
364 | bower-asset/angular-google-analytics
365 | bower-asset/backbone-nested-afeld
366 | bower-asset/backbone-nested-model
367 | bower-asset/bearcat
368 | bower-asset/angular-form-builder
369 | bower-asset/angular-tree-control
370 | bower-asset/adazzle-react-data-grid
371 | bower-asset/angular-ui-ace
372 | bower-asset/angular-form-for
373 | bower-asset/bcryptjs
374 | bower-asset/backbone.radio
375 | bower-asset/avalanche-css
376 | bower-asset/angular-motion
377 | bower-asset/bottlejs
378 | bower-asset/backbone-fetch-cache
379 | bower-asset/blockies
380 | bower-asset/alloyeditor
381 | bower-asset/bootpag
382 | bower-asset/angular-bootstrap-calendar
383 | bower-asset/augment.js
384 | bower-asset/backbone-query-parameters
385 | bower-asset/autolayout
386 | bower-asset/angular-material
387 | bower-asset/angular-oauth2
388 | bower-asset/adapter.js
389 | bower-asset/angucomplete
390 | bower-asset/bower-mergely
391 | bower-asset/BttrLazyLoading
392 | bower-asset/angular-slick
393 | bower-asset/ajv
394 | bower-asset/args-js
395 | bower-asset/angular-modal-service
396 | bower-asset/angular-easyfb
397 | bower-asset/bootstrap-sortable
398 | bower-asset/angular-intro.js
399 | bower-asset/bpopup
400 | bower-asset/angular-ui-tinymce
401 | bower-asset/angular-zenpen
402 | bower-asset/backbone.babysitter
403 | bower-asset/angular-devise
404 | bower-asset/ascensor.js
405 | bower-asset/angular-ngautocomplete
406 | bower-asset/angular-youtube-mb
407 | bower-asset/amygdala
408 | bower-asset/animate-transition
409 | bower-asset/ajaxchimp
410 | bower-asset/anchor-js
411 | bower-asset/angular-semantic-ui
412 | bower-asset/backbone-modal
413 | bower-asset/barn
414 | bower-asset/angular-data-table
415 | bower-asset/angularLocalStorage
416 | bower-asset/Angular-localStorage
417 | bower-asset/bootstrap-vertical-tabs
418 | bower-asset/airpub
419 | bower-asset/angular-dragula
420 | bower-asset/angular-dragula.js
421 | bower-asset/animatedheader
422 | bower-asset/AnimatedHeader
423 | bower-asset/angular-ui-layout
424 | bower-asset/angular-css
425 | bower-asset/angular-notify
426 | bower-asset/animatewithsass
427 | bower-asset/angular-scroll-glue
428 | bower-asset/backbone.routeFilter
429 | bower-asset/backbone.wreqr
430 | bower-asset/bigslide
431 | bower-asset/bigSlide
432 | bower-asset/apitizer
433 | bower-asset/api-console
434 | bower-asset/animation-frame
435 | bower-asset/animationFrame
436 | bower-asset/amazeui-touch
437 | bower-asset/allmighty
438 | bower-asset/allmighty-autocomplete
439 | bower-asset/angular-ui-handsontable
440 | bower-asset/angular-inview
441 | bower-asset/air-datepicker
442 | bower-asset/angular-bootstrap-show-errors
443 | bower-asset/angular-underscore
444 | bower-asset/bind.js
445 | bower-asset/angular-ui-notification
446 | bower-asset/bootsketch
447 | bower-asset/bootstrap-duallistbox
448 | bower-asset/bitauth
449 | bower-asset/bson
450 | bower-asset/animate-sass
451 | bower-asset/angular-bootstrap-colorpicker
452 | bower-asset/angular-image-crop
453 | bower-asset/bem-constructor
454 | bower-asset/angular-sails
455 | bower-asset/angular-w5c-validator
456 | bower-asset/angular-native-dragdrop
457 | bower-asset/Blueprint-SlidePushMenus
458 | bower-asset/bootstrap-material-datetimepicker
459 | bower-asset/angular-ui-codemirror
460 | bower-asset/bootstrap-touchspin
461 | bower-asset/all-animation
462 | bower-asset/autofill-event
463 | bower-asset/angularjs-socialshare
464 | bower-asset/axe-core
465 | bower-asset/breakpoint
466 | bower-asset/angularjs-truncate
467 | bower-asset/angular-truncate
468 | bower-asset/angular-truncate-original
469 | bower-asset/angular-ui-map
470 | bower-asset/bootstrap-wysiwyg-steveathon
471 | bower-asset/angular-pageslide-directive
472 | bower-asset/at-table
473 | bower-asset/angular-dynforms
474 | bower-asset/angular-svg-round-progressbar
475 | bower-asset/angular-auto-validate
476 | bower-asset/angular-sortable-view
477 | bower-asset/aload
478 | bower-asset/angular-agility
479 | bower-asset/AngularAgility
480 | bower-asset/angular-materialize
481 | bower-asset/axisj
482 | bower-asset/bootstrap-rating-input
483 | bower-asset/angular-pull-to-refresh
484 | bower-asset/angular-native-picker
485 | bower-asset/angular-pdf
486 | bower-asset/animated-responsive-image-grid
487 | bower-asset/AnimatedResponsiveImageGrid
488 | bower-asset/canvasloader
489 | bower-asset/CanvasLoader
490 | bower-asset/angular-audio
491 | bower-asset/angularjs-datepicker
492 | bower-asset/autocompeter
493 | bower-asset/afkl-lazy-image
494 | bower-asset/angular-block-ui
495 | bower-asset/applepie
496 | bower-asset/angularjs-boilerplate
497 | bower-asset/angular-locker
498 | bower-asset/backbonefire
499 | bower-asset/backfire
500 | bower-asset/caroufredsel
501 | bower-asset/carouFredSel
502 | bower-asset/angular-recaptcha
503 | bower-asset/angular-cookie
504 | bower-asset/brim
505 | bower-asset/angular-once
506 | bower-asset/animated-scrollto
507 | bower-asset/bytebuffer
508 | bower-asset/angular-pickadate
509 | bower-asset/angular-growl-2
510 | bower-asset/angular-growl-3
511 | bower-asset/angular-growl-v2
512 | bower-asset/aja
513 | bower-asset/backbone.subroute
514 | bower-asset/blip
515 | bower-asset/aliyun-sdk
516 | bower-asset/angular-qrcode
517 | bower-asset/angular-ui-date
518 | bower-asset/breakpoint-slicer
519 | bower-asset/angular-slider-venturocket
520 | bower-asset/angular-django-rest-resource
521 | bower-asset/angular-medium-editor
522 | bower-asset/badges
523 | bower-asset/angular-daterangepicker
524 | bower-asset/angular-mask
525 | bower-asset/angular-ng-mask
526 | bower-asset/angular-ngMask
527 | bower-asset/basicModal
528 | bower-asset/angular-highlightjs
529 | bower-asset/angular-dragon-drop
530 | bower-asset/app-layout-templates
531 | bower-asset/basis
532 | bower-asset/basisjs
533 | bower-asset/angular-toasty
534 | bower-asset/backbone-orm
535 | bower-asset/angularjs-imageupload-directive
536 | bower-asset/angular-timeline
537 | bower-asset/backbone.mutators
538 | bower-asset/angular-bootstrap-lightbox
539 | bower-asset/angular-ui-slider
540 | bower-asset/backbone.support
541 | bower-asset/ADE
542 | bower-asset/apollo.js
543 | bower-asset/bootstrap-map-js
544 | bower-asset/alertifyjs
545 | bower-asset/angular-dynamic-locale
546 | bower-asset/angular-smarty
547 | bower-asset/angular-bootstrap-switch
548 | bower-asset/bootstrap3-wysihtml5-bower
549 | bower-asset/angularjs-dropdown-multiselect
550 | bower-asset/angularjs-dropdown-multiselect-sgarcesg1
551 | bower-asset/angular-marked
552 | bower-asset/bootstrap-tabcollapse
553 | bower-asset/background-video
554 | bower-asset/angular-audio-playlist
555 | bower-asset/angular-media-player
556 | bower-asset/ancient-oak
557 | bower-asset/angular-model-factory
558 | bower-asset/adapt-strap
559 | bower-asset/angular-tooltips
560 | bower-asset/algoliasearch
561 | bower-asset/alogs
562 | bower-asset/airbrake-js
563 | bower-asset/airbrake-js-client
564 | bower-asset/angular-pdf-viewer
565 | bower-asset/boombox.js
566 | bower-asset/ajax
567 | bower-asset/alchemyjs
568 | bower-asset/backbone-super
569 | bower-asset/backbone.super
570 | bower-asset/angular-summernote
571 | bower-asset/a11y-toggle
572 | bower-asset/angular-cached-resource
573 | bower-asset/auth0-lock
574 | bower-asset/angular-modal
575 | bower-asset/angular-blocks
576 | bower-asset/asmcrypto
577 | bower-asset/backbone-geppetto
578 | bower-asset/backbone.geppetto
579 | bower-asset/bootstrap-sidebar
580 | bower-asset/barekit
581 | bower-asset/bare-ninja
582 | bower-asset/bootstrap-winjs
583 | bower-asset/angular-autolayout
584 | bower-asset/60fps-scroll
585 | bower-asset/bootstrap-iconpicker
586 | bower-asset/angular-rangeslider
587 | bower-asset/angular-signalr-hub
588 | bower-asset/angular-mass-autocomplete
589 | bower-asset/arc.js
590 | bower-asset/angular-common
591 | bower-asset/blockadblock
592 | bower-asset/bootstrap-autohidingnavbar
593 | bower-asset/bs-autohide-navbar
594 | bower-asset/angular-redactor
595 | bower-asset/bootstrapvalidator
596 | bower-asset/bootstrapValidator
597 | bower-asset/angular-dropdowns
598 | bower-asset/angular-validation-match
599 | bower-asset/adapterjs
600 | bower-asset/angular-perfect-scrollbar
601 | bower-asset/angular-autoFields-bootstrap
602 | bower-asset/angular-ui-router.statehelper
603 | bower-asset/angular-ui-router.stateHelper
604 | bower-asset/bootstrap-datepaginator
605 | bower-asset/angularjs-geolocation
606 | bower-asset/angular-openlayers-directive
607 | bower-asset/angular-adaptive-speech
608 | bower-asset/angular-paging
609 | bower-asset/angular-scroller
610 | bower-asset/angularjs-utilities
611 | bower-asset/angular-virtual-dom
612 | bower-asset/apollo
613 | bower-asset/bootstrap-offcanvas
614 | bower-asset/angular-ladda
615 | bower-asset/angular-parse
616 | bower-asset/angularSails
617 | bower-asset/bootstrap-submenu
618 | bower-asset/angular-credit-cards
619 | bower-asset/angular-isotope
620 | bower-asset/angular-ui-router-anim-in-out
621 | bower-asset/bg-splitter
622 | bower-asset/angular-hateoas
623 | bower-asset/angular-socialshare
624 | bower-asset/angular-flash-alert
625 | bower-asset/autolink
626 | bower-asset/angular-table
627 | bower-asset/angularTable
628 | bower-asset/angular-typeahead
629 | bower-asset/arrive
630 | bower-asset/canv-gauge
631 | bower-asset/a11y.css
632 | bower-asset/angular-flexslider
633 | bower-asset/angular-base64-upload
634 | bower-asset/angular-collection
635 | bower-asset/angular-upload
636 | bower-asset/anuglar-collection
637 | bower-asset/AnythingZoomer
638 | bower-asset/angular
639 | bower-asset/angular2
640 | bower-asset/angularjs
641 | bower-asset/angular-material-datetime
642 | bower-asset/base64
643 | bower-asset/boostrapfile
644 | bower-asset/bootstrap-file-input
645 | bower-asset/bower-angular
646 | bower-asset/angular-load
647 | bower-asset/angular-stripe
648 | bower-asset/angular-google-places-autocomplete
649 | bower-asset/angular-froala
650 | bower-asset/backbone.collectionView
651 | bower-asset/angular-fx
652 | bower-asset/angular-hammer
653 | bower-asset/angular-pouchdb-wspringer
654 | bower-asset/angular-fullscreen
655 | bower-asset/angular-ui-switch
656 | bower-asset/bem-core
657 | bower-asset/angular-slugify
658 | bower-asset/appcache-autoupdate
659 | bower-asset/appcache-nanny
660 | bower-asset/angular-debug-bar
661 | bower-asset/angular-ui-mask
662 | bower-asset/ansi_up
663 | bower-asset/angular-selection-model
664 | bower-asset/async-task
665 | bower-asset/angular-spinkit
666 | bower-asset/angular-material-design-lite
667 | bower-asset/angular-ui-router-tabs
668 | bower-asset/bows
669 | bower-asset/bugsnag
670 | bower-asset/amd-feature
671 | bower-asset/angular-custom-form-validation
672 | bower-asset/angular-ui-form-validation
673 | bower-asset/angular-validator
674 | bower-asset/angular-yandex-map
675 | bower-asset/age
676 | bower-asset/angular-flash
677 | bower-asset/better.js
678 | bower-asset/bonegular
679 | bower-asset/bem-components
680 | bower-asset/bootstrap-ui-datetime-picker
681 | bower-asset/bootsy
682 | bower-asset/adal-angular
683 | bower-asset/angular-chartist.js
684 | bower-asset/angularjs-mongolab
685 | bower-asset/angularjs-mongolab-promise
686 | bower-asset/angular-progress-button-styles
687 | bower-asset/angular-social
688 | bower-asset/angular-bootstrap-slider
689 | bower-asset/angular-bootstrap-slider-f
690 | bower-asset/angular-xml
691 | bower-asset/c3-angular
692 | bower-asset/backbone.touch
693 | bower-asset/bottleneck
694 | bower-asset/angular-highcharts-directive
695 | bower-asset/angular-contenteditable
696 | bower-asset/amplitude
697 | bower-asset/angular-notifications
698 | bower-asset/angular-resizable
699 | bower-asset/angular-selectize2
700 | bower-asset/angular-simple-validation
701 | bower-asset/angular-trix
702 | bower-asset/angular-validation-ghiscoding
703 | bower-asset/bgiframe
704 | bower-asset/angular-poller
705 | bower-asset/angular-video-bg
706 | bower-asset/angularjs-ie8-build
707 | bower-asset/angular-qr
708 | bower-asset/angular-recursion
709 | bower-asset/anno.js
710 | bower-asset/angular-aside
711 | bower-asset/angular-unsavedChanges
712 | bower-asset/ArkUI
713 | bower-asset/boomerang
714 | bower-asset/bootstrap-touch-carousel
715 | bower-asset/angularjs-modal-service
716 | bower-asset/3l
717 | bower-asset/angular-history
718 | bower-asset/amaranjs
719 | bower-asset/backbone.controller
720 | bower-asset/bootstrap-without-jquery
721 | bower-asset/babelfish
722 | bower-asset/angular2-now
723 | bower-asset/angular-aop
724 | bower-asset/bootstrap-ios7
725 | bower-asset/ajaxq
726 | bower-asset/angular-bacon
727 | bower-asset/angular-hammerjs
728 | bower-asset/angular-progress-arc
729 | bower-asset/angular-echarts
730 | bower-asset/angular-route-styles
731 | bower-asset/angular-responsive
732 | bower-asset/angular-spotify
733 | bower-asset/angular-sails-bind
734 | bower-asset/angular-toggle-switch
735 | bower-asset/bardjs
736 | bower-asset/bootcamp
737 | bower-asset/bootstrap.native
738 | bower-asset/angular-atomic-notify
739 | bower-asset/angular-object-table
740 | bower-asset/angular-advanced-searchbox
741 | bower-asset/angular-css-injector
742 | bower-asset/angular-immutable
743 | bower-asset/angularjs-indexedDB
744 | bower-asset/angular-tablesort
745 | bower-asset/backbone.cachingSync
746 | bower-asset/Backbone.cachingSync
747 | bower-asset/angular-base64
748 | bower-asset/angular-morris-chart
749 | bower-asset/amitava82-angular-multiselect
750 | bower-asset/angular-activerecord
751 | bower-asset/angular-swing
752 | bower-asset/angular-pusher
753 | bower-asset/backbone-poller
754 | bower-asset/angular-growl-notifications
755 | bower-asset/avatar
756 | bower-asset/angular-gravatar
757 | bower-asset/backbone-computedfields
758 | bower-asset/backbone.computedfields
759 | bower-asset/better-dateinput-polyfill
760 | bower-asset/bootstrap-flat
761 | bower-asset/angular-awesome-slider
762 | bower-asset/angular-directive.g-signin
763 | bower-asset/angular-bootstrap
764 | bower-asset/angular-ui-bootstrap-bower
765 | bower-asset/asciidoctor.js
766 | bower-asset/backbone.subviews
767 | bower-asset/angularD3
768 | bower-asset/angular-tags
769 | bower-asset/angular-tags-meanstack
770 | bower-asset/backbone.statemanager
771 | bower-asset/angular-typer
772 | bower-asset/bimap
773 | bower-asset/bootstrap-gtreetable
774 | bower-asset/angular-winjs
775 | bower-asset/bem-cn
776 | bower-asset/bem-react
777 | bower-asset/bootstrap-rating
778 | bower-asset/angulargrid
779 | bower-asset/angular-indexed-db
780 | bower-asset/api-check
781 | bower-asset/bio-pv
782 | bower-asset/angular-component.js
783 | bower-asset/angular-feature-flags
784 | bower-asset/angular-ui-scroll
785 | bower-asset/angular-velocity
786 | bower-asset/anchorify
787 | bower-asset/bubbletree
788 | bower-asset/angular-slick-carousel
789 | bower-asset/brandbuttons
790 | bower-asset/BrandButtons
791 | bower-asset/aether
792 | bower-asset/angular-ui-bootstrap-datetimepicker
793 | bower-asset/angular-webstorage
794 | bower-asset/angular-lodash
795 | bower-asset/angular-scroll-watch
796 | bower-asset/angular-retina
797 | bower-asset/angular-esri-map
798 | bower-asset/angular-img-fallback
799 | bower-asset/angular-viewport-watch
800 | bower-asset/animateCSS
801 | bower-asset/backbone_mediator
802 | bower-asset/backbone-paginator
803 | bower-asset/bellows
804 | bower-asset/autocompletelikegoogle
805 | bower-asset/barista
806 | bower-asset/blob-util
807 | bower-asset/angular-google-gapi
808 | bower-asset/angular-wamp
809 | bower-asset/backbone.advice
810 | bower-asset/angular-ueditor
811 | bower-asset/alameda
812 | bower-asset/backbone.courier
813 | bower-asset/bselect
814 | bower-asset/avoscloud-sdk
815 | bower-asset/cajon
816 | bower-asset/Case
817 | bower-asset/angular-debaser
818 | bower-asset/angular-react
819 | bower-asset/backbone.obscura
820 | bower-asset/bootstrap-show-password
821 | bower-asset/angular-confirm-modal
822 | bower-asset/angular-flash-messages
823 | bower-asset/angular-soundmanager2
824 | bower-asset/autogrow
825 | bower-asset/angular-click-outside
826 | bower-asset/angular-chart
827 | bower-asset/artyom.js
828 | bower-asset/bluebutton.js
829 | bower-asset/angular-bootstrap-checkbox
830 | bower-asset/angular-ivh-treeview
831 | bower-asset/bootstrap-confirmation2
832 | bower-asset/bootswatch-scss
833 | bower-asset/braintree-web
834 | bower-asset/bs-confirmation
835 | bower-asset/bs-typeahead
836 | bower-asset/angular-lazyload
837 | bower-asset/angular-parallax
838 | bower-asset/bin-packing-grid
839 | bower-asset/angular-custom-element
840 | bower-asset/angular-route
841 | bower-asset/angular-spring-data-rest
842 | bower-asset/backbone.basicauth
843 | bower-asset/Backbone.xmpp
844 | bower-asset/bemify
845 | bower-asset/bootstrap-modal-carousel
846 | bower-asset/bower-angular-route
847 | bower-asset/a1atscript
848 | bower-asset/amalia.js
849 | bower-asset/arctext-js
850 | bower-asset/bootstrap-checkbox
851 | bower-asset/astorage
852 | bower-asset/backbone.giraffe
853 | bower-asset/angular-app-container
854 | bower-asset/angular-fontawesome
855 | bower-asset/angular-hal
856 | bower-asset/angular-media-queries
857 | bower-asset/angular-relative
858 | bower-asset/angular-widget
859 | bower-asset/angular-animate
860 | bower-asset/angular-disqus
861 | bower-asset/angular-keepr
862 | bower-asset/angular-img-cropper
863 | bower-asset/angular-wysiwyg
864 | bower-asset/backbone.uniquemodel
865 | bower-asset/beez
866 | bower-asset/bootstrap-sf1
867 | bower-asset/angular-couch-potato
868 | bower-asset/angular-logX
869 | bower-asset/angular-md5
870 | bower-asset/angular-swiper
871 | bower-asset/backbone.nativeview
872 | bower-asset/backbone.supermodel
873 | bower-asset/angular-bootstrap-contextmenu
874 | bower-asset/angular-timeago
875 | bower-asset/bootstrap-markdown-editor
876 | bower-asset/angular-form-gen
877 | bower-asset/bootstrap-arabic
878 | bower-asset/calc-polyfill
879 | bower-asset/ahoy
880 | bower-asset/angular-dc
881 | bower-asset/angular-ui-chart
882 | bower-asset/angular-cropme
883 | bower-asset/angular-filters
884 | bower-asset/Backbone.Schema
885 | bower-asset/angular-bootstrap-select
886 | bower-asset/angular-csv-import
887 | bower-asset/angular-emoji-filter
888 | bower-asset/angular-emoji-popup
889 | bower-asset/angular-formly-templates-bootstrap
890 | bower-asset/angular-masonry-directive
891 | bower-asset/angular-slider
892 | bower-asset/autogrow-textarea
893 | bower-asset/angular-odata-resources
894 | bower-asset/bootstrap-magnify
895 | bower-asset/app-loading
896 | bower-asset/basicContext
897 | bower-asset/angular-acl
898 | bower-asset/angular-google-maps-native
899 | bower-asset/apiNG
900 | bower-asset/api-spec-converter
901 | bower-asset/arcgis-cedar
902 | bower-asset/ash-js
903 | bower-asset/behavior3js
904 | bower-asset/bower-ionic
905 | bower-asset/algolia-autocomplete.js
906 | bower-asset/angular-videosharing-embed
907 | bower-asset/backbone-websql
908 | bower-asset/bitset.js
909 | bower-asset/amcharts3
910 | bower-asset/angular-decorators
911 | bower-asset/angular-toArrayFilter
912 | bower-asset/academicons
913 | bower-asset/angular-drupal
914 | bower-asset/angularjs-gravatar
915 | bower-asset/angularjs-gravatardirective
916 | bower-asset/angular-lazy-img
917 | bower-asset/angular-ui-router-title
918 | bower-asset/arangojs
919 | bower-asset/aviator
920 | bower-asset/angular2-moment
921 | bower-asset/angular-ellipsis
922 | bower-asset/angular-i18n
923 | bower-asset/angularplasmid
924 | bower-asset/angular-spectrum-colorpicker
925 | bower-asset/backbone-autocomplete
926 | bower-asset/bem-grid
927 | bower-asset/angular-bootstrap-simple-chat
928 | bower-asset/Backbone.BindTo
929 | bower-asset/angular-hovercard
930 | bower-asset/angularjs-viewhead
931 | bower-asset/angular-multi-step-form
932 | bower-asset/Backbone.Handlebars
933 | bower-asset/base-64
934 | bower-asset/acho
935 | bower-asset/angular2-grid
936 | bower-asset/angular-masonry-fly
937 | bower-asset/angular-ui-router-styles
938 | bower-asset/aurelia-dependency-injection
939 | bower-asset/ayre
940 | bower-asset/blazecss
941 | bower-asset/add-clear
942 | bower-asset/angular-clipboard
943 | bower-asset/backbone.unclassified
944 | bower-asset/am-grid
945 | bower-asset/angular-http-batcher
946 | bower-asset/angular-mocks
947 | bower-asset/angular-print
948 | bower-asset/angularPrint
949 | bower-asset/angular-raven
950 | bower-asset/app.json
951 | bower-asset/array-future
952 | bower-asset/backbone-nested
953 | bower-asset/bibi
954 | bower-asset/blittle_backbone-nested-models
955 | bower-asset/bower-angular-mocks
956 | bower-asset/angular-intercom
957 | bower-asset/angular-intercom.io
958 | bower-asset/angular-palette2
959 | bower-asset/bacon.jquery
960 | bower-asset/bacon-jquery-bindings
961 | bower-asset/aha-table
962 | bower-asset/angular-formly-templates-ionic
963 | bower-asset/angular-knob
964 | bower-asset/angular-order-object-by
965 | bower-asset/angular-promise-buttons
966 | bower-asset/animatesprite
967 | bower-asset/assemble-bootstrap
968 | bower-asset/astarisx
969 | bower-asset/backbone.hammer
970 | bower-asset/backbone.hammer.js
971 | bower-asset/boilerplate-bootstrap
972 | bower-asset/bootstrap-additions
973 | bower-asset/angular-azure-mobile-service
974 | bower-asset/angular-mapbox
975 | bower-asset/angular.panels
976 | bower-asset/angular-phonegap-push-notification
977 | bower-asset/angular-spinners
978 | bower-asset/bootstrap-easy-sidebar
979 | bower-asset/action
980 | bower-asset/angular-notification
981 | bower-asset/angular-resource
982 | bower-asset/angular-ripple
983 | bower-asset/angular-smoothscroll
984 | bower-asset/angular-touch
985 | bower-asset/angular-ui-table-view
986 | bower-asset/ariatemplates
987 | bower-asset/aurelia-validation
988 | bower-asset/bem-classnames
989 | bower-asset/bootstrap-css-only
990 | bower-asset/bootswatch-dist
991 | bower-asset/accounts-phone
992 | bower-asset/angular-animate-css
993 | bower-asset/angular-ckeditor
994 | bower-asset/angular-meditor
995 | bower-asset/angular-swipe
996 | bower-asset/angular-bind-html-compile
997 | bower-asset/angular-date-range-picker
998 | bower-asset/angular-diff-match-patch
999 | bower-asset/angular-facebook-utils
1000 | bower-asset/angular-fcsa-number
--------------------------------------------------------------------------------
/history.md:
--------------------------------------------------------------------------------
1 | # hiqdev/asset-packagist
2 |
3 | ## [1.0.1] - 2018-05-29
4 |
5 | - Fixed executed jobs limit to follow `yiisoft/yii2-queue` API changes [@SilverFire]
6 | - [c98c9fa] 2018-05-29 Fixed executed jobs limit to follow yiisoft/yii2-queue API changes [@SilverFire]
7 |
8 | ## [1.0.0] - 2018-05-25
9 |
10 | - Fixed XSS vulnerabilities
11 | - [92c0fd7] 2017-12-11 Fixed XSS vulnerabilities [@SilverFire]
12 | - Added patch version support for `bower-asset/angular`
13 | - [be126d4] 2017-10-01 added converting patch version to RC for bower-asset/angular [@hiqsol]
14 | - Added redirect to package page when its full name given
15 | - [eb93960] 2017-07-04 improved search: added redirect to package page when full name given [@hiqsol]
16 | - Refactored internals: RegistryFactory, Mutex <- Locker, logging
17 | - [cd0f3cc] 2017-05-18 csfixed [@hiqsol]
18 | - [b76fbcd] 2017-05-18 Merge pull request #50 from edgardmessias/refactored [@hiqsol]
19 | - [dc47aff] 2017-05-16 Added comments [@edgardmessias]
20 | - [863dea3] 2017-05-16 Refactored RegistryFactory [@edgardmessias]
21 | - [1f0abde] 2017-05-12 Merge pull request #48 from `edgardmessias/locker_to_mutex` [@hiqsol]
22 | - [035f1ea] 2017-05-12 Merge pull request #49 from `edgardmessias/queue_jobs` [@hiqsol]
23 | - [6f7aaae] 2017-05-11 Serialize only the name of package for more performance in queue jobs [@edgardmessias]
24 | - [ab5e2bd] 2017-05-11 Switch Locker to Mutex (Close #47) [@edgardmessias]
25 | - [257b2f5] 2017-05-10 csfixed [@hiqsol]
26 | - [b1a7d9c] 2017-05-10 Merge pull request #44 from `edgardmessias/composer_log` [@hiqsol]
27 | - [0aa27f6] 2017-05-08 Added composer log into Yii [@edgardmessias]
28 | - Updated documentation
29 | - [5b5f435] 2017-05-10 docs [@hiqsol]
30 | - [2dd8b25] 2016-06-16 added Yii2 section to about page [@hiqsol]
31 | - [a607125] 2016-06-09 added Installing to a custom path manual [@hiqsol]
32 | - [e3cb136] 2016-06-03 added how it works on about page [@hiqsol]
33 | - [ec7bbcd] 2017-04-27 Enhanced wording [@SilverFire]
34 | - [d4fee59] 2017-04-25 Update documentation to use oomphinc/composer-installers-extender [@SilverFire]
35 | - [87e2662] 2017-04-25 Fixed syntax error in AssetPackage [@SilverFire]
36 | - [5a70619] 2017-04-24 Merge pull request #30 from edgardmessias/patch-1 [@SilverFire]
37 | - [de93971] 2017-04-20 Updated example in about page [@edgardmessias]
38 | - Fixed use of `hidev`
39 | - [eabafbb] 2017-05-10 fixed storage actions in goals [@hiqsol]
40 | - [d8b5b87] 2017-05-10 added require hidev (to substitute yii) [@hiqsol]
41 | - [4c94e8f] 2017-05-08 fixed tests [@hiqsol]
42 | - [122874e] 2017-05-08 csfixed [@hiqsol]
43 | - [5390524] 2017-05-05 fixed config for controllers [@hiqsol]
44 | - [d89b68c] 2017-05-04 fixed hidev config for hidev 0.6 [@hiqsol]
45 | - [b850cba] 2017-05-05 renamed configs `web`, `console` <- hisite, hidev [@hiqsol]
46 | - Implemented package management using queues with [zhuravljov/yii2-queue]
47 | - [9f54f52] 2017-09-29 Updated to use `yiisoft/yii2-queue`, implemented sequention jobs execution limit [@SilverFire]
48 | - [2ba21ee] 2017-09-29 Switched to yiisoft/yii2-queue [@SilverFire]
49 | - [9b7d7ff] 2017-09-21 Added migration to follow yii2-queue API changes [@SilverFire]
50 | - [88b96a6] 2018-05-23 Updated `QueueController` to follow yii2-queue API changes [@SilverFire]
51 | - [ace352d] 2017-05-05 Merge pull request #42 from edgardmessias/fix-queue [@SilverFire]
52 | - [7c5d01d] 2017-05-05 Fixed [zhuravljov/yii2-queue] API changes [@edgardmessias]
53 | - [b07d11b] 2017-05-04 Updated to follow [zhuravljov/yii2-queue] API changes [@SilverFire]
54 | - [a72bade] 2017-05-05 csfixed [@hiqsol]
55 | - [7a3380c] 2017-05-05 Merge pull request #41 from edgardmessias/patch-6 [@hiqsol]
56 | - [b781661] 2017-05-04 Ignored AliasPackage (Close #40) [@edgardmessias]
57 | - [7fb4ac1] 2017-03-30 Merge pull request #29 from zhuravljov/master [@SilverFire]
58 | - [9e4c259] 2017-03-30 Last changes for [zhuravljov/yii2-queue] [@zhuravljov]
59 | - [c0bfeb1] 2016-12-19 Do not save succesfully finished jobs in Queue [@SilverFire]
60 | - [9eb09aa] 2016-12-07 Updated to follow changes [zhuravljov/yii2-queue] [@zhuravljov]
61 | - [cb803cb] 2016-12-06 Updated QueueController to follow changes in [zhuravljov/yii2-queue] [@SilverFire]
62 | - [5ff526c] 2016-12-01 Added maintenance/update-expired action [@SilverFire]
63 | - [9515fd0] 2016-12-01 Refactored Storage - added StorageInterface, changes visibiliy of some method [@SilverFire]
64 | - [bc20b98] 2016-11-30 Fixed typo [@SilverFire]
65 | - Improved look, moved search form to NavBar, added color by stability in package details page
66 | - [d428eef] 2017-05-27 added require yii2-hiart-librariesio and yii2-hiart-guzzle [@hiqsol]
67 | - [2ec9f08] 2017-05-27 Merge pull request #52 from `edgardmessias/improved_search` [@hiqsol]
68 | - [b9972eb] 2017-05-24 Added image by platform in result search [@edgardmessias]
69 | - [9f04bf5] 2017-05-24 Added "Powered by libraries.io" [@edgardmessias]
70 | - [3511c98] 2017-05-23 Improved Search using libraries.io (Close #36) [@edgardmessias]
71 | - [33befd4] 2017-05-11 added container class in outer div [@hiqsol]
72 | - [856c104] 2017-05-10 added breadcrumbs and subtitle for pages [@hiqsol]
73 | - [6aa8285] 2017-05-10 fixed navbar menu [@hiqsol]
74 | - [7f3a5b4] 2017-05-10 removed flat theme tuning views [@hiqsol]
75 | - [bbbb7b5] 2017-05-10 added NavbarMenu with search form [@hiqsol]
76 | - [ca928cf] 2017-05-10 moved theme tuning to views/themes [@hiqsol]
77 | - [cd5c912] 2017-05-10 added search form into main menu [@hiqsol]
78 | - [300594c] 2017-05-10 removed original theme tuning [@hiqsol]
79 | - [6438a47] 2017-05-04 Revert "Fixed styles" [@SilverFire]
80 | - [b599663] 2017-05-04 Fixed styles [@SilverFire]
81 | - [404f689] 2017-04-28 Code style adjustment [@SilverFire]
82 | - [c226cff] 2017-04-28 Moved `_after_header` to Flat theme layout [@tafid]
83 | - [7f43b83] 2017-04-28 Changed css styles [@tafid]
84 | - [1ed2835] 2017-04-28 Added AppAsset bundle to config [@tafid]
85 | - [5b0a29f] 2017-04-28 Added FontAwesome like defer [@tafid]
86 | - [f5f7713] 2017-04-28 Added layouts for Original theme [@tafid]
87 | - [9a8db4a] 2017-04-28 Added layouts for Flat theme [@tafid]
88 | - [1aa2d23] 2017-04-28 Merge pull request #35 from edgardmessias/patch-5 [@SilverFire]
89 | - [edcc58c] 2017-04-28 Added color by stability [@edgardmessias]
90 | - Added order for packages releases
91 | - [8542c16] 2017-05-16 Refactored package sort [@edgardmessias]
92 | - [f87848c] 2017-04-27 Merge pull request #32 from edgardmessias/patch-3 [@SilverFire]
93 | - [0ea6a4a] 2017-04-27 Code style fixed [@SilverFire]
94 | - [1ae0b89] 2017-04-27 Added order for packages releases [@edgardmessias]
95 | - Added `version_normalized`
96 | - [76f75df] 2017-04-27 Merge pull request #31 from edgardmessias/patch-2 [@SilverFire]
97 | - [383e494] 2017-04-27 Updated changelog [@SilverFire]
98 | - [85a5314] 2017-04-26 Added `version_normalized` [@edgardmessias]
99 | - Added providing `require` to support dependencies of bower/npm packages
100 | - [03c8992] 2016-08-13 added providing `require` to AssetPackage #14 [@hiqsol]
101 | - Added DB layer to store packages and their properties
102 | - [d1130a1] 2016-11-30 Added packages table. Added duplication prevention. [@SilverFire]
103 | - Added dependencies auto resolving for new packages
104 | - [22ab667] 2016-11-30 Added Package dependencies resolving [@SilverFire]
105 | - [5a29a01] 2016-11-29 Added common config [@SilverFire]
106 | - Added automatic package avoiding for corrupted packages, enhanced error handling
107 | - [257eb43] 2017-04-27 csfixed [@SilverFire]
108 | - [6330bce] 2016-12-19 Enhanced Storage to report file system errors [@SilverFire]
109 | - [e482226] 2016-11-30 Enhanced error handling in PackageUpdateCommand [@SilverFire]
110 | - [0437aee] 2017-04-26 Refactored UpdateController, enhanced error handling [@SilverFire]
111 | - [a0562a3] 2017-04-24 Added package avoiding [@SilverFire]
112 | - [bb771de] 2017-04-24 Added migration for package avoiding [@SilverFire]
113 | - [a96ef4b] 2017-04-27 Added AssetPackageController::actionAvoid [@SilverFire]
114 | - [bd5dca3] 2017-04-27 Enhanced error handling, implemented auto-ignoring [@SilverFire]
115 | - [cfd2352] 2017-04-27 Added AssetPackageController::actionAddUpdateCommand() [@SilverFire]
116 | - [e22d364] 2017-04-27 Fixed PackageRepository::getExpiredForUpdate() [@SilverFire]
117 | - [7d20e30] 2017-04-26 Enhanced error handling [@SilverFire]
118 | - [bdc0fb1] 2017-04-26 Enhanced package info displaying [@SilverFire]
119 | - [1c947e1] 2017-04-26 Bootstarap log module [@SilverFire]
120 | - Fixed minor issues
121 | - [18bfb40] 2018-05-23 Updated changelogs [@SilverFire]
122 | - [ea55b5c] 2017-06-30 switched icons to fixed weight fontawesome [@hiqsol]
123 | - [8a5882e] 2017-06-30 csfixed [@hiqsol]
124 | - [a5f52c5] 2017-06-30 added AppAsset to be registered by themeManager at startup [@hiqsol]
125 | - [f4dc2fc] 2017-06-16 Merge pull request #56 from `anyt/add_license_information_to_package_info` [@hiqsol]
126 | - [b2c50d1] 2017-06-15 Added license information to package info. [yatsenco@gmail.com]
127 | - [38e5b4b] 2017-05-27 added icon for License at _search_item [@hiqsol]
128 | - [8ea9f6b] 2017-05-27 redone to use `yii2-hiart-librariesio` [@hiqsol]
129 | - [68e6592] 2017-05-27 added AssetPackage::isAvailable and buildNormalName [@hiqsol]
130 | - [eb5f5d9] 2017-10-01 added `normalizeScopedName` [@hiqsol]
131 | - [052b795] 2017-07-17 moved `yiisoft/yii2-debug` to require-dev closes #46 [@hiqsol]
132 | - [e1f21c7] 2017-12-16 Merge pull request #75 from and800/master [@hiqsol]
133 | - [0365f77] 2017-10-20 Merge pull request #73 from SilverFire/master [@hiqsol]
134 | - [27ad14d] 2017-10-20 Updated fxp/composer-asset-plugin constraint to ^1.4.2 [@SilverFire]
135 | - [843800f] 2018-02-17 typo [@hiqsol]
136 | - [59e4260] 2017-04-24 Fixed to follow FXP/composer-asset-plugin API changes [@SilverFire]
137 | - [c95600b] 2017-05-08 Merge pull request #43 from `edgardmessias/fix_urls` [@SilverFire]
138 | - [2c47200] 2017-05-08 Fixed urls for use in urlManager [@edgardmessias]
139 | - [399d379] 2017-03-02 Merge pull request #27 from githubjeka/patch-1 [@hiqsol]
140 | - [0afdfd2] 2017-03-02 improved query param [et.coder@gmail.com]
141 | - [1a3454c] 2017-01-12 add github issue template [@hiqsol]
142 | - [dc4ccd1] 2016-12-08 Merge pull request #22 from zhuravljov/master [@SilverFire]
143 | - [e14172c] 2017-04-27 Added STAT cache cleaning in Storage [@SilverFire]
144 | - [a5fb28b] 2017-04-27 Enhanced Storage::writePackagesJson() to touch file after update [@SilverFire]
145 | - [d34e57b] 2017-04-23 csfixed [@hiqsol]
146 | - [e547396] 2017-04-21 removed require theme, moved to root package [@hiqsol]
147 | - [5de31be] 2017-04-21 Fixed DIC configuration [@SilverFire]
148 | - [bb6c7ad] 2017-04-21 removed outdated config/web [@hiqsol]
149 | - [90d9aee] 2017-04-21 added default `favicon.ico` (empty for the moment) [@hiqsol]
150 | - [5918e90] 2017-04-21 fixed namespace [@hiqsol]
151 | - [73f4c57] 2017-04-21 updated config, removed Bootstrap [@hiqsol]
152 | - [d212aec] 2017-04-20 Added package type [@edgardmessias]
153 | - [c8357d5] 2016-07-06 fixed `AssetPackage::checkName()` [@hiqsol]
154 | - [25011fc] 2016-07-06 added `@composer` alias [@hiqsol]
155 | - [8ee6ad3] 2016-06-23 merged [@hiqsol]
156 | - [5935538] 2016-06-24 Merge pull request #9 from redcatphp/master [@hiqsol]
157 | - [4b7abfa] 2016-06-23 minor issues fixes from Jo Surikat [@hiqsol]
158 | - [75f260a] 2016-06-23 fixed getting Storage object [@hiqsol]
159 | - [b13b523] 2016-06-23 add missing getInstance, return excpected type when empty, check isset [jo@surikat.pro]
160 | - [2ea4464] 2016-06-23 csfixed [@hiqsol]
161 | - [38dba2f] 2016-06-23 Merge pull request #8 from redcatphp/master [@hiqsol]
162 | - [344c0d7] 2016-06-23 avoid undefined index "dist" or "source" error [jo@surikat.pro]
163 | - [e23568a] 2016-06-23 avoid undefined index "searchQuery" error [jo@surikat.pro]
164 | - [ec4c66d] 2016-06-23 improved storage create and chmod [@hiqsol]
165 | - [5939201] 2016-06-23 + packageStorage component to hidev config [@hiqsol]
166 | - [f105752] 2016-06-23 Merge pull request #6 from redcatphp/master [@hiqsol]
167 | - [78ca261] 2016-06-23 typo fix class hiqdev\assetpackagist\components\AssetPackage not found [jo@surikat.pro]
168 | - [4986993] 2016-06-16 fixed #3 removed search option from packages.json [@hiqsol]
169 | - [5138f54] 2016-06-16 added displaying last updated at package details [@hiqsol]
170 | - [d35611e] 2016-06-16 fixed problems with character case [@hiqsol]
171 | - [ecf5aef] 2016-06-16 removed breadcrumbs [@hiqsol]
172 | - [5be5f6b] 2016-09-29 moved and moved menus to own folder [@hiqsol]
173 | - [ddfa3ac] 2016-09-29 + more ignores [@hiqsol]
174 | - [224f496] 2016-09-29 csfixed [@hiqsol]
175 | - [db4966b] 2016-09-01 used PoweredBy widget [@hiqsol]
176 | - [e69ed1c] 2016-08-31 redoing to hisite [@hiqsol]
177 | - [b5b2fa7] 2016-08-22 + footer menu [@hiqsol]
178 | - [41033a6] 2016-08-22 + standart actions: error and captcha [@hiqsol]
179 | - [e72a72a] 2016-08-22 + require `yii2-pnotify` [@hiqsol]
180 | - [6452275] 2016-08-22 added noTitle param for flat theme [@hiqsol]
181 | - [cf3855f] 2016-08-22 added menu, simplified config [@hiqsol]
182 | - [62c099e] 2016-08-21 + require hisite-core and themes [@hiqsol]
183 | - [442259c] 2016-08-20 + `session_write_close` in site/update [@hiqsol]
184 | - [55e1777] 2016-08-13 redone bumping to use `chkipper` [@hiqsol]
185 |
186 | ## [0.1.0] - 2016-05-31
187 |
188 | - Fixed minor issues for first release
189 | - [4471376] 2016-05-30 + notFound page [@hiqsol]
190 | - [1f862c1] 2016-05-30 + buildPackageUrl() [@hiqsol]
191 | - [80fb19c] 2016-05-26 fixing chmod-storage goal [@hiqsol]
192 | - [6f6392a] 2016-05-26 added aliases to composer-config-plugin [@hiqsol]
193 | - [ffd2ad5] 2016-05-26 redoing to composer-config-plugin [@hiqsol]
194 | - [a1478ad] 2016-05-26 redoing to `composer-config-plugin` [@hiqsol]
195 | - [133a210] 2016-05-05 fixed dependencies constraints [@hiqsol]
196 | - [e0c6316] 2016-05-04 added `params-local.php` [@hiqsol]
197 | - [305b331] 2016-05-04 fixed version constraints [@hiqsol]
198 | - [fcfa683] 2016-05-04 Merge pull request #1 from samdark/patch-1 [@hiqsol]
199 | - [fa7bcae] 2016-05-04 Better front page wording [sam@rmcreative.ru]
200 | - [a90a482] 2016-05-04 fixed version constraints [@hiqsol]
201 | - Implemented package details page
202 | - [5fad211] 2016-05-19 Implemented package details page [@SilverFire]
203 | - [2195919] 2016-05-19 Update styles [@SilverFire]
204 | - [00e23b9] 2016-05-18 Fixed search form submit url [@SilverFire]
205 | - [f3f873f] 2016-05-18 Implemented package update from the we application [@SilverFire]
206 | - [7183235] 2016-05-17 Added passing of searchQuery to view params [@SilverFire]
207 | - Added and improved texts and package description
208 | - [97e289c] 2016-05-14 added empty counters template to be themed in real site [@hiqsol]
209 | - [9b6ed61] 2016-05-14 added Usage description [@hiqsol]
210 | - [00ff6f1] 2016-05-14 improved description: added logo [@hiqsol]
211 | - [7baf614] 2016-05-14 added package description [@hiqsol]
212 | - [cfb3ae4] 2016-05-14 fixed dependencies [@hiqsol]
213 | - [dd4f37d] 2016-05-14 removed web dir [@hiqsol]
214 | - [71631fe] 2016-05-14 added/improved texts [@hiqsol]
215 | - [63c7c89] 2016-05-12 Added error handling for asset-package/update and update-list [@SilverFire]
216 | - [c9bd8a4] 2016-05-12 Updated PHPDocs, minor [@SilverFire]
217 | - Added Top-1000 Bower packages
218 | - [591f219] 2016-05-12 Added try/catch to AssetPackageController::actionUpdate [@SilverFire]
219 | - [e01d992] 2016-05-11 Added creating of runtime directory in BowerPackageController [@SilverFire]
220 | - [f66e733] 2016-05-11 Added BowerPackageController and actionFetchTop [@SilverFire]
221 | - [082935a] 2016-05-11 Added TOP-100 Bower components to bower.list [@SilverFire]
222 | - [2728344] 2016-05-11 Updated composer.json - added guzzle dependency [@SilverFire]
223 | - [26c30b0] 2016-05-11 Fixed wrong namespaces in Locker; [@SilverFire]
224 | - [4e28d86] 2016-05-11 Updated Usage block on index.php [@SilverFire]
225 | - [9499664] 2016-05-10 + `asset-package/update-all` action [@hiqsol]
226 | - [b4d5c47] 2016-05-10 fixed default lastId [@hiqsol]
227 | - [4678f67] 2016-05-10 removed obsolete PackagesController [@hiqsol]
228 | - [54a8f54] 2016-05-10 added check exitcode when running hidev update package [@hiqsol]
229 | - Changed: rearranged config files to new scheme
230 | - [c77aa60] 2016-05-10 fixed typo [@hiqsol]
231 | - [569947f] 2016-05-10 + `chmod-storage` goal [@hiqsol]
232 | - [b4cf57b] 2016-05-10 still rearranging configs [@hiqsol]
233 | - [c9665bb] 2016-05-10 csfixed [@hiqsol]
234 | - [6a38eb9] 2016-05-10 still rearranging configs [@hiqsol]
235 | - [54ede7d] 2016-05-09 added `config/common.php` [@hiqsol]
236 | - [46631a7] 2016-05-09 redone configs to hidev and hisite [@hiqsol]
237 | - [d2e0f0f] 2016-05-09 moved logos to AppAsset [@hiqsol]
238 | - Changed: redone to `hiqdev/asset-packagist`
239 | - [a85830f] 2016-05-08 changed to hisite-config [@hiqsol]
240 | - [f6aa46d] 2016-05-08 csfixed [@hiqsol]
241 | - [9f7d0b6] 2016-05-08 + hisite-web extension config [@hiqsol]
242 | - [cf2d54d] 2016-05-07 fixed asset-packagist/test action to check storage dir existance [@hiqsol]
243 | - [e7be6b1] 2016-05-05 redone to `hiqdev/asset-packagist` [@hiqsol]
244 | - [08aeb23] 2016-05-05 splitted out `.hidev/goals.yml` [@hiqsol]
245 | - Added list operations
246 | - [1af8dc9] 2016-05-05 + `packages.list` instead of `min_packages.sh` [@hiqsol]
247 | - [37d40a7] 2016-05-05 + list and update-list actions [@hiqsol]
248 | - [a6214a3] 2016-05-05 + read and list functions [@hiqsol]
249 | - [2460d3e] 2016-05-05 + AssetPackage::splitFullName [@hiqsol]
250 | - Added search
251 | - [8afec1f] 2016-04-25 fixed tests [@hiqsol]
252 | - [01d5501] 2016-04-25 + search. it all works now [@hiqsol]
253 | - [f9c3cb1] 2016-04-25 + storage and clean-storage goals [@hiqsol]
254 | - [411bbea] 2016-04-25 + ignore storage files [@hiqsol]
255 | - [d84636c] 2016-04-25 used local hidev [@hiqsol]
256 | - [868e934] 2016-04-24 added `buildHashedPath` [@hiqsol]
257 | - Chandged: redone with `Storage` and `Locker`
258 | - [a48dfb0] 2016-04-24 renamed `do` goal -> `asset-packagist` in `min_packages.sh` [@hiqsol]
259 | - [9a1769d] 2016-04-24 redone buildPath and used Locker [@hiqsol]
260 | - [9f38225] 2016-04-24 added locking [@hiqsol]
261 | - [12b17af] 2016-04-23 renamed `do` goal -> `asset-packagist` [@hiqsol]
262 | - [f9dfeee] 2016-04-23 still redoing with `Storage` NOT FINISHED [@hiqsol]
263 | - [0deab6f] 2016-04-23 inited tests [@hiqsol]
264 | - [48f69b5] 2016-04-23 redoing storage BROKEN [@hiqsol]
265 | - [3134a13] 2016-04-17 + search form [@hiqsol]
266 | - [2a6f9ff] 2016-04-16 + downloaded logos [@hiqsol]
267 | - [afcfcce] 2016-04-16 + bower matchheight to `min_packages` [@hiqsol]
268 | - Added basics
269 | - [ac04710] 2016-04-15 redone to local hidev installation [@hiqsol]
270 | - [9b89c15] 2016-04-15 moved DoController to console dir [@hiqsol]
271 | - [d75181d] 2016-04-15 + set main package alias to bootstrap [@hiqsol]
272 | - [54434bf] 2016-04-10 phpcsfixed [@hiqsol]
273 | - [065c211] 2016-04-10 added basic site pages [@hiqsol]
274 | - [52d05bd] 2016-04-10 used asset-packagist [@hiqsol]
275 | - [519b20d] 2016-04-06 phpcsfixed [@hiqsol]
276 | - [a292a67] 2016-04-06 refactored with fxp registries [@hiqsol]
277 | - [4dfea1c] 2016-04-04 phpcsfixed [@hiqsol]
278 | - [5b163f7] 2016-04-04 inited tests [@hiqsol]
279 | - [8960530] 2016-04-04 + ssl [@hiqsol]
280 | - [b0747e6] 2016-04-04 + `min_packages.sh` [@hiqsol]
281 | - [6e6e8dc] 2016-04-04 small fix [@hiqsol]
282 | - [f0f0054] 2016-04-04 something working [@hiqsol]
283 | - [2d9e89f] 2016-04-02 inited [@hiqsol]
284 |
285 | ## [Development started] - 2016-04-02
286 |
287 | [zhuravljov/yii2-queue]: https://github.com/zhuravljov/yii2-queue
288 | [fxpio/composer-asset-plugin]: https://github.com/fxpio/composer-asset-plugin
289 | [@hiqsol]: https://github.com/hiqsol
290 | [sol@hiqdev.com]: https://github.com/hiqsol
291 | [@SilverFire]: https://github.com/SilverFire
292 | [d.naumenko.a@gmail.com]: https://github.com/SilverFire
293 | [@tafid]: https://github.com/tafid
294 | [andreyklochok@gmail.com]: https://github.com/tafid
295 | [@BladeRoot]: https://github.com/BladeRoot
296 | [bladeroot@gmail.com]: https://github.com/BladeRoot
297 | [@edgardmessias]: https://github.com/edgardmessias
298 | [edgardmessias@gmail.com]: https://github.com/edgardmessias
299 | [@zhuravljov]: https://github.com/zhuravljov
300 | [zhuravljov@gmail.com]: https://github.com/zhuravljov
301 | [4471376]: https://github.com/hiqdev/asset-packagist/commit/4471376
302 | [1f862c1]: https://github.com/hiqdev/asset-packagist/commit/1f862c1
303 | [80fb19c]: https://github.com/hiqdev/asset-packagist/commit/80fb19c
304 | [6f6392a]: https://github.com/hiqdev/asset-packagist/commit/6f6392a
305 | [ffd2ad5]: https://github.com/hiqdev/asset-packagist/commit/ffd2ad5
306 | [a1478ad]: https://github.com/hiqdev/asset-packagist/commit/a1478ad
307 | [133a210]: https://github.com/hiqdev/asset-packagist/commit/133a210
308 | [e0c6316]: https://github.com/hiqdev/asset-packagist/commit/e0c6316
309 | [305b331]: https://github.com/hiqdev/asset-packagist/commit/305b331
310 | [fcfa683]: https://github.com/hiqdev/asset-packagist/commit/fcfa683
311 | [fa7bcae]: https://github.com/hiqdev/asset-packagist/commit/fa7bcae
312 | [a90a482]: https://github.com/hiqdev/asset-packagist/commit/a90a482
313 | [5fad211]: https://github.com/hiqdev/asset-packagist/commit/5fad211
314 | [2195919]: https://github.com/hiqdev/asset-packagist/commit/2195919
315 | [00e23b9]: https://github.com/hiqdev/asset-packagist/commit/00e23b9
316 | [f3f873f]: https://github.com/hiqdev/asset-packagist/commit/f3f873f
317 | [7183235]: https://github.com/hiqdev/asset-packagist/commit/7183235
318 | [97e289c]: https://github.com/hiqdev/asset-packagist/commit/97e289c
319 | [9b6ed61]: https://github.com/hiqdev/asset-packagist/commit/9b6ed61
320 | [00ff6f1]: https://github.com/hiqdev/asset-packagist/commit/00ff6f1
321 | [7baf614]: https://github.com/hiqdev/asset-packagist/commit/7baf614
322 | [cfb3ae4]: https://github.com/hiqdev/asset-packagist/commit/cfb3ae4
323 | [dd4f37d]: https://github.com/hiqdev/asset-packagist/commit/dd4f37d
324 | [71631fe]: https://github.com/hiqdev/asset-packagist/commit/71631fe
325 | [63c7c89]: https://github.com/hiqdev/asset-packagist/commit/63c7c89
326 | [c9bd8a4]: https://github.com/hiqdev/asset-packagist/commit/c9bd8a4
327 | [591f219]: https://github.com/hiqdev/asset-packagist/commit/591f219
328 | [e01d992]: https://github.com/hiqdev/asset-packagist/commit/e01d992
329 | [f66e733]: https://github.com/hiqdev/asset-packagist/commit/f66e733
330 | [082935a]: https://github.com/hiqdev/asset-packagist/commit/082935a
331 | [2728344]: https://github.com/hiqdev/asset-packagist/commit/2728344
332 | [26c30b0]: https://github.com/hiqdev/asset-packagist/commit/26c30b0
333 | [4e28d86]: https://github.com/hiqdev/asset-packagist/commit/4e28d86
334 | [9499664]: https://github.com/hiqdev/asset-packagist/commit/9499664
335 | [b4d5c47]: https://github.com/hiqdev/asset-packagist/commit/b4d5c47
336 | [4678f67]: https://github.com/hiqdev/asset-packagist/commit/4678f67
337 | [54a8f54]: https://github.com/hiqdev/asset-packagist/commit/54a8f54
338 | [c77aa60]: https://github.com/hiqdev/asset-packagist/commit/c77aa60
339 | [569947f]: https://github.com/hiqdev/asset-packagist/commit/569947f
340 | [b4cf57b]: https://github.com/hiqdev/asset-packagist/commit/b4cf57b
341 | [c9665bb]: https://github.com/hiqdev/asset-packagist/commit/c9665bb
342 | [6a38eb9]: https://github.com/hiqdev/asset-packagist/commit/6a38eb9
343 | [54ede7d]: https://github.com/hiqdev/asset-packagist/commit/54ede7d
344 | [46631a7]: https://github.com/hiqdev/asset-packagist/commit/46631a7
345 | [d2e0f0f]: https://github.com/hiqdev/asset-packagist/commit/d2e0f0f
346 | [a85830f]: https://github.com/hiqdev/asset-packagist/commit/a85830f
347 | [f6aa46d]: https://github.com/hiqdev/asset-packagist/commit/f6aa46d
348 | [9f7d0b6]: https://github.com/hiqdev/asset-packagist/commit/9f7d0b6
349 | [cf2d54d]: https://github.com/hiqdev/asset-packagist/commit/cf2d54d
350 | [e7be6b1]: https://github.com/hiqdev/asset-packagist/commit/e7be6b1
351 | [08aeb23]: https://github.com/hiqdev/asset-packagist/commit/08aeb23
352 | [1af8dc9]: https://github.com/hiqdev/asset-packagist/commit/1af8dc9
353 | [37d40a7]: https://github.com/hiqdev/asset-packagist/commit/37d40a7
354 | [a6214a3]: https://github.com/hiqdev/asset-packagist/commit/a6214a3
355 | [2460d3e]: https://github.com/hiqdev/asset-packagist/commit/2460d3e
356 | [8afec1f]: https://github.com/hiqdev/asset-packagist/commit/8afec1f
357 | [01d5501]: https://github.com/hiqdev/asset-packagist/commit/01d5501
358 | [f9c3cb1]: https://github.com/hiqdev/asset-packagist/commit/f9c3cb1
359 | [411bbea]: https://github.com/hiqdev/asset-packagist/commit/411bbea
360 | [d84636c]: https://github.com/hiqdev/asset-packagist/commit/d84636c
361 | [868e934]: https://github.com/hiqdev/asset-packagist/commit/868e934
362 | [a48dfb0]: https://github.com/hiqdev/asset-packagist/commit/a48dfb0
363 | [9a1769d]: https://github.com/hiqdev/asset-packagist/commit/9a1769d
364 | [9f38225]: https://github.com/hiqdev/asset-packagist/commit/9f38225
365 | [12b17af]: https://github.com/hiqdev/asset-packagist/commit/12b17af
366 | [f9dfeee]: https://github.com/hiqdev/asset-packagist/commit/f9dfeee
367 | [0deab6f]: https://github.com/hiqdev/asset-packagist/commit/0deab6f
368 | [48f69b5]: https://github.com/hiqdev/asset-packagist/commit/48f69b5
369 | [3134a13]: https://github.com/hiqdev/asset-packagist/commit/3134a13
370 | [2a6f9ff]: https://github.com/hiqdev/asset-packagist/commit/2a6f9ff
371 | [afcfcce]: https://github.com/hiqdev/asset-packagist/commit/afcfcce
372 | [ac04710]: https://github.com/hiqdev/asset-packagist/commit/ac04710
373 | [9b89c15]: https://github.com/hiqdev/asset-packagist/commit/9b89c15
374 | [d75181d]: https://github.com/hiqdev/asset-packagist/commit/d75181d
375 | [54434bf]: https://github.com/hiqdev/asset-packagist/commit/54434bf
376 | [065c211]: https://github.com/hiqdev/asset-packagist/commit/065c211
377 | [52d05bd]: https://github.com/hiqdev/asset-packagist/commit/52d05bd
378 | [519b20d]: https://github.com/hiqdev/asset-packagist/commit/519b20d
379 | [a292a67]: https://github.com/hiqdev/asset-packagist/commit/a292a67
380 | [4dfea1c]: https://github.com/hiqdev/asset-packagist/commit/4dfea1c
381 | [5b163f7]: https://github.com/hiqdev/asset-packagist/commit/5b163f7
382 | [8960530]: https://github.com/hiqdev/asset-packagist/commit/8960530
383 | [b0747e6]: https://github.com/hiqdev/asset-packagist/commit/b0747e6
384 | [6e6e8dc]: https://github.com/hiqdev/asset-packagist/commit/6e6e8dc
385 | [f0f0054]: https://github.com/hiqdev/asset-packagist/commit/f0f0054
386 | [2d9e89f]: https://github.com/hiqdev/asset-packagist/commit/2d9e89f
387 | [03c8992]: https://github.com/hiqdev/asset-packagist/commit/03c8992
388 | [c8357d5]: https://github.com/hiqdev/asset-packagist/commit/c8357d5
389 | [25011fc]: https://github.com/hiqdev/asset-packagist/commit/25011fc
390 | [8ee6ad3]: https://github.com/hiqdev/asset-packagist/commit/8ee6ad3
391 | [5935538]: https://github.com/hiqdev/asset-packagist/commit/5935538
392 | [4b7abfa]: https://github.com/hiqdev/asset-packagist/commit/4b7abfa
393 | [75f260a]: https://github.com/hiqdev/asset-packagist/commit/75f260a
394 | [b13b523]: https://github.com/hiqdev/asset-packagist/commit/b13b523
395 | [2ea4464]: https://github.com/hiqdev/asset-packagist/commit/2ea4464
396 | [38dba2f]: https://github.com/hiqdev/asset-packagist/commit/38dba2f
397 | [344c0d7]: https://github.com/hiqdev/asset-packagist/commit/344c0d7
398 | [e23568a]: https://github.com/hiqdev/asset-packagist/commit/e23568a
399 | [ec4c66d]: https://github.com/hiqdev/asset-packagist/commit/ec4c66d
400 | [5939201]: https://github.com/hiqdev/asset-packagist/commit/5939201
401 | [f105752]: https://github.com/hiqdev/asset-packagist/commit/f105752
402 | [78ca261]: https://github.com/hiqdev/asset-packagist/commit/78ca261
403 | [4986993]: https://github.com/hiqdev/asset-packagist/commit/4986993
404 | [5138f54]: https://github.com/hiqdev/asset-packagist/commit/5138f54
405 | [2dd8b25]: https://github.com/hiqdev/asset-packagist/commit/2dd8b25
406 | [d35611e]: https://github.com/hiqdev/asset-packagist/commit/d35611e
407 | [ecf5aef]: https://github.com/hiqdev/asset-packagist/commit/ecf5aef
408 | [a607125]: https://github.com/hiqdev/asset-packagist/commit/a607125
409 | [e3cb136]: https://github.com/hiqdev/asset-packagist/commit/e3cb136
410 | [257eb43]: https://github.com/hiqdev/asset-packagist/commit/257eb43
411 | [a96ef4b]: https://github.com/hiqdev/asset-packagist/commit/a96ef4b
412 | [ec7bbcd]: https://github.com/hiqdev/asset-packagist/commit/ec7bbcd
413 | [bd5dca3]: https://github.com/hiqdev/asset-packagist/commit/bd5dca3
414 | [cfd2352]: https://github.com/hiqdev/asset-packagist/commit/cfd2352
415 | [e14172c]: https://github.com/hiqdev/asset-packagist/commit/e14172c
416 | [a5fb28b]: https://github.com/hiqdev/asset-packagist/commit/a5fb28b
417 | [e22d364]: https://github.com/hiqdev/asset-packagist/commit/e22d364
418 | [7d20e30]: https://github.com/hiqdev/asset-packagist/commit/7d20e30
419 | [bdc0fb1]: https://github.com/hiqdev/asset-packagist/commit/bdc0fb1
420 | [0437aee]: https://github.com/hiqdev/asset-packagist/commit/0437aee
421 | [1c947e1]: https://github.com/hiqdev/asset-packagist/commit/1c947e1
422 | [d4fee59]: https://github.com/hiqdev/asset-packagist/commit/d4fee59
423 | [87e2662]: https://github.com/hiqdev/asset-packagist/commit/87e2662
424 | [5a70619]: https://github.com/hiqdev/asset-packagist/commit/5a70619
425 | [bb771de]: https://github.com/hiqdev/asset-packagist/commit/bb771de
426 | [a0562a3]: https://github.com/hiqdev/asset-packagist/commit/a0562a3
427 | [59e4260]: https://github.com/hiqdev/asset-packagist/commit/59e4260
428 | [d34e57b]: https://github.com/hiqdev/asset-packagist/commit/d34e57b
429 | [e547396]: https://github.com/hiqdev/asset-packagist/commit/e547396
430 | [5de31be]: https://github.com/hiqdev/asset-packagist/commit/5de31be
431 | [bb6c7ad]: https://github.com/hiqdev/asset-packagist/commit/bb6c7ad
432 | [90d9aee]: https://github.com/hiqdev/asset-packagist/commit/90d9aee
433 | [5918e90]: https://github.com/hiqdev/asset-packagist/commit/5918e90
434 | [73f4c57]: https://github.com/hiqdev/asset-packagist/commit/73f4c57
435 | [de93971]: https://github.com/hiqdev/asset-packagist/commit/de93971
436 | [d212aec]: https://github.com/hiqdev/asset-packagist/commit/d212aec
437 | [7fb4ac1]: https://github.com/hiqdev/asset-packagist/commit/7fb4ac1
438 | [9e4c259]: https://github.com/hiqdev/asset-packagist/commit/9e4c259
439 | [399d379]: https://github.com/hiqdev/asset-packagist/commit/399d379
440 | [0afdfd2]: https://github.com/hiqdev/asset-packagist/commit/0afdfd2
441 | [1a3454c]: https://github.com/hiqdev/asset-packagist/commit/1a3454c
442 | [c0bfeb1]: https://github.com/hiqdev/asset-packagist/commit/c0bfeb1
443 | [6330bce]: https://github.com/hiqdev/asset-packagist/commit/6330bce
444 | [dc4ccd1]: https://github.com/hiqdev/asset-packagist/commit/dc4ccd1
445 | [9eb09aa]: https://github.com/hiqdev/asset-packagist/commit/9eb09aa
446 | [cb803cb]: https://github.com/hiqdev/asset-packagist/commit/cb803cb
447 | [5ff526c]: https://github.com/hiqdev/asset-packagist/commit/5ff526c
448 | [9515fd0]: https://github.com/hiqdev/asset-packagist/commit/9515fd0
449 | [bc20b98]: https://github.com/hiqdev/asset-packagist/commit/bc20b98
450 | [e482226]: https://github.com/hiqdev/asset-packagist/commit/e482226
451 | [d1130a1]: https://github.com/hiqdev/asset-packagist/commit/d1130a1
452 | [22ab667]: https://github.com/hiqdev/asset-packagist/commit/22ab667
453 | [5a29a01]: https://github.com/hiqdev/asset-packagist/commit/5a29a01
454 | [5be5f6b]: https://github.com/hiqdev/asset-packagist/commit/5be5f6b
455 | [ddfa3ac]: https://github.com/hiqdev/asset-packagist/commit/ddfa3ac
456 | [224f496]: https://github.com/hiqdev/asset-packagist/commit/224f496
457 | [db4966b]: https://github.com/hiqdev/asset-packagist/commit/db4966b
458 | [e69ed1c]: https://github.com/hiqdev/asset-packagist/commit/e69ed1c
459 | [b5b2fa7]: https://github.com/hiqdev/asset-packagist/commit/b5b2fa7
460 | [41033a6]: https://github.com/hiqdev/asset-packagist/commit/41033a6
461 | [e72a72a]: https://github.com/hiqdev/asset-packagist/commit/e72a72a
462 | [6452275]: https://github.com/hiqdev/asset-packagist/commit/6452275
463 | [cf3855f]: https://github.com/hiqdev/asset-packagist/commit/cf3855f
464 | [62c099e]: https://github.com/hiqdev/asset-packagist/commit/62c099e
465 | [442259c]: https://github.com/hiqdev/asset-packagist/commit/442259c
466 | [55e1777]: https://github.com/hiqdev/asset-packagist/commit/55e1777
467 | [Under development]: https://github.com/hiqdev/asset-packagist/compare/1.0.0...HEAD
468 | [0.1.0]: https://github.com/hiqdev/asset-packagist/releases/tag/0.1.0
469 | [257b2f5]: https://github.com/hiqdev/asset-packagist/commit/257b2f5
470 | [5b5f435]: https://github.com/hiqdev/asset-packagist/commit/5b5f435
471 | [b1a7d9c]: https://github.com/hiqdev/asset-packagist/commit/b1a7d9c
472 | [d8b5b87]: https://github.com/hiqdev/asset-packagist/commit/d8b5b87
473 | [eabafbb]: https://github.com/hiqdev/asset-packagist/commit/eabafbb
474 | [c95600b]: https://github.com/hiqdev/asset-packagist/commit/c95600b
475 | [0aa27f6]: https://github.com/hiqdev/asset-packagist/commit/0aa27f6
476 | [2c47200]: https://github.com/hiqdev/asset-packagist/commit/2c47200
477 | [4c94e8f]: https://github.com/hiqdev/asset-packagist/commit/4c94e8f
478 | [122874e]: https://github.com/hiqdev/asset-packagist/commit/122874e
479 | [b850cba]: https://github.com/hiqdev/asset-packagist/commit/b850cba
480 | [ace352d]: https://github.com/hiqdev/asset-packagist/commit/ace352d
481 | [7c5d01d]: https://github.com/hiqdev/asset-packagist/commit/7c5d01d
482 | [5390524]: https://github.com/hiqdev/asset-packagist/commit/5390524
483 | [a72bade]: https://github.com/hiqdev/asset-packagist/commit/a72bade
484 | [7a3380c]: https://github.com/hiqdev/asset-packagist/commit/7a3380c
485 | [d89b68c]: https://github.com/hiqdev/asset-packagist/commit/d89b68c
486 | [b781661]: https://github.com/hiqdev/asset-packagist/commit/b781661
487 | [6438a47]: https://github.com/hiqdev/asset-packagist/commit/6438a47
488 | [b599663]: https://github.com/hiqdev/asset-packagist/commit/b599663
489 | [b07d11b]: https://github.com/hiqdev/asset-packagist/commit/b07d11b
490 | [1aa2d23]: https://github.com/hiqdev/asset-packagist/commit/1aa2d23
491 | [404f689]: https://github.com/hiqdev/asset-packagist/commit/404f689
492 | [c226cff]: https://github.com/hiqdev/asset-packagist/commit/c226cff
493 | [7f43b83]: https://github.com/hiqdev/asset-packagist/commit/7f43b83
494 | [1ed2835]: https://github.com/hiqdev/asset-packagist/commit/1ed2835
495 | [5b0a29f]: https://github.com/hiqdev/asset-packagist/commit/5b0a29f
496 | [f5f7713]: https://github.com/hiqdev/asset-packagist/commit/f5f7713
497 | [9a8db4a]: https://github.com/hiqdev/asset-packagist/commit/9a8db4a
498 | [edcc58c]: https://github.com/hiqdev/asset-packagist/commit/edcc58c
499 | [f87848c]: https://github.com/hiqdev/asset-packagist/commit/f87848c
500 | [0ea6a4a]: https://github.com/hiqdev/asset-packagist/commit/0ea6a4a
501 | [1ae0b89]: https://github.com/hiqdev/asset-packagist/commit/1ae0b89
502 | [76f75df]: https://github.com/hiqdev/asset-packagist/commit/76f75df
503 | [383e494]: https://github.com/hiqdev/asset-packagist/commit/383e494
504 | [85a5314]: https://github.com/hiqdev/asset-packagist/commit/85a5314
505 | [cd0f3cc]: https://github.com/hiqdev/asset-packagist/commit/cd0f3cc
506 | [b76fbcd]: https://github.com/hiqdev/asset-packagist/commit/b76fbcd
507 | [dc47aff]: https://github.com/hiqdev/asset-packagist/commit/dc47aff
508 | [8542c16]: https://github.com/hiqdev/asset-packagist/commit/8542c16
509 | [863dea3]: https://github.com/hiqdev/asset-packagist/commit/863dea3
510 | [1f0abde]: https://github.com/hiqdev/asset-packagist/commit/1f0abde
511 | [035f1ea]: https://github.com/hiqdev/asset-packagist/commit/035f1ea
512 | [6f7aaae]: https://github.com/hiqdev/asset-packagist/commit/6f7aaae
513 | [ab5e2bd]: https://github.com/hiqdev/asset-packagist/commit/ab5e2bd
514 | [33befd4]: https://github.com/hiqdev/asset-packagist/commit/33befd4
515 | [856c104]: https://github.com/hiqdev/asset-packagist/commit/856c104
516 | [6aa8285]: https://github.com/hiqdev/asset-packagist/commit/6aa8285
517 | [7f3a5b4]: https://github.com/hiqdev/asset-packagist/commit/7f3a5b4
518 | [bbbb7b5]: https://github.com/hiqdev/asset-packagist/commit/bbbb7b5
519 | [ca928cf]: https://github.com/hiqdev/asset-packagist/commit/ca928cf
520 | [cd5c912]: https://github.com/hiqdev/asset-packagist/commit/cd5c912
521 | [300594c]: https://github.com/hiqdev/asset-packagist/commit/300594c
522 | [88b96a6]: https://github.com/hiqdev/asset-packagist/commit/88b96a6
523 | [843800f]: https://github.com/hiqdev/asset-packagist/commit/843800f
524 | [e1f21c7]: https://github.com/hiqdev/asset-packagist/commit/e1f21c7
525 | [92c0fd7]: https://github.com/hiqdev/asset-packagist/commit/92c0fd7
526 | [0365f77]: https://github.com/hiqdev/asset-packagist/commit/0365f77
527 | [27ad14d]: https://github.com/hiqdev/asset-packagist/commit/27ad14d
528 | [be126d4]: https://github.com/hiqdev/asset-packagist/commit/be126d4
529 | [eb5f5d9]: https://github.com/hiqdev/asset-packagist/commit/eb5f5d9
530 | [9f54f52]: https://github.com/hiqdev/asset-packagist/commit/9f54f52
531 | [2ba21ee]: https://github.com/hiqdev/asset-packagist/commit/2ba21ee
532 | [9b7d7ff]: https://github.com/hiqdev/asset-packagist/commit/9b7d7ff
533 | [052b795]: https://github.com/hiqdev/asset-packagist/commit/052b795
534 | [eb93960]: https://github.com/hiqdev/asset-packagist/commit/eb93960
535 | [ea55b5c]: https://github.com/hiqdev/asset-packagist/commit/ea55b5c
536 | [8a5882e]: https://github.com/hiqdev/asset-packagist/commit/8a5882e
537 | [a5f52c5]: https://github.com/hiqdev/asset-packagist/commit/a5f52c5
538 | [f4dc2fc]: https://github.com/hiqdev/asset-packagist/commit/f4dc2fc
539 | [b2c50d1]: https://github.com/hiqdev/asset-packagist/commit/b2c50d1
540 | [38e5b4b]: https://github.com/hiqdev/asset-packagist/commit/38e5b4b
541 | [8ea9f6b]: https://github.com/hiqdev/asset-packagist/commit/8ea9f6b
542 | [68e6592]: https://github.com/hiqdev/asset-packagist/commit/68e6592
543 | [d428eef]: https://github.com/hiqdev/asset-packagist/commit/d428eef
544 | [2ec9f08]: https://github.com/hiqdev/asset-packagist/commit/2ec9f08
545 | [b9972eb]: https://github.com/hiqdev/asset-packagist/commit/b9972eb
546 | [9f04bf5]: https://github.com/hiqdev/asset-packagist/commit/9f04bf5
547 | [3511c98]: https://github.com/hiqdev/asset-packagist/commit/3511c98
548 | [18bfb40]: https://github.com/hiqdev/asset-packagist/commit/18bfb40
549 | [1.0.0]: https://github.com/hiqdev/asset-packagist/compare/0.1.0...1.0.0
550 | [c98c9fa]: https://github.com/hiqdev/asset-packagist/commit/c98c9fa
551 | [1.0.1]: https://github.com/hiqdev/asset-packagist/compare/1.0.0...1.0.1
552 |
--------------------------------------------------------------------------------