Merge branch 'master' of github.com:Human-Connection/Human-Connection into 384-emotions-on-posts

This commit is contained in:
Matt Rider 2019-08-02 16:55:54 +02:00
commit d1d82a0051
37 changed files with 253 additions and 271 deletions

View File

@ -72,19 +72,19 @@
"lodash": "~4.17.14",
"merge-graphql-schemas": "^1.7.0",
"metascraper": "^4.10.3",
"metascraper-audio": "^5.5.0",
"metascraper-audio": "^5.6.5",
"metascraper-author": "^5.6.3",
"metascraper-clearbit-logo": "^5.3.0",
"metascraper-date": "^5.6.3",
"metascraper-description": "^5.5.0",
"metascraper-date": "^5.6.5",
"metascraper-description": "^5.6.5",
"metascraper-image": "^5.6.3",
"metascraper-lang": "^5.6.3",
"metascraper-lang-detector": "^4.8.5",
"metascraper-logo": "^5.5.0",
"metascraper-publisher": "^5.6.3",
"metascraper-soundcloud": "^5.5.3",
"metascraper-logo": "^5.6.5",
"metascraper-publisher": "^5.6.5",
"metascraper-soundcloud": "^5.6.5",
"metascraper-title": "^5.6.3",
"metascraper-url": "^5.5.0",
"metascraper-url": "^5.6.5",
"metascraper-video": "^5.6.3",
"metascraper-youtube": "^5.6.3",
"neo4j-driver": "~1.7.5",
@ -115,7 +115,7 @@
"cucumber": "~5.1.0",
"eslint": "~6.1.0",
"eslint-config-prettier": "~6.0.0",
"eslint-config-standard": "~12.0.0",
"eslint-config-standard": "~13.0.1",
"eslint-plugin-import": "~2.18.2",
"eslint-plugin-jest": "~22.14.1",
"eslint-plugin-node": "~9.1.0",

View File

