Compare commits
21 Commits
7f44d5161b
...
067715f857
Author | SHA1 | Date |
---|---|---|
Sophia Atkinson | 067715f857 | |
Daniel Brendel | 0cb555d5f5 | |
Daniel Brendel | 003513e728 | |
Daniel Brendel | 792331d5f4 | |
Daniel Brendel | 89928a88c3 | |
Daniel Brendel | fc0d1591ac | |
Daniel Brendel | 33f4b1175c | |
Daniel Brendel | b58fa084b9 | |
Daniel Brendel | f13e7fff35 | |
Daniel Brendel | 3ffc0d46f1 | |
Daniel Brendel | 183bc25253 | |
Daniel Brendel | 29ae462e11 | |
Daniel Brendel | 63af530e3c | |
Daniel Brendel | 99d6e8b2d0 | |
Daniel Brendel | 7ef44f9d3e | |
Daniel Brendel | fd904f4c31 | |
Daniel Brendel | 98e3e3fc64 | |
Daniel Brendel | f4a6c09fc9 | |
Daniel Brendel | 919832d5f3 | |
Daniel Brendel | 9e182fccd3 | |
Daniel Brendel | 3a0a025166 |
|
@ -14,7 +14,7 @@ APP_AUTHOR="Daniel Brendel"
|
|||
APP_CONTACT="dbrendel1988@gmail.com"
|
||||
APP_TITLE="${APP_NAME} - Integrate Steam Widgets into your website"
|
||||
APP_DESCRIPTION="Integrate Steam Widgets of your game/app into your website"
|
||||
APP_KEYWORDS="steam, widgets, steam widgets, steam game widget, steam app widget, steam server widget, steam player widget"
|
||||
APP_KEYWORDS="steam, widgets, steam widgets, steam game widget, steam app widget, steam server widget, steam player widget, steam group widget, steam workshop widget"
|
||||
APP_DEBUG=true
|
||||
APP_BASEDIR=""
|
||||
APP_TIMEZONE=null
|
||||
|
@ -57,6 +57,10 @@ DB_DATABASE=asatru
|
|||
DB_DRIVER=mysql
|
||||
DB_CHARSET="utf8"
|
||||
|
||||
# Caching
|
||||
CACHE_DRIVER=null
|
||||
CACHE_DURATION=512
|
||||
|
||||
# SMTP settings
|
||||
SMTP_FROMNAME="Test"
|
||||
SMTP_FROMADDRESS="test@domain.tld"
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
<?php
|
||||
|
||||
return [
|
||||
'driver' => env('CACHE_DRIVER', null),
|
||||
'duration' => env('CACHE_DURATION', 123)
|
||||
];
|
|
@ -26,7 +26,7 @@ class ApiController extends BaseController {
|
|||
$appid = $request->params()->query('appid', null);
|
||||
$language = $request->params()->query('lang', 'english');
|
||||
|
||||
$data = SteamApp::querySteamData($appid, $language);
|
||||
$data = SteamCache::cachedSteamApp($appid, $language);
|
||||
|
||||
HitsModel::addHit(HitsModel::HITTYPE_MODULE_APP);
|
||||
|
||||
|
@ -47,7 +47,7 @@ class ApiController extends BaseController {
|
|||
try {
|
||||
$addr = $request->params()->query('addr', null);
|
||||
|
||||
$data = SteamServer::querySteamData(env('STEAM_API_KEY'), $addr);
|
||||
$data = SteamCache::cachedSteamServer(env('STEAM_API_KEY'), $addr);
|
||||
|
||||
HitsModel::addHit(HitsModel::HITTYPE_MODULE_SERVER);
|
||||
|
||||
|
@ -68,7 +68,7 @@ class ApiController extends BaseController {
|
|||
try {
|
||||
$steamid = $request->params()->query('steamid', null);
|
||||
|
||||
$data = SteamUser::querySteamData(env('STEAM_API_KEY'), $steamid);
|
||||
$data = SteamCache::cachedSteamUser(env('STEAM_API_KEY'), $steamid);
|
||||
|
||||
HitsModel::addHit(HitsModel::HITTYPE_MODULE_USER);
|
||||
|
||||
|
@ -89,7 +89,7 @@ class ApiController extends BaseController {
|
|||
try {
|
||||
$itemid = $request->params()->query('itemid', null);
|
||||
|
||||
$data = SteamWorkshop::querySteamData($itemid);
|
||||
$data = SteamCache::cachedSteamWorkshop($itemid);
|
||||
|
||||
HitsModel::addHit(HitsModel::HITTYPE_MODULE_WORKSHOP);
|
||||
|
||||
|
@ -110,7 +110,7 @@ class ApiController extends BaseController {
|
|||
try {
|
||||
$group = $request->params()->query('group', null);
|
||||
|
||||
$data = SteamGroup::querySteamData($group);
|
||||
$data = SteamCache::cachedSteamGroup($group);
|
||||
|
||||
HitsModel::addHit(HitsModel::HITTYPE_MODULE_GROUP);
|
||||
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
Asatru PHP - Migration vor Caching
|
||||
*/
|
||||
|
||||
class CacheModel_Migration {
|
||||
private $database = null;
|
||||
private $connection = null;
|
||||
|
||||
/**
|
||||
* Construct class and store PDO connection handle
|
||||
*
|
||||
* @param \PDO $pdo
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($pdo)
|
||||
{
|
||||
$this->connection = $pdo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the table shall be created or modified
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
$this->database = new Asatru\Database\Migration('CacheModel', $this->connection);
|
||||
$this->database->drop();
|
||||
$this->database->add('id INT NOT NULL AUTO_INCREMENT PRIMARY KEY');
|
||||
$this->database->add('ident VARCHAR(260) NOT NULL');
|
||||
$this->database->add('value BLOB NULL');
|
||||
$this->database->add('updated_at TIMESTAMP');
|
||||
$this->database->add('created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP');
|
||||
$this->database->create();
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the table shall be dropped
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
$this->database = new Asatru\Database\Migration('Cache', $this->connection);
|
||||
$this->database->drop();
|
||||
}
|
||||
}
|
|
@ -1 +1,4 @@
|
|||
47f3d3306fbd25715600db55b33b1542293ab5eb593205d6f5884bcaafa5d9a4627c76af04b684962c99a9518ef6b3d10e983203f6b5a8576912445d8f285fb7
|
||||
|
||||
cd19e5ec4a12d40d8d3ecdf267ef890e80fdd94ab28f81fddeb0c12b6f6b88773157e469c2d693abd4583e18b9b5a126c3fcecd6c07f4374c6c6e2837166b2ec
|
||||
|
||||
|
|
|
@ -0,0 +1,206 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
Asatru PHP - Model for Caching
|
||||
*/
|
||||
|
||||
class CacheModel extends \Asatru\Database\Model {
|
||||
/**
|
||||
* Obtain value either from cache or from closure
|
||||
*
|
||||
* @param string $ident The cache item identifier
|
||||
* @param int $timeInSeconds Amount of seconds the item shall be cached
|
||||
* @param $closure Function to be called for the actual value
|
||||
* @return mixed
|
||||
*/
|
||||
public static function remember($ident, $timeInSeconds, $closure)
|
||||
{
|
||||
$item = CacheModel::find($ident, 'ident');
|
||||
if ($item->count() == 0) {
|
||||
$value = $closure();
|
||||
|
||||
$data = array(
|
||||
'ident' => $ident,
|
||||
'value' => $value,
|
||||
'updated_at' => date('Y-m-d H:i:s')
|
||||
);
|
||||
|
||||
foreach ($data as $key => $val) {
|
||||
CacheModel::insert($key, $val);
|
||||
}
|
||||
|
||||
CacheModel::go();
|
||||
|
||||
return $value;
|
||||
} else {
|
||||
$data = $item->get(0);
|
||||
$dtLast = new DateTime(date('Y-m-d H:i:s', strtotime($data->get('updated_at'))));
|
||||
$dtLast->add(new DateInterval('PT' . $timeInSeconds . 'S'));
|
||||
$dtNow = new DateTime('now');
|
||||
|
||||
if ($dtNow < $dtLast) {
|
||||
return $data->get('value');
|
||||
} else {
|
||||
$value = $closure();
|
||||
|
||||
$updData = array(
|
||||
'value' => $value,
|
||||
'updated_at' => date('Y-m-d H:i:s')
|
||||
);
|
||||
|
||||
foreach ($updData as $key => $val) {
|
||||
CacheModel::update($key, $val);
|
||||
}
|
||||
|
||||
CacheModel::where('id', '=', $data->get('id'));
|
||||
|
||||
CacheModel::go();
|
||||
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Query an entire item
|
||||
*
|
||||
* @param $ident
|
||||
* @param $default
|
||||
* @return mixed
|
||||
*/
|
||||
public static function query($ident, $default = null)
|
||||
{
|
||||
$what = null;
|
||||
if (strpos($ident, '.') !== false) {
|
||||
$what = explode('.', $ident);
|
||||
}
|
||||
|
||||
$result = CacheModel::where('ident', '=', (((is_array($what)) && (count($what) > 0)) ? $what[0] : $ident))->first();
|
||||
if (!$result) {
|
||||
return $default;
|
||||
}
|
||||
|
||||
if ((is_array($what)) && (count($what) > 1)) {
|
||||
return $result->get($what[1]);
|
||||
}
|
||||
|
||||
return $result->get('value');
|
||||
}
|
||||
|
||||
/**
|
||||
* Check for item existence
|
||||
*
|
||||
* @param $ident
|
||||
* @return bool
|
||||
*/
|
||||
public static function has($ident)
|
||||
{
|
||||
$item = CacheModel::find($ident, 'ident');
|
||||
if ($item->count() > 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if item cache time is elapsed
|
||||
*
|
||||
* @param $ident
|
||||
* @param $timeInSeconds
|
||||
* @return bool
|
||||
*/
|
||||
public static function elapsed($ident, $timeInSeconds)
|
||||
{
|
||||
if (!CacheModel::has($ident)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$data = CacheModel::where('ident', '=', $ident)->first();
|
||||
|
||||
$dtLast = new DateTime(date('Y-m-d H:i:s', strtotime($data->get('updated_at'))));
|
||||
$dtLast->add(new DateInterval('PT' . $timeInSeconds . 'S'));
|
||||
$dtNow = new DateTime('now');
|
||||
|
||||
return ($dtNow >= $dtLast);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get item and then delete it
|
||||
*
|
||||
* @param $ident
|
||||
* @return mixed
|
||||
*/
|
||||
public static function pull($ident)
|
||||
{
|
||||
$item = CacheModel::find($ident, 'ident');
|
||||
if ($item->count() > 0) {
|
||||
$data = $item->get(0);
|
||||
|
||||
CacheModel::where('id', '=', $item->get(0)->get('id'))->delete();
|
||||
|
||||
return $data->get('value');
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write item to table
|
||||
*
|
||||
* @param $ident
|
||||
* @param $value
|
||||
* @return bool
|
||||
*/
|
||||
public static function put($ident, $value)
|
||||
{
|
||||
if (CacheModel::has($ident)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$data = array(
|
||||
'ident' => $ident,
|
||||
'value' => $value,
|
||||
'updated_at' => date('Y-m-d H:i:s')
|
||||
);
|
||||
|
||||
foreach ($data as $key => $val) {
|
||||
CacheModel::insert($key, $val);
|
||||
}
|
||||
|
||||
CacheModel::go();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Forget cache item
|
||||
*
|
||||
* @param string $ident The item identifier
|
||||
* @return bool
|
||||
*/
|
||||
public static function forget($ident)
|
||||
{
|
||||
$item = CacheModel::find($ident, 'ident');
|
||||
if ($item->count() > 0) {
|
||||
CacheModel::where('id', '=', $item->get(0)->get('id'))->delete();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the associated table name of the migration
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function tableName()
|
||||
{
|
||||
return 'CacheModel';
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* Class SteamCache
|
||||
*
|
||||
* Cached gateway to Steam Web API queries
|
||||
*/
|
||||
class SteamCache {
|
||||
/**
|
||||
* @param $appid
|
||||
* @param $lang
|
||||
* @return mixed
|
||||
*/
|
||||
public static function cachedSteamApp($appid, $lang)
|
||||
{
|
||||
$cache = config('cache');
|
||||
|
||||
if ($cache->driver === 'db') {
|
||||
return json_decode(CacheModel::remember('steam_app_' . $appid . '_' . $lang, $cache->duration, function() use ($appid, $lang) {
|
||||
return json_encode(SteamApp::querySteamData($appid, $lang));
|
||||
}));
|
||||
} else if ($cache->driver === 'redis') {
|
||||
throw new \Exception('Not implemented yet.');
|
||||
} else {
|
||||
return SteamApp::querySteamData($appid, $lang);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $key
|
||||
* @param $steamid
|
||||
* @return mixed
|
||||
*/
|
||||
public static function cachedSteamUser($key, $steamid)
|
||||
{
|
||||
$cache = config('cache');
|
||||
|
||||
if ($cache->driver === 'db') {
|
||||
return json_decode(CacheModel::remember('steam_user_' . $steamid, $cache->duration, function() use ($key, $steamid) {
|
||||
return json_encode(SteamUser::querySteamData($key, $steamid));
|
||||
}));
|
||||
} else if ($cache->driver === 'redis') {
|
||||
throw new \Exception('Not implemented yet.');
|
||||
} else {
|
||||
return SteamUser::querySteamData($key, $steamid);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $itemid
|
||||
* @return mixed
|
||||
*/
|
||||
public static function cachedSteamWorkshop($itemid)
|
||||
{
|
||||
$cache = config('cache');
|
||||
|
||||
if ($cache->driver === 'db') {
|
||||
return json_decode(CacheModel::remember('steam_workshop_' . $itemid, $cache->duration, function() use ($itemid) {
|
||||
return json_encode(SteamWorkshop::querySteamData($itemid));
|
||||
}));
|
||||
} else if ($cache->driver === 'redis') {
|
||||
throw new \Exception('Not implemented yet.');
|
||||
} else {
|
||||
return SteamWorkshop::querySteamData($itemid);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $group
|
||||
* @return mixed
|
||||
*/
|
||||
public static function cachedSteamGroup($group)
|
||||
{
|
||||
$cache = config('cache');
|
||||
|
||||
if ($cache->driver === 'db') {
|
||||
return json_decode(CacheModel::remember('steam_group_' . $group, $cache->duration, function() use ($group) {
|
||||
return json_encode(SteamGroup::querySteamData($group));
|
||||
}));
|
||||
} else if ($cache->driver === 'redis') {
|
||||
throw new \Exception('Not implemented yet.');
|
||||
} else {
|
||||
return SteamGroup::querySteamData($group);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $key
|
||||
* @param $addr
|
||||
* @return mixed
|
||||
*/
|
||||
public static function cachedSteamServer($key, $addr)
|
||||
{
|
||||
$cache = config('cache');
|
||||
|
||||
if ($cache->driver === 'db') {
|
||||
return json_decode(CacheModel::remember('steam_server_' . $addr, $cache->duration, function() use ($key, $addr) {
|
||||
return json_encode(SteamServer::querySteamData($key, $addr));
|
||||
}));
|
||||
} else if ($cache->driver === 'redis') {
|
||||
throw new \Exception('Not implemented yet.');
|
||||
} else {
|
||||
return SteamServer::querySteamData($key, $addr);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -97,6 +97,12 @@ a.navbar-burger:hover {
|
|||
height: 100%;
|
||||
}
|
||||
|
||||
.header-centered {
|
||||
@media screen and (min-width: 1089px) {
|
||||
transform: translateX(9.5%);
|
||||
}
|
||||
}
|
||||
|
||||
.header-content {
|
||||
position: relative;
|
||||
top: 50%;
|
||||
|
|
|
@ -653,7 +653,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||
</pre>
|
||||
|
||||
<br/><br/>
|
||||
This renders the following widget:<br/>
|
||||
This renders the following widget:<br/><br/>
|
||||
<steam-workshop itemid="{{ env('APP_EXAMPLE_WORKSHOP') }}"></steam-workshop>
|
||||
</p>
|
||||
|
||||
|
@ -842,7 +842,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||
</pre>
|
||||
|
||||
<br/><br/>
|
||||
This renders the following widget:<br/>
|
||||
This renders the following widget:<br/><br/>
|
||||
<steam-group group="{{ env('APP_EXAMPLE_GROUP') }}"></steam-group>
|
||||
</p>
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<div class="header">
|
||||
<div class="header-overlay">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="columns header-centered">
|
||||
<div class="column is-half">
|
||||
<div class="header-content">
|
||||
<h1 class="header-gradient">{{ env('APP_NAME') }}</h1>
|
||||
|
|
|
@ -853,16 +853,16 @@
|
|||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "8.5.37",
|
||||
"version": "8.5.38",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "fce30f306cee78be33ba00c8f9a853f41db0491b"
|
||||
"reference": "1ecad678646c817a29e55a32c930f3601c3f5a8c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fce30f306cee78be33ba00c8f9a853f41db0491b",
|
||||
"reference": "fce30f306cee78be33ba00c8f9a853f41db0491b",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1ecad678646c817a29e55a32c930f3601c3f5a8c",
|
||||
"reference": "1ecad678646c817a29e55a32c930f3601c3f5a8c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -931,7 +931,7 @@
|
|||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||
"security": "https://github.com/sebastianbergmann/phpunit/security/policy",
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.37"
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.38"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -947,7 +947,7 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2024-03-06T06:27:42+00:00"
|
||||
"time": "2024-04-05T04:31:23+00:00"
|
||||
},
|
||||
{
|
||||
"name": "predis/predis",
|
||||
|
|
|
@ -112,9 +112,9 @@
|
|||
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "20.12.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.3.tgz",
|
||||
"integrity": "sha512-sD+ia2ubTeWrOu+YMF+MTAB7E+O7qsMqAbMfW7DG3K1URwhZ5hN1pLlRVGbf4wDFzSfikL05M17EyorS86jShw==",
|
||||
"version": "20.12.4",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.4.tgz",
|
||||
"integrity": "sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==",
|
||||
"dependencies": {
|
||||
"undici-types": "~5.26.4"
|
||||
}
|
||||
|
@ -435,9 +435,9 @@
|
|||
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
|
||||
},
|
||||
"node_modules/caniuse-lite": {
|
||||
"version": "1.0.30001605",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz",
|
||||
"integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==",
|
||||
"version": "1.0.30001606",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz",
|
||||
"integrity": "sha512-LPbwnW4vfpJId225pwjZJOgX1m9sGfbw/RKJvw/t0QhYOOaTXHvkjVGFGPpvwEzufrjvTlsULnVTxdy4/6cqkg==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
|
@ -589,9 +589,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/electron-to-chromium": {
|
||||
"version": "1.4.724",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.724.tgz",
|
||||
"integrity": "sha512-RTRvkmRkGhNBPPpdrgtDKvmOEYTrPlXDfc0J/Nfq5s29tEahAwhiX4mmhNzj6febWMleulxVYPh7QwCSL/EldA=="
|
||||
"version": "1.4.728",
|
||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.728.tgz",
|
||||
"integrity": "sha512-Ud1v7hJJYIqehlUJGqR6PF1Ek8l80zWwxA6nGxigBsGJ9f9M2fciHyrIiNMerSHSH3p+0/Ia7jIlnDkt41h5cw=="
|
||||
},
|
||||
"node_modules/emojis-list": {
|
||||
"version": "3.0.0",
|
||||
|
@ -1246,9 +1246,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/postcss-modules-extract-imports": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
|
||||
"integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz",
|
||||
"integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^10 || ^12 || >= 14"
|
||||
|
@ -1258,9 +1258,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/postcss-modules-local-by-default": {
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.4.tgz",
|
||||
"integrity": "sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==",
|
||||
"version": "4.0.5",
|
||||
"resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz",
|
||||
"integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"icss-utils": "^5.0.0",
|
||||
|
@ -1275,9 +1275,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/postcss-modules-scope": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.1.1.tgz",
|
||||
"integrity": "sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==",
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz",
|
||||
"integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"postcss-selector-parser": "^6.0.4"
|
||||
|
@ -1426,9 +1426,9 @@
|
|||
]
|
||||
},
|
||||
"node_modules/sass": {
|
||||
"version": "1.72.0",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.72.0.tgz",
|
||||
"integrity": "sha512-Gpczt3WA56Ly0Mn8Sl21Vj94s1axi9hDIzDFn9Ph9x3C3p4nNyvsqJoQyVXKou6cBlfFWEgRW4rT8Tb4i3XnVA==",
|
||||
"version": "1.74.1",
|
||||
"resolved": "https://registry.npmjs.org/sass/-/sass-1.74.1.tgz",
|
||||
"integrity": "sha512-w0Z9p/rWZWelb88ISOLyvqTWGmtmu2QJICqDBGyNnfG4OUnPX9BBjjYIXUpXCMOOg5MQWNpqzt876la1fsTvUA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"chokidar": ">=3.0.0 <4.0.0",
|
||||
|
@ -1649,9 +1649,9 @@
|
|||
}
|
||||
},
|
||||
"node_modules/terser": {
|
||||
"version": "5.30.2",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.30.2.tgz",
|
||||
"integrity": "sha512-vTDjRKYKip4dOFL5VizdoxHTYDfEXPdz5t+FbxCC5Rp2s+KbEO8w5wqMDPgj7CtFKZuzq7PXv28fZoXfqqBVuw==",
|
||||
"version": "5.30.3",
|
||||
"resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz",
|
||||
"integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==",
|
||||
"dependencies": {
|
||||
"@jridgewell/source-map": "^0.3.3",
|
||||
"acorn": "^8.8.2",
|
||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue