generator-folklore 3.0.7 → 3.0.9
Sign up to get free protection for your applications and to get access to all the features.
- package/Readme.md +11 -5
- package/lib/generators/app/index.js +3 -0
- package/lib/generators/babel/index.js +8 -1
- package/lib/generators/build/index.js +3 -1
- package/lib/generators/cli/index.js +4 -1
- package/lib/generators/docs/index.js +9 -4
- package/lib/generators/eslint/index.js +12 -1
- package/lib/generators/intl/index.js +4 -2
- package/lib/generators/laravel-auth/templates/routes/auth.php +2 -0
- package/lib/generators/laravel-panneau/index.js +7 -1
- package/lib/generators/laravel-panneau/templates/app/Contracts/Resources/Block.php +10 -0
- package/lib/generators/laravel-panneau/templates/app/Http/Middleware/Authenticate.php +27 -0
- package/lib/generators/laravel-panneau/templates/app/Http/Resources/BlockResource.php +1 -1
- package/lib/generators/laravel-panneau/templates/app/Http/Resources/BlocksCollection.php +2 -0
- package/lib/generators/laravel-panneau/templates/app/Http/Resources/PageResource.php +6 -4
- package/lib/generators/laravel-panneau/templates/app/Models/Block.php +10 -0
- package/lib/generators/laravel-panneau/templates/app/Models/Media.php +11 -0
- package/lib/generators/laravel-panneau/templates/app/Models/Page.php +12 -2
- package/lib/generators/laravel-panneau/templates/app/Panneau/PanneauServiceProvider.php +16 -0
- package/lib/generators/laravel-panneau/templates/app/Panneau/Resources/Users.php +2 -1
- package/lib/generators/laravel-panneau/templates/app/Resources/Block.php +10 -0
- package/lib/generators/laravel-panneau/templates/app/Resources/Blocks/ImageBlock.php +1 -1
- package/lib/generators/laravel-panneau/templates/app/Resources/Blocks/TextBlock.php +1 -1
- package/lib/generators/laravel-panneau/templates/routes.php +3 -1
- package/lib/generators/laravel-project/index.js +3 -3
- package/lib/generators/laravel-project/templates/laravel/app/Actions/Fortify/CreateNewUser.php +41 -0
- package/lib/generators/laravel-project/templates/laravel/app/Actions/Fortify/ResetUserPassword.php +31 -0
- package/lib/generators/laravel-project/templates/laravel/app/Actions/Fortify/UpdateUserPassword.php +34 -0
- package/lib/generators/laravel-project/templates/laravel/app/Actions/Fortify/UpdateUserProfileInformation.php +61 -0
- package/lib/generators/laravel-project/templates/laravel/app/Providers/TelescopeServiceProvider.php +67 -0
- package/lib/generators/laravel-project/templates/laravel/config/app.php +1 -0
- package/lib/generators/laravel-project/templates/laravel/routes/web.php +4 -1
- package/lib/generators/lerna-repository/index.js +8 -3
- package/lib/generators/npm-package/index.js +6 -2
- package/lib/generators/prettier/index.js +5 -1
- package/lib/generators/react-app/index.js +22 -2
- package/lib/generators/react-app/templates/src/components/Container.jsx +10 -8
- package/lib/generators/react-package/index.js +14 -5
- package/lib/generators/rollup/index.js +8 -1
- package/lib/generators/server/index.js +9 -2
- package/lib/generators/storybook/index.js +9 -1
- package/lib/generators/stylelint/index.js +7 -2
- package/lib/generators/test/index.js +10 -1
- package/package.json +3 -3
package/Readme.md
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
# Folklore Generator
|
2
|
+
|
2
3
|
Yeoman generator to start projects at Folklore
|
3
4
|
|
4
5
|
## Install
|
6
|
+
|
5
7
|
```
|
6
8
|
npm install -g generator-folklore
|
7
9
|
```
|
8
10
|
|
9
11
|
## Usage
|
12
|
+
|
10
13
|
```
|
11
14
|
yo folklore
|
12
15
|
```
|
@@ -14,20 +17,23 @@ yo folklore
|
|
14
17
|
## Sub-Generators
|
15
18
|
|
16
19
|
```
|
17
|
-
yo folklore:laravel
|
20
|
+
yo folklore:laravel-project
|
18
21
|
```
|
19
|
-
|
22
|
+
|
23
|
+
Laravel boilerplate.
|
20
24
|
|
21
25
|
--
|
22
26
|
|
23
27
|
```
|
24
|
-
yo folklore:html
|
28
|
+
yo folklore:html-project
|
25
29
|
```
|
30
|
+
|
26
31
|
HTML static application
|
27
32
|
|
28
33
|
--
|
29
34
|
|
30
35
|
```
|
31
|
-
yo folklore:
|
36
|
+
yo folklore:node-project
|
32
37
|
```
|
33
|
-
|
38
|
+
|
39
|
+
Node package
|
@@ -56,7 +56,14 @@ module.exports = class BabelGenerator extends _generator.default {
|
|
56
56
|
},
|
57
57
|
|
58
58
|
dependencies() {
|
59
|
-
this.addDevDependencies(
|
59
|
+
this.addDevDependencies({
|
60
|
+
'@babel/core': '^7.19.3',
|
61
|
+
'@babel/cli': 'latest',
|
62
|
+
'@babel/node': 'latest',
|
63
|
+
'@babel/plugin-transform-runtime': 'latest',
|
64
|
+
'@babel/preset-env': 'latest',
|
65
|
+
'@babel/preset-react': 'latest'
|
66
|
+
});
|
60
67
|
}
|
61
68
|
|
62
69
|
};
|
@@ -1,11 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
4
|
+
|
3
5
|
var _lodash = _interopRequireDefault(require("lodash"));
|
4
6
|
|
5
7
|
var _path = _interopRequireDefault(require("path"));
|
6
8
|
|
7
|
-
var _chalk = _interopRequireDefault(require("chalk"));
|
8
|
-
|
9
9
|
var _generator = _interopRequireDefault(require("../../lib/generator"));
|
10
10
|
|
11
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
@@ -141,10 +141,15 @@ module.exports = class DocsGenerator extends _generator.default {
|
|
141
141
|
return;
|
142
142
|
}
|
143
143
|
|
144
|
-
this.addDevDependencies(
|
144
|
+
this.addDevDependencies({
|
145
|
+
'gitbook-cli': 'latest'
|
146
|
+
});
|
145
147
|
|
146
148
|
if (this.options.language === 'js') {
|
147
|
-
this.addDevDependencies(
|
149
|
+
this.addDevDependencies({
|
150
|
+
jsdoc: 'latest',
|
151
|
+
'jsdoc-babel': 'latest'
|
152
|
+
});
|
148
153
|
}
|
149
154
|
}
|
150
155
|
|
@@ -32,7 +32,18 @@ module.exports = class EslintGenerator extends _generator.default {
|
|
32
32
|
},
|
33
33
|
|
34
34
|
dependencies() {
|
35
|
-
this.addDevDependencies(
|
35
|
+
this.addDevDependencies({
|
36
|
+
'babel-preset-airbnb': 'latest',
|
37
|
+
'@babel/eslint-parser': 'latest',
|
38
|
+
eslint: '^8.0.0',
|
39
|
+
'eslint-config-airbnb': 'latest',
|
40
|
+
'eslint-config-prettier': 'latest',
|
41
|
+
'eslint-plugin-prettier': 'latest',
|
42
|
+
'eslint-plugin-import': 'latest',
|
43
|
+
'eslint-plugin-jsx-a11y': 'latest',
|
44
|
+
'eslint-plugin-react': 'latest',
|
45
|
+
'eslint-plugin-formatjs': 'latest'
|
46
|
+
});
|
36
47
|
}
|
37
48
|
|
38
49
|
};
|
@@ -62,7 +62,7 @@ module.exports = class IntlGenerator extends _generator.default {
|
|
62
62
|
'without-id-only': withoutIdOnly = false,
|
63
63
|
locales
|
64
64
|
} = this.options;
|
65
|
-
const intlCommand = `flklr intl --po${withoutIdOnly ? ' --without-id-only' : ''} --output-path
|
65
|
+
const intlCommand = `flklr intl --po${withoutIdOnly ? ' --without-id-only' : ''} --output-path '${outputPath}' '${translationsPath}'`;
|
66
66
|
this.packageJson.merge({
|
67
67
|
scripts: jsonPath !== null ? {
|
68
68
|
intl: 'npm run intl:build && npm run intl:copy',
|
@@ -76,7 +76,9 @@ module.exports = class IntlGenerator extends _generator.default {
|
|
76
76
|
},
|
77
77
|
|
78
78
|
dependencies() {
|
79
|
-
this.addDevDependencies(
|
79
|
+
this.addDevDependencies({
|
80
|
+
'@folklore/cli': '^0.0.47'
|
81
|
+
});
|
80
82
|
}
|
81
83
|
|
82
84
|
};
|
@@ -69,7 +69,13 @@ module.exports = class LaravelPanneauGenerator extends _generator.default {
|
|
69
69
|
},
|
70
70
|
|
71
71
|
packageJSON() {
|
72
|
-
this.addDependencies(
|
72
|
+
this.addDependencies({
|
73
|
+
'@panneau/app': '^1.0.3-alpha.1',
|
74
|
+
'@panneau/core': '^1.0.3-alpha.1',
|
75
|
+
'@panneau/data': '^1.0.3-alpha.1',
|
76
|
+
'@panneau/field-text': '^1.0.3-alpha.1',
|
77
|
+
'@panneau/field-localized': '^1.0.3-alpha.1'
|
78
|
+
});
|
73
79
|
},
|
74
80
|
|
75
81
|
config() {
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
namespace App\Http\Middleware;
|
4
|
+
|
5
|
+
use Illuminate\Auth\Middleware\Authenticate as Middleware;
|
6
|
+
|
7
|
+
class Authenticate extends Middleware
|
8
|
+
{
|
9
|
+
/**
|
10
|
+
* Get the path the user should be redirected to when they are not authenticated.
|
11
|
+
*
|
12
|
+
* @param \Illuminate\Http\Request $request
|
13
|
+
* @return string|null
|
14
|
+
*/
|
15
|
+
protected function redirectTo($request)
|
16
|
+
{
|
17
|
+
if (!$request->expectsJson()) {
|
18
|
+
$routeWithLocale =
|
19
|
+
route_with_locale('login') .
|
20
|
+
'?' .
|
21
|
+
http_build_query([
|
22
|
+
'next' => $request->fullUrl(),
|
23
|
+
]);
|
24
|
+
return $request->isPanneau() ? route('panneau.auth.login') : $routeWithLocale;
|
25
|
+
}
|
26
|
+
}
|
27
|
+
}
|
@@ -3,7 +3,7 @@
|
|
3
3
|
namespace App\Http\Resources;
|
4
4
|
|
5
5
|
use Illuminate\Http\Resources\Json\JsonResource;
|
6
|
-
use
|
6
|
+
use Folklore\Contracts\Resources\HasBlocks;
|
7
7
|
use Folklore\Http\Resources\LocalizedResource;
|
8
8
|
use App\Contracts\Resources\Blocks\Text as TextBlock;
|
9
9
|
|
@@ -3,10 +3,10 @@
|
|
3
3
|
namespace App\Http\Resources;
|
4
4
|
|
5
5
|
use Illuminate\Http\Resources\Json\JsonResource;
|
6
|
-
use App\Http\Resources\Medias\ImageResource;
|
7
6
|
use App\Contracts\Resources\Page;
|
8
|
-
use App\Contracts\Resources\HasBlocks;
|
9
7
|
use App\Contracts\Resources\Pages\Home as HomePage;
|
8
|
+
use Folklore\Http\Resources\MediaResource;
|
9
|
+
use Folklore\Contracts\Resources\HasBlocks;
|
10
10
|
|
11
11
|
class PageResource extends JsonResource
|
12
12
|
{
|
@@ -19,6 +19,8 @@ class PageResource extends JsonResource
|
|
19
19
|
public function toArray($request)
|
20
20
|
{
|
21
21
|
$locale = $request->locale();
|
22
|
+
$image = $this->image();
|
23
|
+
$parent = $this->parent();
|
22
24
|
return [
|
23
25
|
'id' => $this->id(),
|
24
26
|
'type' => $this->type(),
|
@@ -26,10 +28,10 @@ class PageResource extends JsonResource
|
|
26
28
|
'title' => $this->title($locale),
|
27
29
|
'description' => $this->description($locale),
|
28
30
|
'slug' => $this->slug($locale),
|
29
|
-
'image' => !is_null($image) ? new
|
31
|
+
'image' => !is_null($image) ? new MediaResource($image) : null,
|
30
32
|
'parent' =>
|
31
33
|
!is_null($parent) && $parent instanceof Page
|
32
|
-
? new
|
34
|
+
? new PageResource($parent)
|
33
35
|
: null,
|
34
36
|
|
35
37
|
$this->mergeWhen($this->resource instanceof HasBlocks, function () {
|
@@ -2,12 +2,22 @@
|
|
2
2
|
|
3
3
|
namespace App\Models;
|
4
4
|
|
5
|
+
use App\Contracts\Resources\Block as BlockContract;
|
6
|
+
use App\Resources\Block as BlockResource;
|
5
7
|
use Folklore\Models\Block as BaseBlock;
|
8
|
+
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
6
9
|
|
7
10
|
class Block extends BaseBlock
|
8
11
|
{
|
12
|
+
use HasFactory;
|
13
|
+
|
9
14
|
protected $typeResources = [
|
10
15
|
'text' => \App\Resources\Blocks\TextBlock::class,
|
11
16
|
'image' => \App\Resources\Blocks\ImageBlock::class,
|
12
17
|
];
|
18
|
+
|
19
|
+
public function toResource(): BlockContract
|
20
|
+
{
|
21
|
+
return $this->toTypedResource() ?? new BlockResource($this);
|
22
|
+
}
|
13
23
|
}
|
@@ -2,11 +2,21 @@
|
|
2
2
|
|
3
3
|
namespace App\Models;
|
4
4
|
|
5
|
+
use App\Contracts\Resources\Page as PageContract;
|
6
|
+
use App\Resources\Page as PageResource;
|
5
7
|
use Folklore\Models\Page as BasePage;
|
8
|
+
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
6
9
|
|
7
10
|
class Page extends BasePage
|
8
11
|
{
|
9
|
-
|
10
|
-
|
12
|
+
use HasFactory;
|
13
|
+
|
14
|
+
protected $typedResources = [
|
15
|
+
'home' => \App\Resources\Pages\HomePage::class,
|
11
16
|
];
|
17
|
+
|
18
|
+
public function toResource(): PageContract
|
19
|
+
{
|
20
|
+
return $this->toTypedResource() ?? new PageResource($this);
|
21
|
+
}
|
12
22
|
}
|
@@ -10,6 +10,11 @@ use Panneau\Support\LocalizedField;
|
|
10
10
|
use Folklore\Panneau\Fields\PageSlug as PageSlugField;
|
11
11
|
use Panneau\Support\Facade as Panneau;
|
12
12
|
|
13
|
+
use Illuminate\Http\Request;
|
14
|
+
use Laravel\Fortify\Fortify;
|
15
|
+
use Illuminate\Support\Facades\Hash;
|
16
|
+
use App\Models\User;
|
17
|
+
|
13
18
|
class PanneauServiceProvider extends BaseServiceProvider
|
14
19
|
{
|
15
20
|
/**
|
@@ -31,6 +36,7 @@ class PanneauServiceProvider extends BaseServiceProvider
|
|
31
36
|
{
|
32
37
|
$this->bootFields();
|
33
38
|
$this->bootViews();
|
39
|
+
$this->bootAuth();
|
34
40
|
}
|
35
41
|
|
36
42
|
protected function bootFields()
|
@@ -71,4 +77,14 @@ class PanneauServiceProvider extends BaseServiceProvider
|
|
71
77
|
$view->composer('errors::*', \App\Panneau\Composers\AppComposer::class);
|
72
78
|
});
|
73
79
|
}
|
80
|
+
|
81
|
+
protected function bootAuth()
|
82
|
+
{
|
83
|
+
Fortify::authenticateUsing(function (Request $request) {
|
84
|
+
$user = User::where('email', $request->email)->first();
|
85
|
+
if (!is_null($user) && Hash::check($request->password, $user->password)) {
|
86
|
+
return $user;
|
87
|
+
}
|
88
|
+
});
|
89
|
+
}
|
74
90
|
}
|
@@ -10,7 +10,9 @@ Panneau::router()->group(function () {
|
|
10
10
|
return app('tus-server')->serve();
|
11
11
|
})->where('any', '.*');
|
12
12
|
|
13
|
-
|
13
|
+
Route::middleware(['web'])->group(function () {
|
14
|
+
Panneau::router()->auth();
|
15
|
+
});
|
14
16
|
|
15
17
|
Route::namespace('\App\Panneau\Http\Controllers')
|
16
18
|
->middleware(['web', 'auth', 'can:view,' . \Panneau\Panneau::class])
|
@@ -297,7 +297,7 @@ module.exports = class LaravelProjectGenerator extends _generator.default {
|
|
297
297
|
if (this.options.panneau) {
|
298
298
|
this.composeWith('folklore:laravel-panneau', {
|
299
299
|
'project-name': this.options['project-name'],
|
300
|
-
'skip-install':
|
300
|
+
'skip-install': true,
|
301
301
|
quiet: true
|
302
302
|
});
|
303
303
|
} // if (this.options.auth) {
|
@@ -305,7 +305,7 @@ module.exports = class LaravelProjectGenerator extends _generator.default {
|
|
305
305
|
// 'project-name': this.options['project-name'],
|
306
306
|
// 'js-path': jsSrcPath,
|
307
307
|
// 'styles-path': stylesSrcPath,
|
308
|
-
// 'skip-install':
|
308
|
+
// 'skip-install': true,
|
309
309
|
// 'install-npm': true,
|
310
310
|
// quiet: true,
|
311
311
|
// });
|
@@ -373,7 +373,7 @@ module.exports = class LaravelProjectGenerator extends _generator.default {
|
|
373
373
|
},
|
374
374
|
extra: {
|
375
375
|
laravel: {
|
376
|
-
'dont-discover': ['laravel/telescope']
|
376
|
+
'dont-discover': ['laravel/telescope', 'folklore/laravel-folklore']
|
377
377
|
}
|
378
378
|
}
|
379
379
|
});
|
package/lib/generators/laravel-project/templates/laravel/app/Actions/Fortify/CreateNewUser.php
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
namespace App\Actions\Fortify;
|
4
|
+
|
5
|
+
use App\Contracts\Repositories\Users;
|
6
|
+
use Illuminate\Support\Facades\Hash;
|
7
|
+
use Illuminate\Support\Facades\Validator;
|
8
|
+
use Illuminate\Validation\Rule;
|
9
|
+
use Laravel\Fortify\Contracts\CreatesNewUsers;
|
10
|
+
|
11
|
+
class CreateNewUser implements CreatesNewUsers
|
12
|
+
{
|
13
|
+
use PasswordValidationRules;
|
14
|
+
|
15
|
+
/**
|
16
|
+
* Validate and create a newly registered user.
|
17
|
+
*
|
18
|
+
* @param array $input
|
19
|
+
* @return \App\Models\User
|
20
|
+
*/
|
21
|
+
public function create(array $input)
|
22
|
+
{
|
23
|
+
Validator::make($input, [
|
24
|
+
'name' => ['required', 'string', 'max:255'],
|
25
|
+
'email' => [
|
26
|
+
'required',
|
27
|
+
'string',
|
28
|
+
'email',
|
29
|
+
'max:255',
|
30
|
+
Rule::unique(User::class),
|
31
|
+
],
|
32
|
+
'password' => $this->passwordRules(),
|
33
|
+
])->validate();
|
34
|
+
|
35
|
+
return resolve(Users::class)->create([
|
36
|
+
'name' => $input['name'],
|
37
|
+
'email' => $input['email'],
|
38
|
+
'password' => Hash::make($input['password']),
|
39
|
+
]);
|
40
|
+
}
|
41
|
+
}
|
package/lib/generators/laravel-project/templates/laravel/app/Actions/Fortify/ResetUserPassword.php
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
namespace App\Actions\Fortify;
|
4
|
+
|
5
|
+
use Illuminate\Support\Facades\Hash;
|
6
|
+
use Illuminate\Support\Facades\Validator;
|
7
|
+
use Laravel\Fortify\Contracts\ResetsUserPasswords;
|
8
|
+
use App\Contracts\Repositories\Users;
|
9
|
+
|
10
|
+
class ResetUserPassword implements ResetsUserPasswords
|
11
|
+
{
|
12
|
+
use PasswordValidationRules;
|
13
|
+
|
14
|
+
/**
|
15
|
+
* Validate and reset the user's forgotten password.
|
16
|
+
*
|
17
|
+
* @param mixed $user
|
18
|
+
* @param array $input
|
19
|
+
* @return void
|
20
|
+
*/
|
21
|
+
public function reset($user, array $input)
|
22
|
+
{
|
23
|
+
Validator::make($input, [
|
24
|
+
'password' => $this->passwordRules(),
|
25
|
+
])->validate();
|
26
|
+
|
27
|
+
resolve(Users::class)->update($user->id(), [
|
28
|
+
'password' => Hash::make($input['password']),
|
29
|
+
]);
|
30
|
+
}
|
31
|
+
}
|
package/lib/generators/laravel-project/templates/laravel/app/Actions/Fortify/UpdateUserPassword.php
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
namespace App\Actions\Fortify;
|
4
|
+
|
5
|
+
use Illuminate\Support\Facades\Hash;
|
6
|
+
use Illuminate\Support\Facades\Validator;
|
7
|
+
use Laravel\Fortify\Contracts\UpdatesUserPasswords;
|
8
|
+
use App\Contracts\Repositories\Users;
|
9
|
+
|
10
|
+
class UpdateUserPassword implements UpdatesUserPasswords
|
11
|
+
{
|
12
|
+
use PasswordValidationRules;
|
13
|
+
|
14
|
+
/**
|
15
|
+
* Validate and update the user's password.
|
16
|
+
*
|
17
|
+
* @param mixed $user
|
18
|
+
* @param array $input
|
19
|
+
* @return void
|
20
|
+
*/
|
21
|
+
public function update($user, array $input)
|
22
|
+
{
|
23
|
+
Validator::make($input, [
|
24
|
+
'current_password' => ['required', 'string', 'current_password:web'],
|
25
|
+
'password' => $this->passwordRules(),
|
26
|
+
], [
|
27
|
+
'current_password.current_password' => __('The provided password does not match your current password.'),
|
28
|
+
])->validateWithBag('updatePassword');
|
29
|
+
|
30
|
+
resolve(Users::class)->update($user->id(), [
|
31
|
+
'password' => Hash::make($input['password']),
|
32
|
+
]);
|
33
|
+
}
|
34
|
+
}
|
@@ -0,0 +1,61 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
namespace App\Actions\Fortify;
|
4
|
+
|
5
|
+
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
6
|
+
use Illuminate\Support\Facades\Validator;
|
7
|
+
use Illuminate\Validation\Rule;
|
8
|
+
use Laravel\Fortify\Contracts\UpdatesUserProfileInformation;
|
9
|
+
use App\Contracts\Repositories\Users;
|
10
|
+
|
11
|
+
class UpdateUserProfileInformation implements UpdatesUserProfileInformation
|
12
|
+
{
|
13
|
+
/**
|
14
|
+
* Validate and update the given user's profile information.
|
15
|
+
*
|
16
|
+
* @param mixed $user
|
17
|
+
* @param array $input
|
18
|
+
* @return void
|
19
|
+
*/
|
20
|
+
public function update($user, array $input)
|
21
|
+
{
|
22
|
+
Validator::make($input, [
|
23
|
+
'name' => ['required', 'string', 'max:255'],
|
24
|
+
|
25
|
+
'email' => [
|
26
|
+
'required',
|
27
|
+
'string',
|
28
|
+
'email',
|
29
|
+
'max:255',
|
30
|
+
Rule::unique('users')->ignore($user->id()),
|
31
|
+
],
|
32
|
+
])->validateWithBag('updateProfileInformation');
|
33
|
+
|
34
|
+
if ($input['email'] !== $user->email() && $user instanceof MustVerifyEmail) {
|
35
|
+
$this->updateVerifiedUser($user, $input);
|
36
|
+
} else {
|
37
|
+
resolve(Users::class)->update($user->id(), [
|
38
|
+
'name' => $input['name'],
|
39
|
+
'email' => $input['email'],
|
40
|
+
]);
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
/**
|
45
|
+
* Update the given verified user's profile information.
|
46
|
+
*
|
47
|
+
* @param mixed $user
|
48
|
+
* @param array $input
|
49
|
+
* @return void
|
50
|
+
*/
|
51
|
+
protected function updateVerifiedUser($user, array $input)
|
52
|
+
{
|
53
|
+
$user = resolve(Users::class)->update($user->id(), [
|
54
|
+
'name' => $input['name'],
|
55
|
+
'email' => $input['email'],
|
56
|
+
'email_verified_at' => null,
|
57
|
+
]);
|
58
|
+
|
59
|
+
$user->sendEmailVerificationNotification();
|
60
|
+
}
|
61
|
+
}
|
package/lib/generators/laravel-project/templates/laravel/app/Providers/TelescopeServiceProvider.php
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
namespace App\Providers;
|
4
|
+
|
5
|
+
use Illuminate\Support\Facades\Gate;
|
6
|
+
use Laravel\Telescope\IncomingEntry;
|
7
|
+
use Laravel\Telescope\Telescope;
|
8
|
+
use Laravel\Telescope\TelescopeApplicationServiceProvider;
|
9
|
+
|
10
|
+
class TelescopeServiceProvider extends TelescopeApplicationServiceProvider
|
11
|
+
{
|
12
|
+
/**
|
13
|
+
* Register any application services.
|
14
|
+
*
|
15
|
+
* @return void
|
16
|
+
*/
|
17
|
+
public function register()
|
18
|
+
{
|
19
|
+
// Telescope::night();
|
20
|
+
|
21
|
+
$this->hideSensitiveRequestDetails();
|
22
|
+
|
23
|
+
Telescope::filter(function (IncomingEntry $entry) {
|
24
|
+
if ($this->app->environment('local')) {
|
25
|
+
return true;
|
26
|
+
}
|
27
|
+
|
28
|
+
return $entry->isReportableException() ||
|
29
|
+
$entry->isFailedRequest() ||
|
30
|
+
$entry->isFailedJob() ||
|
31
|
+
$entry->isScheduledTask() ||
|
32
|
+
$entry->hasMonitoredTag();
|
33
|
+
});
|
34
|
+
}
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Prevent sensitive request details from being logged by Telescope.
|
38
|
+
*
|
39
|
+
* @return void
|
40
|
+
*/
|
41
|
+
protected function hideSensitiveRequestDetails()
|
42
|
+
{
|
43
|
+
if ($this->app->environment('local')) {
|
44
|
+
return;
|
45
|
+
}
|
46
|
+
|
47
|
+
Telescope::hideRequestParameters(['_token']);
|
48
|
+
|
49
|
+
Telescope::hideRequestHeaders(['cookie', 'x-csrf-token', 'x-xsrf-token']);
|
50
|
+
}
|
51
|
+
|
52
|
+
/**
|
53
|
+
* Register the Telescope gate.
|
54
|
+
*
|
55
|
+
* This gate determines who can access Telescope in non-local environments.
|
56
|
+
*
|
57
|
+
* @return void
|
58
|
+
*/
|
59
|
+
protected function gate()
|
60
|
+
{
|
61
|
+
Gate::define('viewTelescope', function ($user) {
|
62
|
+
return in_array($user->email, [
|
63
|
+
//
|
64
|
+
]);
|
65
|
+
});
|
66
|
+
}
|
67
|
+
}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
<?php
|
2
2
|
|
3
|
+
use Illuminate\Support\Facades\Route;
|
3
4
|
use App\Http\Controllers\HomeController;
|
4
5
|
|
5
6
|
//Redirect to current langage home
|
@@ -8,5 +9,7 @@ Route::get('/', [HomeController::class, 'redirect'])->name('home');
|
|
8
9
|
Route::groupWithLocales(function () {
|
9
10
|
Route::getTrans('/', [HomeController::class, 'index'])->nameWithLocale('home');
|
10
11
|
Route::getTrans('/test', [HomeController::class, 'index'])->nameWithLocale('test');
|
11
|
-
Route::getTrans('/test/{with_param}', [HomeController::class, 'index'])->nameWithLocale(
|
12
|
+
Route::getTrans('/test/{with_param}', [HomeController::class, 'index'])->nameWithLocale(
|
13
|
+
'test_with_param'
|
14
|
+
);
|
12
15
|
});
|
@@ -1,11 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
4
|
+
|
3
5
|
var _lodash = _interopRequireDefault(require("lodash"));
|
4
6
|
|
5
7
|
var _path = _interopRequireDefault(require("path"));
|
6
8
|
|
7
|
-
var _chalk = _interopRequireDefault(require("chalk"));
|
8
|
-
|
9
9
|
var _generator = _interopRequireDefault(require("../../lib/generator"));
|
10
10
|
|
11
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
@@ -217,7 +217,12 @@ module.exports = class LernaRepositoryGenerator extends _generator.default {
|
|
217
217
|
return;
|
218
218
|
}
|
219
219
|
|
220
|
-
this.addDevDependencies(
|
220
|
+
this.addDevDependencies({
|
221
|
+
lerna: 'latest',
|
222
|
+
glob: 'latest',
|
223
|
+
mkdirp: 'latest',
|
224
|
+
'@babel/runtime': 'latest'
|
225
|
+
});
|
221
226
|
},
|
222
227
|
|
223
228
|
bootstrap() {
|
@@ -240,8 +240,12 @@ module.exports = class NpmPackageGenerator extends _generator.default {
|
|
240
240
|
return;
|
241
241
|
}
|
242
242
|
|
243
|
-
this.addDependencies(
|
244
|
-
|
243
|
+
this.addDependencies({
|
244
|
+
'@babel/runtime': 'latest'
|
245
|
+
});
|
246
|
+
this.addDevDependencies({
|
247
|
+
jest: 'latest'
|
248
|
+
});
|
245
249
|
}
|
246
250
|
|
247
251
|
};
|
@@ -31,7 +31,11 @@ module.exports = class PrettierGenerator extends _generator.default {
|
|
31
31
|
},
|
32
32
|
|
33
33
|
dependencies() {
|
34
|
-
this.addDevDependencies(
|
34
|
+
this.addDevDependencies({
|
35
|
+
prettier: 'latest',
|
36
|
+
'@prettier/plugin-php': 'latest',
|
37
|
+
'@trivago/prettier-plugin-sort-imports': 'latest'
|
38
|
+
});
|
35
39
|
}
|
36
40
|
|
37
41
|
};
|
@@ -108,8 +108,28 @@ module.exports = class ReactAppGenerator extends _generator.default {
|
|
108
108
|
},
|
109
109
|
|
110
110
|
dependencies() {
|
111
|
-
this.addDependencies(
|
112
|
-
|
111
|
+
this.addDependencies({
|
112
|
+
react: '^18.0.0',
|
113
|
+
'react-dom': '^18.0.0',
|
114
|
+
'prop-types': '^15.0.0',
|
115
|
+
'react-intl': '^6.0.0',
|
116
|
+
'react-router': '^6.0.0',
|
117
|
+
'react-router-dom': '^6.0.0',
|
118
|
+
'react-helmet': '^6.0.0',
|
119
|
+
classnames: 'latest',
|
120
|
+
'@folklore/routes': '^0.1.1',
|
121
|
+
'@folklore/fonts': '^0.0.11',
|
122
|
+
'@folklore/forms': '^0.0.19',
|
123
|
+
'@folklore/fetch': '^0.1.15',
|
124
|
+
'@folklore/hooks': '^0.0.27',
|
125
|
+
'@folklore/tracking': '^0.0.14',
|
126
|
+
// Polyfills
|
127
|
+
intl: 'latest',
|
128
|
+
'@formatjs/intl-locale': 'latest',
|
129
|
+
'@formatjs/intl-pluralrules': 'latest',
|
130
|
+
'intersection-observer': 'latest',
|
131
|
+
'resize-observer-polyfill': 'latest'
|
132
|
+
});
|
113
133
|
}
|
114
134
|
|
115
135
|
};
|
@@ -8,21 +8,23 @@ import { BrowserRouter } from 'react-router-dom';
|
|
8
8
|
import App from './App';
|
9
9
|
|
10
10
|
const propTypes = {
|
11
|
-
|
12
|
-
|
13
|
-
PropTypes.
|
14
|
-
|
15
|
-
|
11
|
+
intl: PropTypes.shape({
|
12
|
+
locale: PropTypes.string,
|
13
|
+
messages: PropTypes.oneOfType([
|
14
|
+
PropTypes.objectOf(PropTypes.objectOf(PropTypes.string)),
|
15
|
+
PropTypes.objectOf(PropTypes.string),
|
16
|
+
]),
|
17
|
+
}),
|
16
18
|
routes: PropTypes.objectOf(PropTypes.string),
|
17
19
|
};
|
18
20
|
|
19
21
|
const defaultProps = {
|
20
|
-
|
21
|
-
messages: {},
|
22
|
+
intl: null,
|
22
23
|
routes: {},
|
23
24
|
};
|
24
25
|
|
25
|
-
function Container({
|
26
|
+
function Container({ intl, routes }) {
|
27
|
+
const { locale = null, messages = null } = intl || {};
|
26
28
|
return (
|
27
29
|
<IntlProvider locale={locale} messages={messages[locale] || messages}>
|
28
30
|
<BrowserRouter>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
4
|
-
|
5
|
-
var _path = _interopRequireDefault(require("path"));
|
6
|
-
|
7
3
|
var _chalk = _interopRequireDefault(require("chalk"));
|
8
4
|
|
9
5
|
var _changeCase = require("change-case");
|
10
6
|
|
7
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
8
|
+
|
9
|
+
var _path = _interopRequireDefault(require("path"));
|
10
|
+
|
11
11
|
var _generator = _interopRequireDefault(require("../../lib/generator"));
|
12
12
|
|
13
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
@@ -192,7 +192,16 @@ module.exports = class ReactPackageGenerator extends _generator.default {
|
|
192
192
|
return;
|
193
193
|
}
|
194
194
|
|
195
|
-
this.addDevDependencies(
|
195
|
+
this.addDevDependencies({
|
196
|
+
domready: 'latest',
|
197
|
+
jquery: 'latest',
|
198
|
+
enzyme: 'latest',
|
199
|
+
'react-test-renderer': 'latest',
|
200
|
+
'@storybook/react': 'latest',
|
201
|
+
'@storybook/addon-actions': 'latest',
|
202
|
+
'extract-text-webpack-plugin': 'latest',
|
203
|
+
'html-webpack-plugin': 'latest'
|
204
|
+
});
|
196
205
|
}
|
197
206
|
|
198
207
|
};
|
@@ -37,7 +37,14 @@ module.exports = class RollupGenerator extends _generator.default {
|
|
37
37
|
},
|
38
38
|
|
39
39
|
dependencies() {
|
40
|
-
this.addDevDependencies(
|
40
|
+
this.addDevDependencies({
|
41
|
+
'@rollup/plugin-babel': 'latest',
|
42
|
+
'@rollup/plugin-commonjs': 'latest',
|
43
|
+
'@rollup/plugin-json': 'latest',
|
44
|
+
'@rollup/plugin-node-resolve': 'latest',
|
45
|
+
'@rollup/plugin-replace': 'latest',
|
46
|
+
rollup: '^2.79.1'
|
47
|
+
});
|
41
48
|
}
|
42
49
|
|
43
50
|
};
|
@@ -60,10 +60,17 @@ module.exports = class ServerGenerator extends _generator.default {
|
|
60
60
|
const {
|
61
61
|
'socket-io': socketIo
|
62
62
|
} = this.options;
|
63
|
-
this.addDependencies(
|
63
|
+
this.addDependencies({
|
64
|
+
commander: 'latest',
|
65
|
+
debug: 'latest',
|
66
|
+
ejs: 'latest',
|
67
|
+
express: 'latest'
|
68
|
+
});
|
64
69
|
|
65
70
|
if (socketIo) {
|
66
|
-
this.addDependencies(
|
71
|
+
this.addDependencies({
|
72
|
+
'socket.io': 'latest'
|
73
|
+
});
|
67
74
|
}
|
68
75
|
}
|
69
76
|
|
@@ -79,7 +79,15 @@ module.exports = class StorybookGenerator extends _generator.default {
|
|
79
79
|
return;
|
80
80
|
}
|
81
81
|
|
82
|
-
this.addDevDependencies(
|
82
|
+
this.addDevDependencies({
|
83
|
+
'@storybook/addon-actions': 'latest',
|
84
|
+
'@storybook/addon-info': 'latest',
|
85
|
+
'@storybook/addon-storyshots': 'latest',
|
86
|
+
'@storybook/addons': 'latest',
|
87
|
+
'@storybook/react': 'latest',
|
88
|
+
'@storybook/storybook-deployer': 'latest',
|
89
|
+
'glob-loader': 'latest'
|
90
|
+
});
|
83
91
|
}
|
84
92
|
|
85
93
|
};
|
@@ -12,7 +12,7 @@ module.exports = class StylelintGenerator extends _generator.default {
|
|
12
12
|
this.option('camel-case', {
|
13
13
|
type: Boolean,
|
14
14
|
required: false,
|
15
|
-
defaults:
|
15
|
+
defaults: true
|
16
16
|
});
|
17
17
|
}
|
18
18
|
|
@@ -37,7 +37,12 @@ module.exports = class StylelintGenerator extends _generator.default {
|
|
37
37
|
},
|
38
38
|
|
39
39
|
dependencies() {
|
40
|
-
this.addDevDependencies(
|
40
|
+
this.addDevDependencies({
|
41
|
+
stylelint: '^14.0.0',
|
42
|
+
'stylelint-config-standard-scss': 'latest',
|
43
|
+
'stylelint-config-idiomatic-order': 'latest',
|
44
|
+
'stylelint-config-prettier': 'latest'
|
45
|
+
});
|
41
46
|
}
|
42
47
|
|
43
48
|
};
|
@@ -67,7 +67,16 @@ module.exports = class TestGenerator extends _generator.default {
|
|
67
67
|
return;
|
68
68
|
}
|
69
69
|
|
70
|
-
this.addDevDependencies(
|
70
|
+
this.addDevDependencies({
|
71
|
+
'babel-jest': 'latest',
|
72
|
+
enzyme: 'latest',
|
73
|
+
'enzyme-adapter-react-16': 'latest',
|
74
|
+
'eslint-plugin-jest': 'latest',
|
75
|
+
jest: 'latest',
|
76
|
+
jsdom: 'latest',
|
77
|
+
'react-test-renderer': 'latest',
|
78
|
+
sinon: 'latest'
|
79
|
+
});
|
71
80
|
}
|
72
81
|
|
73
82
|
};
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "generator-folklore",
|
3
|
-
"version": "3.0.
|
3
|
+
"version": "3.0.9",
|
4
4
|
"description": "Yeoman generator for projects at Folklore",
|
5
5
|
"keywords": [
|
6
6
|
"yeoman-generator"
|
@@ -37,8 +37,8 @@
|
|
37
37
|
"is-utf8": "^0.2.1",
|
38
38
|
"lodash": "^4.17.21",
|
39
39
|
"password-generator": "^2.3.2",
|
40
|
-
"yeoman-generator": "^5.
|
40
|
+
"yeoman-generator": "^5.7.0",
|
41
41
|
"yeoman-remote": "^1.0.1"
|
42
42
|
},
|
43
|
-
"gitHead": "
|
43
|
+
"gitHead": "88e0fd31cded9ff974e5b50f4c76464ef26efb12"
|
44
44
|
}
|