не является сложной задачей что-либо сломать в своем проекте
каким-то образом снес половину коммитов
Поэтому было бы неплохо как-либо сохранять прошлые версии Git репозитория
chunks.push(e.data)
на отправку blob'а в web-socket. The setting you are looking for is "compact folders". You can get there by going to: File → Preferences → Settings → explorer.compactFolders and then unchecking the box.
Параметр, который вы ищете, это «компактные папки». Вы можете попасть туда, выбрав: Файл → Настройки → Настройки → explorer.compactFolders, а затем сняв флажок.
<div itemscope itemtype="http://schema.org/Product">
<span itemprop="name">Название продукта</span>
<span itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
Рейтинг:
<span itemprop="ratingValue">4.5</span> из
<span itemprop="bestRating">5</span>
на основе
<span itemprop="ratingCount">10</span> оценок
</span>
</div>
<article itemscope itemtype="http://schema.org/Article">
<header>
<h1 itemprop="headline">Заголовок статьи</h1>
<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
Рейтинг:
<span itemprop="ratingValue">4.5</span> из
<span itemprop="bestRating">5</span>
на основе
<span itemprop="ratingCount">10</span> оценок
</div>
</header>
<div itemprop="articleBody">
<!-- Текст статьи -->
</div>
</article>
<html>
<head>
<title>Название страницы</title>
<script type="application/ld+json">
{
"@context": "http://schema.org/",
"@type": "Product",
"name": "Название продукта",
"image": "https://example.com/product-image.jpg",
"description": "Описание продукта",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"bestRating": "5",
"ratingCount": "10"
},
"offers": {
"@type": "Offer",
"priceCurrency": "USD",
"price": "19.99",
"availability": "http://schema.org/InStock"
}
}
</script>
</head>
<body>
<!-- Содержимое страницы -->
</body>
</html>
<html>
<head>
<title>Название страницы</title>
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "CreativeWork",
"name": "Название статьи",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.5",
"bestRating": "5",
"ratingCount": "10"
}
}
</script>
</head>
<body>
<!-- Содержимое страницы -->
</body>
</html>
strapi.db.lifecycles.subscribe({
models: ["api::post.post"],
async beforeCreate(event) {
const ctx = strapi.requestContext.get();
event.params.data = {
...event.params.data,
author: ctx.state.user.id
}
}
})
@Injectable()
export class ValidationPipe implements PipeTransform<any> {
async transform(value, metadata: ArgumentMetadata) {
if (!value) {
throw new BadRequestException('No data submitted');
}
const { metatype } = metadata;
if (!metatype || !this.toValidate(metatype)) {
return value;
}
const object = plainToClass(metatype, value);
console.dir(object);
const errors = await validate(object);
if (errors.length > 0) {
throw new HttpException({message: 'Input data validation failed', errors: this.buildError(errors)}, HttpStatus.BAD_REQUEST);
}
return value;
}
private buildError(errors) {
const result = {};
errors.forEach(el => {
const prop = el.property;
Object.entries(el.constraints).forEach(constraint => {
result[prop] = constraint[0];
});
});
return result;
}
private toValidate(metatype): boolean {
const types = [String, Boolean, Number, Array, Object];
return !types.find((type) => metatype === type);
}
}
@UsePipes(new ValidationPipe())
@Post()
async create(@Body() createPostDto: CreatePostDto) {
console.dir(createPostDto)
}
const { filledColor: F, emptyColor: E, ...props } = defineProps({
value: Number,
maxValue: Number,
segments: {
type: Number,
default: 5,
},
filledColor: {
type: String,
default: 'red',
},
emptyColor: {
type: String,
default: 'black',
},
});
const background = val =>
val >= 1 ? F :
val <= 0 ? E :
`linear-gradient(to right, ${F}, ${F}, ${val * 100}%, ${E} ${val * 100}%)`;
<div class="rating">
<div
v-for="i in segments"
:style="{ background: background(value / maxValue * segments - i + 1) }"
class="rating-segment"
></div>
</div>
git config core.hooksPath .githooks