diff --git a/.github/file-filters.yml b/.github/file-filters.yml index eb0791ffa..7dd58c68f 100644 --- a/.github/file-filters.yml +++ b/.github/file-filters.yml @@ -11,3 +11,6 @@ webapp: &webapp - '.github/workflows/test-webapp.yml' - 'webapp/**/*' - 'package.json' + +markdown-files: &markdown-files + - '**/*.md' diff --git a/.github/workflows/check-documentation.yml b/.github/workflows/check-documentation.yml new file mode 100644 index 000000000..d374f41e8 --- /dev/null +++ b/.github/workflows/check-documentation.yml @@ -0,0 +1,40 @@ +name: ocelot.social check documentation + +on: push + +jobs: + files-changed: + name: Detect File Changes - Markdown files + runs-on: ubuntu-latest + outputs: + markdown-files: ${{ steps.changes.outputs.markdown-files }} + steps: + - name: Checkout code + uses: actions/checkout@master + + - name: Check for markdown file changes + uses: dorny/paths-filter@v2.11.1 + id: changes + with: + token: ${{ github.token }} + filters: .github/file-filters.yml + list-files: shell + + check-markdown-links: + name: Check Markdown links + if: needs.files-changed.outputs.markdown-files == 'true' + needs: files-changed + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@master + - name: Check Markdown Links + uses: gaurav-nelson/github-action-markdown-link-check@master + with: + use-quiet-mode: 'yes' + use-verbose-mode: 'no' + # at any .md file change take the chance to check the links in all .md files + check-modified-files-only: 'no' + config-file: '.github/workflows/mlc_config.json' + base-branch: 'master' + folder-path: '.' diff --git a/.github/workflows/mlc_config.json b/.github/workflows/mlc_config.json new file mode 100644 index 000000000..dd9c81f3c --- /dev/null +++ b/.github/workflows/mlc_config.json @@ -0,0 +1,12 @@ +{ + "timeout": "20s", + "retryOn429": true, + "retryCount": 2, + "fallbackRetryDelay": "30s", + "aliveStatusCodes": [200, 206], + "ignorePatterns": [ + { + "pattern": "^(https:\/\/github.com\/Ocelot-Social-Community\/Ocelot-Social\/pull\/|http:\/\/localhost)" + } + ] +} diff --git a/README.md b/README.md index 2062865dd..ab9ba0ef9 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [](https://discord.gg/AJSX9DCSUA) [](https://www.codetriage.com/ocelot-social-community/ocelot-social) -[ocelot.social](https://ocelot.social) is free and open source software program code to run social networks. Its development is supported by a community of programmers and interested network operators. +[Ocelot.social](https://ocelot.social) is free and open source software program code to run social networks. Its development is supported by a community of programmers and interested network operators.
@@ -18,36 +18,45 @@ Our goal is to enable people to participate fairly and equally in online social
We therefore consider it desirable that operators offer such networks so that people can choose where they want to be on the move.
-At the same time, it should be possible in the future to link these networks with each other (ActivityPub, Fediverse), so that users can also connect with people from other networks - for example by making friends or following posts or other contributions.
+Our vision for the future is that at some point it should be possible to link these networks together (ActivityPub, Fediverse) so that users can also connect with people from other networks - for example, by friending them or following posts or other contributions.
+
+If you would like to help set up this capability with us, please contact us.
In other words, we are interested in a network of networks and in keeping the data as close as possible to the user and the operator they trusts.
## Screenshots
+
+
-Check out more screenshots [here](/wiki/en:Screenshots).
+Check out more screenshots [here](https://github.com/Ocelot-Social-Community/Ocelot-Social/wiki/en:Screenshots).
## Features
-Ocelot.social networks feature:
-* user accounts
-* user roles
-* posts and comments
-* groups
-* maps
-* search
-* filters
-* and more …
+Ocelot.social networks features:
-Check out the [full feature list](/wiki/en:FAQ#what-are-the-features).
+- **news feed**
+- **posts**
+- as **articles** and **events**
+- **comments**
+- **filter**
+- **search**
+- **groups**
+- **map**
+- **user accounts**
+- **user roles**
+- make your own **branded network**
+- and more …
+
+Check out the [full feature list](https://github.com/Ocelot-Social-Community/Ocelot-Social/wiki/en:FAQ#what-are-the-features).
## User Guide and Frequently Asked Questions
-In the [wiki](/wiki) you can find more information.
+In the [wiki](https://github.com/Ocelot-Social-Community/Ocelot-Social/wiki) you can find more information.
-* [User Guide](/wiki/en:User-Guide)
-* [Frequently Asked Questions](/wiki/en:FAQ)
+- [User Guide](https://github.com/Ocelot-Social-Community/Ocelot-Social/wiki/en:User-Guide)
+- [Frequently Asked Questions](https://github.com/Ocelot-Social-Community/Ocelot-Social/wiki/en:FAQ)
## Demo
@@ -57,27 +66,28 @@ Try out our live demo network, see [here](#live-demo-and-developer-logins).
If you're wondering how you could help, there are plenty of ways, e.g.:
-* Spread the good word about ocelot.social to make it more popular:
- * Add the link [ocelot.social](https://ocelot.social) to your website.
- * Give ocelot.social a Like at https://alternativeto.net/software/ocelot-social/.
- * Star our project on GitHub at https://github.com/Ocelot-Social-Community/Ocelot-Social/.
- * Promote it on your social networks.
- * Tell your friends about it by word-of-mouth.
- * Write a press article on ocelot.social or contact the editorial office of your local newspage or radio station.
-* Take a [good first issue](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) or issues that need help. Make sure to read [CONTRIBUTING.md](/CONTRIBUTING.md) first though.
-* Testing and [reporting](/issues/new/choose) bugs.
-* Translating: Please [contact us](#contact).
-* Reviewing and testing pull requests.
+- Spread the good word about ocelot.social to make it more popular:
+ - Add the link [ocelot.social](https://ocelot.social) to your website.
+ - Give ocelot.social a Like at
+
### License
diff --git a/SUMMARY.md b/SUMMARY.md
index 453a809b4..097da9986 100644
--- a/SUMMARY.md
+++ b/SUMMARY.md
@@ -6,19 +6,17 @@
* [Backend](backend/README.md)
* [GraphQL](backend/graphql.md)
* [neo4j-graphql-js](backend/neo4j-graphql-js.md)
-* [Webapp](webapp/README.md)
+* [Webapp (Frontend)](webapp/README.md)
* [Components](webapp/components.md)
* [HTML](webapp/html.md)
* [SCSS](webapp/scss.md)
* [Vue](webapp/vue.md)
* [Testing Guide](testing.md)
- * [End-to-end tests](cypress/README.md)
- * [Frontend tests](webapp/testing.md)
- * [Backend tests](backend/testing.md)
-* [Docker More Closely](DOCKER_MORE_CLOSELY.md)
+ * [End-to-end Tests](cypress/README.md)
+ * [Webapp (Frontend) Tests](webapp/testing.md)
+ * [Backend Tests](backend/testing.md)
* [Deployment](deployment/README.md)
* [Contributing](CONTRIBUTING.md)
* [Feature Specification](cypress/features.md)
-* [Code of conduct](CODE_OF_CONDUCT.md)
+* [Code of Conduct](CODE_OF_CONDUCT.md)
* [License](LICENSE.md)
-
diff --git a/backend/graphql.md b/backend/graphql.md
index 12cc59e57..f49edb3b8 100644
--- a/backend/graphql.md
+++ b/backend/graphql.md
@@ -2,12 +2,13 @@
GraphQL is a data query language which provides an alternative to REST and ad-hoc web service architectures. It allows clients to define the structure of the data required, and exactly the same structure of the data is returned from the server.
-
+We have a closer description for the [GraphQL Playground](./src/graphql/GraphQL-Playground.md).
+
+
## Middleware keeps resolvers clean
-
-
+
A well-organized codebase is key for the ability to maintain and easily introduce changes into an app. Figuring out the right structure for your code remains a continuous challenge - especially as an application grows and more developers are joining a project.
diff --git a/backend/jest.config.js b/backend/jest.config.js
index d1cc7bd3f..15eb22477 100644
--- a/backend/jest.config.js
+++ b/backend/jest.config.js
@@ -7,11 +7,12 @@ module.exports = {
'!**/node_modules/**',
'!**/test/**',
'!**/build/**',
- '!**/src/**/?(*.)+(spec|test).ts?(x)'
+ '!**/src/**/?(*.)+(spec|test).ts?(x)',
+ '!**/src/db/**'
],
coverageThreshold: {
global: {
- lines: 67,
+ lines: 90,
},
},
testMatch: ['**/src/**/?(*.)+(spec|test).ts?(x)'],
diff --git a/backend/package.json b/backend/package.json
index 802b86382..3f6a1644e 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -45,7 +45,7 @@
"cheerio": "~1.0.0-rc.3",
"cors": "~2.8.5",
"cross-env": "~7.0.3",
- "dotenv": "~8.2.0",
+ "dotenv": "~16.3.1",
"express": "^4.17.1",
"graphql": "^14.6.0",
"graphql-middleware": "~4.0.2",
@@ -85,12 +85,12 @@
"nodemailer": "^6.4.4",
"nodemailer-html-to-text": "^3.2.0",
"request": "~2.88.2",
- "sanitize-html": "~1.22.0",
+ "sanitize-html": "~2.11.0",
"slug": "~6.0.0",
"subscriptions-transport-ws": "^0.9.19",
"trunc-html": "~1.1.2",
"uuid": "~8.3.2",
- "validator": "^13.9.0",
+ "validator": "^13.11.0",
"xregexp": "^4.3.0"
},
"devDependencies": {
@@ -105,7 +105,7 @@
"eslint": "^8.37.0",
"eslint-config-prettier": "^9.0.0",
"eslint-config-standard": "^17.0.0",
- "eslint-import-resolver-typescript": "^3.5.4",
+ "eslint-import-resolver-typescript": "^3.6.1",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jest": "^27.2.1",
"eslint-plugin-n": "^15.7.0",
diff --git a/backend/src/db/migrations/20231017141022-fix-event-dates.ts b/backend/src/db/migrations/20231017141022-fix-event-dates.ts
new file mode 100644
index 000000000..3c4302f13
--- /dev/null
+++ b/backend/src/db/migrations/20231017141022-fix-event-dates.ts
@@ -0,0 +1,68 @@
+import { getDriver } from '../../db/neo4j'
+
+export const description = `
+Transform event start and end date of format 'YYYY-MM-DD HH:MM:SS' in CEST
+to ISOString in UTC.
+`
+
+export async function up(next) {
+ const driver = getDriver()
+ const session = driver.session()
+ const transaction = session.beginTransaction()
+
+ try {
+ const events = await transaction.run(`
+ MATCH (event:Event)
+ WHERE NOT event.eventStart CONTAINS 'T'
+ RETURN event.id, event.eventStart, event.eventEnd
+ `)
+ for (const event of events.records) {
+ let [id, eventStart, eventEnd] = event
+ let date = new Date(eventStart)
+ date.setHours(date.getHours() - 1)
+ eventStart = date.toISOString()
+ if (eventEnd) {
+ date = new Date(eventEnd)
+ date.setHours(date.getHours() - 1)
+ eventEnd = date.toISOString()
+ }
+ await transaction.run(`
+ MATCH (e:Event { id: '${id}' })
+ SET e.eventStart = '${eventStart}'
+ SET (CASE WHEN exists(e.eventEnd) THEN e END).eventEnd = '${eventEnd}'
+ RETURN e
+ `)
+ }
+ await transaction.commit()
+ next()
+ } catch (error) {
+ // eslint-disable-next-line no-console
+ console.log(error)
+ await transaction.rollback()
+ // eslint-disable-next-line no-console
+ console.log('rolled back')
+ throw new Error(error)
+ } finally {
+ session.close()
+ }
+}
+
+export async function down(next) {
+ const driver = getDriver()
+ const session = driver.session()
+ const transaction = session.beginTransaction()
+
+ try {
+ // No sense in running this down
+ next()
+ } catch (error) {
+ // eslint-disable-next-line no-console
+ console.log(error)
+ await transaction.rollback()
+ // eslint-disable-next-line no-console
+ console.log('rolled back')
+ throw new Error(error)
+ } finally {
+ session.close()
+ }
+}
diff --git a/backend/src/graphql/GraphQL-Playground.md b/backend/src/graphql/GraphQL-Playground.md
index 33e371eb5..e914ea993 100644
--- a/backend/src/graphql/GraphQL-Playground.md
+++ b/backend/src/graphql/GraphQL-Playground.md
@@ -1,5 +1,7 @@
# GraphQL Playground
+
+
***Attention:** For using the GraphQL Playground set `DEBUG=true` in your backend `.env`, see `.env.template`!*
To use GraphQL Playground, we need to know some basics:
diff --git a/backend/src/schema/resolvers/helpers/events.ts b/backend/src/schema/resolvers/helpers/events.ts
index 835088d8c..d4fc1fb11 100644
--- a/backend/src/schema/resolvers/helpers/events.ts
+++ b/backend/src/schema/resolvers/helpers/events.ts
@@ -34,6 +34,8 @@ const validateEventDate = (dateString) => {
const date = new Date(dateString)
if (date.toString() === 'Invalid Date')
throw new UserInputError('Event start date must be a valid date!')
+ if (date.toISOString() !== dateString)
+ throw new UserInputError('Event start date must be in ISO format!')
const now = new Date()
if (date.getTime() < now.getTime()) {
throw new UserInputError('Event start date must be in the future!')
@@ -44,6 +46,8 @@ const validateEventEnd = (start, end) => {
const endDate = new Date(end)
if (endDate.toString() === 'Invalid Date')
throw new UserInputError('Event end date must be a valid date!')
+ if (endDate.toISOString() !== end)
+ throw new UserInputError('Event end date must be in ISO format!')
const startDate = new Date(start)
if (endDate < startDate)
throw new UserInputError('Event end date must be a after event start date!')
diff --git a/backend/src/schema/resolvers/notifications.spec.ts b/backend/src/schema/resolvers/notifications.spec.ts
index 60539d77f..58757c92d 100644
--- a/backend/src/schema/resolvers/notifications.spec.ts
+++ b/backend/src/schema/resolvers/notifications.spec.ts
@@ -56,98 +56,97 @@ describe('given some notifications', () => {
Factory.build('user', { id: 'neighbor' }),
Factory.build('category', { id: 'cat1' }),
])
- const [post1, post2, post3] = await Promise.all([
- Factory.build('post', { id: 'p1', content: 'Not for you' }, { author, categoryIds }),
- Factory.build(
- 'post',
- {
- id: 'p2',
- content: 'Already seen post mention',
- },
- {
- author,
- categoryIds,
- },
- ),
- Factory.build(
- 'post',
- {
- id: 'p3',
- content: 'You have been mentioned in a post',
- },
- {
- author,
- categoryIds,
- },
- ),
- ])
- const [comment1, comment2, comment3] = await Promise.all([
- Factory.build(
- 'comment',
- {
- id: 'c1',
- content: 'You have seen this comment mentioning already',
- },
- {
- author,
- postId: 'p3',
- },
- ),
- Factory.build(
- 'comment',
- {
- id: 'c2',
- content: 'You have been mentioned in a comment',
- },
- {
- author,
- postId: 'p3',
- },
- ),
- Factory.build(
- 'comment',
- {
- id: 'c3',
- content: 'Somebody else was mentioned in a comment',
- },
- {
- author,
- postId: 'p3',
- },
- ),
- ])
- await Promise.all([
- post1.relateTo(neighbor, 'notified', {
- createdAt: '2019-08-29T17:33:48.651Z',
- read: false,
- reason: 'mentioned_in_post',
- }),
- post2.relateTo(user, 'notified', {
- createdAt: '2019-08-30T17:33:48.651Z',
- read: true,
- reason: 'mentioned_in_post',
- }),
- post3.relateTo(user, 'notified', {
- createdAt: '2019-08-31T17:33:48.651Z',
- read: false,
- reason: 'mentioned_in_post',
- }),
- comment1.relateTo(user, 'notified', {
- createdAt: '2019-08-30T15:33:48.651Z',
- read: true,
- reason: 'mentioned_in_comment',
- }),
- comment2.relateTo(user, 'notified', {
- createdAt: '2019-08-30T19:33:48.651Z',
- read: false,
- reason: 'mentioned_in_comment',
- }),
- comment3.relateTo(neighbor, 'notified', {
- createdAt: '2019-09-01T17:33:48.651Z',
- read: false,
- reason: 'mentioned_in_comment',
- }),
- ])
+ const post1 = await Factory.build(
+ 'post',
+ { id: 'p1', content: 'Not for you' },
+ { author, categoryIds },
+ )
+ const post2 = await Factory.build(
+ 'post',
+ {
+ id: 'p2',
+ content: 'Already seen post mention',
+ },
+ {
+ author,
+ categoryIds,
+ },
+ )
+ const post3 = await Factory.build(
+ 'post',
+ {
+ id: 'p3',
+ content: 'You have been mentioned in a post',
+ },
+ {
+ author,
+ categoryIds,
+ },
+ )
+ const comment1 = await Factory.build(
+ 'comment',
+ {
+ id: 'c1',
+ content: 'You have seen this comment mentioning already',
+ },
+ {
+ author,
+ postId: 'p3',
+ },
+ )
+ const comment2 = await Factory.build(
+ 'comment',
+ {
+ id: 'c2',
+ content: 'You have been mentioned in a comment',
+ },
+ {
+ author,
+ postId: 'p3',
+ },
+ )
+ const comment3 = await Factory.build(
+ 'comment',
+ {
+ id: 'c3',
+ content: 'Somebody else was mentioned in a comment',
+ },
+ {
+ author,
+ postId: 'p3',
+ },
+ )
+
+ await post1.relateTo(neighbor, 'notified', {
+ createdAt: '2019-08-29T17:33:48.651Z',
+ read: false,
+ reason: 'mentioned_in_post',
+ })
+ await post2.relateTo(user, 'notified', {
+ createdAt: '2019-08-30T17:33:48.651Z',
+ read: true,
+ reason: 'mentioned_in_post',
+ })
+ await post3.relateTo(user, 'notified', {
+ createdAt: '2019-08-31T17:33:48.651Z',
+ read: false,
+ reason: 'mentioned_in_post',
+ })
+ await comment1.relateTo(user, 'notified', {
+ createdAt: '2019-08-30T15:33:48.651Z',
+ read: true,
+ reason: 'mentioned_in_comment',
+ })
+ await comment2.relateTo(user, 'notified', {
+ createdAt: '2019-08-30T19:33:48.651Z',
+ read: false,
+ reason: 'mentioned_in_comment',
+ })
+ await comment3.relateTo(neighbor, 'notified', {
+ createdAt: '2019-09-01T17:33:48.651Z',
+ read: false,
+ reason: 'mentioned_in_comment',
+ })
})
describe('notifications', () => {
diff --git a/backend/src/schema/resolvers/posts.spec.ts b/backend/src/schema/resolvers/posts.spec.ts
index 7a549449f..b816e25aa 100644
--- a/backend/src/schema/resolvers/posts.spec.ts
+++ b/backend/src/schema/resolvers/posts.spec.ts
@@ -374,6 +374,31 @@ describe('CreatePost', () => {
})
})
+ describe('with event start in no ISO format', () => {
+ it('throws an error', async () => {
+ const now = new Date()
+ const eventStart = new Date(now.getFullYear(), now.getMonth() - 1).toISOString()
+ await expect(
+ mutate({
+ mutation: createPostMutation(),
+ variables: {
+ ...variables,
+ postType: 'Event',
+ eventInput: {
+ eventStart: eventStart.split('T')[0],
+ },
+ },
+ }),
+ ).resolves.toMatchObject({
+ errors: [
+ {
+ message: 'Event start date must be in ISO format!',
+ },
+ ],
+ })
+ })
+ })
+
describe('with event start date in the past', () => {
it('throws an error', async () => {
const now = new Date()
@@ -423,6 +448,32 @@ describe('CreatePost', () => {
})
})
+ describe('with valid start date and not ISO formated end date', () => {
+ it('throws an error', async () => {
+ const now = new Date()
+ const eventEnd = new Date(now.getFullYear(), now.getMonth() + 2).toISOString()
+ await expect(
+ mutate({
+ mutation: createPostMutation(),
+ variables: {
+ ...variables,
+ postType: 'Event',
+ eventInput: {
+ eventStart: new Date(now.getFullYear(), now.getMonth() + 1).toISOString(),
+ eventEnd: eventEnd.split('T')[0],
+ },
+ },
+ }),
+ ).resolves.toMatchObject({
+ errors: [
+ {
+ message: 'Event end date must be in ISO format!',
+ },
+ ],
+ })
+ })
+ })
+
describe('with valid start date and end date before start date', () => {
it('throws an error', async () => {
const now = new Date()
diff --git a/backend/testing.md b/backend/testing.md
index 600973450..a246569e5 100644
--- a/backend/testing.md
+++ b/backend/testing.md
@@ -1,2 +1,3 @@
# Unit Testing
+***TODO:** To be filled in*
diff --git a/backend/yarn.lock b/backend/yarn.lock
index a439aa804..0c6c31cc7 100644
--- a/backend/yarn.lock
+++ b/backend/yarn.lock
@@ -1920,18 +1920,6 @@
mkdirp "^1.0.4"
rimraf "^3.0.2"
-"@pkgr/utils@^2.3.1":
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.1.tgz#adf291d0357834c410ce80af16e711b56c7b1cd3"
- integrity sha512-JOqwkgFEyi+OROIyq7l4Jy28h/WwhDnG/cPkXG2Z1iFbubB6jsHW1NDvmyOzTBxHr3yg68YGirmh1JUgMqa+9w==
- dependencies:
- cross-spawn "^7.0.3"
- fast-glob "^3.2.12"
- is-glob "^4.0.3"
- open "^9.1.0"
- picocolors "^1.0.0"
- tslib "^2.5.0"
-
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
@@ -3506,11 +3494,6 @@ becke-ch--regex--s0-0-v1--base--pl--lib@^1.4.0:
resolved "https://registry.yarnpkg.com/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz#429ceebbfa5f7e936e78d73fbdc7da7162b20e20"
integrity sha1-Qpzuu/pffpNueNc/vcfacWKyDiA=
-big-integer@^1.6.44:
- version "1.6.51"
- resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686"
- integrity sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==
-
binary-extensions@^1.0.0:
version "1.13.1"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65"
@@ -3560,13 +3543,6 @@ boxen@^1.2.1:
term-size "^1.2.0"
widest-line "^2.0.0"
-bplist-parser@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e"
- integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==
- dependencies:
- big-integer "^1.6.44"
-
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -3668,13 +3644,6 @@ builtins@^5.0.1:
dependencies:
semver "^7.0.0"
-bundle-name@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a"
- integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==
- dependencies:
- run-applescript "^5.0.0"
-
busboy@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b"
@@ -3824,7 +3793,7 @@ chalk@2.3.0:
escape-string-regexp "^1.0.5"
supports-color "^4.0.0"
-chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.1, chalk@^2.4.2:
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -4545,34 +4514,11 @@ deepmerge@^4.2.2:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b"
integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==
-default-browser-id@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c"
- integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==
- dependencies:
- bplist-parser "^0.2.0"
- untildify "^4.0.0"
-
-default-browser@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da"
- integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==
- dependencies:
- bundle-name "^3.0.0"
- default-browser-id "^3.0.0"
- execa "^7.1.1"
- titleize "^3.0.0"
-
defer-to-connect@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
-define-lazy-prop@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f"
- integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==
-
define-properties@^1.1.2, define-properties@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
@@ -4696,14 +4642,6 @@ dom-serializer@0:
domelementtype "^2.0.1"
entities "^2.0.0"
-dom-serializer@^0.2.1:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51"
- integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==
- dependencies:
- domelementtype "^2.0.1"
- entities "^2.0.0"
-
dom-serializer@^1.0.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91"
@@ -4771,13 +4709,6 @@ domhandler@^2.3.0:
dependencies:
domelementtype "1"
-domhandler@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.0.0.tgz#51cd13efca31da95bbb0c5bee3a48300e333b3e9"
- integrity sha512-eKLdI5v9m67kbXQbJSNn1zjh0SDzvzWVWtX+qEI3eMjZw8daH9k8rlj1FZY9memPwjiskQFbe7vHVVJIAqoEhw==
- dependencies:
- domelementtype "^2.0.1"
-
domhandler@^4.0.0, domhandler@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059"
@@ -4808,15 +4739,6 @@ domutils@^1.5.1:
dom-serializer "0"
domelementtype "1"
-domutils@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.0.0.tgz#15b8278e37bfa8468d157478c58c367718133c08"
- integrity sha512-n5SelJ1axbO636c2yUtOGia/IcJtVtlhQbFiVDBZHKV5ReJO1ViX7sFEemtuyoAnBxk5meNSYgA8V4s0271efg==
- dependencies:
- dom-serializer "^0.2.1"
- domelementtype "^2.0.1"
- domhandler "^3.0.0"
-
domutils@^2.5.2:
version "2.7.0"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.7.0.tgz#8ebaf0c41ebafcf55b0b72ec31c56323712c5442"
@@ -4842,21 +4764,16 @@ dot-prop@^4.1.0:
dependencies:
is-obj "^1.0.0"
-dotenv@^16.0.0:
- version "16.1.4"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.1.4.tgz#67ac1a10cd9c25f5ba604e4e08bc77c0ebe0ca8c"
- integrity sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==
+dotenv@^16.0.0, dotenv@~16.3.1:
+ version "16.3.1"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e"
+ integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==
dotenv@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d"
integrity sha512-XcaMACOr3JMVcEv0Y/iUM2XaOsATRZ3U1In41/1jjK6vJZ2PZbQ1bzCG8uvaByfaBpl9gqc9QWJovpUGBXLLYQ==
-dotenv@~8.2.0:
- version "8.2.0"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
- integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
-
duplexer3@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
@@ -4942,7 +4859,7 @@ entities@^2.0.0:
resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4"
integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==
-entities@^4.2.0, entities@^4.3.0, entities@^4.4.0:
+entities@^4.2.0, entities@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174"
integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==
@@ -5161,19 +5078,18 @@ eslint-import-resolver-node@^0.3.7:
is-core-module "^2.11.0"
resolve "^1.22.1"
-eslint-import-resolver-typescript@^3.5.4:
- version "3.5.5"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.5.5.tgz#0a9034ae7ed94b254a360fbea89187b60ea7456d"
- integrity sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==
+eslint-import-resolver-typescript@^3.6.1:
+ version "3.6.1"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz#7b983680edd3f1c5bce1a5829ae0bc2d57fe9efa"
+ integrity sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==
dependencies:
debug "^4.3.4"
enhanced-resolve "^5.12.0"
eslint-module-utils "^2.7.4"
+ fast-glob "^3.3.1"
get-tsconfig "^4.5.0"
- globby "^13.1.3"
is-core-module "^2.11.0"
is-glob "^4.0.3"
- synckit "^0.8.5"
eslint-module-utils@^2.7.4:
version "2.8.0"
@@ -5458,21 +5374,6 @@ execa@^5.0.0:
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
-execa@^7.1.1:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/execa/-/execa-7.1.1.tgz#3eb3c83d239488e7b409d48e8813b76bb55c9c43"
- integrity sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==
- dependencies:
- cross-spawn "^7.0.3"
- get-stream "^6.0.1"
- human-signals "^4.3.0"
- is-stream "^3.0.0"
- merge-stream "^2.0.0"
- npm-run-path "^5.1.0"
- onetime "^6.0.0"
- signal-exit "^3.0.7"
- strip-final-newline "^3.0.0"
-
exit@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
@@ -5617,7 +5518,7 @@ fast-glob@^3.1.1:
merge2 "^1.3.0"
micromatch "^4.0.2"
-fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9:
+fast-glob@^3.2.9:
version "3.2.12"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
@@ -5628,6 +5529,17 @@ fast-glob@^3.2.11, fast-glob@^3.2.12, fast-glob@^3.2.9:
merge2 "^1.3.0"
micromatch "^4.0.4"
+fast-glob@^3.3.1:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
+ integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -5963,7 +5875,7 @@ get-stream@^5.1.0:
dependencies:
pump "^3.0.0"
-get-stream@^6.0.0, get-stream@^6.0.1:
+get-stream@^6.0.0:
version "6.0.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
@@ -5977,9 +5889,9 @@ get-symbol-description@^1.0.0:
get-intrinsic "^1.1.1"
get-tsconfig@^4.5.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.6.0.tgz#e977690993a42f3e320e932427502a40f7af6d05"
- integrity sha512-lgbo68hHTQnFddybKbbs/RDRJnJT5YyGy2kQzVwbq+g67X73i+5MVTval34QxGkOe9X5Ujf1UYpCaphLyltjEg==
+ version "4.7.2"
+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce"
+ integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==
dependencies:
resolve-pkg-maps "^1.0.0"
@@ -6119,17 +6031,6 @@ globby@^11.1.0:
merge2 "^1.4.1"
slash "^3.0.0"
-globby@^13.1.3:
- version "13.2.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.0.tgz#7dd5678d765c4680c2e6d106230d86cb727cb1af"
- integrity sha512-jWsQfayf13NvqKUIL3Ta+CIqMnvlaIDFveWE/dpOZ9+3AMEJozsxDvKA02zync9UuvOM8rOXzsD5GqKP4OnWPQ==
- dependencies:
- dir-glob "^3.0.1"
- fast-glob "^3.2.11"
- ignore "^5.2.0"
- merge2 "^1.4.1"
- slash "^4.0.0"
-
gopd@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
@@ -6474,16 +6375,6 @@ htmlparser2@^3.9.1:
inherits "^2.0.1"
readable-stream "^3.1.1"
-htmlparser2@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78"
- integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==
- dependencies:
- domelementtype "^2.0.1"
- domhandler "^3.0.0"
- domutils "^2.0.0"
- entities "^2.0.0"
-
htmlparser2@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7"
@@ -6494,15 +6385,15 @@ htmlparser2@^6.1.0:
domutils "^2.5.2"
entities "^2.0.0"
-htmlparser2@^8.0.1:
- version "8.0.1"
- resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.1.tgz#abaa985474fcefe269bc761a779b544d7196d010"
- integrity sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==
+htmlparser2@^8.0.0, htmlparser2@^8.0.1:
+ version "8.0.2"
+ resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21"
+ integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==
dependencies:
domelementtype "^2.3.0"
- domhandler "^5.0.2"
+ domhandler "^5.0.3"
domutils "^3.0.1"
- entities "^4.3.0"
+ entities "^4.4.0"
http-cache-semantics@^4.0.0:
version "4.0.3"
@@ -6600,11 +6491,6 @@ human-signals@^2.1.0:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-human-signals@^4.3.0:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2"
- integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==
-
humanize-ms@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
@@ -6952,16 +6838,6 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2:
is-data-descriptor "^1.0.0"
kind-of "^6.0.2"
-is-docker@^2.0.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
- integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-
-is-docker@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200"
- integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==
-
is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
@@ -7034,13 +6910,6 @@ is-glob@^4.0.3:
dependencies:
is-extglob "^2.1.1"
-is-inside-container@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4"
- integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==
- dependencies:
- is-docker "^3.0.0"
-
is-installed-globally@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
@@ -7107,6 +6976,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
dependencies:
isobject "^3.0.1"
+is-plain-object@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
+ integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
+
is-potential-custom-element-name@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5"
@@ -7175,11 +7049,6 @@ is-stream@^2.0.0:
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
-is-stream@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
- integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
-
is-string@^1.0.5, is-string@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
@@ -7252,13 +7121,6 @@ is-windows@^1.0.2:
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
-is-wsl@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
- integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
- dependencies:
- is-docker "^2.0.0"
-
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
@@ -8116,11 +7978,6 @@ lodash-es@^4.17.11:
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78"
integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==
-lodash.clonedeep@^4.5.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
- integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
-
lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
@@ -8131,11 +7988,6 @@ lodash.defaults@^4.2.0:
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
-lodash.escaperegexp@^4.1.2:
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347"
- integrity sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=
-
lodash.flatten@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
@@ -8181,11 +8033,6 @@ lodash.merge@^4.6.2:
resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
-lodash.mergewith@^4.6.2:
- version "4.6.2"
- resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55"
- integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==
-
lodash.once@^4.0.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
@@ -8597,11 +8444,6 @@ mimic-fn@^2.1.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-mimic-fn@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
- integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
-
mimic-fn@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.0.0.tgz#76044cfa8818bbf6999c5c9acadf2d3649b14b4b"
@@ -8817,6 +8659,11 @@ nan@2.17.0, nan@^2.12.1, nan@^2.17.0:
resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb"
integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==
+nanoid@^3.3.6:
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
+
nanomatch@^1.2.9:
version "1.2.13"
resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
@@ -9094,13 +8941,6 @@ npm-run-path@^4.0.1:
dependencies:
path-key "^3.0.0"
-npm-run-path@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00"
- integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==
- dependencies:
- path-key "^4.0.0"
-
npmlog@^4.0.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
@@ -9274,23 +9114,6 @@ onetime@^5.1.2:
dependencies:
mimic-fn "^2.1.0"
-onetime@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
- integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
- dependencies:
- mimic-fn "^4.0.0"
-
-open@^9.1.0:
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6"
- integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==
- dependencies:
- default-browser "^4.0.0"
- define-lazy-prop "^3.0.0"
- is-inside-container "^1.0.0"
- is-wsl "^2.2.0"
-
optimism@^0.10.0:
version "0.10.2"
resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.10.2.tgz#626b6fd28b0923de98ecb36a3fd2d3d4e5632dd9"
@@ -9448,6 +9271,11 @@ parse-passwd@^1.0.0:
resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
+parse-srcset@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1"
+ integrity sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==
+
parse-uri@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/parse-uri/-/parse-uri-1.0.0.tgz#2872dcc22f1a797acde1583d8a0ac29552ddac20"
@@ -9538,11 +9366,6 @@ path-key@^3.0.0, path-key@^3.1.0:
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-path-key@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
- integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
-
path-parse@^1.0.6, path-parse@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
@@ -9619,14 +9442,14 @@ posix-character-classes@^0.1.0:
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==
-postcss@^7.0.27:
- version "7.0.27"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9"
- integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==
+postcss@^8.3.11:
+ version "8.4.31"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
+ integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
dependencies:
- chalk "^2.4.2"
- source-map "^0.6.1"
- supports-color "^6.1.0"
+ nanoid "^3.3.6"
+ picocolors "^1.0.0"
+ source-map-js "^1.0.2"
prelude-ls@^1.2.1:
version "1.2.1"
@@ -10179,13 +10002,6 @@ rsvp@^4.8.4:
resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
-run-applescript@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c"
- integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==
- dependencies:
- execa "^5.0.0"
-
run-parallel@^1.1.9:
version "1.1.9"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
@@ -10256,21 +10072,17 @@ sane@^4.0.3:
minimist "^1.1.1"
walker "~1.0.5"
-sanitize-html@~1.22.0:
- version "1.22.1"
- resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.22.1.tgz#5b36c92ab27917ddd2775396815c2bc1a6268310"
- integrity sha512-++IMC00KfMQc45UWZJlhWOlS9eMrME38sFG9GXfR+k6oBo9JXSYQgTOZCl9j3v/smFTRNT9XNwz5DseFdMY+2Q==
+sanitize-html@~2.11.0:
+ version "2.11.0"
+ resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-2.11.0.tgz#9a6434ee8fcaeddc740d8ae7cd5dd71d3981f8f6"
+ integrity sha512-BG68EDHRaGKqlsNjJ2xUB7gpInPA8gVx/mvjO743hZaeMCZ2DwzW7xvsqZ+KNU4QKwj86HJ3uu2liISf2qBBUA==
dependencies:
- chalk "^2.4.1"
- htmlparser2 "^4.1.0"
- lodash.clonedeep "^4.5.0"
- lodash.escaperegexp "^4.1.2"
- lodash.isplainobject "^4.0.6"
- lodash.isstring "^4.0.1"
- lodash.mergewith "^4.6.2"
- postcss "^7.0.27"
- srcset "^2.0.1"
- xtend "^4.0.1"
+ deepmerge "^4.2.2"
+ escape-string-regexp "^4.0.0"
+ htmlparser2 "^8.0.0"
+ is-plain-object "^5.0.0"
+ parse-srcset "^1.0.2"
+ postcss "^8.3.11"
sax@1.2.1:
version "1.2.1"
@@ -10450,11 +10262,6 @@ slash@^3.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
-slash@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7"
- integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==
-
slug@^8.2.2:
version "8.2.2"
resolved "https://registry.yarnpkg.com/slug/-/slug-8.2.2.tgz#33b019a857a11fc4773c1e9a9f60e3da651a9e5d"
@@ -10527,6 +10334,11 @@ socks@^2.6.2:
ip "^2.0.0"
smart-buffer "^4.2.0"
+source-map-js@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+ integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
source-map-resolve@^0.5.0:
version "0.5.3"
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
@@ -10591,11 +10403,6 @@ sprintf-js@~1.0.2:
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
-srcset@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/srcset/-/srcset-2.0.1.tgz#8f842d357487eb797f413d9c309de7a5149df5ac"
- integrity sha512-00kZI87TdRKwt+P8jj8UZxbfp7mK2ufxcIMWvhAOZNJTRROimpHeruWrGvCZneiuVDLqdyHefVp748ECTnyUBQ==
-
sshpk@^1.7.0:
version "1.17.0"
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5"
@@ -10819,11 +10626,6 @@ strip-final-newline@^2.0.0:
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-strip-final-newline@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
- integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
-
strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
@@ -10859,13 +10661,6 @@ supports-color@^5.3.0, supports-color@^5.5.0:
dependencies:
has-flag "^3.0.0"
-supports-color@^6.1.0:
- version "6.1.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3"
- integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==
- dependencies:
- has-flag "^3.0.0"
-
supports-color@^7.0.0, supports-color@^7.1.0:
version "7.2.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
@@ -10908,14 +10703,6 @@ synchronous-promise@^2.0.10:
resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.10.tgz#e64c6fd3afd25f423963353043f4a68ebd397fd8"
integrity sha512-6PC+JRGmNjiG3kJ56ZMNWDPL8hjyghF5cMXIFOKg+NiwwEZZIvxTWd0pinWKyD227odg9ygF8xVhhz7gb8Uq7A==
-synckit@^0.8.5:
- version "0.8.5"
- resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.5.tgz#b7f4358f9bb559437f9f167eb6bc46b3c9818fa3"
- integrity sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==
- dependencies:
- "@pkgr/utils" "^2.3.1"
- tslib "^2.5.0"
-
tapable@^2.2.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
@@ -11022,11 +10809,6 @@ titleize@1.0.0:
resolved "https://registry.yarnpkg.com/titleize/-/titleize-1.0.0.tgz#7d350722061830ba6617631e0cfd3ea08398d95a"
integrity sha1-fTUHIgYYMLpmF2MeDP0+oIOY2Vo=
-titleize@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53"
- integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==
-
tlds@^1.187.0:
version "1.203.1"
resolved "https://registry.yarnpkg.com/tlds/-/tlds-1.203.1.tgz#4dc9b02f53de3315bc98b80665e13de3edfc1dfc"
@@ -11243,11 +11025,6 @@ tslib@^1.10.0, tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.5.0:
- version "2.5.3"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.3.tgz#24944ba2d990940e6e982c4bea147aba80209913"
- integrity sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==
-
tsutils@^3.21.0:
version "3.21.0"
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
@@ -11431,11 +11208,6 @@ unset-value@^1.0.0:
has-value "^0.3.1"
isobject "^3.0.0"
-untildify@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
- integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
-
unzip-response@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
@@ -11615,10 +11387,10 @@ v8flags@^3.1.1:
dependencies:
homedir-polyfill "^1.0.1"
-validator@^13.9.0:
- version "13.9.0"
- resolved "https://registry.yarnpkg.com/validator/-/validator-13.9.0.tgz#33e7b85b604f3bbce9bb1a05d5c3e22e1c2ff855"
- integrity sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==
+validator@^13.11.0:
+ version "13.11.0"
+ resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b"
+ integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==
vary@^1, vary@~1.1.2:
version "1.1.2"
@@ -11913,11 +11685,6 @@ xss@^1.0.6:
commander "^2.20.3"
cssfilter "0.0.10"
-xtend@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
- integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
-
y18n@^5.0.5:
version "5.0.8"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
diff --git a/cypress/cypress.config.js b/cypress/cypress.config.js
index b1d80575e..db8308557 100644
--- a/cypress/cypress.config.js
+++ b/cypress/cypress.config.js
@@ -31,7 +31,8 @@ const { parsed } = dotenv.config({ path: '../backend/.env' })
module.exports = defineConfig({
e2e: {
projectId: "qa7fe2",
- defaultCommandTimeout: 10000,
+ defaultCommandTimeout: 60000,
+ pageLoadTimeout:180000,
chromeWebSecurity: false,
baseUrl: "http://localhost:3000",
specPattern: "cypress/e2e/**/*.feature",
diff --git a/deployment/TODO-next-update.md b/deployment/TODO-next-update.md
index 4470efa14..591ce899f 100644
--- a/deployment/TODO-next-update.md
+++ b/deployment/TODO-next-update.md
@@ -4,7 +4,7 @@ When you introduce a new version and branding and deploy it on your network, you
## Version >= 3.3.0 with 'ocelotDockerVersionTag' 3.3.0-XXX
-- We have the new option to configure DKIM for sent e-mails in environment variables (`.env` or `values.yaml`), see [here](deployment.md):
+- We have the new option to configure DKIM for sent e-mails in environment variables (`.env` or `values.yaml`), see [deployment-values.md](deployment-values.md):
- `SMTP_DKIM_DOMAINNAME=`
- `SMTP_DKIM_KEYSELECTOR=`
- `SMTP_DKIM_PRIVATKEY=`
diff --git a/deployment/docker-compose.yml b/deployment/docker-compose.yml
index 973dc6ac5..5236a7025 100644
--- a/deployment/docker-compose.yml
+++ b/deployment/docker-compose.yml
@@ -142,19 +142,35 @@ services:
- 3001:80
neo4j:
+ # Neo4j v3.5.14-community
+ # image: wollehuss/neo4j-community-branded:latest
+ # Neo4j 4.4-community
image: ocelotsocialnetwork/neo4j-community:latest
container_name: neo4j-branded
networks:
- test-network
+ ports:
+ - 7687:7687
+ # only for development
+ # - 7474:7474
+ - 7474:7474
volumes:
- neo4j_data:/data
environment:
+ # settings reference: https://neo4j.com/docs/operations-manual/4.4/docker/ref-settings/
+ # TODO: This sounds scary for a production environment
- NEO4J_AUTH=none
- NEO4J_dbms_security_procedures_unrestricted=algo.*,apoc.*
- - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
- ports:
- - 7687:7687
- - 7474:7474
+ - NEO4J_dbms_allow__format__migration=true
+ - NEO4J_dbms_allow__upgrade=true
+ # TODO: clarify if that is the only thing needed to unlock the Enterprise version
+ # - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
+ # Uncomment following line for Neo4j Enterprise version instead of Community version
+ # TODO: clarify if that is the only thing needed to unlock the Enterprise version
+ # - NEO4J_ACCEPT_LICENSE_AGREEMENT=yes
+ # TODO: Remove the playground from production
+ # bring the database in offline mode to export or load dumps
+ # command: ["tail", "-f", "/dev/null"]
mailserver:
image: djfarrelly/maildev
diff --git a/deployment/scripts/cluster.backup.sh b/deployment/scripts/cluster.backup.sh
index 103309419..9503061cf 100755
--- a/deployment/scripts/cluster.backup.sh
+++ b/deployment/scripts/cluster.backup.sh
@@ -18,16 +18,8 @@ BACKUP_FOLDER=${BACKUP_FOLDER:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/
# create backup fodler
mkdir -p ${BACKUP_FOLDER}
-# maintenance mode on
-${SCRIPT_DIR}/cluster.maintenance.sh on
-
-# shutdown database
-kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \
- | jq '.spec.template.spec.containers[] += {"command": ["tail", "-f", "/dev/null"]}' \
- | kubectl --kubeconfig=${KUBECONFIG} apply -f -
-
-# wait for the container to restart
-sleep 60
+# cluster maintenance mode on && Neo4j maintenance mode on
+${SCRIPT_DIR}/cluster.neo4j.sh maintenance on
# database backup
kubectl --kubeconfig=${KUBECONFIG} -n default exec -it \
@@ -40,13 +32,5 @@ kubectl --kubeconfig=${KUBECONFIG} cp \
kubectl --kubeconfig=${KUBECONFIG} cp \
default/$(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-backend |awk '{ print $1 }'):/app/public/uploads $BACKUP_FOLDER/public-uploads
-# restart database
-kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \
- | jq 'del(.spec.template.spec.containers[].command)' \
- | kubectl --kubeconfig=${KUBECONFIG} apply -f -
-
-# wait for the container to restart
-sleep 60
-
-# maintenance mode off
-${SCRIPT_DIR}/cluster.maintenance.sh off
\ No newline at end of file
+# Neo4j maintenance mode off && cluster maintenance mode off
+${SCRIPT_DIR}/cluster.neo4j.sh maintenance off
\ No newline at end of file
diff --git a/deployment/scripts/cluster.install.sh b/deployment/scripts/cluster.install.sh
new file mode 100755
index 000000000..9dd7ed15a
--- /dev/null
+++ b/deployment/scripts/cluster.install.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+# !!! never tested !!!
+
+# base setup
+SCRIPT_PATH=$(realpath $0)
+SCRIPT_DIR=$(dirname $SCRIPT_PATH)
+
+# check CONFIGURATION
+if [ -z ${CONFIGURATION} ]; then
+ echo "You must provide a `CONFIGURATION` via environment variable"
+ exit 1
+fi
+echo "Using CONFIGURATION=${CONFIGURATION}"
+
+# configuration
+KUBECONFIG=${KUBECONFIG:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/kubeconfig.yaml}
+VALUES=${SCRIPT_DIR}/../configurations/${CONFIGURATION}/kubernetes/values.yaml
+DOCKERHUB_OCELOT_TAG=${DOCKERHUB_OCELOT_TAG:-"latest"}
+
+
+## install Ingress-Nginx
+helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
+helm repo update
+helm install \
+ ingress-nginx ingress-nginx/ingress-nginx \
+ --kubeconfig=${KUBECONFIG} \
+ -f ${SCRIPT_DIR}/../src/kubernetes/nginx.values.yaml
+
+## install Cert-Manager
+helm repo add jetstack https://charts.jetstack.io
+helm repo update
+helm install \
+ cert-manager jetstack/cert-manager \
+ --kubeconfig=${KUBECONFIG} \
+ --namespace cert-manager \
+ --create-namespace \
+ --version v1.13.1 \
+ --set installCRDs=true
+
+## install Ocelot with helm
+helm install \
+ ocelot \
+ --kubeconfig=${KUBECONFIG} \
+ --values ${VALUES} \
+ --set appVersion="${DOCKERHUB_OCELOT_TAG}" \
+ ${SCRIPT_DIR}/../src/kubernetes/ \
+ --timeout 10m
+
+## set Neo4j database indexes, constrains, and initial admin account plus run migrate up
+kubectl --kubeconfig=${KUBECONFIG} \
+ -n default \
+ exec -it \
+ $(kubectl --kubeconfig=${KUBECONFIG} -n default get pods | grep ocelot-backend | awk '{ print $1 }') -- \
+ /bin/sh -c "yarn prod:migrate init && yarn prod:migrate up"
+ # /bin/sh -c "node --experimental-repl-await build/src/db/clean.js && node --experimental-repl-await build/src/db/seed.js"
+
+echo "!!! You must install a firewall or similar !!! (for DigitalOcean see: deployment/src/kubernetes/README.md)"
diff --git a/deployment/scripts/cluster.neo4j.sh b/deployment/scripts/cluster.neo4j.sh
new file mode 100755
index 000000000..41ebe4227
--- /dev/null
+++ b/deployment/scripts/cluster.neo4j.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+# base setup
+SCRIPT_PATH=$(realpath $0)
+SCRIPT_DIR=$(dirname $SCRIPT_PATH)
+
+# check CONFIGURATION
+if [ -z ${CONFIGURATION} ]; then
+ echo "You must provide a `CONFIGURATION` via environment variable"
+ exit 1
+fi
+
+# configuration
+KUBECONFIG=${KUBECONFIG:-${SCRIPT_DIR}/../configurations/${CONFIGURATION}/kubeconfig.yaml}
+
+case $1 in
+ maintenance)
+ case $2 in
+ on)
+ # maintenance mode on
+ ${SCRIPT_DIR}/cluster.maintenance.sh on
+
+ # set Neo4j in offline mode (maintenance)
+ kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \
+ | jq '.spec.template.spec.containers[] += {"command": ["tail", "-f", "/dev/null"]}' \
+ | kubectl --kubeconfig=${KUBECONFIG} apply -f -
+
+ # wait for the container to restart
+ sleep 60
+ ;;
+ off)
+ # set Neo4j in online mode
+ kubectl --kubeconfig=${KUBECONFIG} get deployment ocelot-neo4j -o json \
+ | jq 'del(.spec.template.spec.containers[].command)' \
+ | kubectl --kubeconfig=${KUBECONFIG} apply -f -
+
+ # wait for the container to restart
+ sleep 60
+
+ # maintenance mode off
+ ${SCRIPT_DIR}/cluster.maintenance.sh off
+ ;;
+ *)
+ echo -e "Run this script with first argument either 'off' or 'on'"
+ exit
+ ;;
+ esac
+ ;;
+ *)
+ echo -e "Run this script with first argument 'maintenance'"
+ exit
+ ;;
+esac
diff --git a/deployment/src/kubernetes/Backup.md b/deployment/src/kubernetes/Backup.md
index 227b5765f..34011a512 100644
--- a/deployment/src/kubernetes/Backup.md
+++ b/deployment/src/kubernetes/Backup.md
@@ -137,7 +137,7 @@ $ kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-neo4j
# bash: enter bash of Neo4j
$ kubectl -n default exec -it $(kubectl -n default get pods | grep ocelot-neo4j | awk '{ print $1 }') -- bash
# generate Dump
-neo4j% neo4j-admin dump --to=/var/lib/neo4j/$(date +%F)-neo4j-dump
+neo4j% neo4j-admin dump --database=graph.db --to=/var/lib/neo4j/$(date +%F)-neo4j-dump
# exit bash
neo4j% exit
diff --git a/deployment/src/kubernetes/DigitalOcean.md b/deployment/src/kubernetes/DigitalOcean.md
index 2c919d5f2..71c49d783 100644
--- a/deployment/src/kubernetes/DigitalOcean.md
+++ b/deployment/src/kubernetes/DigitalOcean.md
@@ -75,7 +75,7 @@ The IPs of the DigitalOcean machines are not necessarily stable, so the cluster'
## Deploy
-Yeah, you're done here. Back to [Deployment with Helm for Kubernetes](/deployment/kubernetes/README.md).
+Yeah, you're done here. Back to [Deployment with Helm for Kubernetes](/deployment/src/kubernetes/README.md).
## Backups On DigitalOcean
diff --git a/deployment/src/kubernetes/README.md b/deployment/src/kubernetes/README.md
index 126c37e9c..17773d736 100644
--- a/deployment/src/kubernetes/README.md
+++ b/deployment/src/kubernetes/README.md
@@ -9,7 +9,7 @@ Please contact us if you are interested in options not listed below.
Managed Kubernetes:
-- [DigitalOcean](/deployment/kubernetes/DigitalOcean.md)
+- [DigitalOcean](/deployment/src/kubernetes/DigitalOcean.md)
## Configuration
@@ -46,29 +46,20 @@ Please have a look here:
- [Installing with Helm](https://cert-manager.io/docs/installation/helm/#installing-with-helm)
-Our Helm installation is optimized for cert-manager version `v1.9.1` and `kubectl` version `"v1.24.2`.
+Our Helm installation is optimized for cert-manager version `v1.13.1` and `kubectl` version `"v1.28.2`.
Please search here for cert-manager versions that are compatible with your `kubectl` version on the cluster and on the client: [cert-manager Supported Releases](https://cert-manager.io/docs/installation/supported-releases/#supported-releases).
***ATTENTION:*** *When uninstalling cert-manager, be sure to use the same method as for installation! Otherwise, we could end up in a broken state, see [Uninstall](https://cert-manager.io/docs/installation/kubectl/#uninstalling).*
-
@@ -101,10 +100,15 @@ $ helm repo update
#### 2. Install ingress-nginx
```bash
+# in configuration/