mirror of
https://github.com/IT4Change/Ocelot-Social.git
synced 2025-12-13 07:45:56 +00:00
sync with 'master' to cleanup PR
This commit is contained in:
commit
dc09240c20
@ -27,7 +27,7 @@ script:
|
|||||||
- echo "TRAVIS_BRANCH=$TRAVIS_BRANCH, PR=$PR, BRANCH=$BRANCH"
|
- echo "TRAVIS_BRANCH=$TRAVIS_BRANCH, PR=$PR, BRANCH=$BRANCH"
|
||||||
# Backend
|
# Backend
|
||||||
- docker-compose exec backend yarn run lint
|
- docker-compose exec backend yarn run lint
|
||||||
- docker-compose exec backend yarn run test:jest --ci --verbose=false --coverage
|
- docker-compose exec backend yarn run test --ci --verbose=false --coverage
|
||||||
- docker-compose exec backend yarn run db:seed
|
- docker-compose exec backend yarn run db:seed
|
||||||
- docker-compose exec backend yarn run db:reset
|
- docker-compose exec backend yarn run db:reset
|
||||||
# ActivityPub cucumber testing temporarily disabled because it's too buggy
|
# ActivityPub cucumber testing temporarily disabled because it's too buggy
|
||||||
@ -37,7 +37,6 @@ script:
|
|||||||
# Frontend
|
# Frontend
|
||||||
- docker-compose exec webapp yarn run lint
|
- docker-compose exec webapp yarn run lint
|
||||||
- docker-compose exec webapp yarn run test --ci --verbose=false --coverage
|
- docker-compose exec webapp yarn run test --ci --verbose=false --coverage
|
||||||
- docker-compose exec -d backend yarn run test:before:seeder
|
|
||||||
# Fullstack
|
# Fullstack
|
||||||
- docker-compose down
|
- docker-compose down
|
||||||
- docker-compose -f docker-compose.yml up -d
|
- docker-compose -f docker-compose.yml up -d
|
||||||
|
|||||||
13214
backend/package-lock.json
generated
13214
backend/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -9,16 +9,9 @@
|
|||||||
"dev": "nodemon --exec babel-node src/ -e js,gql",
|
"dev": "nodemon --exec babel-node src/ -e js,gql",
|
||||||
"dev:debug": "nodemon --exec babel-node --inspect=0.0.0.0:9229 src/index.js -e js,gql",
|
"dev:debug": "nodemon --exec babel-node --inspect=0.0.0.0:9229 src/index.js -e js,gql",
|
||||||
"lint": "eslint src --config .eslintrc.js",
|
"lint": "eslint src --config .eslintrc.js",
|
||||||
"jest": "jest --forceExit --detectOpenHandles --runInBand",
|
"test": "jest --forceExit --detectOpenHandles --runInBand",
|
||||||
"test": "run-s test:jest test:cucumber",
|
|
||||||
"test:before:server": "cross-env GRAPHQL_URI=http://localhost:4123 GRAPHQL_PORT=4123 yarn run dev 2> /dev/null",
|
|
||||||
"test:before:seeder": "cross-env GRAPHQL_URI=http://localhost:4001 GRAPHQL_PORT=4001 DISABLED_MIDDLEWARES=permissions,activityPub yarn run dev 2> /dev/null",
|
|
||||||
"test:jest:cmd": "wait-on tcp:4001 tcp:4123 && jest --forceExit --detectOpenHandles --runInBand",
|
|
||||||
"test:cucumber:cmd": "wait-on tcp:4001 tcp:4123 && cucumber-js --require-module @babel/register --exit test/",
|
"test:cucumber:cmd": "wait-on tcp:4001 tcp:4123 && cucumber-js --require-module @babel/register --exit test/",
|
||||||
"test:jest:cmd:debug": "wait-on tcp:4001 tcp:4123 && node --inspect-brk ./node_modules/.bin/jest -i --forceExit --detectOpenHandles --runInBand",
|
|
||||||
"test:jest": "run-p --race test:before:* \"test:jest:cmd {@}\" --",
|
|
||||||
"test:cucumber": " cross-env CLIENT_URI=http://localhost:4123 run-p --race test:before:* 'test:cucumber:cmd {@}' --",
|
"test:cucumber": " cross-env CLIENT_URI=http://localhost:4123 run-p --race test:before:* 'test:cucumber:cmd {@}' --",
|
||||||
"test:jest:debug": "run-p --race test:before:* 'test:jest:cmd:debug {@}' --",
|
|
||||||
"db:reset": "babel-node src/seed/reset-db.js",
|
"db:reset": "babel-node src/seed/reset-db.js",
|
||||||
"db:seed": "babel-node src/seed/seed-db.js"
|
"db:seed": "babel-node src/seed/seed-db.js"
|
||||||
},
|
},
|
||||||
@ -62,9 +55,9 @@
|
|||||||
"graphql": "^14.5.8",
|
"graphql": "^14.5.8",
|
||||||
"graphql-custom-directives": "~0.2.14",
|
"graphql-custom-directives": "~0.2.14",
|
||||||
"graphql-iso-date": "~3.6.1",
|
"graphql-iso-date": "~3.6.1",
|
||||||
"graphql-middleware": "~4.0.1",
|
"graphql-middleware": "~4.0.2",
|
||||||
"graphql-middleware-sentry": "^3.2.1",
|
"graphql-middleware-sentry": "^3.2.1",
|
||||||
"graphql-shield": "~7.0.1",
|
"graphql-shield": "~7.0.2",
|
||||||
"graphql-tag": "~2.10.1",
|
"graphql-tag": "~2.10.1",
|
||||||
"helmet": "~3.21.2",
|
"helmet": "~3.21.2",
|
||||||
"jsonwebtoken": "~8.5.1",
|
"jsonwebtoken": "~8.5.1",
|
||||||
@ -101,16 +94,17 @@
|
|||||||
"slug": "~1.1.0",
|
"slug": "~1.1.0",
|
||||||
"trunc-html": "~1.1.2",
|
"trunc-html": "~1.1.2",
|
||||||
"uuid": "~3.3.3",
|
"uuid": "~3.3.3",
|
||||||
|
"validator": "^12.0.0",
|
||||||
"wait-on": "~3.3.0",
|
"wait-on": "~3.3.0",
|
||||||
"xregexp": "^4.2.4"
|
"xregexp": "^4.2.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "~7.6.4",
|
"@babel/cli": "~7.7.0",
|
||||||
"@babel/core": "~7.6.4",
|
"@babel/core": "~7.6.4",
|
||||||
"@babel/node": "~7.6.3",
|
"@babel/node": "~7.7.0",
|
||||||
"@babel/plugin-proposal-throw-expressions": "^7.2.0",
|
"@babel/plugin-proposal-throw-expressions": "^7.2.0",
|
||||||
"@babel/preset-env": "~7.6.3",
|
"@babel/preset-env": "~7.7.1",
|
||||||
"@babel/register": "~7.6.2",
|
"@babel/register": "~7.7.0",
|
||||||
"apollo-server-testing": "~2.9.7",
|
"apollo-server-testing": "~2.9.7",
|
||||||
"babel-core": "~7.0.0-0",
|
"babel-core": "~7.0.0-0",
|
||||||
"babel-eslint": "~10.0.3",
|
"babel-eslint": "~10.0.3",
|
||||||
@ -126,7 +120,6 @@
|
|||||||
"eslint-plugin-prettier": "~3.1.1",
|
"eslint-plugin-prettier": "~3.1.1",
|
||||||
"eslint-plugin-promise": "~4.2.1",
|
"eslint-plugin-promise": "~4.2.1",
|
||||||
"eslint-plugin-standard": "~4.0.1",
|
"eslint-plugin-standard": "~4.0.1",
|
||||||
"graphql-request": "~1.8.2",
|
|
||||||
"jest": "~24.9.0",
|
"jest": "~24.9.0",
|
||||||
"nodemon": "~1.19.4",
|
"nodemon": "~1.19.4",
|
||||||
"prettier": "~1.18.2",
|
"prettier": "~1.18.2",
|
||||||
|
|||||||
@ -1,21 +1,3 @@
|
|||||||
import { request } from 'graphql-request'
|
|
||||||
|
|
||||||
// this is the to-be-tested server host
|
|
||||||
// not to be confused with the seeder host
|
|
||||||
export const host = 'http://127.0.0.1:4123'
|
|
||||||
|
|
||||||
export async function login(variables) {
|
|
||||||
const mutation = `
|
|
||||||
mutation($email: String!, $password: String!) {
|
|
||||||
login(email: $email, password: $password)
|
|
||||||
}
|
|
||||||
`
|
|
||||||
const response = await request(host, mutation, variables)
|
|
||||||
return {
|
|
||||||
authorization: `Bearer ${response.login}`,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//* This is a fake ES2015 template string, just to benefit of syntax
|
//* This is a fake ES2015 template string, just to benefit of syntax
|
||||||
// highlighting of `gql` template strings in certain editors.
|
// highlighting of `gql` template strings in certain editors.
|
||||||
export function gql(strings) {
|
export function gql(strings) {
|
||||||
|
|||||||
@ -58,6 +58,7 @@ const createLocation = async (session, mapboxData) => {
|
|||||||
query += ' RETURN l.id'
|
query += ' RETURN l.id'
|
||||||
|
|
||||||
await session.run(query, data)
|
await session.run(query, data)
|
||||||
|
session.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
const createOrUpdateLocations = async (userId, locationName, driver) => {
|
const createOrUpdateLocations = async (userId, locationName, driver) => {
|
||||||
|
|||||||
@ -72,6 +72,7 @@ const validateReport = async (resolve, root, args, context, info) => {
|
|||||||
submitterId: user.id,
|
submitterId: user.id,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
session.close()
|
||||||
const [existingReportedResource] = reportQueryRes.records.map(record => {
|
const [existingReportedResource] = reportQueryRes.records.map(record => {
|
||||||
return {
|
return {
|
||||||
label: record.get('label'),
|
label: record.get('label'),
|
||||||
|
|||||||
@ -59,6 +59,7 @@ export default {
|
|||||||
`,
|
`,
|
||||||
{ commentId: args.id },
|
{ commentId: args.id },
|
||||||
)
|
)
|
||||||
|
session.close()
|
||||||
const [comment] = transactionRes.records.map(record => record.get('comment').properties)
|
const [comment] = transactionRes.records.map(record => record.get('comment').properties)
|
||||||
return comment
|
return comment
|
||||||
},
|
},
|
||||||
|
|||||||
@ -3,11 +3,14 @@ import Resolver from './helpers/Resolver'
|
|||||||
import existingEmailAddress from './helpers/existingEmailAddress'
|
import existingEmailAddress from './helpers/existingEmailAddress'
|
||||||
import { UserInputError } from 'apollo-server'
|
import { UserInputError } from 'apollo-server'
|
||||||
import Validator from 'neode/build/Services/Validator.js'
|
import Validator from 'neode/build/Services/Validator.js'
|
||||||
|
import { normalizeEmail } from 'validator'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
Mutation: {
|
Mutation: {
|
||||||
AddEmailAddress: async (_parent, args, context, _resolveInfo) => {
|
AddEmailAddress: async (_parent, args, context, _resolveInfo) => {
|
||||||
let response
|
let response
|
||||||
|
args.email = normalizeEmail(args.email)
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { neode } = context
|
const { neode } = context
|
||||||
await new Validator(neode, neode.model('UnverifiedEmailAddress'), args)
|
await new Validator(neode, neode.model('UnverifiedEmailAddress'), args)
|
||||||
@ -16,13 +19,13 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check email does not belong to anybody
|
// check email does not belong to anybody
|
||||||
await existingEmailAddress(_parent, args, context)
|
await existingEmailAddress({ args, context })
|
||||||
|
|
||||||
const nonce = generateNonce()
|
const nonce = generateNonce()
|
||||||
const {
|
const {
|
||||||
user: { id: userId },
|
user: { id: userId },
|
||||||
} = context
|
} = context
|
||||||
const { email } = args
|
|
||||||
const session = context.driver.session()
|
const session = context.driver.session()
|
||||||
const writeTxResultPromise = session.writeTransaction(async txc => {
|
const writeTxResultPromise = session.writeTransaction(async txc => {
|
||||||
const result = await txc.run(
|
const result = await txc.run(
|
||||||
@ -32,7 +35,7 @@ export default {
|
|||||||
SET email.createdAt = toString(datetime())
|
SET email.createdAt = toString(datetime())
|
||||||
RETURN email, user
|
RETURN email, user
|
||||||
`,
|
`,
|
||||||
{ userId, email, nonce },
|
{ userId, email: args.email, nonce },
|
||||||
)
|
)
|
||||||
return result.records.map(record => ({
|
return result.records.map(record => ({
|
||||||
name: record.get('user').properties.name,
|
name: record.get('user').properties.name,
|
||||||
|
|||||||
31
backend/src/schema/resolvers/helpers/createPasswordReset.js
Normal file
31
backend/src/schema/resolvers/helpers/createPasswordReset.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import { normalizeEmail } from 'validator'
|
||||||
|
|
||||||
|
export default async function createPasswordReset(options) {
|
||||||
|
const { driver, nonce, email, issuedAt = new Date() } = options
|
||||||
|
const normalizedEmail = normalizeEmail(email)
|
||||||
|
const session = driver.session()
|
||||||
|
let response = {}
|
||||||
|
try {
|
||||||
|
const cypher = `
|
||||||
|
MATCH (u:User)-[:PRIMARY_EMAIL]->(e:EmailAddress {email:$email})
|
||||||
|
CREATE(pr:PasswordReset {nonce: $nonce, issuedAt: datetime($issuedAt), usedAt: NULL})
|
||||||
|
MERGE (u)-[:REQUESTED]->(pr)
|
||||||
|
RETURN e, pr, u
|
||||||
|
`
|
||||||
|
const transactionRes = await session.run(cypher, {
|
||||||
|
issuedAt: issuedAt.toISOString(),
|
||||||
|
nonce,
|
||||||
|
email: normalizedEmail,
|
||||||
|
})
|
||||||
|
const records = transactionRes.records.map(record => {
|
||||||
|
const { email } = record.get('e').properties
|
||||||
|
const { nonce } = record.get('pr').properties
|
||||||
|
const { name } = record.get('u').properties
|
||||||
|
return { email, nonce, name }
|
||||||
|
})
|
||||||
|
response = records[0] || {}
|
||||||
|
} finally {
|
||||||
|
session.close()
|
||||||
|
}
|
||||||
|
return response
|
||||||
|
}
|
||||||
@ -0,0 +1,35 @@
|
|||||||
|
import createPasswordReset from './createPasswordReset'
|
||||||
|
|
||||||
|
describe('createPasswordReset', () => {
|
||||||
|
const issuedAt = new Date()
|
||||||
|
const nonce = 'abcdef'
|
||||||
|
|
||||||
|
describe('email lookup', () => {
|
||||||
|
let driver
|
||||||
|
let mockSession
|
||||||
|
beforeEach(() => {
|
||||||
|
mockSession = {
|
||||||
|
close() {},
|
||||||
|
run: jest.fn().mockReturnValue({
|
||||||
|
records: {
|
||||||
|
map: jest.fn(() => []),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
driver = { session: () => mockSession }
|
||||||
|
})
|
||||||
|
|
||||||
|
it('lowercases email address', async () => {
|
||||||
|
const email = 'stRaNGeCaSiNG@ExAmplE.ORG'
|
||||||
|
await createPasswordReset({ driver, email, issuedAt, nonce })
|
||||||
|
expect(mockSession.run.mock.calls).toEqual([
|
||||||
|
[
|
||||||
|
expect.any(String),
|
||||||
|
expect.objectContaining({
|
||||||
|
email: 'strangecasing@example.org',
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
@ -1,7 +1,6 @@
|
|||||||
import { UserInputError } from 'apollo-server'
|
import { UserInputError } from 'apollo-server'
|
||||||
export default async function alreadyExistingMail(_parent, args, context) {
|
|
||||||
let { email } = args
|
export default async function alreadyExistingMail({ args, context }) {
|
||||||
email = email.toLowerCase()
|
|
||||||
const cypher = `
|
const cypher = `
|
||||||
MATCH (email:EmailAddress {email: $email})
|
MATCH (email:EmailAddress {email: $email})
|
||||||
OPTIONAL MATCH (email)-[:BELONGS_TO]-(user)
|
OPTIONAL MATCH (email)-[:BELONGS_TO]-(user)
|
||||||
@ -10,7 +9,7 @@ export default async function alreadyExistingMail(_parent, args, context) {
|
|||||||
let transactionRes
|
let transactionRes
|
||||||
const session = context.driver.session()
|
const session = context.driver.session()
|
||||||
try {
|
try {
|
||||||
transactionRes = await session.run(cypher, { email })
|
transactionRes = await session.run(cypher, { email: args.email })
|
||||||
} finally {
|
} finally {
|
||||||
session.close()
|
session.close()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,34 +1,6 @@
|
|||||||
import uuid from 'uuid/v4'
|
import uuid from 'uuid/v4'
|
||||||
import bcrypt from 'bcryptjs'
|
import bcrypt from 'bcryptjs'
|
||||||
|
import createPasswordReset from './helpers/createPasswordReset'
|
||||||
export async function createPasswordReset(options) {
|
|
||||||
const { driver, nonce, email, issuedAt = new Date() } = options
|
|
||||||
const session = driver.session()
|
|
||||||
let response = {}
|
|
||||||
try {
|
|
||||||
const cypher = `
|
|
||||||
MATCH (u:User)-[:PRIMARY_EMAIL]->(e:EmailAddress {email:$email})
|
|
||||||
CREATE(pr:PasswordReset {nonce: $nonce, issuedAt: datetime($issuedAt), usedAt: NULL})
|
|
||||||
MERGE (u)-[:REQUESTED]->(pr)
|
|
||||||
RETURN e, pr, u
|
|
||||||
`
|
|
||||||
const transactionRes = await session.run(cypher, {
|
|
||||||
issuedAt: issuedAt.toISOString(),
|
|
||||||
nonce,
|
|
||||||
email,
|
|
||||||
})
|
|
||||||
const records = transactionRes.records.map(record => {
|
|
||||||
const { email } = record.get('e').properties
|
|
||||||
const { nonce } = record.get('pr').properties
|
|
||||||
const { name } = record.get('u').properties
|
|
||||||
return { email, nonce, name }
|
|
||||||
})
|
|
||||||
response = records[0] || {}
|
|
||||||
} finally {
|
|
||||||
session.close()
|
|
||||||
}
|
|
||||||
return response
|
|
||||||
}
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
Mutation: {
|
Mutation: {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import Factory from '../../seed/factories'
|
import Factory from '../../seed/factories'
|
||||||
import { gql } from '../../jest/helpers'
|
import { gql } from '../../jest/helpers'
|
||||||
import { neode as getNeode, getDriver } from '../../bootstrap/neo4j'
|
import { neode as getNeode, getDriver } from '../../bootstrap/neo4j'
|
||||||
import { createPasswordReset } from './passwordReset'
|
import createPasswordReset from './helpers/createPasswordReset'
|
||||||
import createServer from '../../server'
|
import createServer from '../../server'
|
||||||
import { createTestClient } from 'apollo-server-testing'
|
import { createTestClient } from 'apollo-server-testing'
|
||||||
|
|
||||||
@ -109,10 +109,7 @@ describe('passwordReset', () => {
|
|||||||
describe('resetPassword', () => {
|
describe('resetPassword', () => {
|
||||||
const setup = async (options = {}) => {
|
const setup = async (options = {}) => {
|
||||||
const { email = 'user@example.org', issuedAt = new Date(), nonce = 'abcdef' } = options
|
const { email = 'user@example.org', issuedAt = new Date(), nonce = 'abcdef' } = options
|
||||||
|
|
||||||
const session = driver.session()
|
|
||||||
await createPasswordReset({ driver, email, issuedAt, nonce })
|
await createPasswordReset({ driver, email, issuedAt, nonce })
|
||||||
session.close()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const mutation = gql`
|
const mutation = gql`
|
||||||
|
|||||||
@ -182,6 +182,7 @@ export default {
|
|||||||
`,
|
`,
|
||||||
{ postId: args.id },
|
{ postId: args.id },
|
||||||
)
|
)
|
||||||
|
session.close()
|
||||||
const [post] = transactionRes.records.map(record => record.get('post').properties)
|
const [post] = transactionRes.records.map(record => record.get('post').properties)
|
||||||
return post
|
return post
|
||||||
},
|
},
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import fileUpload from './fileUpload'
|
|||||||
import encryptPassword from '../../helpers/encryptPassword'
|
import encryptPassword from '../../helpers/encryptPassword'
|
||||||
import generateNonce from './helpers/generateNonce'
|
import generateNonce from './helpers/generateNonce'
|
||||||
import existingEmailAddress from './helpers/existingEmailAddress'
|
import existingEmailAddress from './helpers/existingEmailAddress'
|
||||||
|
import { normalizeEmail } from 'validator'
|
||||||
|
|
||||||
const instance = neode()
|
const instance = neode()
|
||||||
|
|
||||||
@ -29,9 +30,9 @@ export default {
|
|||||||
return response
|
return response
|
||||||
},
|
},
|
||||||
Signup: async (_parent, args, context) => {
|
Signup: async (_parent, args, context) => {
|
||||||
const nonce = generateNonce()
|
args.nonce = generateNonce()
|
||||||
args.nonce = nonce
|
args.email = normalizeEmail(args.email)
|
||||||
let emailAddress = await existingEmailAddress(_parent, args, context)
|
let emailAddress = await existingEmailAddress({ args, context })
|
||||||
if (emailAddress) return emailAddress
|
if (emailAddress) return emailAddress
|
||||||
try {
|
try {
|
||||||
emailAddress = await instance.create('EmailAddress', args)
|
emailAddress = await instance.create('EmailAddress', args)
|
||||||
@ -42,9 +43,9 @@ export default {
|
|||||||
},
|
},
|
||||||
SignupByInvitation: async (_parent, args, context) => {
|
SignupByInvitation: async (_parent, args, context) => {
|
||||||
const { token } = args
|
const { token } = args
|
||||||
const nonce = generateNonce()
|
args.nonce = generateNonce()
|
||||||
args.nonce = nonce
|
args.email = normalizeEmail(args.email)
|
||||||
let emailAddress = await existingEmailAddress(_parent, args, context)
|
let emailAddress = await existingEmailAddress({ args, context })
|
||||||
if (emailAddress) return emailAddress
|
if (emailAddress) return emailAddress
|
||||||
try {
|
try {
|
||||||
const result = await instance.cypher(
|
const result = await instance.cypher(
|
||||||
@ -78,7 +79,7 @@ export default {
|
|||||||
args.termsAndConditionsAgreedAt = new Date().toISOString()
|
args.termsAndConditionsAgreedAt = new Date().toISOString()
|
||||||
|
|
||||||
let { nonce, email } = args
|
let { nonce, email } = args
|
||||||
email = email.toLowerCase()
|
email = normalizeEmail(email)
|
||||||
const result = await instance.cypher(
|
const result = await instance.cypher(
|
||||||
`
|
`
|
||||||
MATCH(email:EmailAddress {nonce: {nonce}, email: {email}})
|
MATCH(email:EmailAddress {nonce: {nonce}, email: {email}})
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
import { GraphQLClient, request } from 'graphql-request'
|
|
||||||
import { getDriver, neode } from '../../bootstrap/neo4j'
|
import { getDriver, neode } from '../../bootstrap/neo4j'
|
||||||
import createBadge from './badges.js'
|
import createBadge from './badges.js'
|
||||||
import createUser from './users.js'
|
import createUser from './users.js'
|
||||||
@ -11,18 +10,6 @@ import createLocation from './locations.js'
|
|||||||
import createEmailAddress from './emailAddresses.js'
|
import createEmailAddress from './emailAddresses.js'
|
||||||
import createUnverifiedEmailAddresss from './unverifiedEmailAddresses.js'
|
import createUnverifiedEmailAddresss from './unverifiedEmailAddresses.js'
|
||||||
|
|
||||||
export const seedServerHost = 'http://127.0.0.1:4001'
|
|
||||||
|
|
||||||
const authenticatedHeaders = async ({ email, password }, host) => {
|
|
||||||
const mutation = `
|
|
||||||
mutation {
|
|
||||||
login(email:"${email}", password:"${password}")
|
|
||||||
}`
|
|
||||||
const response = await request(host, mutation)
|
|
||||||
return {
|
|
||||||
authorization: `Bearer ${response.login}`,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const factories = {
|
const factories = {
|
||||||
Badge: createBadge,
|
Badge: createBadge,
|
||||||
User: createUser,
|
User: createUser,
|
||||||
@ -48,127 +35,31 @@ export const cleanDatabase = async (options = {}) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export default function Factory(options = {}) {
|
export default function Factory(options = {}) {
|
||||||
const {
|
const { neo4jDriver = getDriver(), neodeInstance = neode() } = options
|
||||||
seedServerHost = 'http://127.0.0.1:4001',
|
|
||||||
neo4jDriver = getDriver(),
|
|
||||||
neodeInstance = neode(),
|
|
||||||
} = options
|
|
||||||
|
|
||||||
const graphQLClient = new GraphQLClient(seedServerHost)
|
|
||||||
|
|
||||||
const result = {
|
const result = {
|
||||||
neo4jDriver,
|
neo4jDriver,
|
||||||
seedServerHost,
|
|
||||||
graphQLClient,
|
|
||||||
factories,
|
factories,
|
||||||
lastResponse: null,
|
lastResponse: null,
|
||||||
neodeInstance,
|
neodeInstance,
|
||||||
async authenticateAs({ email, password }) {
|
|
||||||
const headers = await authenticatedHeaders(
|
|
||||||
{
|
|
||||||
email,
|
|
||||||
password,
|
|
||||||
},
|
|
||||||
seedServerHost,
|
|
||||||
)
|
|
||||||
this.lastResponse = headers
|
|
||||||
this.graphQLClient = new GraphQLClient(seedServerHost, {
|
|
||||||
headers,
|
|
||||||
})
|
|
||||||
return this
|
|
||||||
},
|
|
||||||
async create(node, args = {}) {
|
async create(node, args = {}) {
|
||||||
const { factory, mutation, variables } = this.factories[node](args)
|
const { factory } = this.factories[node](args)
|
||||||
if (factory) {
|
this.lastResponse = await factory({
|
||||||
this.lastResponse = await factory({
|
args,
|
||||||
args,
|
neodeInstance,
|
||||||
neodeInstance,
|
factoryInstance: this,
|
||||||
factoryInstance: this,
|
|
||||||
})
|
|
||||||
return this.lastResponse
|
|
||||||
} else {
|
|
||||||
this.lastResponse = await this.graphQLClient.request(mutation, variables)
|
|
||||||
}
|
|
||||||
return this
|
|
||||||
},
|
|
||||||
async relate(node, relationship, { from, to }) {
|
|
||||||
const mutation = `
|
|
||||||
mutation {
|
|
||||||
Add${node}${relationship}(
|
|
||||||
from: { id: "${from}" },
|
|
||||||
to: { id: "${to}" }
|
|
||||||
) { from { id } }
|
|
||||||
}
|
|
||||||
`
|
|
||||||
this.lastResponse = await this.graphQLClient.request(mutation)
|
|
||||||
return this
|
|
||||||
},
|
|
||||||
async mutate(mutation, variables) {
|
|
||||||
this.lastResponse = await this.graphQLClient.request(mutation, variables)
|
|
||||||
return this
|
|
||||||
},
|
|
||||||
async shout(properties) {
|
|
||||||
const { id, type } = properties
|
|
||||||
const mutation = `
|
|
||||||
mutation {
|
|
||||||
shout(
|
|
||||||
id: "${id}",
|
|
||||||
type: ${type}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
`
|
|
||||||
this.lastResponse = await this.graphQLClient.request(mutation)
|
|
||||||
return this
|
|
||||||
},
|
|
||||||
async followUser(properties) {
|
|
||||||
const { id } = properties
|
|
||||||
const mutation = `
|
|
||||||
mutation {
|
|
||||||
followUser(
|
|
||||||
id: "${id}"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
`
|
|
||||||
this.lastResponse = await this.graphQLClient.request(mutation)
|
|
||||||
return this
|
|
||||||
},
|
|
||||||
async invite({ email }) {
|
|
||||||
const mutation = ` mutation($email: String!) { invite( email: $email) } `
|
|
||||||
this.lastResponse = await this.graphQLClient.request(mutation, {
|
|
||||||
email,
|
|
||||||
})
|
})
|
||||||
return this
|
return this.lastResponse
|
||||||
},
|
},
|
||||||
|
|
||||||
async cleanDatabase() {
|
async cleanDatabase() {
|
||||||
this.lastResponse = await cleanDatabase({
|
this.lastResponse = await cleanDatabase({
|
||||||
driver: this.neo4jDriver,
|
driver: this.neo4jDriver,
|
||||||
})
|
})
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
async emote({ to, data }) {
|
|
||||||
const mutation = `
|
|
||||||
mutation {
|
|
||||||
AddPostEmotions(
|
|
||||||
to: { id: "${to}" },
|
|
||||||
data: { emotion: ${data} }
|
|
||||||
) {
|
|
||||||
from { id }
|
|
||||||
to { id }
|
|
||||||
emotion
|
|
||||||
}
|
|
||||||
}
|
|
||||||
`
|
|
||||||
this.lastResponse = await this.graphQLClient.request(mutation)
|
|
||||||
return this
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
result.authenticateAs.bind(result)
|
|
||||||
result.create.bind(result)
|
result.create.bind(result)
|
||||||
result.relate.bind(result)
|
|
||||||
result.mutate.bind(result)
|
|
||||||
result.shout.bind(result)
|
|
||||||
result.followUser.bind(result)
|
|
||||||
result.invite.bind(result)
|
|
||||||
result.cleanDatabase.bind(result)
|
result.cleanDatabase.bind(result)
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,18 +14,17 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.24.tgz#3ce939cb127fb8aaa3ffc1e90dff9b8af9f2e3dc"
|
resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.24.tgz#3ce939cb127fb8aaa3ffc1e90dff9b8af9f2e3dc"
|
||||||
integrity sha512-8GqG48m1XqyXh4mIZrtB5xOhUwSsh1WsrrsaZQOEYYql3YN9DEu9OOSg0ILzXHZo/h2Q74777YE4YzlArQzQEQ==
|
integrity sha512-8GqG48m1XqyXh4mIZrtB5xOhUwSsh1WsrrsaZQOEYYql3YN9DEu9OOSg0ILzXHZo/h2Q74777YE4YzlArQzQEQ==
|
||||||
|
|
||||||
"@babel/cli@~7.6.4":
|
"@babel/cli@~7.7.0":
|
||||||
version "7.6.4"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.6.4.tgz#9b35a4e15fa7d8f487418aaa8229c8b0bc815f20"
|
resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.7.0.tgz#8d10c9acb2acb362d7614a9493e1791c69100d89"
|
||||||
integrity sha512-tqrDyvPryBM6xjIyKKUwr3s8CzmmYidwgdswd7Uc/Cv0ogZcuS1TYQTLx/eWKP3UbJ6JxZAiYlBZabXm/rtRsQ==
|
integrity sha512-jECEqAq6Ngf3pOhLSg7od9WKyrIacyh1oNNYtRXNn+ummSHCTXBamGywOAtiae34Vk7zKuQNnLvo2BKTMCoV4A==
|
||||||
dependencies:
|
dependencies:
|
||||||
commander "^2.8.1"
|
commander "^2.8.1"
|
||||||
convert-source-map "^1.1.0"
|
convert-source-map "^1.1.0"
|
||||||
fs-readdir-recursive "^1.1.0"
|
fs-readdir-recursive "^1.1.0"
|
||||||
glob "^7.0.0"
|
glob "^7.0.0"
|
||||||
lodash "^4.17.13"
|
lodash "^4.17.13"
|
||||||
mkdirp "^0.5.1"
|
make-dir "^2.1.0"
|
||||||
output-file-sync "^2.0.0"
|
|
||||||
slash "^2.0.0"
|
slash "^2.0.0"
|
||||||
source-map "^0.5.0"
|
source-map "^0.5.0"
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
@ -68,6 +67,16 @@
|
|||||||
lodash "^4.17.13"
|
lodash "^4.17.13"
|
||||||
source-map "^0.5.0"
|
source-map "^0.5.0"
|
||||||
|
|
||||||
|
"@babel/generator@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.0.tgz#c6d4d1f7a0d6e139cbd01aca73170b0bff5425b4"
|
||||||
|
integrity sha512-1wdJ6UxHyL1XoJQ119JmvuRX27LRih7iYStMPZOWAjQqeAabFg3dYXKMpgihma+to+0ADsTVVt6oRyUxWZw6Mw==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
|
jsesc "^2.5.1"
|
||||||
|
lodash "^4.17.13"
|
||||||
|
source-map "^0.5.0"
|
||||||
|
|
||||||
"@babel/helper-annotate-as-pure@^7.0.0":
|
"@babel/helper-annotate-as-pure@^7.0.0":
|
||||||
version "7.0.0"
|
version "7.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
|
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32"
|
||||||
@ -75,6 +84,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.0.0"
|
"@babel/types" "^7.0.0"
|
||||||
|
|
||||||
|
"@babel/helper-annotate-as-pure@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.0.tgz#efc54032d43891fe267679e63f6860aa7dbf4a5e"
|
||||||
|
integrity sha512-k50CQxMlYTYo+GGyUGFwpxKVtxVJi9yh61sXZji3zYHccK9RYliZGSTOgci85T+r+0VFN2nWbGM04PIqwfrpMg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
|
|
||||||
"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
|
"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0":
|
||||||
version "7.1.0"
|
version "7.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
|
resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f"
|
||||||
@ -92,13 +108,21 @@
|
|||||||
"@babel/traverse" "^7.4.4"
|
"@babel/traverse" "^7.4.4"
|
||||||
"@babel/types" "^7.4.4"
|
"@babel/types" "^7.4.4"
|
||||||
|
|
||||||
"@babel/helper-define-map@^7.5.5":
|
"@babel/helper-create-regexp-features-plugin@^7.7.0":
|
||||||
version "7.5.5"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369"
|
resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.0.tgz#2e8badfe201cfafb5d930f46cf1e0b6f1cdcab23"
|
||||||
integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==
|
integrity sha512-ZhagAAVGD3L6MPM9/zZi7RRteonfBFLVUz3kjsnYsMAtr9hOJCKI9BAKIMpqn3NyWicPieoX779UL+7/3BEAOA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-function-name" "^7.1.0"
|
"@babel/helper-regex" "^7.4.4"
|
||||||
"@babel/types" "^7.5.5"
|
regexpu-core "^4.6.0"
|
||||||
|
|
||||||
|
"@babel/helper-define-map@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.0.tgz#60b0e9fd60def9de5054c38afde8c8ee409c7529"
|
||||||
|
integrity sha512-kPKWPb0dMpZi+ov1hJiwse9dWweZsz3V9rP4KdytnX1E7z3cTNmFGglwklzFPuqIcHLIY3bgKSs4vkwXXdflQA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-function-name" "^7.7.0"
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
lodash "^4.17.13"
|
lodash "^4.17.13"
|
||||||
|
|
||||||
"@babel/helper-explode-assignable-expression@^7.1.0":
|
"@babel/helper-explode-assignable-expression@^7.1.0":
|
||||||
@ -118,6 +142,15 @@
|
|||||||
"@babel/template" "^7.1.0"
|
"@babel/template" "^7.1.0"
|
||||||
"@babel/types" "^7.0.0"
|
"@babel/types" "^7.0.0"
|
||||||
|
|
||||||
|
"@babel/helper-function-name@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.0.tgz#44a5ad151cfff8ed2599c91682dda2ec2c8430a3"
|
||||||
|
integrity sha512-tDsJgMUAP00Ugv8O2aGEua5I2apkaQO7lBGUq1ocwN3G23JE5Dcq0uh3GvFTChPa4b40AWiAsLvCZOA2rdnQ7Q==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-get-function-arity" "^7.7.0"
|
||||||
|
"@babel/template" "^7.7.0"
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
|
|
||||||
"@babel/helper-get-function-arity@^7.0.0":
|
"@babel/helper-get-function-arity@^7.0.0":
|
||||||
version "7.0.0"
|
version "7.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
|
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3"
|
||||||
@ -125,6 +158,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.0.0"
|
"@babel/types" "^7.0.0"
|
||||||
|
|
||||||
|
"@babel/helper-get-function-arity@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.0.tgz#c604886bc97287a1d1398092bc666bc3d7d7aa2d"
|
||||||
|
integrity sha512-tLdojOTz4vWcEnHWHCuPN5P85JLZWbm5Fx5ZsMEMPhF3Uoe3O7awrbM2nQ04bDOUToH/2tH/ezKEOR8zEYzqyw==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
|
|
||||||
"@babel/helper-hoist-variables@^7.4.4":
|
"@babel/helper-hoist-variables@^7.4.4":
|
||||||
version "7.4.4"
|
version "7.4.4"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a"
|
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a"
|
||||||
@ -132,6 +172,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.4.4"
|
"@babel/types" "^7.4.4"
|
||||||
|
|
||||||
|
"@babel/helper-hoist-variables@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.0.tgz#b4552e4cfe5577d7de7b183e193e84e4ec538c81"
|
||||||
|
integrity sha512-LUe/92NqsDAkJjjCEWkNe+/PcpnisvnqdlRe19FahVapa4jndeuJ+FBiTX1rcAKWKcJGE+C3Q3tuEuxkSmCEiQ==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
|
|
||||||
"@babel/helper-member-expression-to-functions@^7.5.5":
|
"@babel/helper-member-expression-to-functions@^7.5.5":
|
||||||
version "7.5.5"
|
version "7.5.5"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590"
|
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590"
|
||||||
@ -139,14 +186,21 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.5.5"
|
"@babel/types" "^7.5.5"
|
||||||
|
|
||||||
"@babel/helper-module-imports@^7.0.0":
|
"@babel/helper-member-expression-to-functions@^7.7.0":
|
||||||
version "7.0.0"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d"
|
resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.0.tgz#472b93003a57071f95a541ea6c2b098398bcad8a"
|
||||||
integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==
|
integrity sha512-QaCZLO2RtBcmvO/ekOLp8p7R5X2JriKRizeDpm5ChATAFWrrYDcDxPuCIBXKyBjY+i1vYSdcUTMIb8psfxHDPA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.0.0"
|
"@babel/types" "^7.7.0"
|
||||||
|
|
||||||
"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4":
|
"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.0.tgz#99c095889466e5f7b6d66d98dffc58baaf42654d"
|
||||||
|
integrity sha512-Dv3hLKIC1jyfTkClvyEkYP2OlkzNvWs5+Q8WgPbxM5LMeorons7iPP91JM+DU7tRbhqA1ZeooPaMFvQrn23RHw==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
|
|
||||||
|
"@babel/helper-module-transforms@^7.1.0":
|
||||||
version "7.5.5"
|
version "7.5.5"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a"
|
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a"
|
||||||
integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==
|
integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==
|
||||||
@ -158,6 +212,18 @@
|
|||||||
"@babel/types" "^7.5.5"
|
"@babel/types" "^7.5.5"
|
||||||
lodash "^4.17.13"
|
lodash "^4.17.13"
|
||||||
|
|
||||||
|
"@babel/helper-module-transforms@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.0.tgz#154a69f0c5b8fd4d39e49750ff7ac4faa3f36786"
|
||||||
|
integrity sha512-rXEefBuheUYQyX4WjV19tuknrJFwyKw0HgzRwbkyTbB+Dshlq7eqkWbyjzToLrMZk/5wKVKdWFluiAsVkHXvuQ==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-module-imports" "^7.7.0"
|
||||||
|
"@babel/helper-simple-access" "^7.7.0"
|
||||||
|
"@babel/helper-split-export-declaration" "^7.7.0"
|
||||||
|
"@babel/template" "^7.7.0"
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
|
lodash "^4.17.13"
|
||||||
|
|
||||||
"@babel/helper-optimise-call-expression@^7.0.0":
|
"@babel/helper-optimise-call-expression@^7.0.0":
|
||||||
version "7.0.0"
|
version "7.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5"
|
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5"
|
||||||
@ -165,6 +231,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.0.0"
|
"@babel/types" "^7.0.0"
|
||||||
|
|
||||||
|
"@babel/helper-optimise-call-expression@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.0.tgz#4f66a216116a66164135dc618c5d8b7a959f9365"
|
||||||
|
integrity sha512-48TeqmbazjNU/65niiiJIJRc5JozB8acui1OS7bSd6PgxfuovWsvjfWSzlgx+gPFdVveNzUdpdIg5l56Pl5jqg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
|
|
||||||
"@babel/helper-plugin-utils@^7.0.0":
|
"@babel/helper-plugin-utils@^7.0.0":
|
||||||
version "7.0.0"
|
version "7.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
|
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
|
||||||
@ -177,16 +250,16 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
lodash "^4.17.13"
|
lodash "^4.17.13"
|
||||||
|
|
||||||
"@babel/helper-remap-async-to-generator@^7.1.0":
|
"@babel/helper-remap-async-to-generator@^7.7.0":
|
||||||
version "7.1.0"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f"
|
resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.0.tgz#4d69ec653e8bff5bce62f5d33fc1508f223c75a7"
|
||||||
integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==
|
integrity sha512-pHx7RN8X0UNHPB/fnuDnRXVZ316ZigkO8y8D835JlZ2SSdFKb6yH9MIYRU4fy/KPe5sPHDFOPvf8QLdbAGGiyw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-annotate-as-pure" "^7.0.0"
|
"@babel/helper-annotate-as-pure" "^7.7.0"
|
||||||
"@babel/helper-wrap-function" "^7.1.0"
|
"@babel/helper-wrap-function" "^7.7.0"
|
||||||
"@babel/template" "^7.1.0"
|
"@babel/template" "^7.7.0"
|
||||||
"@babel/traverse" "^7.1.0"
|
"@babel/traverse" "^7.7.0"
|
||||||
"@babel/types" "^7.0.0"
|
"@babel/types" "^7.7.0"
|
||||||
|
|
||||||
"@babel/helper-replace-supers@^7.5.5":
|
"@babel/helper-replace-supers@^7.5.5":
|
||||||
version "7.5.5"
|
version "7.5.5"
|
||||||
@ -198,6 +271,16 @@
|
|||||||
"@babel/traverse" "^7.5.5"
|
"@babel/traverse" "^7.5.5"
|
||||||
"@babel/types" "^7.5.5"
|
"@babel/types" "^7.5.5"
|
||||||
|
|
||||||
|
"@babel/helper-replace-supers@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.0.tgz#d5365c8667fe7cbd13b8ddddceb9bd7f2b387512"
|
||||||
|
integrity sha512-5ALYEul5V8xNdxEeWvRsBzLMxQksT7MaStpxjJf9KsnLxpAKBtfw5NeMKZJSYDa0lKdOcy0g+JT/f5mPSulUgg==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-member-expression-to-functions" "^7.7.0"
|
||||||
|
"@babel/helper-optimise-call-expression" "^7.7.0"
|
||||||
|
"@babel/traverse" "^7.7.0"
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
|
|
||||||
"@babel/helper-simple-access@^7.1.0":
|
"@babel/helper-simple-access@^7.1.0":
|
||||||
version "7.1.0"
|
version "7.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
|
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c"
|
||||||
@ -206,6 +289,14 @@
|
|||||||
"@babel/template" "^7.1.0"
|
"@babel/template" "^7.1.0"
|
||||||
"@babel/types" "^7.0.0"
|
"@babel/types" "^7.0.0"
|
||||||
|
|
||||||
|
"@babel/helper-simple-access@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.0.tgz#97a8b6c52105d76031b86237dc1852b44837243d"
|
||||||
|
integrity sha512-AJ7IZD7Eem3zZRuj5JtzFAptBw7pMlS3y8Qv09vaBWoFsle0d1kAn5Wq6Q9MyBXITPOKnxwkZKoAm4bopmv26g==
|
||||||
|
dependencies:
|
||||||
|
"@babel/template" "^7.7.0"
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
|
|
||||||
"@babel/helper-split-export-declaration@^7.4.4":
|
"@babel/helper-split-export-declaration@^7.4.4":
|
||||||
version "7.4.4"
|
version "7.4.4"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677"
|
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677"
|
||||||
@ -213,15 +304,22 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/types" "^7.4.4"
|
"@babel/types" "^7.4.4"
|
||||||
|
|
||||||
"@babel/helper-wrap-function@^7.1.0":
|
"@babel/helper-split-export-declaration@^7.7.0":
|
||||||
version "7.2.0"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa"
|
resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.0.tgz#1365e74ea6c614deeb56ebffabd71006a0eb2300"
|
||||||
integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==
|
integrity sha512-HgYSI8rH08neWlAH3CcdkFg9qX9YsZysZI5GD8LjhQib/mM0jGOZOVkoUiiV2Hu978fRtjtsGsW6w0pKHUWtqA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-function-name" "^7.1.0"
|
"@babel/types" "^7.7.0"
|
||||||
"@babel/template" "^7.1.0"
|
|
||||||
"@babel/traverse" "^7.1.0"
|
"@babel/helper-wrap-function@^7.7.0":
|
||||||
"@babel/types" "^7.2.0"
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.0.tgz#15af3d3e98f8417a60554acbb6c14e75e0b33b74"
|
||||||
|
integrity sha512-sd4QjeMgQqzshSjecZjOp8uKfUtnpmCyQhKQrVJBBgeHAB/0FPi33h3AbVlVp07qQtMD4QgYSzaMI7VwncNK/w==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-function-name" "^7.7.0"
|
||||||
|
"@babel/template" "^7.7.0"
|
||||||
|
"@babel/traverse" "^7.7.0"
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
|
|
||||||
"@babel/helpers@^7.6.2":
|
"@babel/helpers@^7.6.2":
|
||||||
version "7.6.2"
|
version "7.6.2"
|
||||||
@ -241,12 +339,12 @@
|
|||||||
esutils "^2.0.2"
|
esutils "^2.0.2"
|
||||||
js-tokens "^4.0.0"
|
js-tokens "^4.0.0"
|
||||||
|
|
||||||
"@babel/node@~7.6.3":
|
"@babel/node@~7.7.0":
|
||||||
version "7.6.3"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.6.3.tgz#f175ab6718dde55431cbd4d9dee95f65c38be527"
|
resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.7.0.tgz#fba73fdaf75ab1a0eaf03923f5f4ce7fa41c9974"
|
||||||
integrity sha512-+nHje5AcE9TPlB/TRGYyOSQyTfhfU/WXniG6SkVf+V5+ibAjEqkH79lYdiEcytBTH4KeSf25IriySXs6TjaLjg==
|
integrity sha512-CZFTjfCGysChOJ90ksndqct5bXkByzV5Ef8YgYS3A513MhyFQgsXJMRu2QyGOlfoP3hBZ3AmDd37ARyv/L1Zvw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/register" "^7.6.2"
|
"@babel/register" "^7.7.0"
|
||||||
commander "^2.8.1"
|
commander "^2.8.1"
|
||||||
core-js "^3.2.1"
|
core-js "^3.2.1"
|
||||||
lodash "^4.17.13"
|
lodash "^4.17.13"
|
||||||
@ -259,19 +357,24 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81"
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.4.tgz#cb9b36a7482110282d5cb6dd424ec9262b473d81"
|
||||||
integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==
|
integrity sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==
|
||||||
|
|
||||||
"@babel/plugin-proposal-async-generator-functions@^7.2.0":
|
"@babel/parser@^7.7.0":
|
||||||
version "7.2.0"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e"
|
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.0.tgz#232618f6e8947bc54b407fa1f1c91a22758e7159"
|
||||||
integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==
|
integrity sha512-GqL+Z0d7B7ADlQBMXlJgvXEbtt5qlqd1YQ5fr12hTSfh7O/vgrEIvJxU2e7aSVrEUn75zTZ6Nd0s8tthrlZnrQ==
|
||||||
|
|
||||||
|
"@babel/plugin-proposal-async-generator-functions@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.0.tgz#83ef2d6044496b4c15d8b4904e2219e6dccc6971"
|
||||||
|
integrity sha512-ot/EZVvf3mXtZq0Pd0+tSOfGWMizqmOohXmNZg6LNFjHOV+wOPv7BvVYh8oPR8LhpIP3ye8nNooKL50YRWxpYA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
"@babel/helper-remap-async-to-generator" "^7.1.0"
|
"@babel/helper-remap-async-to-generator" "^7.7.0"
|
||||||
"@babel/plugin-syntax-async-generators" "^7.2.0"
|
"@babel/plugin-syntax-async-generators" "^7.2.0"
|
||||||
|
|
||||||
"@babel/plugin-proposal-dynamic-import@^7.5.0":
|
"@babel/plugin-proposal-dynamic-import@^7.7.0":
|
||||||
version "7.5.0"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.0.tgz#dc02a8bad8d653fb59daf085516fa416edd2aa7f"
|
||||||
integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==
|
integrity sha512-7poL3Xi+QFPC7sGAzEIbXUyYzGJwbc2+gSD0AkiC5k52kH2cqHdqxm5hNFfLW3cRSTcx9bN0Fl7/6zWcLLnKAQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
"@babel/plugin-syntax-dynamic-import" "^7.2.0"
|
"@babel/plugin-syntax-dynamic-import" "^7.2.0"
|
||||||
@ -308,14 +411,13 @@
|
|||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
"@babel/plugin-syntax-throw-expressions" "^7.2.0"
|
"@babel/plugin-syntax-throw-expressions" "^7.2.0"
|
||||||
|
|
||||||
"@babel/plugin-proposal-unicode-property-regex@^7.6.2":
|
"@babel/plugin-proposal-unicode-property-regex@^7.7.0":
|
||||||
version "7.6.2"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.0.tgz#549fe1717a1bd0a2a7e63163841cb37e78179d5d"
|
||||||
integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw==
|
integrity sha512-mk34H+hp7kRBWJOOAR0ZMGCydgKMD4iN9TpDRp3IIcbunltxEY89XSimc6WbtSLCDrwcdy/EEw7h5CFCzxTchw==
|
||||||
dependencies:
|
dependencies:
|
||||||
|
"@babel/helper-create-regexp-features-plugin" "^7.7.0"
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
"@babel/helper-regex" "^7.4.4"
|
|
||||||
regexpu-core "^4.6.0"
|
|
||||||
|
|
||||||
"@babel/plugin-syntax-async-generators@^7.2.0":
|
"@babel/plugin-syntax-async-generators@^7.2.0":
|
||||||
version "7.2.0"
|
version "7.2.0"
|
||||||
@ -359,6 +461,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
|
|
||||||
|
"@babel/plugin-syntax-top-level-await@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.0.tgz#f5699549f50bbe8d12b1843a4e82f0a37bb65f4d"
|
||||||
|
integrity sha512-hi8FUNiFIY1fnUI2n1ViB1DR0R4QeK4iHcTlW6aJkrPoTdb8Rf1EMQ6GT3f67DDkYyWgew9DFoOZ6gOoEsdzTA==
|
||||||
|
dependencies:
|
||||||
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-arrow-functions@^7.2.0":
|
"@babel/plugin-transform-arrow-functions@^7.2.0":
|
||||||
version "7.2.0"
|
version "7.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550"
|
||||||
@ -366,14 +475,14 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-async-to-generator@^7.5.0":
|
"@babel/plugin-transform-async-to-generator@^7.7.0":
|
||||||
version "7.5.0"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.0.tgz#e2b84f11952cf5913fe3438b7d2585042772f492"
|
||||||
integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==
|
integrity sha512-vLI2EFLVvRBL3d8roAMqtVY0Bm9C1QzLkdS57hiKrjUBSqsQYrBsMCeOg/0KK7B0eK9V71J5mWcha9yyoI2tZw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-module-imports" "^7.0.0"
|
"@babel/helper-module-imports" "^7.7.0"
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
"@babel/helper-remap-async-to-generator" "^7.1.0"
|
"@babel/helper-remap-async-to-generator" "^7.7.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-block-scoped-functions@^7.2.0":
|
"@babel/plugin-transform-block-scoped-functions@^7.2.0":
|
||||||
version "7.2.0"
|
version "7.2.0"
|
||||||
@ -390,18 +499,18 @@
|
|||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
lodash "^4.17.13"
|
lodash "^4.17.13"
|
||||||
|
|
||||||
"@babel/plugin-transform-classes@^7.5.5":
|
"@babel/plugin-transform-classes@^7.7.0":
|
||||||
version "7.5.5"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.0.tgz#b411ecc1b8822d24b81e5d184f24149136eddd4a"
|
||||||
integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==
|
integrity sha512-/b3cKIZwGeUesZheU9jNYcwrEA7f/Bo4IdPmvp7oHgvks2majB5BoT5byAql44fiNQYOPzhk2w8DbgfuafkMoA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-annotate-as-pure" "^7.0.0"
|
"@babel/helper-annotate-as-pure" "^7.7.0"
|
||||||
"@babel/helper-define-map" "^7.5.5"
|
"@babel/helper-define-map" "^7.7.0"
|
||||||
"@babel/helper-function-name" "^7.1.0"
|
"@babel/helper-function-name" "^7.7.0"
|
||||||
"@babel/helper-optimise-call-expression" "^7.0.0"
|
"@babel/helper-optimise-call-expression" "^7.7.0"
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
"@babel/helper-replace-supers" "^7.5.5"
|
"@babel/helper-replace-supers" "^7.7.0"
|
||||||
"@babel/helper-split-export-declaration" "^7.4.4"
|
"@babel/helper-split-export-declaration" "^7.7.0"
|
||||||
globals "^11.1.0"
|
globals "^11.1.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-computed-properties@^7.2.0":
|
"@babel/plugin-transform-computed-properties@^7.2.0":
|
||||||
@ -418,14 +527,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-dotall-regex@^7.6.2":
|
"@babel/plugin-transform-dotall-regex@^7.7.0":
|
||||||
version "7.6.2"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.0.tgz#c5c9ecacab3a5e0c11db6981610f0c32fd698b3b"
|
||||||
integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA==
|
integrity sha512-3QQlF7hSBnSuM1hQ0pS3pmAbWLax/uGNCbPBND9y+oJ4Y776jsyujG2k0Sn2Aj2a0QwVOiOFL5QVPA7spjvzSA==
|
||||||
dependencies:
|
dependencies:
|
||||||
|
"@babel/helper-create-regexp-features-plugin" "^7.7.0"
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
"@babel/helper-regex" "^7.4.4"
|
|
||||||
regexpu-core "^4.6.0"
|
|
||||||
|
|
||||||
"@babel/plugin-transform-duplicate-keys@^7.5.0":
|
"@babel/plugin-transform-duplicate-keys@^7.5.0":
|
||||||
version "7.5.0"
|
version "7.5.0"
|
||||||
@ -449,12 +557,12 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-function-name@^7.4.4":
|
"@babel/plugin-transform-function-name@^7.7.0":
|
||||||
version "7.4.4"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.0.tgz#0fa786f1eef52e3b7d4fc02e54b2129de8a04c2a"
|
||||||
integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==
|
integrity sha512-P5HKu0d9+CzZxP5jcrWdpe7ZlFDe24bmqP6a6X8BHEBl/eizAsY8K6LX8LASZL0Jxdjm5eEfzp+FIrxCm/p8bA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-function-name" "^7.1.0"
|
"@babel/helper-function-name" "^7.7.0"
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-literals@^7.2.0":
|
"@babel/plugin-transform-literals@^7.2.0":
|
||||||
@ -480,39 +588,39 @@
|
|||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
babel-plugin-dynamic-import-node "^2.3.0"
|
babel-plugin-dynamic-import-node "^2.3.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-modules-commonjs@^7.6.0":
|
"@babel/plugin-transform-modules-commonjs@^7.7.0":
|
||||||
version "7.6.0"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.0.tgz#3e5ffb4fd8c947feede69cbe24c9554ab4113fe3"
|
||||||
integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==
|
integrity sha512-KEMyWNNWnjOom8vR/1+d+Ocz/mILZG/eyHHO06OuBQ2aNhxT62fr4y6fGOplRx+CxCSp3IFwesL8WdINfY/3kg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-module-transforms" "^7.4.4"
|
"@babel/helper-module-transforms" "^7.7.0"
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
"@babel/helper-simple-access" "^7.1.0"
|
"@babel/helper-simple-access" "^7.7.0"
|
||||||
babel-plugin-dynamic-import-node "^2.3.0"
|
babel-plugin-dynamic-import-node "^2.3.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-modules-systemjs@^7.5.0":
|
"@babel/plugin-transform-modules-systemjs@^7.7.0":
|
||||||
version "7.5.0"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.0.tgz#9baf471213af9761c1617bb12fd278e629041417"
|
||||||
integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==
|
integrity sha512-ZAuFgYjJzDNv77AjXRqzQGlQl4HdUM6j296ee4fwKVZfhDR9LAGxfvXjBkb06gNETPnN0sLqRm9Gxg4wZH6dXg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-hoist-variables" "^7.4.4"
|
"@babel/helper-hoist-variables" "^7.7.0"
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
babel-plugin-dynamic-import-node "^2.3.0"
|
babel-plugin-dynamic-import-node "^2.3.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-modules-umd@^7.2.0":
|
"@babel/plugin-transform-modules-umd@^7.7.0":
|
||||||
version "7.2.0"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.0.tgz#d62c7da16670908e1d8c68ca0b5d4c0097b69966"
|
||||||
integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==
|
integrity sha512-u7eBA03zmUswQ9LQ7Qw0/ieC1pcAkbp5OQatbWUzY1PaBccvuJXUkYzoN1g7cqp7dbTu6Dp9bXyalBvD04AANA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-module-transforms" "^7.1.0"
|
"@babel/helper-module-transforms" "^7.7.0"
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-named-capturing-groups-regex@^7.6.3":
|
"@babel/plugin-transform-named-capturing-groups-regex@^7.7.0":
|
||||||
version "7.6.3"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz#aaa6e409dd4fb2e50b6e2a91f7e3a3149dbce0cf"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.0.tgz#358e6fd869b9a4d8f5cbc79e4ed4fc340e60dcaf"
|
||||||
integrity sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw==
|
integrity sha512-+SicSJoKouPctL+j1pqktRVCgy+xAch1hWWTMy13j0IflnyNjaoskj+DwRQFimHbLqO3sq2oN2CXMvXq3Bgapg==
|
||||||
dependencies:
|
dependencies:
|
||||||
regexpu-core "^4.6.0"
|
"@babel/helper-create-regexp-features-plugin" "^7.7.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-new-target@^7.4.4":
|
"@babel/plugin-transform-new-target@^7.4.4":
|
||||||
version "7.4.4"
|
version "7.4.4"
|
||||||
@ -545,10 +653,10 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-regenerator@^7.4.5":
|
"@babel/plugin-transform-regenerator@^7.7.0":
|
||||||
version "7.4.5"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.0.tgz#f1b20b535e7716b622c99e989259d7dd942dd9cc"
|
||||||
integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==
|
integrity sha512-AXmvnC+0wuj/cFkkS/HFHIojxH3ffSXE+ttulrqWjZZRaUOonfJc60e1wSNT4rV8tIunvu/R3wCp71/tLAa9xg==
|
||||||
dependencies:
|
dependencies:
|
||||||
regenerator-transform "^0.14.0"
|
regenerator-transform "^0.14.0"
|
||||||
|
|
||||||
@ -596,81 +704,81 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
|
|
||||||
"@babel/plugin-transform-unicode-regex@^7.6.2":
|
"@babel/plugin-transform-unicode-regex@^7.7.0":
|
||||||
version "7.6.2"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698"
|
resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.0.tgz#743d9bcc44080e3cc7d49259a066efa30f9187a3"
|
||||||
integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw==
|
integrity sha512-RrThb0gdrNwFAqEAAx9OWgtx6ICK69x7i9tCnMdVrxQwSDp/Abu9DXFU5Hh16VP33Rmxh04+NGW28NsIkFvFKA==
|
||||||
dependencies:
|
dependencies:
|
||||||
|
"@babel/helper-create-regexp-features-plugin" "^7.7.0"
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
"@babel/helper-regex" "^7.4.4"
|
|
||||||
regexpu-core "^4.6.0"
|
|
||||||
|
|
||||||
"@babel/preset-env@~7.6.3":
|
"@babel/preset-env@~7.7.1":
|
||||||
version "7.6.3"
|
version "7.7.1"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.3.tgz#9e1bf05a2e2d687036d24c40e4639dc46cef2271"
|
resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.1.tgz#04a2ff53552c5885cf1083e291c8dd5490f744bb"
|
||||||
integrity sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ==
|
integrity sha512-/93SWhi3PxcVTDpSqC+Dp4YxUu3qZ4m7I76k0w73wYfn7bGVuRIO4QUz95aJksbS+AD1/mT1Ie7rbkT0wSplaA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/helper-module-imports" "^7.0.0"
|
"@babel/helper-module-imports" "^7.7.0"
|
||||||
"@babel/helper-plugin-utils" "^7.0.0"
|
"@babel/helper-plugin-utils" "^7.0.0"
|
||||||
"@babel/plugin-proposal-async-generator-functions" "^7.2.0"
|
"@babel/plugin-proposal-async-generator-functions" "^7.7.0"
|
||||||
"@babel/plugin-proposal-dynamic-import" "^7.5.0"
|
"@babel/plugin-proposal-dynamic-import" "^7.7.0"
|
||||||
"@babel/plugin-proposal-json-strings" "^7.2.0"
|
"@babel/plugin-proposal-json-strings" "^7.2.0"
|
||||||
"@babel/plugin-proposal-object-rest-spread" "^7.6.2"
|
"@babel/plugin-proposal-object-rest-spread" "^7.6.2"
|
||||||
"@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
|
"@babel/plugin-proposal-optional-catch-binding" "^7.2.0"
|
||||||
"@babel/plugin-proposal-unicode-property-regex" "^7.6.2"
|
"@babel/plugin-proposal-unicode-property-regex" "^7.7.0"
|
||||||
"@babel/plugin-syntax-async-generators" "^7.2.0"
|
"@babel/plugin-syntax-async-generators" "^7.2.0"
|
||||||
"@babel/plugin-syntax-dynamic-import" "^7.2.0"
|
"@babel/plugin-syntax-dynamic-import" "^7.2.0"
|
||||||
"@babel/plugin-syntax-json-strings" "^7.2.0"
|
"@babel/plugin-syntax-json-strings" "^7.2.0"
|
||||||
"@babel/plugin-syntax-object-rest-spread" "^7.2.0"
|
"@babel/plugin-syntax-object-rest-spread" "^7.2.0"
|
||||||
"@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
|
"@babel/plugin-syntax-optional-catch-binding" "^7.2.0"
|
||||||
|
"@babel/plugin-syntax-top-level-await" "^7.7.0"
|
||||||
"@babel/plugin-transform-arrow-functions" "^7.2.0"
|
"@babel/plugin-transform-arrow-functions" "^7.2.0"
|
||||||
"@babel/plugin-transform-async-to-generator" "^7.5.0"
|
"@babel/plugin-transform-async-to-generator" "^7.7.0"
|
||||||
"@babel/plugin-transform-block-scoped-functions" "^7.2.0"
|
"@babel/plugin-transform-block-scoped-functions" "^7.2.0"
|
||||||
"@babel/plugin-transform-block-scoping" "^7.6.3"
|
"@babel/plugin-transform-block-scoping" "^7.6.3"
|
||||||
"@babel/plugin-transform-classes" "^7.5.5"
|
"@babel/plugin-transform-classes" "^7.7.0"
|
||||||
"@babel/plugin-transform-computed-properties" "^7.2.0"
|
"@babel/plugin-transform-computed-properties" "^7.2.0"
|
||||||
"@babel/plugin-transform-destructuring" "^7.6.0"
|
"@babel/plugin-transform-destructuring" "^7.6.0"
|
||||||
"@babel/plugin-transform-dotall-regex" "^7.6.2"
|
"@babel/plugin-transform-dotall-regex" "^7.7.0"
|
||||||
"@babel/plugin-transform-duplicate-keys" "^7.5.0"
|
"@babel/plugin-transform-duplicate-keys" "^7.5.0"
|
||||||
"@babel/plugin-transform-exponentiation-operator" "^7.2.0"
|
"@babel/plugin-transform-exponentiation-operator" "^7.2.0"
|
||||||
"@babel/plugin-transform-for-of" "^7.4.4"
|
"@babel/plugin-transform-for-of" "^7.4.4"
|
||||||
"@babel/plugin-transform-function-name" "^7.4.4"
|
"@babel/plugin-transform-function-name" "^7.7.0"
|
||||||
"@babel/plugin-transform-literals" "^7.2.0"
|
"@babel/plugin-transform-literals" "^7.2.0"
|
||||||
"@babel/plugin-transform-member-expression-literals" "^7.2.0"
|
"@babel/plugin-transform-member-expression-literals" "^7.2.0"
|
||||||
"@babel/plugin-transform-modules-amd" "^7.5.0"
|
"@babel/plugin-transform-modules-amd" "^7.5.0"
|
||||||
"@babel/plugin-transform-modules-commonjs" "^7.6.0"
|
"@babel/plugin-transform-modules-commonjs" "^7.7.0"
|
||||||
"@babel/plugin-transform-modules-systemjs" "^7.5.0"
|
"@babel/plugin-transform-modules-systemjs" "^7.7.0"
|
||||||
"@babel/plugin-transform-modules-umd" "^7.2.0"
|
"@babel/plugin-transform-modules-umd" "^7.7.0"
|
||||||
"@babel/plugin-transform-named-capturing-groups-regex" "^7.6.3"
|
"@babel/plugin-transform-named-capturing-groups-regex" "^7.7.0"
|
||||||
"@babel/plugin-transform-new-target" "^7.4.4"
|
"@babel/plugin-transform-new-target" "^7.4.4"
|
||||||
"@babel/plugin-transform-object-super" "^7.5.5"
|
"@babel/plugin-transform-object-super" "^7.5.5"
|
||||||
"@babel/plugin-transform-parameters" "^7.4.4"
|
"@babel/plugin-transform-parameters" "^7.4.4"
|
||||||
"@babel/plugin-transform-property-literals" "^7.2.0"
|
"@babel/plugin-transform-property-literals" "^7.2.0"
|
||||||
"@babel/plugin-transform-regenerator" "^7.4.5"
|
"@babel/plugin-transform-regenerator" "^7.7.0"
|
||||||
"@babel/plugin-transform-reserved-words" "^7.2.0"
|
"@babel/plugin-transform-reserved-words" "^7.2.0"
|
||||||
"@babel/plugin-transform-shorthand-properties" "^7.2.0"
|
"@babel/plugin-transform-shorthand-properties" "^7.2.0"
|
||||||
"@babel/plugin-transform-spread" "^7.6.2"
|
"@babel/plugin-transform-spread" "^7.6.2"
|
||||||
"@babel/plugin-transform-sticky-regex" "^7.2.0"
|
"@babel/plugin-transform-sticky-regex" "^7.2.0"
|
||||||
"@babel/plugin-transform-template-literals" "^7.4.4"
|
"@babel/plugin-transform-template-literals" "^7.4.4"
|
||||||
"@babel/plugin-transform-typeof-symbol" "^7.2.0"
|
"@babel/plugin-transform-typeof-symbol" "^7.2.0"
|
||||||
"@babel/plugin-transform-unicode-regex" "^7.6.2"
|
"@babel/plugin-transform-unicode-regex" "^7.7.0"
|
||||||
"@babel/types" "^7.6.3"
|
"@babel/types" "^7.7.1"
|
||||||
browserslist "^4.6.0"
|
browserslist "^4.6.0"
|
||||||
core-js-compat "^3.1.1"
|
core-js-compat "^3.1.1"
|
||||||
invariant "^2.2.2"
|
invariant "^2.2.2"
|
||||||
js-levenshtein "^1.1.3"
|
js-levenshtein "^1.1.3"
|
||||||
semver "^5.5.0"
|
semver "^5.5.0"
|
||||||
|
|
||||||
"@babel/register@^7.6.2", "@babel/register@~7.6.2":
|
"@babel/register@^7.7.0", "@babel/register@~7.7.0":
|
||||||
version "7.6.2"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.6.2.tgz#25765a922202cb06f8bdac5a3b1e70cd6bf3dd45"
|
resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.7.0.tgz#4e23ecf840296ef79c605baaa5c89e1a2426314b"
|
||||||
integrity sha512-xgZk2LRZvt6i2SAUWxc7ellk4+OYRgS3Zpsnr13nMS1Qo25w21Uu8o6vTOAqNaxiqrnv30KTYzh9YWY2k21CeQ==
|
integrity sha512-HV3GJzTvSoyOMWGYn2TAh6uL6g+gqKTgEZ99Q3+X9UURT1VPT/WcU46R61XftIc5rXytcOHZ4Z0doDlsjPomIg==
|
||||||
dependencies:
|
dependencies:
|
||||||
find-cache-dir "^2.0.0"
|
find-cache-dir "^2.0.0"
|
||||||
lodash "^4.17.13"
|
lodash "^4.17.13"
|
||||||
mkdirp "^0.5.1"
|
make-dir "^2.1.0"
|
||||||
pirates "^4.0.0"
|
pirates "^4.0.0"
|
||||||
source-map-support "^0.5.9"
|
source-map-support "^0.5.16"
|
||||||
|
|
||||||
"@babel/runtime-corejs2@^7.2.0", "@babel/runtime-corejs2@^7.5.5":
|
"@babel/runtime-corejs2@^7.2.0", "@babel/runtime-corejs2@^7.5.5":
|
||||||
version "7.5.5"
|
version "7.5.5"
|
||||||
@ -696,6 +804,15 @@
|
|||||||
"@babel/parser" "^7.6.0"
|
"@babel/parser" "^7.6.0"
|
||||||
"@babel/types" "^7.6.0"
|
"@babel/types" "^7.6.0"
|
||||||
|
|
||||||
|
"@babel/template@^7.7.0":
|
||||||
|
version "7.7.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.0.tgz#4fadc1b8e734d97f56de39c77de76f2562e597d0"
|
||||||
|
integrity sha512-OKcwSYOW1mhWbnTBgQY5lvg1Fxg+VyfQGjcBduZFljfc044J5iDlnDSfhQ867O17XHiSCxYHUxHg2b7ryitbUQ==
|
||||||
|
dependencies:
|
||||||
|
"@babel/code-frame" "^7.0.0"
|
||||||
|
"@babel/parser" "^7.7.0"
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
|
|
||||||
"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3":
|
"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.2", "@babel/traverse@^7.6.3":
|
||||||
version "7.6.3"
|
version "7.6.3"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9"
|
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.3.tgz#66d7dba146b086703c0fb10dd588b7364cec47f9"
|
||||||
@ -711,10 +828,25 @@
|
|||||||
globals "^11.1.0"
|
globals "^11.1.0"
|
||||||
lodash "^4.17.13"
|
lodash "^4.17.13"
|
||||||
|
|
||||||
"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3":
|
"@babel/traverse@^7.7.0":
|
||||||
version "7.6.3"
|
version "7.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.3.tgz#3f07d96f854f98e2fbd45c64b0cb942d11e8ba09"
|
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.0.tgz#9f5744346b8d10097fd2ec2eeffcaf19813cbfaf"
|
||||||
integrity sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==
|
integrity sha512-ea/3wRZc//e/uwCpuBX2itrhI0U9l7+FsrKWyKGNyvWbuMcCG7ATKY2VI4wlg2b2TA39HHwIxnvmXvtiKsyn7w==
|
||||||
|
dependencies:
|
||||||
|
"@babel/code-frame" "^7.5.5"
|
||||||
|
"@babel/generator" "^7.7.0"
|
||||||
|
"@babel/helper-function-name" "^7.7.0"
|
||||||
|
"@babel/helper-split-export-declaration" "^7.7.0"
|
||||||
|
"@babel/parser" "^7.7.0"
|
||||||
|
"@babel/types" "^7.7.0"
|
||||||
|
debug "^4.1.0"
|
||||||
|
globals "^11.1.0"
|
||||||
|
lodash "^4.17.13"
|
||||||
|
|
||||||
|
"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0", "@babel/types@^7.6.3", "@babel/types@^7.7.0", "@babel/types@^7.7.1":
|
||||||
|
version "7.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.1.tgz#8b08ea368f2baff236613512cf67109e76285827"
|
||||||
|
integrity sha512-kN/XdANDab9x1z5gcjDc9ePpxexkt+1EQ2MQUiM4XnMvQfvp87/+6kY4Ko2maLXH+tei/DgJ/ybFITeqqRwDiA==
|
||||||
dependencies:
|
dependencies:
|
||||||
esutils "^2.0.2"
|
esutils "^2.0.2"
|
||||||
lodash "^4.17.13"
|
lodash "^4.17.13"
|
||||||
@ -2644,14 +2776,6 @@ cross-env@~6.0.3:
|
|||||||
dependencies:
|
dependencies:
|
||||||
cross-spawn "^7.0.0"
|
cross-spawn "^7.0.0"
|
||||||
|
|
||||||
cross-fetch@2.2.2:
|
|
||||||
version "2.2.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.2.tgz#a47ff4f7fc712daba8f6a695a11c948440d45723"
|
|
||||||
integrity sha1-pH/09/xxLauo9qaVoRyUhEDUVyM=
|
|
||||||
dependencies:
|
|
||||||
node-fetch "2.1.2"
|
|
||||||
whatwg-fetch "2.0.4"
|
|
||||||
|
|
||||||
cross-spawn@^5.0.1:
|
cross-spawn@^5.0.1:
|
||||||
version "5.1.0"
|
version "5.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
|
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
|
||||||
@ -3904,7 +4028,7 @@ glob-parent@^5.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
is-glob "^4.0.1"
|
is-glob "^4.0.1"
|
||||||
|
|
||||||
glob@7.1.5, glob@^7.1.4:
|
glob@7.1.5, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
|
||||||
version "7.1.5"
|
version "7.1.5"
|
||||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0"
|
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.5.tgz#6714c69bee20f3c3e64c4dd905553e532b40cdc0"
|
||||||
integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==
|
integrity sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==
|
||||||
@ -3916,18 +4040,6 @@ glob@7.1.5, glob@^7.1.4:
|
|||||||
once "^1.3.0"
|
once "^1.3.0"
|
||||||
path-is-absolute "^1.0.0"
|
path-is-absolute "^1.0.0"
|
||||||
|
|
||||||
glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3:
|
|
||||||
version "7.1.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
|
|
||||||
integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
|
|
||||||
dependencies:
|
|
||||||
fs.realpath "^1.0.0"
|
|
||||||
inflight "^1.0.4"
|
|
||||||
inherits "2"
|
|
||||||
minimatch "^3.0.4"
|
|
||||||
once "^1.3.0"
|
|
||||||
path-is-absolute "^1.0.0"
|
|
||||||
|
|
||||||
global-dirs@^0.1.0:
|
global-dirs@^0.1.0:
|
||||||
version "0.1.1"
|
version "0.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
|
resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
|
||||||
@ -4017,24 +4129,17 @@ graphql-middleware-sentry@^3.2.1:
|
|||||||
resolved "https://registry.yarnpkg.com/graphql-middleware-sentry/-/graphql-middleware-sentry-3.2.1.tgz#b5653d78903d655cf4212a602cfa6e26689cda07"
|
resolved "https://registry.yarnpkg.com/graphql-middleware-sentry/-/graphql-middleware-sentry-3.2.1.tgz#b5653d78903d655cf4212a602cfa6e26689cda07"
|
||||||
integrity sha512-lAwmHwsyey1db6scQg32javmqAFifabhqPIr0SUzx46O4kvjQlLZZn7KrRT12XDwgW7i6goAotdSPl9Fq+TBrQ==
|
integrity sha512-lAwmHwsyey1db6scQg32javmqAFifabhqPIr0SUzx46O4kvjQlLZZn7KrRT12XDwgW7i6goAotdSPl9Fq+TBrQ==
|
||||||
|
|
||||||
graphql-middleware@~4.0.1:
|
graphql-middleware@~4.0.2:
|
||||||
version "4.0.1"
|
version "4.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-4.0.1.tgz#8c627b22cc046a47e9474a813cf9e0bd50fa0c4b"
|
resolved "https://registry.yarnpkg.com/graphql-middleware/-/graphql-middleware-4.0.2.tgz#eb589bf428e1795e48cd6a3cfeeba0807b996ebd"
|
||||||
integrity sha512-r9r+pcHV4yZW7LAOcjQYTbNY6nR9SrLgpVZKbrtgXxpQW/MUc1N8q3PESciebvp5s0EEUgRchcRjUkyaArCIFw==
|
integrity sha512-ESVDvMXeN00S1BNsjNS18uExcR16J8zbT31CuKcpyeBa7IMbidG0Pnqnu5P1wKkJLmPmKOfCljWlhXpD/Fawqg==
|
||||||
dependencies:
|
dependencies:
|
||||||
graphql-tools "^4.0.5"
|
graphql-tools "^4.0.5"
|
||||||
|
|
||||||
graphql-request@~1.8.2:
|
graphql-shield@~7.0.2:
|
||||||
version "1.8.2"
|
version "7.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/graphql-request/-/graphql-request-1.8.2.tgz#398d10ae15c585676741bde3fc01d5ca948f8fbe"
|
resolved "https://registry.yarnpkg.com/graphql-shield/-/graphql-shield-7.0.2.tgz#65d51528b4e36c4a5023276267abbd1abb57ce0b"
|
||||||
integrity sha512-dDX2M+VMsxXFCmUX0Vo0TopIZIX4ggzOtiCsThgtrKR4niiaagsGTDIHj3fsOMFETpa064vzovI+4YV4QnMbcg==
|
integrity sha512-ZgCQ9efzgehkIVMFoxaOubnvwHVqthtsIXA+xRu8B4ga2Ch/EHiswNCDKpTXTBQZmjeDCSHeAj4XDmbzR4Trxw==
|
||||||
dependencies:
|
|
||||||
cross-fetch "2.2.2"
|
|
||||||
|
|
||||||
graphql-shield@~7.0.1:
|
|
||||||
version "7.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/graphql-shield/-/graphql-shield-7.0.1.tgz#4d9b5a0e1b169ebe5ee786a4bad102c5fe3354b7"
|
|
||||||
integrity sha512-wDKpnMeou/XNkHCzRQHsi9kit5FkO1uAu+9UL/erJPEpwO4yaSkkGPNELsTTQdxhsX3SzWly792dqIj2T8suAw==
|
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/yup" "0.26.24"
|
"@types/yup" "0.26.24"
|
||||||
object-hash "^2.0.0"
|
object-hash "^2.0.0"
|
||||||
@ -4661,11 +4766,6 @@ is-path-inside@^1.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
path-is-inside "^1.0.1"
|
path-is-inside "^1.0.1"
|
||||||
|
|
||||||
is-plain-obj@^1.1.0:
|
|
||||||
version "1.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
|
|
||||||
integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
|
|
||||||
|
|
||||||
is-plain-object@^2.0.3, is-plain-object@^2.0.4:
|
is-plain-object@^2.0.3, is-plain-object@^2.0.4:
|
||||||
version "2.0.4"
|
version "2.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
|
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
|
||||||
@ -6058,11 +6158,6 @@ node-environment-flags@^1.0.5:
|
|||||||
object.getownpropertydescriptors "^2.0.3"
|
object.getownpropertydescriptors "^2.0.3"
|
||||||
semver "^5.7.0"
|
semver "^5.7.0"
|
||||||
|
|
||||||
node-fetch@2.1.2:
|
|
||||||
version "2.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5"
|
|
||||||
integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U=
|
|
||||||
|
|
||||||
node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@~2.6.0:
|
node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@~2.6.0:
|
||||||
version "2.6.0"
|
version "2.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
|
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
|
||||||
@ -6401,15 +6496,6 @@ osenv@^0.1.4:
|
|||||||
os-homedir "^1.0.0"
|
os-homedir "^1.0.0"
|
||||||
os-tmpdir "^1.0.0"
|
os-tmpdir "^1.0.0"
|
||||||
|
|
||||||
output-file-sync@^2.0.0:
|
|
||||||
version "2.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-2.0.1.tgz#f53118282f5f553c2799541792b723a4c71430c0"
|
|
||||||
integrity sha512-mDho4qm7WgIXIGf4eYU1RHN2UU5tPfVYVSRwDJw0uTmj35DQUt/eNp19N7v6T3SrR0ESTEf2up2CGO73qI35zQ==
|
|
||||||
dependencies:
|
|
||||||
graceful-fs "^4.1.11"
|
|
||||||
is-plain-obj "^1.1.0"
|
|
||||||
mkdirp "^0.5.1"
|
|
||||||
|
|
||||||
p-any@^2.1.0:
|
p-any@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/p-any/-/p-any-2.1.0.tgz#719489408e14f5f941a748f1e817f5c71cab35cb"
|
resolved "https://registry.yarnpkg.com/p-any/-/p-any-2.1.0.tgz#719489408e14f5f941a748f1e817f5c71cab35cb"
|
||||||
@ -7507,10 +7593,10 @@ source-map-resolve@^0.5.0:
|
|||||||
source-map-url "^0.4.0"
|
source-map-url "^0.4.0"
|
||||||
urix "^0.1.0"
|
urix "^0.1.0"
|
||||||
|
|
||||||
source-map-support@^0.5.6, source-map-support@^0.5.9:
|
source-map-support@^0.5.16, source-map-support@^0.5.6:
|
||||||
version "0.5.13"
|
version "0.5.16"
|
||||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
|
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
|
||||||
integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
|
integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
buffer-from "^1.0.0"
|
buffer-from "^1.0.0"
|
||||||
source-map "^0.6.0"
|
source-map "^0.6.0"
|
||||||
@ -8358,6 +8444,11 @@ validate-npm-package-license@^3.0.1:
|
|||||||
spdx-correct "^3.0.0"
|
spdx-correct "^3.0.0"
|
||||||
spdx-expression-parse "^3.0.0"
|
spdx-expression-parse "^3.0.0"
|
||||||
|
|
||||||
|
validator@^12.0.0:
|
||||||
|
version "12.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/validator/-/validator-12.0.0.tgz#fb33221f5320abe2422cda2f517dc3838064e813"
|
||||||
|
integrity sha512-r5zA1cQBEOgYlesRmSEwc9LkbfNLTtji+vWyaHzRZUxCTHdsX3bd+sdHfs5tGZ2W6ILGGsxWxCNwT/h3IY/3ng==
|
||||||
|
|
||||||
vary@^1, vary@~1.1.2:
|
vary@^1, vary@~1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
||||||
@ -8414,11 +8505,6 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
|
|||||||
dependencies:
|
dependencies:
|
||||||
iconv-lite "0.4.24"
|
iconv-lite "0.4.24"
|
||||||
|
|
||||||
whatwg-fetch@2.0.4:
|
|
||||||
version "2.0.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
|
|
||||||
integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==
|
|
||||||
|
|
||||||
whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0:
|
whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
|
resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<ds-tag>#{{ id }}</ds-tag>
|
<ds-tag>
|
||||||
|
<nuxt-link :to="hashtagUrl">#{{ id }}</nuxt-link>
|
||||||
|
</ds-tag>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@ -8,5 +10,10 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
id: { type: String, required: true },
|
id: { type: String, required: true },
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
hashtagUrl() {
|
||||||
|
return `/?hashtag=${this.id}`
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@ -84,5 +84,18 @@ describe('Request', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('capital letters in a gmail address', () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
wrapper = Wrapper()
|
||||||
|
wrapper.find('input#email').setValue('mAiL@gmail.com')
|
||||||
|
await wrapper.find('form').trigger('submit')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('normalizes email to lower case letters', () => {
|
||||||
|
const expected = expect.objectContaining({ variables: { email: 'mail@gmail.com' } })
|
||||||
|
expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expected)
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@ -46,6 +46,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import gql from 'graphql-tag'
|
import gql from 'graphql-tag'
|
||||||
import { SweetalertIcon } from 'vue-sweetalert-icons'
|
import { SweetalertIcon } from 'vue-sweetalert-icons'
|
||||||
|
import { normalizeEmail } from 'validator'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@ -68,8 +69,11 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
email() {
|
||||||
|
return normalizeEmail(this.formData.email)
|
||||||
|
},
|
||||||
submitMessage() {
|
submitMessage() {
|
||||||
const { email } = this.formData
|
const { email } = this
|
||||||
return this.$t('components.password-reset.request.form.submitted', { email })
|
return this.$t('components.password-reset.request.form.submitted', { email })
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -86,9 +90,8 @@ export default {
|
|||||||
requestPasswordReset(email: $email)
|
requestPasswordReset(email: $email)
|
||||||
}
|
}
|
||||||
`
|
`
|
||||||
const { email } = this.formData
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
const { email } = this
|
||||||
await this.$apollo.mutate({ mutation, variables: { email } })
|
await this.$apollo.mutate({ mutation, variables: { email } })
|
||||||
this.submitted = true
|
this.submitted = true
|
||||||
|
|
||||||
|
|||||||
@ -48,7 +48,7 @@ describe('Signup', () => {
|
|||||||
describe('submit', () => {
|
describe('submit', () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
wrapper = Wrapper()
|
wrapper = Wrapper()
|
||||||
wrapper.find('input#email').setValue('mail@example.org')
|
wrapper.find('input#email').setValue('mAIL@exAMPLE.org')
|
||||||
await wrapper.find('form').trigger('submit')
|
await wrapper.find('form').trigger('submit')
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ describe('Signup', () => {
|
|||||||
|
|
||||||
it('delivers email to backend', () => {
|
it('delivers email to backend', () => {
|
||||||
const expected = expect.objectContaining({
|
const expected = expect.objectContaining({
|
||||||
variables: { email: 'mail@example.org', token: null },
|
variables: { email: 'mAIL@exAMPLE.org', token: null },
|
||||||
})
|
})
|
||||||
expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expected)
|
expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expected)
|
||||||
})
|
})
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<ds-space v-if="!success && !error" margin="large">
|
<ds-space v-if="!data && !error" margin="large">
|
||||||
<ds-form
|
<ds-form
|
||||||
@input="handleInput"
|
@input="handleInput"
|
||||||
@input-valid="handleInputValid"
|
@input-valid="handleInputValid"
|
||||||
@ -100,13 +100,13 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
disabled: true,
|
disabled: true,
|
||||||
success: false,
|
data: null,
|
||||||
error: null,
|
error: null,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
submitMessage() {
|
submitMessage() {
|
||||||
const { email } = this.formData
|
const { email } = this.data.Signup
|
||||||
return this.$t('components.registration.signup.form.success', { email })
|
return this.$t('components.registration.signup.form.success', { email })
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -119,15 +119,14 @@ export default {
|
|||||||
},
|
},
|
||||||
async handleSubmit() {
|
async handleSubmit() {
|
||||||
const mutation = this.token ? SignupByInvitationMutation : SignupMutation
|
const mutation = this.token ? SignupByInvitationMutation : SignupMutation
|
||||||
const { email } = this.formData
|
|
||||||
const { token } = this
|
const { token } = this
|
||||||
|
const { email } = this.formData
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await this.$apollo.mutate({ mutation, variables: { email, token } })
|
const response = await this.$apollo.mutate({ mutation, variables: { email, token } })
|
||||||
this.success = true
|
this.data = response.data
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.$emit('submit', { email })
|
this.$emit('submit', { email: this.data.Signup.email })
|
||||||
}, 3000)
|
}, 3000)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
const { message } = err
|
const { message } = err
|
||||||
|
|||||||
2
webapp/constants/posts.js
Normal file
2
webapp/constants/posts.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export const first = 12
|
||||||
|
export const offset = 0
|
||||||
@ -6,7 +6,11 @@
|
|||||||
<ds-flex class="main-navigation-flex">
|
<ds-flex class="main-navigation-flex">
|
||||||
<ds-flex-item :width="{ lg: '3.5%' }" />
|
<ds-flex-item :width="{ lg: '3.5%' }" />
|
||||||
<ds-flex-item :width="{ base: '80%', sm: '80%', md: '80%', lg: '15%' }">
|
<ds-flex-item :width="{ base: '80%', sm: '80%', md: '80%', lg: '15%' }">
|
||||||
<nuxt-link :to="{ name: 'index' }">
|
<nuxt-link
|
||||||
|
:to="{ name: 'index' }"
|
||||||
|
@click.native="refreshPosts({ i18n: $i18n })"
|
||||||
|
v-scroll-to="'.main-navigation'"
|
||||||
|
>
|
||||||
<ds-logo />
|
<ds-logo />
|
||||||
</nuxt-link>
|
</nuxt-link>
|
||||||
</ds-flex-item>
|
</ds-flex-item>
|
||||||
@ -225,6 +229,7 @@ export default {
|
|||||||
...mapActions({
|
...mapActions({
|
||||||
quickSearchClear: 'search/quickClear',
|
quickSearchClear: 'search/quickClear',
|
||||||
quickSearch: 'search/quickSearch',
|
quickSearch: 'search/quickSearch',
|
||||||
|
refreshPosts: 'posts/refreshPosts',
|
||||||
}),
|
}),
|
||||||
goToPost(item) {
|
goToPost(item) {
|
||||||
this.$nextTick(() => {
|
this.$nextTick(() => {
|
||||||
|
|||||||
@ -68,7 +68,6 @@
|
|||||||
"date-fns": "2.6.0",
|
"date-fns": "2.6.0",
|
||||||
"express": "~4.17.1",
|
"express": "~4.17.1",
|
||||||
"graphql": "~14.5.8",
|
"graphql": "~14.5.8",
|
||||||
"isemail": "^3.2.0",
|
|
||||||
"jsonwebtoken": "~8.5.1",
|
"jsonwebtoken": "~8.5.1",
|
||||||
"linkify-it": "~2.2.0",
|
"linkify-it": "~2.2.0",
|
||||||
"node-fetch": "^2.6.0",
|
"node-fetch": "^2.6.0",
|
||||||
@ -82,6 +81,7 @@
|
|||||||
"tiptap-extensions": "~1.28.4",
|
"tiptap-extensions": "~1.28.4",
|
||||||
"trunc-html": "^1.1.2",
|
"trunc-html": "^1.1.2",
|
||||||
"v-tooltip": "~2.0.2",
|
"v-tooltip": "~2.0.2",
|
||||||
|
"validator": "^12.0.0",
|
||||||
"vue-count-to": "~1.0.13",
|
"vue-count-to": "~1.0.13",
|
||||||
"vue-infinite-scroll": "^2.0.2",
|
"vue-infinite-scroll": "^2.0.2",
|
||||||
"vue-izitoast": "^1.2.1",
|
"vue-izitoast": "^1.2.1",
|
||||||
@ -92,9 +92,9 @@
|
|||||||
"zxcvbn": "^4.4.2"
|
"zxcvbn": "^4.4.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/core": "~7.6.4",
|
"@babel/core": "~7.7.2",
|
||||||
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
|
"@babel/plugin-syntax-dynamic-import": "^7.2.0",
|
||||||
"@babel/preset-env": "~7.6.3",
|
"@babel/preset-env": "~7.7.1",
|
||||||
"@storybook/addon-a11y": "^5.2.5",
|
"@storybook/addon-a11y": "^5.2.5",
|
||||||
"@storybook/addon-actions": "^5.2.5",
|
"@storybook/addon-actions": "^5.2.5",
|
||||||
"@storybook/vue": "~5.2.5",
|
"@storybook/vue": "~5.2.5",
|
||||||
@ -134,7 +134,7 @@
|
|||||||
"style-resources-loader": "~1.2.1",
|
"style-resources-loader": "~1.2.1",
|
||||||
"vue-jest": "~3.0.5",
|
"vue-jest": "~3.0.5",
|
||||||
"vue-loader": "~15.7.2",
|
"vue-loader": "~15.7.2",
|
||||||
"vue-svg-loader": "~0.12.0",
|
"vue-svg-loader": "~0.14.0",
|
||||||
"vue-template-compiler": "^2.6.10"
|
"vue-template-compiler": "^2.6.10"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -69,7 +69,7 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import gql from 'graphql-tag'
|
import gql from 'graphql-tag'
|
||||||
import isemail from 'isemail'
|
import { isEmail, normalizeEmail } from 'validator'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
@ -169,8 +169,8 @@ export default {
|
|||||||
submit(formData) {
|
submit(formData) {
|
||||||
this.offset = 0
|
this.offset = 0
|
||||||
const { query } = formData
|
const { query } = formData
|
||||||
if (isemail.validate(query)) {
|
if (isEmail(query)) {
|
||||||
this.email = query.toLowerCase()
|
this.email = normalizeEmail(query)
|
||||||
this.filter = null
|
this.filter = null
|
||||||
} else {
|
} else {
|
||||||
this.email = null
|
this.email = null
|
||||||
|
|||||||
@ -15,7 +15,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</ds-grid-item>
|
</ds-grid-item>
|
||||||
<template v-if="hasResults">
|
<template v-if="hasResults">
|
||||||
<masonry-grid-item v-for="post in posts" :key="post.id">
|
<masonry-grid-item v-for="post in currentPosts" :key="post.id">
|
||||||
<hc-post-card
|
<hc-post-card
|
||||||
:post="post"
|
:post="post"
|
||||||
:width="{ base: '100%', xs: '100%', md: '50%', xl: '33%' }"
|
:width="{ base: '100%', xs: '100%', md: '50%', xl: '33%' }"
|
||||||
@ -94,6 +94,7 @@ export default {
|
|||||||
orderBy: 'posts/orderBy',
|
orderBy: 'posts/orderBy',
|
||||||
selectedOrder: 'posts/selectedOrder',
|
selectedOrder: 'posts/selectedOrder',
|
||||||
sortingIcon: 'posts/orderIcon',
|
sortingIcon: 'posts/orderIcon',
|
||||||
|
currentPosts: 'posts/currentPosts',
|
||||||
}),
|
}),
|
||||||
selected: {
|
selected: {
|
||||||
get() {
|
get() {
|
||||||
@ -101,7 +102,7 @@ export default {
|
|||||||
},
|
},
|
||||||
set({ value }) {
|
set({ value }) {
|
||||||
this.offset = 0
|
this.offset = 0
|
||||||
this.posts = []
|
this.setCurrentPosts([])
|
||||||
this.selectOrder(value)
|
this.selectOrder(value)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -119,12 +120,13 @@ export default {
|
|||||||
return filter
|
return filter
|
||||||
},
|
},
|
||||||
hasResults() {
|
hasResults() {
|
||||||
return this.$apollo.loading || (this.posts && this.posts.length > 0)
|
return this.$apollo.loading || (this.currentPosts && this.currentPosts.length > 0)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapMutations({
|
...mapMutations({
|
||||||
selectOrder: 'posts/SELECT_ORDER',
|
selectOrder: 'posts/SELECT_ORDER',
|
||||||
|
setCurrentPosts: 'posts/SET_CURRENT_POSTS',
|
||||||
}),
|
}),
|
||||||
clearSearch() {
|
clearSearch() {
|
||||||
this.$router.push({ path: '/' })
|
this.$router.push({ path: '/' })
|
||||||
@ -152,21 +154,30 @@ export default {
|
|||||||
if (!fetchMoreResult || fetchMoreResult.Post.length < this.pageSize) {
|
if (!fetchMoreResult || fetchMoreResult.Post.length < this.pageSize) {
|
||||||
this.hasMore = false
|
this.hasMore = false
|
||||||
}
|
}
|
||||||
const result = Object.assign({}, previousResult, {
|
const result = {
|
||||||
Post: [...previousResult.Post, ...fetchMoreResult.Post],
|
...previousResult,
|
||||||
})
|
Post: [
|
||||||
return result
|
...previousResult.Post.filter(prevPost => {
|
||||||
|
return (
|
||||||
|
fetchMoreResult.Post.filter(newPost => newPost.id === prevPost.id).length === 0
|
||||||
|
)
|
||||||
|
}),
|
||||||
|
...fetchMoreResult.Post,
|
||||||
|
],
|
||||||
|
}
|
||||||
|
this.setCurrentPosts(result.Post)
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
deletePost(deletedPost) {
|
deletePost(deletedPost) {
|
||||||
this.posts = this.posts.filter(post => {
|
const posts = this.currentPosts.filter(post => {
|
||||||
return post.id !== deletedPost.id
|
return post.id !== deletedPost.id
|
||||||
})
|
})
|
||||||
|
this.setCurrentPosts(posts)
|
||||||
},
|
},
|
||||||
resetPostList() {
|
resetPostList() {
|
||||||
this.offset = 0
|
this.offset = 0
|
||||||
this.posts = []
|
this.setCurrentPosts([])
|
||||||
this.hasMore = true
|
this.hasMore = true
|
||||||
},
|
},
|
||||||
pinPost(post) {
|
pinPost(post) {
|
||||||
@ -210,7 +221,7 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
update({ Post }) {
|
update({ Post }) {
|
||||||
this.posts = Post
|
this.setCurrentPosts(Post)
|
||||||
},
|
},
|
||||||
fetchPolicy: 'cache-and-network',
|
fetchPolicy: 'cache-and-network',
|
||||||
},
|
},
|
||||||
|
|||||||
@ -394,12 +394,18 @@ export default {
|
|||||||
if (!fetchMoreResult || fetchMoreResult.profilePagePosts.length < this.pageSize) {
|
if (!fetchMoreResult || fetchMoreResult.profilePagePosts.length < this.pageSize) {
|
||||||
this.hasMore = false
|
this.hasMore = false
|
||||||
}
|
}
|
||||||
const result = Object.assign({}, previousResult, {
|
const result = {
|
||||||
|
...previousResult,
|
||||||
profilePagePosts: [
|
profilePagePosts: [
|
||||||
...previousResult.profilePagePosts,
|
...previousResult.profilePagePosts.filter(prevPost => {
|
||||||
|
return (
|
||||||
|
fetchMoreResult.profilePagePosts.filter(newPost => newPost.id === prevPost.id)
|
||||||
|
.length === 0
|
||||||
|
)
|
||||||
|
}),
|
||||||
...fetchMoreResult.profilePagePosts,
|
...fetchMoreResult.profilePagePosts,
|
||||||
],
|
],
|
||||||
})
|
}
|
||||||
return result
|
return result
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|||||||
@ -31,7 +31,9 @@ describe('EmailSettingsIndexPage', () => {
|
|||||||
error: jest.fn(),
|
error: jest.fn(),
|
||||||
},
|
},
|
||||||
$apollo: {
|
$apollo: {
|
||||||
mutate: jest.fn().mockResolvedValue(),
|
mutate: jest.fn().mockResolvedValue({
|
||||||
|
data: { AddEmailAddress: { email: 'yet-another-email@example.org' } },
|
||||||
|
}),
|
||||||
},
|
},
|
||||||
$router: {
|
$router: {
|
||||||
push: jest.fn(),
|
push: jest.fn(),
|
||||||
@ -71,12 +73,15 @@ describe('EmailSettingsIndexPage', () => {
|
|||||||
describe('enter another email', () => {
|
describe('enter another email', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
wrapper = Wrapper()
|
wrapper = Wrapper()
|
||||||
wrapper.find('#email').setValue('yet-another-email@example.org')
|
wrapper.find('#email').setValue('yet-ANOTHER-email@example.org')
|
||||||
wrapper.find('form').trigger('submit')
|
wrapper.find('form').trigger('submit')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('calls $apollo.mutate', () => {
|
it('delivers email to backend', () => {
|
||||||
expect(mocks.$apollo.mutate).toHaveBeenCalled()
|
const expected = expect.objectContaining({
|
||||||
|
variables: { email: 'yet-ANOTHER-email@example.org' },
|
||||||
|
})
|
||||||
|
expect(mocks.$apollo.mutate).toHaveBeenCalledWith(expected)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('no form errors', () => {
|
it('no form errors', () => {
|
||||||
@ -87,7 +92,7 @@ describe('EmailSettingsIndexPage', () => {
|
|||||||
describe('after timeout', () => {
|
describe('after timeout', () => {
|
||||||
beforeEach(jest.runAllTimers)
|
beforeEach(jest.runAllTimers)
|
||||||
|
|
||||||
it('redirects to `my-email-address/enter-nonce`', () => {
|
it('redirects with response from backend', () => {
|
||||||
expect(mocks.$router.push).toHaveBeenCalledWith({
|
expect(mocks.$router.push).toHaveBeenCalledWith({
|
||||||
path: 'my-email-address/enter-nonce',
|
path: 'my-email-address/enter-nonce',
|
||||||
query: { email: 'yet-another-email@example.org' },
|
query: { email: 'yet-another-email@example.org' },
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<ds-card centered v-if="success">
|
<ds-card centered v-if="data">
|
||||||
<transition name="ds-transition-fade">
|
<transition name="ds-transition-fade">
|
||||||
<sweetalert-icon icon="info" />
|
<sweetalert-icon icon="info" />
|
||||||
</transition>
|
</transition>
|
||||||
@ -32,6 +32,7 @@
|
|||||||
import { mapGetters } from 'vuex'
|
import { mapGetters } from 'vuex'
|
||||||
import { AddEmailAddressMutation } from '~/graphql/EmailAddress.js'
|
import { AddEmailAddressMutation } from '~/graphql/EmailAddress.js'
|
||||||
import { SweetalertIcon } from 'vue-sweetalert-icons'
|
import { SweetalertIcon } from 'vue-sweetalert-icons'
|
||||||
|
import { normalizeEmail } from 'validator'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
@ -40,12 +41,12 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
backendErrors: null,
|
backendErrors: null,
|
||||||
success: false,
|
data: null,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
submitMessage() {
|
submitMessage() {
|
||||||
const { email } = this.formData
|
const { email } = this.data.AddEmailAddress
|
||||||
return this.$t('settings.email.submitted', { email })
|
return this.$t('settings.email.submitted', { email })
|
||||||
},
|
},
|
||||||
...mapGetters({
|
...mapGetters({
|
||||||
@ -61,7 +62,7 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
formSchema() {
|
formSchema() {
|
||||||
const { email } = this.currentUser
|
const currentEmail = normalizeEmail(this.currentUser.email)
|
||||||
const sameEmailValidationError = this.$t('settings.email.validation.same-email')
|
const sameEmailValidationError = this.$t('settings.email.validation.same-email')
|
||||||
return {
|
return {
|
||||||
email: [
|
email: [
|
||||||
@ -69,7 +70,7 @@ export default {
|
|||||||
{
|
{
|
||||||
validator(rule, value, callback, source, options) {
|
validator(rule, value, callback, source, options) {
|
||||||
const errors = []
|
const errors = []
|
||||||
if (email === value) {
|
if (currentEmail === normalizeEmail(value)) {
|
||||||
errors.push(sameEmailValidationError)
|
errors.push(sameEmailValidationError)
|
||||||
}
|
}
|
||||||
return errors
|
return errors
|
||||||
@ -83,17 +84,17 @@ export default {
|
|||||||
async submit() {
|
async submit() {
|
||||||
const { email } = this.formData
|
const { email } = this.formData
|
||||||
try {
|
try {
|
||||||
await this.$apollo.mutate({
|
const response = await this.$apollo.mutate({
|
||||||
mutation: AddEmailAddressMutation,
|
mutation: AddEmailAddressMutation,
|
||||||
variables: { email },
|
variables: { email },
|
||||||
})
|
})
|
||||||
|
this.data = response.data
|
||||||
this.$toast.success(this.$t('settings.email.success'))
|
this.$toast.success(this.$t('settings.email.success'))
|
||||||
this.success = true
|
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.$router.push({
|
this.$router.push({
|
||||||
path: 'my-email-address/enter-nonce',
|
path: 'my-email-address/enter-nonce',
|
||||||
query: { email },
|
query: { email: this.data.AddEmailAddress.email },
|
||||||
})
|
})
|
||||||
}, 3000)
|
}, 3000)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
@ -102,7 +103,9 @@ export default {
|
|||||||
// have a query to filter for email addresses. This is a privacy
|
// have a query to filter for email addresses. This is a privacy
|
||||||
// consideration. We could implement a dedicated query to check that
|
// consideration. We could implement a dedicated query to check that
|
||||||
// but I think it's too much effort for this feature.
|
// but I think it's too much effort for this feature.
|
||||||
this.backendErrors = { message: this.$t('registration.signup.form.errors.email-exists') }
|
this.backendErrors = {
|
||||||
|
message: this.$t('components.registration.signup.form.errors.email-exists'),
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
this.$toast.error(err.message)
|
this.$toast.error(err.message)
|
||||||
|
|||||||
@ -4,6 +4,8 @@ import xor from 'lodash/xor'
|
|||||||
import isEmpty from 'lodash/isEmpty'
|
import isEmpty from 'lodash/isEmpty'
|
||||||
import isEqual from 'lodash/isEqual'
|
import isEqual from 'lodash/isEqual'
|
||||||
import clone from 'lodash/clone'
|
import clone from 'lodash/clone'
|
||||||
|
import { filterPosts } from '~/graphql/PostQuery'
|
||||||
|
import { first, offset } from '~/constants/posts'
|
||||||
|
|
||||||
const defaultFilter = {}
|
const defaultFilter = {}
|
||||||
|
|
||||||
@ -26,6 +28,7 @@ export const state = () => {
|
|||||||
...defaultFilter,
|
...defaultFilter,
|
||||||
},
|
},
|
||||||
order: orderOptions['createdAt_desc'],
|
order: orderOptions['createdAt_desc'],
|
||||||
|
currentPosts: [],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,6 +77,9 @@ export const mutations = {
|
|||||||
SELECT_ORDER(state, value) {
|
SELECT_ORDER(state, value) {
|
||||||
state.order = orderOptions[value]
|
state.order = orderOptions[value]
|
||||||
},
|
},
|
||||||
|
SET_CURRENT_POSTS(state, posts) {
|
||||||
|
state.currentPosts = posts
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getters = {
|
export const getters = {
|
||||||
@ -114,4 +120,26 @@ export const getters = {
|
|||||||
orderIcon(state) {
|
orderIcon(state) {
|
||||||
return state.order.icon
|
return state.order.icon
|
||||||
},
|
},
|
||||||
|
currentPosts(state) {
|
||||||
|
return state.currentPosts || []
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
export const actions = {
|
||||||
|
async refreshPosts({ commit, getters }, { i18n }) {
|
||||||
|
const client = this.app.apolloProvider.defaultClient
|
||||||
|
const {
|
||||||
|
data: { Post },
|
||||||
|
} = await client.query({
|
||||||
|
query: filterPosts(i18n),
|
||||||
|
variables: {
|
||||||
|
filter: getters.filter,
|
||||||
|
first,
|
||||||
|
orderBy: ['pinned_asc', getters.orderBy],
|
||||||
|
offset,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
commit('SET_CURRENT_POSTS', Post)
|
||||||
|
return Post
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
744
webapp/yarn.lock
744
webapp/yarn.lock
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user