pre-hackmeeting

This commit is contained in:
lesion 2022-02-14 13:06:33 +01:00
parent 8d71666555
commit af6794bdda
24 changed files with 369 additions and 228 deletions

View file

@ -1,23 +1,24 @@
<template>
<a class='post' :href='post.URL' target='_blank'>
<v-row class='mb-5'>
<v-col cols=12 lg=4>
<v-img class='rounded-lg' max-height="250" :src="post.image" alt=""></v-img>
</v-col>
<v-col cols=12 lg=8>
<span>{{post.source.name}}</span>
<h1 class='text-h5 font-weight-bold'>{{post.title}}</h1>
<p class='font-weight-light'>{{new Date(post.date).toLocaleString('it-IT', { weekday: 'long', month: 'long', day: 'numeric'})}}</p>
</v-col>
</v-row>
</a>
<!-- <div class='post p-2 mb-10 bg-white'>
<div role='title' class="block pt-2 mb-3 border-b-2" >
<a target="_blank" :href='post.URL' v-html='post.title' class='text-xl font-bold text-violet-500'></a>
<span class="font-base text-base float-right">{{new Date(post.date).toLocaleString()}} - <b><a :href='post.source.link'>{{post.source.name}} <img class="inline h-5 w-5 rounded-full" :src="post.source.image || post.source.link + 'favicon.ico'" alt="" /></a></b></span>
</div>
<span class='text-xl' v-html='post.summary || post.content'></span>
</div> -->
<v-row class='post mb-8'>
<v-col cols=12 lg=4 class='py-0 pa-md-2'>
<a :href='post.URL' target='_blank'><v-img class='rounded-lg' max-height="250" :src="post.image" alt=""></v-img></a>
</v-col>
<v-col cols=12 lg=8 class='py-0 pl-md-3'>
<div>{{post.source.name}}</div>
<a class='text-h6 pa-1 font-weight-bold' :href='post.URL' target='_blank'>{{post.title}}</a>
<p class='font-weight-light'>{{new Date(post.date).toLocaleString('it-IT', { weekday: 'long', month: 'long', day: 'numeric'})}}</p>
<v-chip v-for='tag in post.tags' :key='tag.id' label small
class='ma-1 yellow accent-1'
v-text='`#${tag.name}`'></v-chip>
</v-col>
</v-row>
<!-- <div class='post p-2 mb-10 bg-white'>
<div role='title' class="block pt-2 mb-3 border-b-2" >
<a target="_blank" :href='post.URL' v-html='post.title' class='text-xl font-bold text-violet-500'></a>
<span class="font-base text-base float-right">{{new Date(post.date).toLocaleString()}} - <b><a :href='post.source.link'>{{post.source.name}} <img class="inline h-5 w-5 rounded-full" :src="post.source.image || post.source.link + 'favicon.ico'" alt="" /></a></b></span>
</div>
<span class='text-xl' v-html='post.summary || post.content'></span>
</div> -->
</template>
<script>
export default {
@ -36,13 +37,14 @@ export default {
max-height: 400px;
}
a.post{
.post a{
color: black;
text-decoration: none;
}
a.post:hover {
.post a:hover {
background-color: #fff;
text-decoration: underline;
}
</style>

View file

@ -1,12 +1,12 @@
<template>
<v-app>
<v-main light>
<v-tabs centered>
<v-tab to='/'>Home</v-tab>
<v-tab to='/groups'>Groups</v-tab>
<v-tab to='/add'>Add</v-tab>
<v-tab to='/embed'>Widget</v-tab>
</v-tabs>
<v-tabs centered>
<v-tab to='/'>Home</v-tab>
<v-tab to='/groups'>Groups</v-tab>
<v-tab to='/add'>Add</v-tab>
<v-tab to='/embed'>Widget</v-tab>
</v-tabs>
<v-container>
<Nuxt />
</v-container>

View file

@ -8,7 +8,8 @@ export class DisplayFeed extends LitElement {
return {
max: { type: Boolean },
posts: { type: Array, state: true },
feed: { type: String },
feed: { type: Object, state: true },
url: { type: String },
title: { type: String }
}
}
@ -19,7 +20,7 @@ export class DisplayFeed extends LitElement {
}
_post (post) {
return html`<div class="df-item"><h3 class="df-title">${post.title}</h3><div class="df-content">${unsafeHTML(post.content)}</div></div>`
return html`<div class="df-item"><img src="${post.image}" /><a href="${post.url}"><h3 class="df-title">${post.title}</h3></a><div class="df-content">${unsafeHTML(post.content_html || post.content_text)}</div></div>`
}
// connectedCallback () {
@ -33,23 +34,21 @@ export class DisplayFeed extends LitElement {
// }
updated (changedProperties) {
console.error('dentro changed ', changedProperties)
console.error(this.feed)
console.error(changedProperties)
if (changedProperties.has('feed')) {
console.error('feed cambiato')
this.posts = fetch(this.feed)
.then(async res => {
const posts = await res.json()
return posts.posts.map(this._post)
})
if (changedProperties.has('url')) {
this.feed = fetch(this.url)
.then(async res => {
const feed = await res.json()
const head = html`<a href="${feed.home_page_url}"><h3>${feed.title}</h3></a><small>${feed.description}</small>`
const posts = feed.items.map(this._post)
return html`${head}${posts}`
})
}
}
render() {
// const loading = html`<span>Loading...</span>`
// const title = html`<h2>${this.title}</h2>`
return html`<h2>${this.title}</h2>${until(this.posts, 'Loading...')}`
return html`${until(this.feed, 'Loading...')}`
}
// do not create a shadowDOM (we want style pollution from outside)

View file

@ -8,6 +8,7 @@
<script type="module" src="./dist/main.js"></script>
</head>
<body>
<display-feed feed='http://localhost:3000/api/source/33'></display-feed>
<display-feed url='https://radioblackout.org/feed/json'></display-feed>
<display-feed url='https://circex.org/it/news.json'></display-feed>
</body>
</html>

View file

@ -1,4 +1,4 @@
{
{
"name": "chew",
"version": "1.0.0",
"private": true,
@ -20,7 +20,7 @@
"feed": "^4.2.2",
"feedparser": "^2.2.10",
"jsdom": "^19.0.0",
"linkedom": "^0.13.0",
"linkedom": "^0.13.1",
"lit": "^2.1.1",
"nuxt": "^2.15.8",
"vue": "^2.6.14",

View file

@ -1,8 +1,20 @@
<template>
<section>
<h3 class="font-weight-bold text-h4 p-2 mt-10 rounded border-2 border-pink-500">Latest posts</h3>
<section>
<!-- <v-btn-toggle
v-model="selectedCohorts"
dense
tile
color="deep-purple accent-3"
group> -->
<v-tabs color='pink'>
<v-tab class='font-weight-bold' v-for='cohort in cohorts' :key='cohort.id' @click='selectCohort(cohort.id)' v-text='cohort.name'></v-tab>
</v-tabs>
<!-- </v-btn-toggle> -->
</section>
<h3 class="font-weight-bold text-h4 p-2 mt-10 rounded border-2 border-pink-500">{{selectedCohort.name}}</h3>
<v-container class='px-6 mx-6 max-w-80'>
<Post v-for='post in lastPosts' :key='post.URL' :post='post'/>
<Post v-for='post in posts' :key='post.URL' :post='post'/>
</v-container>
<!-- //- TextCohort.mt-1(v-for='cohort in cohorts' :key='cohort.id' :cohort='cohort')
//- li(v-for='post, id in lastPosts' :key='id')
@ -25,16 +37,26 @@
export default {
// components: { AddCohort, Cohort, TextCohort, Post },
data: () => ({ lastPosts: [], cohorts: [] }),
data: () => ({ posts: [], cohorts: [], selectedCohort: {} }),
async fetch() {
this.lastPosts = await this.$http.$get(`${process.env.baseUrl}/api/posts`)
// this.cohorts = await this.$http.$get('http://localhost:3000/api/cohorts')
this.posts = await this.$http.$get(`${process.env.baseUrl}/api/posts`)
this.cohorts = await this.$http.$get(`${process.env.baseUrl}/api/cohorts`)
this.cohorts.unshift({ id: -1, name: 'Latest' })
// const cohorts = []
},
methods: {
addCohort (cohort) {
console.error('dentro add cohort', cohort)
this.cohorts.push(cohort)
},
async selectCohort (id) {
this.selectedCohort = this.cohorts.find(c => c.id === id)
if (id === -1) {
this.posts = await this.$http.$get(`${process.env.baseUrl}/api/posts`)
} else {
const cohort = await this.$http.$get(`/api/cohort/${id}`)
this.posts = cohort.posts
}
}
}
}

View file

@ -1,11 +0,0 @@
/*
Warnings:
- A unique constraint covering the columns `[name]` on the table `Cohort` will be added. If there are existing duplicate values, this will fail.
*/
-- AlterTable
ALTER TABLE `Cohort` ADD COLUMN `dailyView` INTEGER NOT NULL DEFAULT 0;
-- CreateIndex
CREATE UNIQUE INDEX `Cohort_name_key` ON `Cohort`(`name`);

View file

@ -1,2 +0,0 @@
-- AlterTable
ALTER TABLE `Post` MODIFY `summary` TEXT NOT NULL;

View file

@ -1,3 +0,0 @@
-- AlterTable
ALTER TABLE `Post` MODIFY `updatedAt` DATETIME(3) NULL,
MODIFY `summary` TEXT NULL;

View file

@ -1,5 +0,0 @@
-- AlterTable
ALTER TABLE `Post` ADD COLUMN `pippo` VARCHAR(191) NOT NULL DEFAULT '';
-- AlterTable
ALTER TABLE `Source` MODIFY `updatedAt` DATETIME(3) NULL DEFAULT CURRENT_TIMESTAMP(3);

View file

@ -1,9 +0,0 @@
/*
Warnings:
- You are about to drop the column `pippo` on the `Post` table. All the data in the column will be lost.
*/
-- AlterTable
ALTER TABLE `Post` DROP COLUMN `pippo`,
MODIFY `content` TEXT NULL;

View file

@ -1,2 +0,0 @@
-- AlterTable
ALTER TABLE `Cohort` ADD COLUMN `description` VARCHAR(191) NULL;

View file

@ -1,17 +0,0 @@
-- AlterTable
ALTER TABLE `Post` ADD COLUMN `image` VARCHAR(191) NULL;
-- CreateTable
CREATE TABLE `_CohortToTag` (
`A` INTEGER NOT NULL,
`B` VARCHAR(191) NOT NULL,
UNIQUE INDEX `_CohortToTag_AB_unique`(`A`, `B`),
INDEX `_CohortToTag_B_index`(`B`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- AddForeignKey
ALTER TABLE `_CohortToTag` ADD FOREIGN KEY (`A`) REFERENCES `Cohort`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `_CohortToTag` ADD FOREIGN KEY (`B`) REFERENCES `Tag`(`name`) ON DELETE CASCADE ON UPDATE CASCADE;

View file

@ -2,7 +2,10 @@
CREATE TABLE `Cohort` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(191) NOT NULL,
`dailyView` INTEGER NOT NULL DEFAULT 0,
`description` VARCHAR(191) NULL,
UNIQUE INDEX `Cohort_name_key`(`name`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
@ -10,15 +13,15 @@ CREATE TABLE `Cohort` (
CREATE TABLE `Post` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`date` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NOT NULL,
`updatedAt` DATETIME(3) NULL,
`title` VARCHAR(191) NOT NULL,
`content` TEXT NOT NULL,
`summary` VARCHAR(191) NOT NULL DEFAULT '',
`content` TEXT NULL,
`summary` TEXT NULL,
`sourceId` INTEGER NOT NULL,
`URL` VARCHAR(191) NOT NULL,
`image` VARCHAR(191) NULL,
UNIQUE INDEX `Post_URL_key`(`URL`),
INDEX `Post_sourceId_fkey`(`sourceId`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
@ -28,7 +31,7 @@ CREATE TABLE `Source` (
`name` VARCHAR(191) NOT NULL,
`type` ENUM('FEED') NOT NULL DEFAULT 'FEED',
`URL` VARCHAR(191) NOT NULL,
`updatedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`updatedAt` DATETIME(3) NULL DEFAULT CURRENT_TIMESTAMP(3),
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`lastError` VARCHAR(191) NULL,
`status` ENUM('OK', 'WARNING', 'ERROR') NOT NULL DEFAULT 'OK',
@ -43,9 +46,11 @@ CREATE TABLE `Source` (
-- CreateTable
CREATE TABLE `Tag` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(191) NOT NULL,
PRIMARY KEY (`name`)
UNIQUE INDEX `Tag_name_key`(`name`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
@ -60,7 +65,7 @@ CREATE TABLE `_CohortToSource` (
-- CreateTable
CREATE TABLE `_PostToTag` (
`A` INTEGER NOT NULL,
`B` VARCHAR(191) NOT NULL,
`B` INTEGER NOT NULL,
UNIQUE INDEX `_PostToTag_AB_unique`(`A`, `B`),
INDEX `_PostToTag_B_index`(`B`)
@ -79,4 +84,4 @@ ALTER TABLE `_CohortToSource` ADD FOREIGN KEY (`B`) REFERENCES `Source`(`id`) ON
ALTER TABLE `_PostToTag` ADD FOREIGN KEY (`A`) REFERENCES `Post`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `_PostToTag` ADD FOREIGN KEY (`B`) REFERENCES `Tag`(`name`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `_PostToTag` ADD FOREIGN KEY (`B`) REFERENCES `Tag`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

View file

@ -0,0 +1,25 @@
/*
Warnings:
- You are about to drop the column `sourceId` on the `Post` table. All the data in the column will be lost.
- You are about to drop the `Source` table. If the table is not empty, all the data it contains will be lost.
- You are about to drop the `_CohortToSource` table. If the table is not empty, all the data it contains will be lost.
*/
-- DropForeignKey
ALTER TABLE `Post` DROP FOREIGN KEY `Post_sourceId_fkey`;
-- DropForeignKey
ALTER TABLE `_CohortToSource` DROP FOREIGN KEY `_CohortToSource_ibfk_1`;
-- DropForeignKey
ALTER TABLE `_CohortToSource` DROP FOREIGN KEY `_CohortToSource_ibfk_2`;
-- AlterTable
ALTER TABLE `Post` DROP COLUMN `sourceId`;
-- DropTable
DROP TABLE `Source`;
-- DropTable
DROP TABLE `_CohortToSource`;

View file

@ -0,0 +1,30 @@
/*
Warnings:
- Added the required column `sourceId` to the `Post` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE `Post` ADD COLUMN `sourceId` INTEGER NOT NULL;
-- CreateTable
CREATE TABLE `Source` (
`id` INTEGER NOT NULL AUTO_INCREMENT,
`name` VARCHAR(191) NOT NULL,
`type` ENUM('FEED') NOT NULL DEFAULT 'FEED',
`URL` VARCHAR(191) NOT NULL,
`updatedAt` DATETIME(3) NULL DEFAULT CURRENT_TIMESTAMP(3),
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
`lastError` VARCHAR(191) NULL,
`status` ENUM('OK', 'WARNING', 'ERROR') NOT NULL DEFAULT 'OK',
`nErrors` INTEGER NOT NULL DEFAULT 0,
`description` VARCHAR(191) NULL,
`image` LONGTEXT NULL,
`link` VARCHAR(191) NULL,
UNIQUE INDEX `Source_URL_key`(`URL`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- AddForeignKey
ALTER TABLE `Post` ADD CONSTRAINT `Post_sourceId_fkey` FOREIGN KEY (`sourceId`) REFERENCES `Source`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

View file

@ -0,0 +1,11 @@
/*
Warnings:
- You are about to drop the column `sourceId` on the `Post` table. All the data in the column will be lost.
*/
-- DropForeignKey
ALTER TABLE `Post` DROP FOREIGN KEY `Post_sourceId_fkey`;
-- AlterTable
ALTER TABLE `Post` DROP COLUMN `sourceId`;

View file

@ -0,0 +1,50 @@
/*
Warnings:
- You are about to drop the `_PostToTag` table. If the table is not empty, all the data it contains will be lost.
- Added the required column `sourceId` to the `Post` table without a default value. This is not possible if the table is not empty.
*/
-- DropForeignKey
ALTER TABLE `_PostToTag` DROP FOREIGN KEY `_PostToTag_ibfk_1`;
-- DropForeignKey
ALTER TABLE `_PostToTag` DROP FOREIGN KEY `_PostToTag_ibfk_2`;
-- AlterTable
ALTER TABLE `Post` ADD COLUMN `sourceId` INTEGER NOT NULL;
-- DropTable
DROP TABLE `_PostToTag`;
-- CreateTable
CREATE TABLE `TagsOnPosts` (
`tagId` INTEGER NOT NULL,
`postId` INTEGER NOT NULL,
PRIMARY KEY (`postId`, `tagId`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- CreateTable
CREATE TABLE `_CohortToSource` (
`A` INTEGER NOT NULL,
`B` INTEGER NOT NULL,
UNIQUE INDEX `_CohortToSource_AB_unique`(`A`, `B`),
INDEX `_CohortToSource_B_index`(`B`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- AddForeignKey
ALTER TABLE `Post` ADD CONSTRAINT `Post_sourceId_fkey` FOREIGN KEY (`sourceId`) REFERENCES `Source`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `TagsOnPosts` ADD CONSTRAINT `TagsOnPosts_postId_fkey` FOREIGN KEY (`postId`) REFERENCES `Post`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `TagsOnPosts` ADD CONSTRAINT `TagsOnPosts_tagId_fkey` FOREIGN KEY (`tagId`) REFERENCES `Tag`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `_CohortToSource` ADD FOREIGN KEY (`A`) REFERENCES `Cohort`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `_CohortToSource` ADD FOREIGN KEY (`B`) REFERENCES `Source`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

View file

@ -0,0 +1,32 @@
/*
Warnings:
- You are about to drop the `TagsOnPosts` table. If the table is not empty, all the data it contains will be lost.
*/
-- DropForeignKey
ALTER TABLE `TagsOnPosts` DROP FOREIGN KEY `TagsOnPosts_postId_fkey`;
-- DropForeignKey
ALTER TABLE `TagsOnPosts` DROP FOREIGN KEY `TagsOnPosts_tagId_fkey`;
-- AlterTable
ALTER TABLE `Post` MODIFY `title` VARCHAR(191) NOT NULL DEFAULT '';
-- DropTable
DROP TABLE `TagsOnPosts`;
-- CreateTable
CREATE TABLE `_PostToTag` (
`A` INTEGER NOT NULL,
`B` INTEGER NOT NULL,
UNIQUE INDEX `_PostToTag_AB_unique`(`A`, `B`),
INDEX `_PostToTag_B_index`(`B`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- AddForeignKey
ALTER TABLE `_PostToTag` ADD FOREIGN KEY (`A`) REFERENCES `Post`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE `_PostToTag` ADD FOREIGN KEY (`B`) REFERENCES `Tag`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

View file

@ -13,23 +13,28 @@ model Cohort {
dailyView Int @default(0)
description String?
sources Source[]
tags Tag[]
}
model Post {
id Int @id @default(autoincrement())
date DateTime @default(now())
updatedAt DateTime? @updatedAt
title String
content String? @db.Text
summary String? @db.Text
sourceId Int
URL String @unique
id Int @id @default(autoincrement())
date DateTime @default(now())
updatedAt DateTime? @updatedAt
title String @default("")
content String? @db.Text
summary String? @db.Text
URL String @unique
image String?
source Source @relation(fields: [sourceId], references: [id])
sourceId Int
tags Tag[]
source Source @relation(fields: [sourceId], references: [id])
@@index([sourceId], map: "Post_sourceId_fkey")
// @@index([sourceId], map: "Post_sourceId_fkey")
}
model Tag {
id Int @id @default(autoincrement())
name String @unique
posts Post[]
}
model Source {
@ -49,12 +54,6 @@ model Source {
cohorts Cohort[]
}
model Tag {
name String @id
cohorts Cohort[]
posts Post[]
}
enum Source_type {
FEED
}

View file

@ -72,23 +72,26 @@ const manager = {
const enclosuresImages = post.enclosures.filter(e => e.type.includes('image'))
image = enclosuresImages.length ? enclosuresImages[0].url : image
await prisma.post.create({ include: { tags: true }, data: {
const data = {
date: post.pubdate,
title: post.title,
URL: post.link,
content: html,
image,
summary: post.summary,
sourceId: source.id,
// tags: {
// connect: post.categories.map(name => ({ name })),
// create: post.categories.map(name => ({ name }))
// // create: { name },
// // where: { name }
// // }))
// // // create: post.categories.map( name => ({ name }))
// }
}})
source: { connect: { id: source.id } }
}
if (post.categories.length) {
data.tags = { connectOrCreate:
post.categories.map(name => ({
create: { name },
where: { name }
}))}
}
await prisma.post.create({ include: { tags: true }, data })
} catch (e) { console.error(e) }
// console.log(post.title)
// console.log(JSON.stringify(post, ' ', 4))
@ -127,7 +130,7 @@ const prisma = new PrismaClient()
let queue
export async function add (s) {
queue.add(s, { jobId: s.id, repeat: { every: 10000 } })
queue.add(s, { jobId: s.id, repeat: { every: 100000 } })
manager.get(s)
}
@ -141,8 +144,7 @@ async function main () {
const sources = await prisma.source.findMany()
// sources.forEach(manager.get)
// manager.get()
// console.error(sources.map(s => s.URL))
sources.forEach( s => queue.add(s, { jobId: s.id, repeat: { every: 10000 } }))
sources.forEach( s => queue.add(s, { jobId: s.id, repeat: { every: 100000 } }))
}

View file

@ -52,7 +52,7 @@ export function parseContent (html) {
attributeNameCheck: /(feed|id|theme)/,
allowCustomizedBuiltInElements: true, // allow customized built-ins
},
ALLOWED_TAGS: ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'br', 'i', 'span', 'img', 'figure',
ALLOWED_TAGS: ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'br', 'i', 'span', 'img', 'figure', 'picture', 'audio', 'iframe',
'h6', 'b', 'a', 'li', 'ul', 'ol', 'code', 'blockquote', 'u', 's', 'strong'],
ALLOWED_ATTR: ['href', 'target', 'src']
})

View file

@ -4,7 +4,7 @@ import express from 'express'
const app = express.Router()
app.get('/', async (req, res) => {
res.json(await prisma.post.findMany({ take: 10, orderBy: { date: 'desc' }, include: { source: true }}))
res.json(await prisma.post.findMany({ take: 10, orderBy: { date: 'desc' }, include: { tags: true, source: true }}))
})
export default app

192
yarn.lock
View file

@ -1343,22 +1343,22 @@
resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1"
integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==
"@prisma/client@^3.8.1":
version "3.8.1"
resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.8.1.tgz#c11eda8e84760867552ffde4de7b48fb2cf1e1c0"
integrity sha512-NxD1Xbkx1eT1mxSwo1RwZe665mqBETs0VxohuwNfFIxMqcp0g6d4TgugPxwZ4Jb4e5wCu8mQ9quMedhNWIWcZQ==
"@prisma/client@^3.9.2":
version "3.9.2"
resolved "https://registry.yarnpkg.com/@prisma/client/-/client-3.9.2.tgz#ad17dcfb702842573fe6ec3b7dc4615eff8d8fc6"
integrity sha512-VlEIYVMyfFZHbVBOlunPl47gmP/Z0zzPjPj8I7uKEIaABqrUy50ru3XS0aZd8GFvevVwt7p91xxkUjNjrWhKAQ==
dependencies:
"@prisma/engines-version" "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f"
"@prisma/engines-version" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009"
"@prisma/engines-version@3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f":
version "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f"
resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f.tgz#4c8d9744b5e54650a8ba5fde0a711399d6adba24"
integrity sha512-G2JH6yWt6ixGKmsRmVgaQYahfwMopim0u/XLIZUo2o/mZ5jdu7+BL+2V5lZr7XiG1axhyrpvlyqE/c0OgYSl3g==
"@prisma/engines-version@3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009":
version "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009"
resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz#ea03ffa723382a526dc6625ce6eae9b6ad984400"
integrity sha512-5Dh+qTDhpPR66w6NNAnPs+/W/Qt4r1DSd+qhfPFcDThUK4uxoZKGlPb2IYQn5LL+18aIGnmteDf7BnVMmvBNSQ==
"@prisma/engines@3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f":
version "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f"
resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f.tgz#4479099b99f6a082ce5843ee7208943ccedd127f"
integrity sha512-bHYubuItSN/DGYo36aDu7xJiJmK52JOSHs4MK+KbceAtwS20BCWadRgtpQ3iZ2EXfN/B1T0iCXlNraaNwnpU2w==
"@prisma/engines@3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009":
version "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009"
resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009.tgz#e5c345cdedb7be83d11c1e0c5ab61d866b411256"
integrity sha512-qM+uJbkelB21bnK44gYE049YTHIjHysOuj0mj5U2gDGyNLfmiazlggzFPCgEjgme4U5YB2tYs6Z5Hq08Kl8pjA==
"@tootallnate/once@2":
version "2.0.0"
@ -1676,22 +1676,22 @@
"@webassemblyjs/wast-parser" "1.9.0"
"@xtuc/long" "4.2.2"
"@webpack-cli/configtest@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.0.tgz#8342bef0badfb7dfd3b576f2574ab80c725be043"
integrity sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==
"@webpack-cli/configtest@^1.1.1":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.1.tgz#9f53b1b7946a6efc2a749095a4f450e2932e8356"
integrity sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==
"@webpack-cli/info@^1.4.0":
version "1.4.0"
resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.0.tgz#b9179c3227ab09cbbb149aa733475fcf99430223"
integrity sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==
"@webpack-cli/info@^1.4.1":
version "1.4.1"
resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.1.tgz#2360ea1710cbbb97ff156a3f0f24556e0fc1ebea"
integrity sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==
dependencies:
envinfo "^7.7.3"
"@webpack-cli/serve@^1.6.0":
version "1.6.0"
resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.0.tgz#2c275aa05c895eccebbfc34cfb223c6e8bd591a2"
integrity sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==
"@webpack-cli/serve@^1.6.1":
version "1.6.1"
resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.1.tgz#0de2875ac31b46b6c5bb1ae0a7d7f0ba5678dffe"
integrity sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==
"@xtuc/ieee754@^1.2.0":
version "1.2.0"
@ -2259,16 +2259,17 @@ builtin-status-codes@^3.0.0:
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
bull@^4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/bull/-/bull-4.2.1.tgz#c5a7e1496c7903274ce90192e4e5cb18f6c866c0"
integrity sha512-YkCQZMOub++siHw3SbYYXZ5xGEn6Tt3BPoCVq/irPNCxUqUYzta8yDlXyyAsfMKMVj0M7PcnynUabfMf9PFpOA==
bull@^4.5.1:
version "4.5.1"
resolved "https://registry.yarnpkg.com/bull/-/bull-4.5.1.tgz#55a96837e95b0bde2ded835bcc3b2725b7f6367c"
integrity sha512-tF47nzpjAbrvI6ef0dGfQLPthoFPwxSoqBG4jwvSYs5XZ7RRHDHlspjMMl6HOgbx/c9oDWN2AFFyaGMKSn+5yQ==
dependencies:
cron-parser "^2.13.0"
cron-parser "^4.2.1"
debuglog "^1.0.0"
get-port "^5.1.1"
ioredis "^4.27.0"
lodash "^4.17.21"
msgpackr "^1.5.2"
p-timeout "^3.2.0"
semver "^7.3.2"
uuid "^8.3.0"
@ -2806,10 +2807,10 @@ core-js@^2.6.5:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec"
integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==
core-js@^3.20.3:
version "3.20.3"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.20.3.tgz#c710d0a676e684522f3db4ee84e5e18a9d11d69a"
integrity sha512-vVl8j8ph6tRS3B8qir40H7yw7voy17xL0piAjlbBUsH7WIfzoedL/ZOr1OV9FyZQLWXsayOJyV4tnRyXR85/ag==
core-js@^3.21.0:
version "3.21.0"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.21.0.tgz#f479dbfc3dffb035a0827602dd056839a774aa71"
integrity sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ==
core-util-is@~1.0.0:
version "1.0.3"
@ -2877,13 +2878,12 @@ create-require@^1.1.1:
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
cron-parser@^2.13.0:
version "2.18.0"
resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.18.0.tgz#de1bb0ad528c815548371993f81a54e5a089edcf"
integrity sha512-s4odpheTyydAbTBQepsqd2rNWGa2iV3cyo8g7zbI2QQYGLVsfbhmwukayS1XHppe02Oy1fg7mg6xoaraVJeEcg==
cron-parser@^4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-4.2.1.tgz#b43205d05ccd5c93b097dae64f3bd811f5993af3"
integrity sha512-5sJBwDYyCp+0vU5b7POl8zLWfgV5fOHxlc45FWoWdHecGC7MQHCjx0CHivCMRnGFovghKhhyYM+Zm9DcY5qcHg==
dependencies:
is-nan "^1.3.0"
moment-timezone "^0.5.31"
luxon "^1.28.0"
cross-spawn@^7.0.3:
version "7.0.3"
@ -2979,7 +2979,7 @@ css-select@^2.0.0:
domutils "^1.7.0"
nth-check "^1.0.2"
css-select@^4.1.3:
css-select@^4.1.3, css-select@^4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.2.1.tgz#9e665d6ae4c7f9d65dbe69d0316e3221fb274cdd"
integrity sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==
@ -3354,10 +3354,10 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.2.2, domhandler@^4.3.0:
dependencies:
domelementtype "^2.2.0"
dompurify@^2.3.4:
version "2.3.4"
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.4.tgz#1cf5cf0105ccb4debdf6db162525bd41e6ddacc6"
integrity sha512-6BVcgOAVFXjI0JTjEvZy901Rghm+7fDQOrNIcxB4+gdhj6Kwp6T9VBhBY/AbagKHJocRkDYGd6wvI+p4/10xtQ==
dompurify@^2.3.5:
version "2.3.5"
resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.3.5.tgz#c83ed5a3ae5ce23e52efe654ea052ffb358dd7e3"
integrity sha512-kD+f8qEaa42+mjdOpKeztu9Mfx5bv9gVLO6K9jRx4uGvh6Wv06Srn4jr1wPNY2OOUGGSKHNFN+A8MA3v0E0QAQ==
domutils@^1.7.0:
version "1.7.0"
@ -4377,7 +4377,7 @@ htmlparser2@^6.1.0:
domutils "^2.5.2"
entities "^2.0.0"
htmlparser2@^7.1.2:
htmlparser2@^7.2.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-7.2.0.tgz#8817cdea38bbc324392a90b1990908e81a65f5a5"
integrity sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==
@ -4791,14 +4791,6 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
dependencies:
is-extglob "^2.1.1"
is-nan@^1.3.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.3.2.tgz#043a54adea31748b55b6cd4e09aadafa69bd9e1d"
integrity sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==
dependencies:
call-bind "^1.0.0"
define-properties "^1.1.3"
is-negative-zero@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
@ -5108,15 +5100,15 @@ levn@~0.3.0:
prelude-ls "~1.1.2"
type-check "~0.3.2"
linkedom@^0.13.0:
version "0.13.0"
resolved "https://registry.yarnpkg.com/linkedom/-/linkedom-0.13.0.tgz#15ef2751ee8610a653ee9bb550907ed133bed0a5"
integrity sha512-QwWqKvKeWKKQrmMX9JPGtCZ6gXatp1/eKoUPGx0CoXFL8iZAtc6+rMkz2zZuVSjJw7QCw1oj/VH978Zc6WQjfA==
linkedom@^0.13.2:
version "0.13.2"
resolved "https://registry.yarnpkg.com/linkedom/-/linkedom-0.13.2.tgz#455187a4eb9a00f41e8a736c5d362ea7e1cafc05"
integrity sha512-lQPdDnml1Rl/T8QW3j10jJ37LMRcZqryy5kwHDIw9AYMabeE4P6kMp2mqJXWjjeXxJ4ebJC05Qx9Xxs4jWhNMw==
dependencies:
css-select "^4.1.3"
css-select "^4.2.1"
cssom "^0.5.0"
html-escaper "^3.0.3"
htmlparser2 "^7.1.2"
htmlparser2 "^7.2.0"
uhyphen "^0.1.0"
lit-element@^3.1.0:
@ -5134,10 +5126,10 @@ lit-html@^2.1.0:
dependencies:
"@types/trusted-types" "^2.0.2"
lit@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/lit/-/lit-2.1.1.tgz#65f43abca945988f696391f762c645ba51966b0b"
integrity sha512-yqDqf36IhXwOxIQSFqCMgpfvDCRdxLCLZl7m/+tO5C9W/OBHUj17qZpiMBT35v97QMVKcKEi1KZ3hZRyTwBNsQ==
lit@^2.1.3:
version "2.1.3"
resolved "https://registry.yarnpkg.com/lit/-/lit-2.1.3.tgz#b8a94ae2303eb6eb802a6f28cfdf3f288d4fa879"
integrity sha512-46KtKy7iDoY3wZ5VSqBlXll6J/tli5gRMPFRWi5qQ01lvIqcO+dYQwb1l1NYZjbzcHnGnCKrMb8nDv7/ZE4Y4g==
dependencies:
"@lit/reactive-element" "^1.1.0"
lit-element "^3.1.0"
@ -5295,6 +5287,11 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
luxon@^1.28.0:
version "1.28.0"
resolved "https://registry.yarnpkg.com/luxon/-/luxon-1.28.0.tgz#e7f96daad3938c06a62de0fb027115d251251fbf"
integrity sha512-TfTiyvZhwBYM/7QdAVDh+7dBTBA29v4ik0Ce9zda3Mnf8on1S5KJI8P2jKFZ8+5C0jhmr0KwJEO/Wdpm0VeWJQ==
make-dir@^1.0.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
@ -5579,18 +5576,6 @@ mkdirp@^1.0.3, mkdirp@^1.0.4:
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
moment-timezone@^0.5.31:
version "0.5.34"
resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.34.tgz#a75938f7476b88f155d3504a9343f7519d9a405c"
integrity sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==
dependencies:
moment ">= 2.9.0"
"moment@>= 2.9.0":
version "2.29.1"
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==
move-concurrently@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"
@ -5628,6 +5613,21 @@ ms@2.1.3:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
msgpackr-extract@^1.0.14:
version "1.0.16"
resolved "https://registry.yarnpkg.com/msgpackr-extract/-/msgpackr-extract-1.0.16.tgz#701c4f6e6f25c100ae84557092274e8fffeefe45"
integrity sha512-fxdRfQUxPrL/TizyfYfMn09dK58e+d65bRD/fcaVH4052vj30QOzzqxcQIS7B0NsqlypEQ/6Du3QmP2DhWFfCA==
dependencies:
nan "^2.14.2"
node-gyp-build "^4.2.3"
msgpackr@^1.5.2:
version "1.5.4"
resolved "https://registry.yarnpkg.com/msgpackr/-/msgpackr-1.5.4.tgz#2b6ea6cb7d79c0ad98fc76c68163c48eda50cf0d"
integrity sha512-Z7w5Jg+2Q9z9gJxeM68d7tSuWZZGnFIRhZnyqcZCa/1dKkhOCNvR1TUV3zzJ3+vj78vlwKRzUgVDlW4jiSOeDA==
optionalDependencies:
msgpackr-extract "^1.0.14"
mustache@^2.3.0:
version "2.3.2"
resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.2.tgz#a6d4d9c3f91d13359ab889a812954f9230a3d0c5"
@ -5638,7 +5638,7 @@ mute-stream@0.0.8:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
nan@^2.12.1:
nan@^2.12.1, nan@^2.14.2:
version "2.15.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee"
integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==
@ -5697,6 +5697,11 @@ node-fetch@^2.6.1:
dependencies:
whatwg-url "^5.0.0"
node-gyp-build@^4.2.3:
version "4.3.0"
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3"
integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==
node-html-parser@^3.2.0:
version "3.3.6"
resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-3.3.6.tgz#fdbb3ba16d1252d7197ec39f0260d9c10ef33590"
@ -6926,12 +6931,12 @@ pretty-time@^1.1.0:
resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e"
integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==
prisma@^3.8.1:
version "3.8.1"
resolved "https://registry.yarnpkg.com/prisma/-/prisma-3.8.1.tgz#44395cef7cbb1ea86216cb84ee02f856c08a7873"
integrity sha512-Q8zHwS9m70TaD7qI8u+8hTAmiTpK+IpvRYF3Rgb/OeWGQJOMgZCFFvNCiSfoLEQ95wilK7ctW3KOpc9AuYnRUA==
prisma@^3.9.2:
version "3.9.2"
resolved "https://registry.yarnpkg.com/prisma/-/prisma-3.9.2.tgz#cc2da4e8db91231dea7465adf9db6e19f11032a9"
integrity sha512-i9eK6cexV74OgeWaH3+e6S07kvC9jEZTl6BqtBH398nlCU0tck7mE9dicY6YQd+euvMjjCtY89q4NgmaPnUsSg==
dependencies:
"@prisma/engines" "3.8.0-43.34df67547cf5598f5a6cd3eb45f14ee70c3fb86f"
"@prisma/engines" "3.9.0-58.bcc2ff906db47790ee902e7bbc76d7ffb1893009"
process-nextick-args@~2.0.0:
version "2.0.1"
@ -8559,11 +8564,16 @@ vuetify-loader@^1.7.3:
file-loader "^6.2.0"
loader-utils "^2.0.0"
vuetify@^2.6, vuetify@^2.6.1:
vuetify@^2.6:
version "2.6.2"
resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-2.6.2.tgz#1ed4d3c9e734d55202bd566b789cce0e0013279a"
integrity sha512-nx3uZkO8MZNMshUEh1xKaQ1hQYepNwWFn3FVxKt+XBVf7ZFscd0GS/a3KZo4B3baXQmziCQAZKNIQF5IWeaIUw==
vuetify@^2.6.3:
version "2.6.3"
resolved "https://registry.yarnpkg.com/vuetify/-/vuetify-2.6.3.tgz#b33ede2da958a40c6ced0ad1f4eda737984b3967"
integrity sha512-Zfiz2DZnp1DvxqGaSCGqGjv4mPNAurJJ5Xwy7bzNzIySGLlRdlO8UH6aNWnSgfaAsLP3voxadSGDm6tKM8Ys7w==
vuex@^3.6.2:
version "3.6.2"
resolved "https://registry.yarnpkg.com/vuex/-/vuex-3.6.2.tgz#236bc086a870c3ae79946f107f16de59d5895e71"
@ -8595,8 +8605,10 @@ watchpack@^1.7.4:
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453"
integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==
dependencies:
chokidar "^3.4.1"
graceful-fs "^4.1.2"
neo-async "^2.5.0"
watchpack-chokidar2 "^2.0.1"
optionalDependencies:
chokidar "^3.4.1"
watchpack-chokidar2 "^2.0.1"
@ -8631,15 +8643,15 @@ webpack-bundle-analyzer@^4.4.1:
sirv "^1.0.7"
ws "^7.3.1"
webpack-cli@^4.9.1:
version "4.9.1"
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.1.tgz#b64be825e2d1b130f285c314caa3b1ba9a4632b3"
integrity sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==
webpack-cli@^4.9.2:
version "4.9.2"
resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.9.2.tgz#77c1adaea020c3f9e2db8aad8ea78d235c83659d"
integrity sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==
dependencies:
"@discoveryjs/json-ext" "^0.5.0"
"@webpack-cli/configtest" "^1.1.0"
"@webpack-cli/info" "^1.4.0"
"@webpack-cli/serve" "^1.6.0"
"@webpack-cli/configtest" "^1.1.1"
"@webpack-cli/info" "^1.4.1"
"@webpack-cli/serve" "^1.6.1"
colorette "^2.0.14"
commander "^7.0.0"
execa "^5.0.0"