You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
willaengine/app/Console/Commands/Vuex.php

113 lines
4.4 KiB

4 years ago
<?php
namespace App\Console\Commands;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
class Vuex
{
private static bool $isCategory = false;
private static string $module;
private static string $storeModule;
private static bool $replace = false;
private static $instance = null;
private function __construct($arguments, $options)
{
static::$isCategory = $options['category'];
static::$replace = $options['replace'];
static::$module = $arguments['module'];
static::$storeModule = $arguments['store-module'];
}
public static function initialize ($arguments, $options) {
if (!self::$instance) {
self::$instance = new static($arguments, $options);
}
return self::$instance;
}
public function createAllFiles () {
if (static::$storeModule && static::$module) {
static::createStoreFiles();
static::createRepositoryFile();
static::createResourceFile();
if (!static::$isCategory) {
static::createStorageFile();
}
}
}
public static function createStoreFiles () {
$moduleFiles = ['actions', 'mutations', 'state', 'getters'];
$basePath = 'modules/wm-' . static::$module . '/resources/js/store/modules/' . static::$storeModule . '/';
$baseDefaultPath = static::$isCategory ? 'resources/js/Default/store/category/' : 'resources/js/Default/store/store/';
foreach ($moduleFiles as $moduleFile) {
if (static::hasExists($basePath . $moduleFile)) {
$data = Storage::disk('local')->get($baseDefaultPath . $moduleFile . '.text');
$data = static::replacer($data);
Storage::disk('local')->put($basePath . $moduleFile . '.js', $data);
}
}
}
public static function createRepositoryFile () {
$baseRepositoryPath = 'modules/wm-' . static::$module . '/resources/js/abstraction/repositories/' . static::$storeModule . '/' . static::$storeModule . 'Repository.js';
$baseDefaultPath = static::$isCategory ? 'resources/js/Default/abstraction/repositories/categoryRepository.text' : 'resources/js/Default/abstraction/repositories/repository.text';
if (static::hasExists($baseRepositoryPath)) {
$data = Storage::disk('local')->get($baseDefaultPath);
$data = static::replacer($data);
Storage::disk('local')->put($baseRepositoryPath, $data);
}
}
public static function createResourceFile() {
$baseResourcePath = 'modules/wm-' . static::$module . '/resources/js/abstraction/resources/' . static::$storeModule . '/' . static::$storeModule . 'Resource.js';
$baseDefaultPath = static::$isCategory ? 'resources/js/Default/abstraction/resources/categoryResource.text' : 'resources/js/Default/abstraction/resources/resource.text';
if (static::hasExists($baseResourcePath)) {
$data = Storage::disk('local')->get($baseDefaultPath);
$data = static::replacer($data);
Storage::disk('local')->put($baseResourcePath, $data);
}
}
public static function createStorageFile() {
$baseStoragePath = 'modules/wm-' . static::$module . '/resources/js/services/' . static::$storeModule . '.storage.js';
$baseDefaultPath = 'resources/js/Default/services/storage.text';
if (static::hasExists($baseStoragePath)) {
$data = Storage::disk('local')->get($baseDefaultPath);
$data = static::replacer($data);
Storage::disk('local')->put($baseStoragePath, $data);
}
}
private static function hasExists($path) {
$continue = true;
if (Storage::disk('local')->exists($path)) {
$continue = static::$replace;
}
return $continue;
}
private static function replacer($data) {
4 years ago
$data = str_replace('|-module-|', Str::camel(static::$storeModule), $data);
$data = str_replace('|-snake_module-|', Str::snake(static::$storeModule), $data);
4 years ago
$data = str_replace('|-Module-|', Str::title(static::$storeModule), $data);
4 years ago
$data = str_replace('|-MODULE-|', Str::upper(Str::snake(static::$storeModule)), $data);
4 years ago
$data = str_replace('|-BaseModule-|', Str::title(static::$module), $data);
return str_replace('|-baseModule-|', Str::camel(static::$module), $data);
}
}