@ -35,8 +35,8 @@ export default class ActivityPub {
handleFollowActivity(activity) {
debug(`inside FOLLOW ${activity.actor}`)
let toActorName = extractNameFromId(activity.object)
let fromDomain = extractDomainFromUrl(activity.actor)
const toActorName = extractNameFromId(activity.object)
const fromDomain = extractDomainFromUrl(activity.actor)
const dataSource = this.dataSource
return new Promise((resolve, reject) => {
@ -53,7 +53,7 @@ export default class ActivityPub {
toActorObject = JSON.parse(toActorObject)
await this.dataSource.addSharedInboxEndpoint(toActorObject.endpoints.sharedInbox)
let followersCollectionPage = await this.dataSource.getFollowersCollectionPage(
const followersCollectionPage = await this.dataSource.getFollowersCollectionPage(
activity.object,
)
@ -222,6 +222,7 @@ export default class ActivityPub {
})
}
}
async trySend(activity, fromName, host, url, tries = 5) {
try {
return await signAndSend(activity, fromName, host, url)

View File

@ -2,6 +2,7 @@ export default class Collections {
constructor(dataSource) {
this.dataSource = dataSource
}
getFollowersCollection(actorId) {
return this.dataSource.getFollowersCollection(actorId)
}

View File

@ -303,6 +303,7 @@ export default class NitroDataSource {
}),
)
}
async saveFollowingCollectionPage(followingCollection, onlyNewestItem = true) {
debug('inside saveFollowers')
let orderedItems = followingCollection.orderedItems
@ -470,6 +471,7 @@ export default class NitroDataSource {
throwErrorIfApolloErrorOccurred(result)
return result.data.SharedInboxEnpoint
}
async addSharedInboxEndpoint(uri) {
try {
const result = await this.client.mutate({

View File

@ -97,7 +97,7 @@ export function verifySignature(url, headers) {
// private: signing
function constructSigningString(url, headers) {
const urlObj = new URL(url)
let signingString = `(request-target): post ${urlObj.pathname}${
const signingString = `(request-target): post ${urlObj.pathname}${
urlObj.search !== '' ? urlObj.search : ''
}`
return Object.keys(headers).reduce((result, key) => {

View File

@ -40,70 +40,72 @@ export function signAndSend(activity, fromName, targetDomain, url) {
// fix for development: replace with http
url = url.indexOf('localhost') > -1 ? url.replace('https', 'http') : url
debug(`passhprase = ${CONFIG.PRIVATE_KEY_PASSPHRASE}`)
return new Promise(async (resolve, reject) => {
return new Promise((resolve, reject) => {
debug('inside signAndSend')
// get the private key
const result = await activityPub.dataSource.client.query({
query: gql`
activityPub.dataSource.client
.query({
query: gql`
query {
User(slug: "${fromName}") {
privateKey
}
}
`,
})
})
.then(result => {
if (result.error) {
reject(result.error)
} else {
// add security context
const parsedActivity = JSON.parse(activity)
if (Array.isArray(parsedActivity['@context'])) {
parsedActivity['@context'].push('https://w3id.org/security/v1')
} else {
const context = [parsedActivity['@context']]
context.push('https://w3id.org/security/v1')
parsedActivity['@context'] = context
}
if (result.error) {
reject(result.error)
} else {
// add security context
const parsedActivity = JSON.parse(activity)
if (Array.isArray(parsedActivity['@context'])) {
parsedActivity['@context'].push('https://w3id.org/security/v1')
} else {
const context = [parsedActivity['@context']]
context.push('https://w3id.org/security/v1')
parsedActivity['@context'] = context
}
// deduplicate context strings
parsedActivity['@context'] = [...new Set(parsedActivity['@context'])]
const privateKey = result.data.User[0].privateKey
const date = new Date().toUTCString()
// deduplicate context strings
parsedActivity['@context'] = [...new Set(parsedActivity['@context'])]
const privateKey = result.data.User[0].privateKey
const date = new Date().toUTCString()
debug(`url = ${url}`)
request(
{
url: url,
headers: {
Host: targetDomain,
Date: date,
Signature: createSignature({
privateKey,
keyId: `${activityPub.endpoint}/activitypub/users/${fromName}#main-key`,
url,
debug(`url = ${url}`)
request(
{
url: url,
headers: {
Host: targetDomain,
Date: date,
Signature: createSignature({
privateKey,
keyId: `${activityPub.endpoint}/activitypub/users/${fromName}#main-key`,
url,
headers: {
Host: targetDomain,
Date: date,
'Content-Type': 'application/activity+json',
},
}),
'Content-Type': 'application/activity+json',
},
}),
'Content-Type': 'application/activity+json',
},
method: 'POST',
body: JSON.stringify(parsedActivity),
},
(error, response) => {
if (error) {
debug(`Error = ${JSON.stringify(error, null, 2)}`)
reject(error)
} else {
debug('Response Headers:', JSON.stringify(response.headers, null, 2))
debug('Response Body:', JSON.stringify(response.body, null, 2))
resolve()
}
},
)
}
method: 'POST',
body: JSON.stringify(parsedActivity),
},
(error, response) => {
if (error) {
debug(`Error = ${JSON.stringify(error, null, 2)}`)
reject(error)
} else {
debug('Response Headers:', JSON.stringify(response.headers, null, 2))
debug('Response Body:', JSON.stringify(response.body, null, 2))
resolve()
}
},
)
}
})
})
}

View File

@ -103,8 +103,6 @@ const invitationLimitReached = rule({
return record.get('limitReached')
})
return limitReached
} catch (e) {
throw e
} finally {
session.close()
}

View File

@ -1,6 +1,6 @@
import slugify from 'slug'
export default async function uniqueSlug(string, isUnique) {
let slug = slugify(string || 'anonymous', {
const slug = slugify(string || 'anonymous', {
lower: true,
})
if (await isUnique(slug)) return slug

View File

@ -8,8 +8,8 @@ import linkifyHtml from 'linkifyjs/html'
const embedToAnchor = content => {
const $ = cheerio.load(content)
$('div[data-url-embed]').each((i, el) => {
let url = el.attribs['data-url-embed']
let aTag = $(`<a href="${url}" target="_blank" data-url-embed="">${url}</a>`)
const url = el.attribs['data-url-embed']
const aTag = $(`<a href="${url}" target="_blank" data-url-embed="">${url}</a>`)
$(el).replaceWith(aTag)
})
return $('body').html()
@ -87,7 +87,7 @@ function clean(dirty) {
b: 'strong',
s: 'strike',
img: function(tagName, attribs) {
let src = attribs.src
const src = attribs.src
if (!src) {
// remove broken images

View File

@ -18,7 +18,7 @@ export default {
false,
)
let transactionRes = await session.run(
const transactionRes = await session.run(
`
MATCH (post:Post {id: $postId}), (comment:Comment {id: $commentId}), (author:User {id: $userId})
MERGE (post)<-[:COMMENTS]-(comment)<-[:WROTE]-(author)

View File

@ -5,7 +5,6 @@ import { host, login, gql } from '../../jest/helpers'
const factory = Factory()
let client
let createCommentVariables
let createPostVariables
let createCommentVariablesSansPostId
let createCommentVariablesWithNonExistentPost
let userParams
@ -26,7 +25,7 @@ const createCommentMutation = gql`
}
}
`
createPostVariables = {
const createPostVariables = {
id: 'p1',
title: 'post to comment on',
content: 'please comment on me',
@ -325,7 +324,7 @@ describe('ManageComments', () => {
}
`
let deleteCommentVariables = {
const deleteCommentVariables = {
id: 'c456',
}

View File

@ -4,7 +4,7 @@ export default {
const { id, type } = params
const session = context.driver.session()
let transactionRes = await session.run(
const transactionRes = await session.run(
`MATCH (node {id: $id}), (user:User {id: $userId})
WHERE $type IN labels(node) AND NOT $id = $userId
MERGE (user)-[relation:FOLLOWS]->(node)
@ -29,7 +29,7 @@ export default {
const { id, type } = params
const session = context.driver.session()
let transactionRes = await session.run(
const transactionRes = await session.run(
`MATCH (user:User {id: $userId})-[relation:FOLLOWS]->(node {id: $id})
WHERE $type IN labels(node)
DELETE relation

View File

@ -41,8 +41,7 @@ describe('follow', () => {
describe('follow user', () => {
describe('unauthenticated follow', () => {
it('throws authorization error', async () => {
let client
client = new GraphQLClient(host)
const client = new GraphQLClient(host)
await expect(client.request(mutationFollowUser('u2'))).rejects.toThrow('Not Authorised')
})
})
@ -93,8 +92,7 @@ describe('follow', () => {
// follow
await clientUser1.request(mutationFollowUser('u2'))
// unfollow
let client
client = new GraphQLClient(host)
const client = new GraphQLClient(host)
await expect(client.request(mutationUnfollowUser('u2'))).rejects.toThrow('Not Authorised')
})
})

View File

@ -4,7 +4,7 @@ import { host, login } from '../../jest/helpers'
const factory = Factory()
let client
let userParams = {
const userParams = {
id: 'you',
email: 'test@example.org',
password: '1234',
@ -34,7 +34,7 @@ describe('Notification', () => {
})
describe('currentUser { notifications }', () => {
let variables = {}
const variables = {}
describe('authenticated', () => {
let headers
@ -79,7 +79,7 @@ describe('currentUser { notifications }', () => {
}
}
}`
let variables = { read: false }
const variables = { read: false }
it('returns only unread notifications of current user', async () => {
const expected = {
currentUser: {

View File

@ -41,7 +41,7 @@ export default {
SET u.encryptedPassword = $encryptedNewPassword
RETURN pr
`
let transactionRes = await session.run(cypher, {
const transactionRes = await session.run(cypher, {
stillValid,
email,
code,

View File

@ -10,7 +10,7 @@ const driver = getDriver()
const getAllPasswordResets = async () => {
const session = driver.session()
let transactionRes = await session.run('MATCH (r:PasswordReset) RETURN r')
const transactionRes = await session.run('MATCH (r:PasswordReset) RETURN r')
const resets = transactionRes.records.map(record => record.get('r'))
session.close()
return resets
@ -84,9 +84,9 @@ describe('passwordReset', () => {
}
const mutation = `mutation($code: String!, $email: String!, $newPassword: String!) { resetPassword(code: $code, email: $email, newPassword: $newPassword) }`
let email = 'user@example.org'
let code = 'abcdef'
let newPassword = 'supersecret'
const email = 'user@example.org'
const code = 'abcdef'
const newPassword = 'supersecret'
let variables
describe('invalid email', () => {

View File

@ -339,7 +339,7 @@ describe('DeletePost', () => {
}
`
let variables = {
const variables = {
id: 'p1',
}

View File

@ -300,7 +300,7 @@ describe('SignupVerification', () => {
}
`
describe('given valid password and email', () => {
let variables = {
const variables = {
nonce: '123456',
name: 'John Doe',
password: '123',

View File

@ -60,7 +60,7 @@ export default {
if (!dbResponse) return null
const { report, submitter, resource, type } = dbResponse
let response = {
const response = {
...report.properties,
post: null,
comment: null,

View File

@ -4,7 +4,7 @@ import { UserInputError } from 'apollo-server'
const instance = neode()
const getUserAndBadge = async ({ badgeKey, userId }) => {
let user = await instance.first('User', 'id', userId)
const user = await instance.first('User', 'id', userId)
const badge = await instance.first('Badge', 'id', badgeKey)
if (!user) throw new UserInputError("Couldn't find a user with that id")
if (!badge) throw new UserInputError("Couldn't find a badge with that id")
@ -36,8 +36,6 @@ export default {
userId,
},
)
} catch (err) {
throw err
} finally {
session.close()
}

View File

@ -4,7 +4,7 @@ export default {
const { id, type } = params
const session = context.driver.session()
let transactionRes = await session.run(
const transactionRes = await session.run(
`MATCH (node {id: $id})<-[:WROTE]-(userWritten:User), (user:User {id: $userId})
WHERE $type IN labels(node) AND NOT userWritten.id = $userId
MERGE (user)-[relation:SHOUTED]->(node)
@ -29,7 +29,7 @@ export default {
const { id, type } = params
const session = context.driver.session()
let transactionRes = await session.run(
const transactionRes = await session.run(
`MATCH (user:User {id: $userId})-[relation:SHOUTED]->(node {id: $id})
WHERE $type IN labels(node)
DELETE relation

View File

@ -60,8 +60,7 @@ describe('shout', () => {
describe('shout foreign post', () => {
describe('unauthenticated shout', () => {
it('throws authorization error', async () => {
let client
client = new GraphQLClient(host)
const client = new GraphQLClient(host)
await expect(client.request(mutationShoutPost('p1'))).rejects.toThrow('Not Authorised')
})
})
@ -109,8 +108,7 @@ describe('shout', () => {
// shout
await clientUser1.request(mutationShoutPost('p2'))
// unshout
let client
client = new GraphQLClient(host)
const client = new GraphQLClient(host)
await expect(client.request(mutationUnshoutPost('p2'))).rejects.toThrow('Not Authorised')
})
})

View File

@ -1,9 +1,9 @@
export const query = (cypher, session) => {
return new Promise((resolve, reject) => {
let data = []
const data = []
session.run(cypher).subscribe({
onNext: function(record) {
let item = {}
const item = {}
record.keys.forEach(key => {
item[key] = record.get(key)
})
@ -34,7 +34,7 @@ const queryOne = (cypher, session) => {
export default {
Query: {
statistics: async (parent, args, { driver, user }) => {
return new Promise(async resolve => {
return new Promise(resolve => {
const session = driver.session()
const queries = {
countUsers:
@ -54,18 +54,24 @@ export default {
countFollows: 'MATCH (:User)-[r:FOLLOWS]->(:User) RETURN COUNT(r) AS countFollows',
countShouts: 'MATCH (:User)-[r:SHOUTED]->(:Post) RETURN COUNT(r) AS countShouts',
}
let data = {
countUsers: (await queryOne(queries.countUsers, session)).countUsers.low,
countPosts: (await queryOne(queries.countPosts, session)).countPosts.low,
countComments: (await queryOne(queries.countComments, session)).countComments.low,
countNotifications: (await queryOne(queries.countNotifications, session))
.countNotifications.low,
countOrganizations: (await queryOne(queries.countOrganizations, session))
.countOrganizations.low,
countProjects: (await queryOne(queries.countProjects, session)).countProjects.low,
countInvites: (await queryOne(queries.countInvites, session)).countInvites.low,
countFollows: (await queryOne(queries.countFollows, session)).countFollows.low,
countShouts: (await queryOne(queries.countShouts, session)).countShouts.low,
const data = {
countUsers: queryOne(queries.countUsers, session).then(res => res.countUsers.low),
countPosts: queryOne(queries.countPosts, session).then(res => res.countPosts.low),
countComments: queryOne(queries.countComments, session).then(
res => res.countComments.low,
),
countNotifications: queryOne(queries.countNotifications, session).then(
res => res.countNotifications.low,
),
countOrganizations: queryOne(queries.countOrganizations, session).then(
res => res.countOrganizations.low,
),
countProjects: queryOne(queries.countProjects, session).then(
res => res.countProjects.low,
),
countInvites: queryOne(queries.countInvites, session).then(res => res.countInvites.low),
countFollows: queryOne(queries.countFollows, session).then(res => res.countFollows.low),
countShouts: queryOne(queries.countShouts, session).then(res => res.countShouts.low),
}
resolve(data)
})

View File

@ -49,7 +49,7 @@ export default {
}
},
changePassword: async (_, { oldPassword, newPassword }, { driver, user }) => {
let currentUser = await instance.find('User', user.id)
const currentUser = await instance.find('User', user.id)
const encryptedPassword = currentUser.get('encryptedPassword')
if (!(await bcrypt.compareSync(oldPassword, encryptedPassword))) {

View File

@ -296,7 +296,7 @@ describe('change password', () => {
describe('correct password', () => {
it('changes the password if given correct credentials "', async () => {
let response = await client.request(
const response = await client.request(
mutation({
oldPassword: '1234',
newPassword: '12345',

View File

@ -23,7 +23,7 @@ export default {
UpdateUser: async (object, args, context, resolveInfo) => {
args = await fileUpload(args, { file: 'avatarUpload', url: 'avatar' })
try {
let user = await instance.find('User', args.id)
const user = await instance.find('User', args.id)
if (!user) return null
await user.update(args)
return user.toJson()
@ -60,7 +60,7 @@ export default {
const { id } = parent
const statement = `MATCH(u:User {id: {id}})-[:PRIMARY_EMAIL]->(e:EmailAddress) RETURN e`
const result = await instance.cypher(statement, { id })
let [{ email }] = result.records.map(r => r.get('e').properties)
const [{ email }] = result.records.map(r => r.get('e').properties)
return email
},
...Resolver('User', {

View File

@ -21,7 +21,7 @@ const findGqlFiles = dir => {
return results
}
let typeDefs = []
const typeDefs = []
findGqlFiles(__dirname).forEach(file => {
typeDefs.push(fs.readFileSync(file).toString('utf-8'))

View File

@ -40,15 +40,13 @@ export const cleanDatabase = async (options = {}) => {
const cypher = 'MATCH (n) DETACH DELETE n'
try {
return await session.run(cypher)
} catch (error) {
throw error
} finally {
session.close()
}
}
export default function Factory(options = {}) {
let {
const {
seedServerHost = 'http://127.0.0.1:4001',
neo4jDriver = getDriver(),
neodeInstance = neode(),

View File

@ -37,17 +37,17 @@ const difficulties = ['easy', 'medium', 'hard']
export default {
randomItem: (items, filter) => {
let ids = filter
const ids = filter
? Object.keys(items).filter(id => {
return filter(items[id])
})
: _.keys(items)
let randomIds = _.shuffle(ids)
const randomIds = _.shuffle(ids)
return items[randomIds.pop()]
},
randomItems: (items, key = 'id', min = 1, max = 1) => {
let randomIds = _.shuffle(_.keys(items))
let res = []
const randomIds = _.shuffle(_.keys(items))
const res = []
const count = _.random(min, max)
@ -86,8 +86,8 @@ export default {
if (allowEmpty === false && count === 0) {
count = 1
}
let categorieIds = _.shuffle(_.keys(seederstore.categories))
let ids = []
const categorieIds = _.shuffle(_.keys(seederstore.categories))
const ids = []
for (let i = 0; i < count; i++) {
ids.push(categorieIds.pop())
}
@ -95,7 +95,7 @@ export default {
},
randomAddresses: () => {
const count = Math.round(Math.random() * 3)
let addresses = []
const addresses = []
for (let i = 0; i < count; i++) {
addresses.push({
city: faker.address.city(),
@ -116,7 +116,7 @@ export default {
* @param key the field key that is represented in the values (slug, name, etc.)
*/
mapIdsByKey: (items, values, key) => {
let res = []
const res = []
values.forEach(value => {
res.push(_.find(items, [key, value]).id.toString())
})

View File

@ -972,33 +972,7 @@
url-regex "~4.1.1"
video-extensions "~1.1.0"
"@metascraper/helpers@^5.6.3":
version "5.6.3"
resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-5.6.3.tgz#88d3d3a174f94ccb617145cb9f60c999b57d9b60"
integrity sha512-FWqQmh+sZI5JRxJHVPPzBjilgZCqKWDFSo/eqRIgLLW/5kB79uuX4aseSTep1JpXUAcD5F/Z0KZYQl4JTbTopA==
dependencies:
audio-extensions "0.0.0"
chrono-node "~1.3.11"
condense-whitespace "~2.0.0"
entities "~2.0.0"
file-extension "~4.0.5"
has-values "~2.0.1"
image-extensions "~1.1.0"
is-relative-url "~3.0.0"
is-uri "~1.2.0"
iso-639-3 "~1.2.0"
isostring "0.0.1"
lodash "~4.17.15"
mem "~5.1.1"
mime-types "~2.1.24"
normalize-url "~4.3.0"
smartquotes "~2.3.1"
title "~3.4.1"
truncate "~2.1.0"
url-regex "~5.0.0"
video-extensions "~1.1.0"
"@metascraper/helpers@^5.6.5":
"@metascraper/helpers@^5.6.3", "@metascraper/helpers@^5.6.5":
version "5.6.5"
resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-5.6.5.tgz#6f42bd1a8e3243e051e7bb067145125cd6b37e09"
integrity sha512-j9qxXqZ9k/uNkABlsVjNN2Z5pVtukDmZMZ0ACsob+m5o8/yo87GvRf/UJfTPtog9vZ/QwkLav5Hhl+10NC7QLw==
@ -3272,10 +3246,10 @@ eslint-config-prettier@~6.0.0:
dependencies:
get-stdin "^6.0.0"
eslint-config-standard@~12.0.0:
version "12.0.0"
resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz#638b4c65db0bd5a41319f96bba1f15ddad2107d9"
integrity sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==
eslint-config-standard@~13.0.1:
version "13.0.1"
resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-13.0.1.tgz#c9c6ffe0cfb8a51535bc5c7ec9f70eafb8c6b2c0"
integrity sha512-zLKp4QOgq6JFgRm1dDCVv1Iu0P5uZ4v5Wa4DTOkg2RFMxdCX/9Qf7lz9ezRj2dBRa955cWQF/O/LWEiYWAHbTw==
eslint-import-resolver-node@^0.3.2:
version "0.3.2"
@ -5828,12 +5802,12 @@ merge-stream@^1.0.1:
dependencies:
readable-stream "^2.0.1"
metascraper-audio@^5.5.0:
version "5.6.3"
resolved "https://registry.yarnpkg.com/metascraper-audio/-/metascraper-audio-5.6.3.tgz#f84f4e19960c698df2e14cd98212b004bac66bb9"
integrity sha512-XxO9iHVQzGa+Z7wzmnHl3dmFdBdmYfO/ozeMWH0fp/4YbU1GU3l+OlYzPaVhCEfArqzzuwf1iq8uGKdU/DOZnw==
metascraper-audio@^5.6.5:
version "5.6.5"
resolved "https://registry.yarnpkg.com/metascraper-audio/-/metascraper-audio-5.6.5.tgz#8937d369f37d43f8668eb87013ea4fe8309a9451"
integrity sha512-EF9IMscv9HLy3Mks8Vhv0ftzwjV36tvNpSwPnmibDGDy25ssf6nB7ldeP5YPij4TNjLeUsrdh6v10aYrh8Z5fQ==
dependencies:
"@metascraper/helpers" "^5.6.3"
"@metascraper/helpers" "^5.6.5"
metascraper-author@^5.6.3:
version "5.6.3"
@ -5850,19 +5824,19 @@ metascraper-clearbit-logo@^5.3.0:
dependencies:
got "~9.6.0"
metascraper-date@^5.6.3:
version "5.6.3"
resolved "https://registry.yarnpkg.com/metascraper-date/-/metascraper-date-5.6.3.tgz#516fad38391a45137a58430f639a57037eee96f2"
integrity sha512-sdbY0IOu1BcZHocwVIJ8/CPkguVR8oDho13apIGNsZjyItIdMMLrziDqzOSGcJI++AXGmS3MNHW8M+bdYHVj1g==
metascraper-date@^5.6.5:
version "5.6.5"
resolved "https://registry.yarnpkg.com/metascraper-date/-/metascraper-date-5.6.5.tgz#802a19eaf9dc2874352ec4401fa360347225197b"
integrity sha512-IuKpi5z3S1/qlLhfQbLVv5hitfly/UEGKBxD4dYbn+5xbcsPcNlM+AE7DeDEct390nuZs7+fbSqgPKFtt5fPRg==
dependencies:
"@metascraper/helpers" "^5.6.3"
"@metascraper/helpers" "^5.6.5"
metascraper-description@^5.5.0:
version "5.6.3"
resolved "https://registry.yarnpkg.com/metascraper-description/-/metascraper-description-5.6.3.tgz#1abfde848e8002c606e5741b9523b61ca592bb34"
integrity sha512-ATfsUS6t912hSYKEOyVUX+GrwRMcUltOcvEXtD/5ER26z3h1ab83w4UvQ7imo9F6yueQX2dB6QfqTkWF92X6Vw==
metascraper-description@^5.6.5:
version "5.6.5"
resolved "https://registry.yarnpkg.com/metascraper-description/-/metascraper-description-5.6.5.tgz#b0e47bedf9aed151e085ff3a8a499be5f4779dc3"
integrity sha512-rYHMRrLnYPdt1ZCiObRtl7MP8i+2q9MfgeeiwACd65ElC+wgnfyQBIgxBp/gEnKuUsehWgpDXCZKFkjv+W4zNQ==
dependencies:
"@metascraper/helpers" "^5.6.3"
"@metascraper/helpers" "^5.6.5"
metascraper-image@^5.6.3:
version "5.6.3"
@ -5887,28 +5861,28 @@ metascraper-lang@^5.6.3:
dependencies:
"@metascraper/helpers" "^5.6.3"
metascraper-logo@^5.5.0:
version "5.6.3"
resolved "https://registry.yarnpkg.com/metascraper-logo/-/metascraper-logo-5.6.3.tgz#bb18449e872815ba6199e2aa78078259c2677b98"
integrity sha512-xeqjSuTAiudXiUczj7F0+VvXdgFvL5rqyW3D+BPXrNHOUqDyyYNlHTEhambj3HbMP6EjQyoMDEvqCF5qUezmXg==
metascraper-logo@^5.6.5:
version "5.6.5"
resolved "https://registry.yarnpkg.com/metascraper-logo/-/metascraper-logo-5.6.5.tgz#82a6e77da2df91fbbf233dfa49fd0a99475968ff"
integrity sha512-MKzunTRaD0HO7NdyzIhL/wpfpluCGLaBXFAYdvaY+FxiA9ZbpIV+9TdaoF3uzmoZAE09dKbQEmxeKOrbWHr4Zw==
dependencies:
"@metascraper/helpers" "^5.6.3"
"@metascraper/helpers" "^5.6.5"
metascraper-publisher@^5.6.3:
version "5.6.3"
resolved "https://registry.yarnpkg.com/metascraper-publisher/-/metascraper-publisher-5.6.3.tgz#3729cd7dac117c94f92020ff3a8397a1b965a27e"
integrity sha512-1Z+bwrTn6j4Tf85DatYL0zDmqBfoJCfYa0nNlZ9HWfjM+QWDxBeIu1v/85N3AYGYPwk5G38IdvEYBb4MpMEQvQ==
metascraper-publisher@^5.6.5:
version "5.6.5"
resolved "https://registry.yarnpkg.com/metascraper-publisher/-/metascraper-publisher-5.6.5.tgz#c23e93b766d3d0d64116422fa76a8da1145d2f98"
integrity sha512-XKaksI7gjPuuYNJyiowrE2DsrdhXeaoDEoK3/0vV3RfYBxXFgBtRUoFQiDiad+cUN/5lhMhYs0BKRiC+Q3XiZg==
dependencies:
"@metascraper/helpers" "^5.6.3"
"@metascraper/helpers" "^5.6.5"
metascraper-soundcloud@^5.5.3:
version "5.6.3"
resolved "https://registry.yarnpkg.com/metascraper-soundcloud/-/metascraper-soundcloud-5.6.3.tgz#c2bb5904857d079a44c0d1e1511dfaf4d0f19945"
integrity sha512-v44pktX4I7pnUjThGs11YZLNpuQbuB6iY2RcYnODjasgor8t7ZHPwrJqy01b0mkTmHoRbQ84Vheq1SkAD0Vz8g==
metascraper-soundcloud@^5.6.5:
version "5.6.5"
resolved "https://registry.yarnpkg.com/metascraper-soundcloud/-/metascraper-soundcloud-5.6.5.tgz#4447e24f919a57551bc672f1aa1d86ff3d54f602"
integrity sha512-dSr7rUi0ag+siqfPbSNRxSnQG187NsT8vMplI//NXMtKE6WLxxoOxJMETnFn56IozhIwb3FfC0suyThr9ZaGCg==
dependencies:
"@metascraper/helpers" "^5.6.3"
"@metascraper/helpers" "^5.6.5"
memoize-one "~5.0.5"
tldts "~5.3.1"
tldts "~5.3.2"
metascraper-title@^5.6.3:
version "5.6.3"
@ -5918,12 +5892,12 @@ metascraper-title@^5.6.3:
"@metascraper/helpers" "^5.6.3"
lodash "~4.17.15"
metascraper-url@^5.5.0:
version "5.6.3"
resolved "https://registry.yarnpkg.com/metascraper-url/-/metascraper-url-5.6.3.tgz#7e756f79ed2a5e1591682e29b665551855ddda5d"
integrity sha512-hFHff2AsWuW552CkktWR9ViVp2poZufP1YUAVJWRe7UaHC67vx2mE5hjNZkVBSi1rOoPIbNN+jPVvcKwT6tkAw==
metascraper-url@^5.6.5:
version "5.6.5"
resolved "https://registry.yarnpkg.com/metascraper-url/-/metascraper-url-5.6.5.tgz#1afaa8688c53e7b9d37d81f9302d06b4d42d8656"
integrity sha512-BjzWpLLezCAg4pexWB63OdN7sNcJXRGlw8Cv+k5JCMUH/JV+rA+8l5wwWJFISxgOUpHsnbGlAkFT45viVxuawg==
dependencies:
"@metascraper/helpers" "^5.6.3"
"@metascraper/helpers" "^5.6.5"
metascraper-video@^5.6.3:
version "5.6.3"
@ -8182,17 +8156,17 @@ tlds@^1.187.0, tlds@^1.203.0:
resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.203.1.tgz#4dc9b02f53de3315bc98b80665e13de3edfc1dfc"
integrity sha512-7MUlYyGJ6rSitEZ3r1Q1QNV8uSIzapS8SmmhSusBuIc7uIxPPwsKllEP0GRp1NS6Ik6F+fRZvnjDWm3ecv2hDw==
tldts-core@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-5.3.1.tgz#040450d7148107880ba9020e77b3b28a6cc5d9db"
integrity sha512-z8C2wcT2XvSgk5p0HWapXPkvvKG7E8Jei71N+9Mpp9Eoh2/wjtQPhDeENSuzHNmjTdRz6KFIcM7aWTB+7g0OyA==
tldts-core@^5.3.2:
version "5.3.2"
resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-5.3.2.tgz#3823653310c2dc6e51d00998098a72a3cc203ea9"
integrity sha512-bGI7MvrFXnbNhSkKEKAjiRo+eoIuIsuzF/hOtpI7HLMLWamIGtrLuNv2nlBOdN/h6iB6B32B4MxmwPWTZ70TaQ==
tldts@~5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/tldts/-/tldts-5.3.1.tgz#39b2164b71777e69b3d05e5db5a30b5e1a5df6b7"
integrity sha512-JHG3Gonv+17qi1gyskY0KwdpjVkQfQK4pMHm52vpdKXV3y9AzEhhinDT/GfLF8w7kRLpIHhcViZ0rEsFla81lA==
tldts@~5.3.2:
version "5.3.2"
resolved "https://registry.yarnpkg.com/tldts/-/tldts-5.3.2.tgz#d7e9b31b70b7d7687a16fe31a18ec2ca8a33f852"
integrity sha512-R96Q0sJoD1vMYZ5YI0om32AZW2SYDxWfcg0111gnJYIvfyVgHOwyYj2dLFhpkPCSH7AwwUe0MmewmUrQhJXRjQ==
dependencies:
tldts-core "^5.3.1"
tldts-core "^5.3.2"
tmp@^0.0.33:
version "0.0.33"

View File

@ -24,7 +24,7 @@
"cross-env": "^5.2.0",
"cypress": "^3.4.1",
"cypress-cucumber-preprocessor": "^1.13.0",
"cypress-file-upload": "^3.3.2",
"cypress-file-upload": "^3.3.3",
"cypress-plugin-retries": "^1.2.2",
"dotenv": "^8.0.0",
"faker": "Marak/faker.js#master",

View File

@ -6,6 +6,9 @@ import PostMutations from '~/graphql/PostMutations.js'
import CategoriesSelect from '~/components/CategoriesSelect/CategoriesSelect'
import Filters from '~/plugins/vue-filters'
import TeaserImage from '~/components/TeaserImage/TeaserImage'
import MutationObserver from 'mutation-observer'
global.MutationObserver = MutationObserver
const localVue = createLocalVue()

View File

@ -1,8 +1,10 @@
import { mount, createLocalVue } from '@vue/test-utils'
import Editor from './Editor'
import Vuex from 'vuex'
import Styleguide from '@human-connection/styleguide'
import MutationObserver from 'mutation-observer'
global.MutationObserver = MutationObserver
const localVue = createLocalVue()
localVue.use(Vuex)

View File

@ -2,6 +2,9 @@ import { mount, createLocalVue } from '@vue/test-utils'
import CommentForm from './index.vue'
import Styleguide from '@human-connection/styleguide'
import Vuex from 'vuex'
import MutationObserver from 'mutation-observer'
global.MutationObserver = MutationObserver
const localVue = createLocalVue()
localVue.use(Vuex)

View File

@ -70,8 +70,8 @@
"nuxt-env": "~0.1.0",
"stack-utils": "^1.0.2",
"string-hash": "^1.1.3",
"tiptap": "1.21.0",
"tiptap-extensions": "1.22.2",
"tiptap": "~1.24.0",
"tiptap-extensions": "~1.26.0",
"v-tooltip": "~2.0.2",
"vue-count-to": "~1.0.13",
"vue-izitoast": "1.1.2",
@ -104,11 +104,12 @@
"flush-promises": "^1.0.2",
"fuse.js": "^3.4.5",
"jest": "~24.8.0",
"mutation-observer": "^1.0.3",
"node-sass": "~4.12.0",
"nodemon": "~1.19.1",
"prettier": "~1.18.2",
"sass-loader": "~7.1.0",
"tippy.js": "^4.3.4",
"tippy.js": "^4.3.5",
"vue-jest": "~3.0.4",
"vue-svg-loader": "~0.12.0"
}

View File

@ -8472,6 +8472,11 @@ mustache@^2.3.0:
resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.2.tgz#a6d4d9c3f91d13359ab889a812954f9230a3d0c5"
integrity sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==
mutation-observer@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/mutation-observer/-/mutation-observer-1.0.3.tgz#42e9222b101bca82e5ba9d5a7acf4a14c0f263d0"
integrity sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA==
mute-stream@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
@ -10237,10 +10242,10 @@ prosemirror-dropcursor@^1.1.1:
prosemirror-transform "^1.1.0"
prosemirror-view "^1.1.0"
prosemirror-gapcursor@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.0.3.tgz#acc6537fc5a35e9b38966f91a199a382dfc715c4"
integrity sha512-X+hJhr42PcHWiSWL+lI5f/UeOhXCxlBFb8M6O8aG1hssmaRrW7sS2/Fjg5jFV+pTdS1REFkmm1occh01FMdDIQ==
prosemirror-gapcursor@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/prosemirror-gapcursor/-/prosemirror-gapcursor-1.0.4.tgz#4ba663fb8511616e18ad222c904403cfbf6866dc"
integrity sha512-k021MtJibWs3NaJI6S9tCXfTZ/kaugFZBndHkkWx3Zfk0QDUO6JfVATpflxADN6DUkRwJ7qWyHlLDWu71hxHFQ==
dependencies:
prosemirror-keymap "^1.0.0"
prosemirror-model "^1.0.0"
@ -10272,7 +10277,7 @@ prosemirror-keymap@^1.0.0, prosemirror-keymap@^1.0.1:
prosemirror-state "^1.0.0"
w3c-keyname "^1.1.8"
prosemirror-model@^1.0.0, prosemirror-model@^1.1.0, prosemirror-model@^1.7.0, prosemirror-model@^1.7.1:
prosemirror-model@^1.0.0, prosemirror-model@^1.1.0, prosemirror-model@^1.7.1:
version "1.7.1"
resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.7.1.tgz#f140a6e366e1e283aa7a94dbb8c2c7d13139689e"
integrity sha512-hYrZPbJvdo2QWERmkCuS80BEf5Rcf3+S28ETr4xu8XKPYjmU6aeQn23G1Fu/2rwqUmk5ZyWYo2nyEsN+Cdv2Qg==
@ -10313,12 +10318,12 @@ prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transfor
dependencies:
prosemirror-model "^1.0.0"
prosemirror-utils@^0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/prosemirror-utils/-/prosemirror-utils-0.9.0.tgz#3ab616c94ccd61fcb18968f0d5aa273a9f1f28e4"
integrity sha512-YcvmHcq7phbn+OagJSvmne92qZG9dOVfb3zfuA1HuyWUif3hUDt2Yfu299BHqVkEkUCF6FN7Gi9folDQntMhxA==
prosemirror-utils@^0.9.4:
version "0.9.5"
resolved "https://registry.yarnpkg.com/prosemirror-utils/-/prosemirror-utils-0.9.5.tgz#34d7e5bc12f3e6774261cc664bac9499899663d4"
integrity sha512-JT3H//Cq2ljNhWadMYRMdlNj2gylFA7L4RC0zmUF9l0IgDpc/gTpPRCmfcDUomDgCrciz57C3MCnZ+058hSTaA==
prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.9.8:
prosemirror-view@^1.0.0, prosemirror-view@^1.1.0:
version "1.9.8"
resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.9.8.tgz#47b961204a0b2e8ff87370c270d4f82598e81273"
integrity sha512-yS4yrqxydvi7ddz9VFLeJgbfVd5g3/bMcRxb1PbWtG0i9OrPSsiHaEBJHLVeTbraGqRlAu+tbNLakO7RhUhp1w==
@ -10327,6 +10332,15 @@ prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.9.8:
prosemirror-state "^1.0.0"
prosemirror-transform "^1.1.0"
prosemirror-view@^1.9.12:
version "1.9.13"
resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.9.13.tgz#8f146038e776fd0aa6d7811c8b9cb11813b9e319"
integrity sha512-afJxCZR4EH04u4thl7xYHSIgyQiGALstLi+5SW9t3868ghrgcFhpQvbJAN17Yb9nwtnltD64t15Msk2UlXkPeQ==
dependencies:
prosemirror-model "^1.1.0"
prosemirror-state "^1.0.0"
prosemirror-transform "^1.1.0"
proto-list@~1.2.1:
version "1.2.4"
resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849"
@ -11940,17 +11954,17 @@ timsort@^0.3.0:
resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=
tippy.js@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-4.3.4.tgz#9a91fd5ce8c401f181b7adaa6b2c27f3d105f3ba"
integrity sha512-O2ukxHOJTLVYZ/TfHjNd8WgAWoefX9uk5QiWRdHfX2PR2lBpUU4BJQLl7U2Ykc8K7o16gTeHEElpuRfgD5b0aA==
tippy.js@^4.3.5:
version "4.3.5"
resolved "https://registry.yarnpkg.com/tippy.js/-/tippy.js-4.3.5.tgz#882bff8d92f09bb0546d2826d5668c0560006f54"
integrity sha512-NDq3efte8nGK6BOJ1dDN1/WelAwfmh3UtIYXXck6+SxLzbIQNZE/cmRSnwScZ/FyiKdIcvFHvYUgqmoGx8CcyA==
dependencies:
popper.js "^1.14.7"
tiptap-commands@^1.10.6, tiptap-commands@^1.10.7:
version "1.10.7"
resolved "https://registry.yarnpkg.com/tiptap-commands/-/tiptap-commands-1.10.7.tgz#c177f875e8a90e05171fdd441190b4b7a769bd27"
integrity sha512-Ij62dHkYvOFUcaj+xlbahhoqcY8bFIEho6fXKrxcjjtGzS2DyJnvXmWN6Ow65uZWXkf5Zf8ae6XnYNaKqP3Pyg==
tiptap-commands@^1.10.11:
version "1.10.11"
resolved "https://registry.yarnpkg.com/tiptap-commands/-/tiptap-commands-1.10.11.tgz#9df1ef7b553e601598892074f9faa6d836fd8238"
integrity sha512-SD1Ep18qKGiCOodUttQrJtOfEC4/sx1pQWfROc4t8xeuxS5FLcrXZ+u9mELRSHkBJ+nDAJsn/ewG+yo58T1+Xg==
dependencies:
prosemirror-commands "^1.0.8"
prosemirror-inputrules "^1.0.4"
@ -11958,13 +11972,13 @@ tiptap-commands@^1.10.6, tiptap-commands@^1.10.7:
prosemirror-schema-list "^1.0.3"
prosemirror-state "^1.2.3"
prosemirror-tables "^0.8.1"
prosemirror-utils "^0.9.0"
tiptap-utils "^1.5.5"
prosemirror-utils "^0.9.4"
tiptap-utils "^1.6.0"
tiptap-extensions@1.22.2:
version "1.22.2"
resolved "https://registry.yarnpkg.com/tiptap-extensions/-/tiptap-extensions-1.22.2.tgz#66b24ef63653481da16419efdf6459c7a9f518f7"
integrity sha512-JJe2yAnbaKBWO/16+lfFphePphG9UYhp3wAUkzhSefJx3dtIdDfCmp5jBzZ6NLahUHNT/Z9WeYdhQmngAeVhoA==
tiptap-extensions@~1.26.0:
version "1.26.0"
resolved "https://registry.yarnpkg.com/tiptap-extensions/-/tiptap-extensions-1.26.0.tgz#d3ee033d121c7243a7e8648c69ec6343a2853ccc"
integrity sha512-icQYbfl6Cu3XkAoz9y+4x1URuB/EzryF2rZT6GsURghcelaxpjIPoMDBMyi00zlSIKJUvkS14NbnjJ2eT0CG6w==
dependencies:
lowlight "^1.12.1"
prosemirror-collab "^1.1.2"
@ -11973,52 +11987,36 @@ tiptap-extensions@1.22.2:
prosemirror-state "^1.2.3"
prosemirror-tables "^0.8.1"
prosemirror-transform "^1.1.3"
prosemirror-utils "^0.9.0"
prosemirror-view "^1.9.8"
tiptap "^1.22.2"
tiptap-commands "^1.10.7"
prosemirror-utils "^0.9.4"
prosemirror-view "^1.9.12"
tiptap "^1.24.0"
tiptap-commands "^1.10.11"
tiptap-utils@^1.5.4, tiptap-utils@^1.5.5:
version "1.5.5"
resolved "https://registry.yarnpkg.com/tiptap-utils/-/tiptap-utils-1.5.5.tgz#f06c70f0319d9215433b3466b6ece369a078de0f"
integrity sha512-lnaCmIIkyK050qfsPeMDjoTW0sTqBHxfw1h2GXaX5Nr6JF4VQe0izgf2MI6LCd3PKecJBoW4ce5lNkDpV99+WA==
tiptap-utils@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/tiptap-utils/-/tiptap-utils-1.6.0.tgz#6af0bf52f93b291b9be5f6adb92c9afc35dd8d62"
integrity sha512-8ehQyNCe1CJvgBBqS3rKM58MFqcwlJQXS6XtZyhOjJDGQbUKNVR/GbAXTPlHnuVBm0kKKTjTqnrEt/PS4d2aXg==
dependencies:
prosemirror-model "^1.7.1"
prosemirror-state "^1.2.3"
prosemirror-tables "^0.8.1"
prosemirror-utils "^0.9.0"
prosemirror-utils "^0.9.4"
tiptap@1.21.0:
version "1.21.0"
resolved "https://registry.yarnpkg.com/tiptap/-/tiptap-1.21.0.tgz#4d8c1365c611e41c8d4f3d7aa195ddaf891e605b"
integrity sha512-MoOj/8OPMlmoAotIZjAIlUZ59yMMR83xReOw2rGjqbFOooncoY1rLEBp0xz5oe5FLYqoe8dKb+kzOoFERqckVQ==
tiptap@^1.24.0, tiptap@~1.24.0:
version "1.24.0"
resolved "https://registry.yarnpkg.com/tiptap/-/tiptap-1.24.0.tgz#f386c8fca71275a4794a0e95eca2ea37267d370d"
integrity sha512-izw0FM5bbOQRtNczqEgo9/EoUI7X/TAj1LEsteMuDqxaZKmYn6so482UnnQUv13+4DtXHYGj5U+60lVNuZlWJw==
dependencies:
prosemirror-commands "^1.0.8"
prosemirror-dropcursor "^1.1.1"
prosemirror-gapcursor "^1.0.3"
prosemirror-inputrules "^1.0.4"
prosemirror-keymap "^1.0.1"
prosemirror-model "^1.7.0"
prosemirror-state "^1.2.3"
prosemirror-view "^1.9.8"
tiptap-commands "^1.10.6"
tiptap-utils "^1.5.4"
tiptap@^1.22.2:
version "1.22.2"
resolved "https://registry.yarnpkg.com/tiptap/-/tiptap-1.22.2.tgz#f3f2b822d9ed087a853520c86593b2e6bd822bdd"
integrity sha512-qMFQJ358Ga8gXzUAMaHGrZDab/IqZf28N8BYYo4hyFIMoEYQVWmBGWuSBHOgpxiueXpC9zMuCoIgrNWN3VpoNQ==
dependencies:
prosemirror-commands "^1.0.8"
prosemirror-dropcursor "^1.1.1"
prosemirror-gapcursor "^1.0.3"
prosemirror-gapcursor "^1.0.4"
prosemirror-inputrules "^1.0.4"
prosemirror-keymap "^1.0.1"
prosemirror-model "^1.7.1"
prosemirror-state "^1.2.3"
prosemirror-view "^1.9.8"
tiptap-commands "^1.10.7"
tiptap-utils "^1.5.5"
prosemirror-view "^1.9.12"
tiptap-commands "^1.10.11"
tiptap-utils "^1.6.0"
title-case@^2.1.0:
version "2.1.1"

View File

@ -1864,10 +1864,10 @@ cypress-cucumber-preprocessor@^1.13.0:
glob "^7.1.2"
through "^2.3.8"
cypress-file-upload@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/cypress-file-upload/-/cypress-file-upload-3.3.2.tgz#d9bb00cac756fd4b5f68079f19745fe40d97fdd4"
integrity sha512-39CW6/rTmn7AGa+ZrD37R+ANnnWAesbUj2RpBfbpRzV+KTAlF+m9Djbd2f325w0JGY0A2eO0w6TYYo+NvBTnoA==
cypress-file-upload@^3.3.3:
version "3.3.3"
resolved "https://registry.yarnpkg.com/cypress-file-upload/-/cypress-file-upload-3.3.3.tgz#119188fa78e9cfc00904c52d76d4ca56d34950df"
integrity sha512-CmXGRMHonoyCa8EcF6jomxqMAe56HvKfnW7S69EmTga8ecYmvQUI6gYttcHO+5UTmFQOFl7xbABV3+AbnI4btA==
cypress-plugin-retries@^1.2.2:
version "1.2.2"